Index: branches/RC/core/units/custom_fields/custom_fields_event_handler.php =================================================================== diff -u -N --- branches/RC/core/units/custom_fields/custom_fields_event_handler.php (revision 11892) +++ branches/RC/core/units/custom_fields/custom_fields_event_handler.php (revision 0) @@ -1,307 +0,0 @@ -Conn->qstr( $this->Application->GetVar('cf_type') ); - $main_prefix = $this->Conn->GetOne($sql); - - $section = $this->Application->getUnitOption($main_prefix.'.custom', 'PermSection'); - $event->setEventParam('PermSection', $section); - return parent::CheckPermission($event); - } - - /** - * Apply any custom changes to list's sql query - * - * @param kEvent $event - * @access protected - * @see OnListBuild - */ - function SetCustomQuery(&$event) - { - $object =& $event->getObject(); - /* @var $object kDBList */ - - $item_type = $this->Application->GetVar('cf_type'); - if (!$item_type) { - $prefix = $event->getEventParam('SourcePrefix'); - $item_type = $this->Application->getUnitOption($prefix, 'ItemType'); - } - - if ($event->Special == 'general') { - $object->addFilter('generaltab_filter', '%1$s.OnGeneralTab = 1'); - } - - if ($item_type) { - $hidden_fields = array_map(Array(&$this->Conn, 'qstr'), $this->_getHiddenFiels($event)); - - if ($hidden_fields) { - $object->addFilter('hidden_filter', '%1$s.FieldName NOT IN (' . implode(',', $hidden_fields) . ')'); - } - - $object->addFilter('itemtype_filter', '%1$s.Type = '.$item_type); - } - - if (!($this->Application->isDebugMode() && $this->Application->IsAdmin())) { - $object->addFilter('user_filter', '%1$s.IsSystem = 0'); - } - } - - /** - * Returns prefix, that custom fields are printed for - * - * @param kEvent $event - * @return string - */ - function _getSourcePrefix(&$event) - { - $prefix = $event->getEventParam('SourcePrefix'); - if (!$prefix) { - $sql = 'SELECT Prefix - FROM ' . TABLE_PREFIX . 'ItemTypes - WHERE ItemType = ' . $this->Application->GetVar('cf_type'); - $prefix = $this->Conn->GetOne($sql); - } - - return $prefix; - } - - /** - * Get custom fields, that should no be shown anywhere - * - * @param kEvent $event - * @return Array - */ - function _getHiddenFiels(&$event) - { - $prefix = $this->_getSourcePrefix($event); - - $virtual_fields = $this->Application->getUnitOption($prefix, 'VirtualFields', Array ()); - $custom_fields = $this->Application->getUnitOption($prefix, 'CustomFields', Array ()); - - $hidden_fields = Array (); - foreach ($custom_fields as $custom_field) { - $check_field = 'cust_' . $custom_field; - $show_mode = array_key_exists('show_mode', $virtual_fields[$check_field]) ? $virtual_fields[$check_field]['show_mode'] : true; - - if (($show_mode === false) || (($show_mode === smDEBUG) && !(defined('DEBUG_MODE') && DEBUG_MODE))) { - $hidden_fields[] = $custom_field; - } - } - - return $hidden_fields; - } - - /** - * Prevents from duplicate item creation - * - * @param kEvent $event - */ - function OnBeforeItemCreate(&$event) - { - $object =& $event->getObject(); - - $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->SetError('FieldName', 'duplicate', 'la_error_CustomExists'); - } - } - - /** - * Occurse after deleting item, id of deleted item - * is stored as 'id' param of event - * - * @param kEvent $event - * @access public - */ - function OnAfterItemDelete(&$event) - { - $object =& $event->getObject(); - $main_prefix = $this->getPrefixByItemType($object->GetDBField('Type')); - - $ml_helper =& $this->Application->recallObject('kMultiLanguageHelper'); - /* @var $ml_helper kMultiLanguageHelper */ - - // call main item config to clone cdata table - $this->Application->getUnitOption($main_prefix, 'TableName'); - $ml_helper->deleteField($main_prefix.'-cdata', $event->getEventParam('id')); - } - - /** - * Get config prefix based on item type - * - * @param unknown_type $item_type - * @return unknown - */ - function getPrefixByItemType($item_type) - { - $sql = 'SELECT Prefix - FROM '.TABLE_PREFIX.'ItemTypes - WHERE ItemType = '.$item_type; - return $this->Conn->GetOne($sql); - } - - /** - * Enter description here... - * - * @param kEvent $event - */ - function OnSaveCustomField(&$event) - { - if ($event->MasterEvent->status != erSUCCESS) { - return false; - } - - $object =& $event->getObject(); - $main_prefix = $this->getPrefixByItemType($object->GetDBField('Type')); - - $ml_helper =& $this->Application->recallObject('kMultiLanguageHelper'); - /* @var $ml_helper kMultiLanguageHelper */ - - // call main item config to clone cdata table - $this->Application->getUnitOption($main_prefix, 'TableName'); - $ml_helper->createFields($main_prefix.'-cdata'); - } - - function OnMassDelete(&$event) - { - 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')); - } - - /** - * Prepares ValueList field's value as xml for editing - * - * @param kEvent $event - */ - function OnAfterItemLoad(&$event) - { - parent::OnAfterItemLoad($event); - - $object =& $event->getObject(); - /* @var $object kDBItem */ - - if (!in_array($object->GetDBField('ElementType'), $this->_getMultiElementTypes())) { - return ; - } - - $custom_field_helper =& $this->Application->recallObject('InpCustomFieldsHelper'); - /* @var $custom_field_helper InpCustomFieldsHelper */ - - $options = $custom_field_helper->GetValuesHash( $object->GetDBField('ValueList'), VALUE_LIST_SEPARATOR, false ); - - $records = Array (); - - $option_key = key($options); - if ($option_key === '' || $option_key == 0) { - // remove 1st empty option, and add it later, when options will be saved, but allow string option keys - unset($options[$option_key]); // keep index, don't use array_unshift! - } - - foreach ($options as $option_key => $option_title) { - $records[] = Array ('OptionKey' => $option_key, 'OptionTitle' => $option_title); - } - - $minput_helper =& $this->Application->recallObject('MInputHelper'); - /* @var $minput_helper MInputHelper */ - - $xml = $minput_helper->prepareMInputXML($records, Array ('OptionKey', 'OptionTitle')); - $object->SetDBField('Options', $xml); - } - - /** - * Returns custom field element types, that will use minput control - * - * @return unknown - */ - function _getMultiElementTypes() - { - return Array ('select', 'multiselect', 'radio'); - } - - /** - * Saves minput content to ValueList field - * - * @param kEvent $event - */ - function OnBeforeItemUpdate(&$event) - { - parent::OnBeforeItemUpdate($event); - - $object =& $event->getObject(); - /* @var $object kDBItem */ - - if (!in_array($object->GetDBField('ElementType'), $this->_getMultiElementTypes())) { - return ; - } - - $minput_helper =& $this->Application->recallObject('MInputHelper'); - /* @var $minput_helper MInputHelper */ - - $ret = $object->GetDBField('ElementType') == 'multiselect' ? Array () : Array ('' => '=+'); - $records = $minput_helper->parseMInputXML($object->GetDBField('Options')); - - if ($object->GetDBField('SortValues')) { - usort($records, Array (&$this, '_sortValues')); - ksort($records); - } - - foreach ($records as $record) { - if (substr($record['OptionKey'], 0, 3) == 'SQL') { - $ret[] = $record['OptionTitle']; - } - else { - $ret[] = $record['OptionKey'] . '=' . $record['OptionTitle']; - } - } - - $object->SetDBField('ValueList', implode(VALUE_LIST_SEPARATOR, $ret)); - } - - function _sortValues($record_a, $record_b) - { - return strcasecmp($record_a['OptionTitle'], $record_b['OptionTitle']); - } - } -?> \ No newline at end of file