Index: trunk/kernel/units/custom_fields/custom_fields_event_handler.php =================================================================== diff -u -N -r2079 -r3983 --- trunk/kernel/units/custom_fields/custom_fields_event_handler.php (.../custom_fields_event_handler.php) (revision 2079) +++ trunk/kernel/units/custom_fields/custom_fields_event_handler.php (.../custom_fields_event_handler.php) (revision 3983) @@ -25,22 +25,17 @@ function OnBeforeItemCreate(&$event) { $object =& $event->getObject(); - $items_info = $this->Application->GetVar( $event->getPrefixSpecial(true) ); - $new_field_name=$items_info[0]['FieldName']; - - $table = $this->Application->getUnitOption($event->Prefix,'TableName'); - $found = $this->Conn->GetOne("SELECT count(*) FROM ".$table." WHERE FieldName='".$new_field_name."'"); + $live_table = $this->Application->getUnitOption($event->Prefix, 'TableName'); + $sql = 'SELECT COUNT(*) + FROM '.$live_table.' + WHERE FieldName = '.$this->Conn->qstr($object->GetDBField('FieldName')).' AND Type = '.$object->GetDBField('Type'); + $found = $this->Conn->GetOne($sql); - if($found){ - $event->status=erFAIL; - $object->FieldErrors['FieldName']['pseudo'] = $this->Application->Phrase('la_error_CustomExists'); + if ($found) { + $event->status = erFAIL; + $object->SetError('FieldName', 'duplicate', 'la_error_CustomExists'); } - else { - $item_type=$this->Application->GetVar('cf_type'); - - $object->SetDBField('Type', $this->Application->GetVar('cf_type')); - } } /** @@ -65,5 +60,20 @@ parent::OnMassDelete($event); $event->redirect_params = Array('opener' => 's'); } + + /** + * Prepare temp tables for creating new item + * but does not create it. Actual create is + * done in OnPreSaveCreated + * + * @param kEvent $event + */ + function OnPreCreate(&$event) + { + parent::OnPreCreate($event); + + $object =& $event->getObject(); + $object->SetDBField('Type', $this->Application->GetVar('cf_type')); + } } ?> \ No newline at end of file