getObject(); $top_prefix = $this->GetTopmostPrefix($event); $item_type = $this->Application->getUnitOption($top_prefix, 'ItemType'); $item_resource_id = $this->GetParentResourceId($event); // there is no ResourceId when creating new item, but we need some id for SQL to work if (!$item_resource_id) $item_resource_id = 0; $sql = $object->SelectClause; $sql = sprintf($sql, $item_resource_id); $object->setSelectSQL($sql); $where_clause='Type = '.$item_type; if ($event->Special=="general"){ $where_clause.=' AND OnGeneralTab=1'; } $object->SetWhereClause($where_clause); $object->AddOrderField('DisplayOrder', 'ASC'); $object->SetPerPage(-1); } function GetParentResourceId(&$event) { $top_object = $this->Application->RecallObject( $this->GetTopmostPrefix($event) ); return $top_object->GetDBField('ResourceId'); } function OnPreSave(&$event) { $object =& $event->getObject(); $items_info = $this->Application->GetVar( $event->getPrefixSpecial(true) ); if($items_info) { foreach($items_info as $custom_field_id => $values) { $set_values = Array( 'CustomFieldId' => $custom_field_id, 'Value' => $values['Value'], 'ResourceId' => $values['ResourceId'] != 0 ? $values['ResourceId'] : $this->GetParentResourceId($event), ); // ResourceId will be -1 if we are creating new product, then we get ID directly, // because it should be already set by parent' event, as we are in hAFTER hook $id = $values['CustomDataId']; if ($id) { //if it's already existing custom field record - update id $object->SetDefaultValues(); $object->Load($id); $object->SetFieldsFromHash($set_values); if( $object->Update($id) ) { $event->status=erSUCCESS; } else { $event->status=erFAIL; $event->redirect=false; break; } } else { //new custom field record - create it and set temp id! $object->SetDefaultValues(); $object->SetFieldsFromHash($set_values); if( $object->Create() ) { $object->setTempID(); $event->status=erSUCCESS; } } } } // this is critical, as the object here is Item, but if something fails, the template could use the same name as grid // the problem appeared on products general tab, when validation does not go through for product, // and the templates is getting parsed $this->Application->removeObject($event->Prefix_Special); } } ?>