Index: branches/5.3.x/core/units/relationship/relationship_event_handler.php =================================================================== diff -u -N -r15483 -r15698 --- branches/5.3.x/core/units/relationship/relationship_event_handler.php (.../relationship_event_handler.php) (revision 15483) +++ branches/5.3.x/core/units/relationship/relationship_event_handler.php (.../relationship_event_handler.php) (revision 15698) @@ -1,6 +1,6 @@ getLinkedInfo(); $object->SetDBField('SourceId', $table_info['ParentId']); - $source_itemtype = $this->Application->getUnitOption($table_info['ParentPrefix'], 'ItemType'); - $object->SetDBField('SourceType', $source_itemtype); + $source_item_type = $this->Application->getUnitConfig($table_info['ParentPrefix'])->getItemType(); + $object->SetDBField('SourceType', $source_item_type); $object->SetDBField('TargetId', $this->Application->GetVar('target_id')); $object->SetDBField('TargetType', $this->Application->GetVar('target_type')); @@ -89,11 +89,13 @@ return; } + $target_config = $this->Application->getUnitConfig($target_prefix); + $sql = 'SELECT ResourceId - FROM ' . $this->Application->getUnitOption($target_prefix, 'TableName') . ' - WHERE ' . $this->Application->getUnitOption($target_prefix, 'IDField') . ' IN (' . $target_id . ')'; + FROM ' . $target_config->getTableName() . ' + WHERE ' . $target_config->getIDField() . ' IN (' . $target_id . ')'; $target_id = $this->Conn->GetOne($sql); - $target_type = $this->Application->getUnitOption($target_prefix, 'ItemType'); + $target_type = $target_config->getItemType(); // don't add same relation twice $table_info = $object->getLinkedInfo(); @@ -106,8 +108,8 @@ if ( !$duplicate_relation ) { // place correct template in opener stack - $source_prefix = $this->Application->getUnitOption($event->Prefix, 'ParentPrefix'); - $template = $this->Application->getUnitOption($source_prefix, 'AdminTemplatePath') . '/relations_edit'; + $source_prefix = $event->getUnitConfig()->getParentPrefix(); + $template = $this->Application->getUnitConfig($source_prefix)->getAdminTemplatePath() . '/relations_edit'; $redirect_params = Array ( $event->Prefix . '_event' => 'OnNew', @@ -142,13 +144,13 @@ $sql = 'SELECT Prefix FROM ' . TABLE_PREFIX . 'ItemTypes WHERE ItemType = ' . $object->GetDBField('TargetType'); - $target_prefix = $this->Conn->GetOne($sql); + $target_config = $this->Application->getUnitConfig($this->Conn->GetOne($sql)); - $title_field = $this->getTitleField($target_prefix); - $title_phrase = $this->Application->getUnitOption($target_prefix, 'TitlePhrase'); + $title_field = $this->getTitleField($target_config); + $title_phrase = $target_config->getTitlePhrase(); $sql = 'SELECT ' . $title_field . ' - FROM ' . $this->Application->getUnitOption($target_prefix, 'TableName') . ' + FROM ' . $target_config->getTableName() . ' WHERE ResourceId = ' . $object->GetDBField('TargetId'); $object->SetDBField('ItemName', $this->Conn->GetOne($sql)); @@ -193,7 +195,7 @@ */ function BaseQuery($event, $sql_field) { - $sqls = $this->Application->getUnitOption($event->Prefix,$sql_field); + $sqls = $event->getUnitConfig()->getSetting($sql_field); $sql = isset($sqls[$event->Special]) ? $sqls[$event->Special] : $sqls['']; $configs = $this->extractModulesInfo(); @@ -203,25 +205,23 @@ $sql_templates['TableJoin'] = 'LEFT JOIN %1$s ON %1$s.ResourceId = rel.TargetId'; $sql_templates['TargetName'] = 'IF(rel.TargetType = %s, \'%s\', %s)'; - $sql_parts = Array(); + $sql_parts = Array (); $sql_parts['TargetName'] = "''"; - foreach ($configs as $prefix => $config_data) { - $title_field = $this->getTitleField($prefix); - $sql_parts['ItemName'][] = sprintf($sql_templates['ItemName'], $config_data['TableName'], $title_field); - $sql_parts['TableJoin'][] = sprintf($sql_templates['TableJoin'], $config_data['TableName']); + foreach ($configs as $config) { + $title_field = $this->getTitleField($config); - $sql_parts['TargetName'] = sprintf( $sql_templates['TargetName'], - $config_data['ItemType'], - '!'.$config_data['TitlePhrase'].'!', - $sql_parts['TargetName']); - $sql_parts['TargetName'] = str_replace('rel','%1$s',$sql_parts['TargetName']); + $sql_parts['ItemName'][] = sprintf($sql_templates['ItemName'], $config->getTableName(), $title_field); + $sql_parts['TableJoin'][] = sprintf($sql_templates['TableJoin'], $config->getTableName()); + + $sql_parts['TargetName'] = sprintf($sql_templates['TargetName'], $config->getItemType(), '!' . $config->getTitlePhrase() . '!', $sql_parts['TargetName']); + $sql_parts['TargetName'] = str_replace('rel', '%1$s', $sql_parts['TargetName']); } $object = $event->getObject(); - $vars = Array('#ITEM_NAMES#', '#ITEM_TYPES#'); - $replacements = Array( implode(', ',$sql_parts['ItemName']), $sql_parts['TargetName'] ); + $vars = Array ('#ITEM_NAMES#', '#ITEM_TYPES#'); + $replacements = Array (implode(', ', $sql_parts['ItemName']), $sql_parts['TargetName']); $calculated_fields = $object->getCalculatedFields(); @@ -231,55 +231,65 @@ $object->setCalculatedFields($calculated_fields); - $sql = str_replace('#ITEM_JOIN#', implode(' ',$sql_parts['TableJoin']), $sql); - $sql = str_replace('rel.','%1$s.',$sql); + $sql = str_replace('#ITEM_JOIN#', implode(' ', $sql_parts['TableJoin']), $sql); + $sql = str_replace('rel.', '%1$s.', $sql); return $sql; } /** * Convert TitleField field of kMultiLanguage formatter used for it * - * @param string $prefix + * @param kUnitConfig $config * @return string */ - function getTitleField($prefix) + function getTitleField(kUnitConfig $config) { - $lang_prefix = 'l'.$this->Application->GetVar('m_lang').'_'; + $lang_prefix = 'l' . $this->Application->GetVar('m_lang') . '_'; - $title_field = $this->Application->getUnitOption($prefix, 'TitleField'); - $field_options = $this->Application->getUnitOption($prefix.'.'.$title_field, 'Fields'); + $title_field = $config->getTitleField(); + $field_options = $config->getFieldByName($title_field); $formatter_class = isset($field_options['formatter']) ? $field_options['formatter'] : ''; - if ($formatter_class == 'kMultiLanguage' && !isset($field_options['master_field'])) { - $title_field = $lang_prefix.$title_field; + + if ( $formatter_class == 'kMultiLanguage' && !isset($field_options['master_field']) ) { + $title_field = $lang_prefix . $title_field; } + return $title_field; } /** * Get configs from modules installed * - * @return Array + * @return Array|kUnitConfig[] * @access private */ function extractModulesInfo() { // get installed modules & their config info // maybe we should leave only prefixes, that have "view" permission - $configs = Array(); - foreach ($this->Application->ModuleInfo as $module_name => $module_data) { + $ret = Array (); + + foreach ($this->Application->ModuleInfo as $module_data) { $prefix = $module_data['Var']; - if ($prefix == 'm') { + + if ( $prefix == 'm' ) { $prefix = 'c'; } - if (!$this->Application->prefixRegistred($prefix)) continue; - $configs[$prefix] = $this->Application->getUnitOptions($prefix); - if($configs[$prefix] === false) unset($configs[$prefix]); - if(!isset($configs[$prefix]['CatalogItem']) || !$configs[$prefix]['CatalogItem']) unset($configs[$prefix]); + if ( !$this->Application->prefixRegistred($prefix) ) { + continue; + } + + $config = $this->Application->getUnitConfig($prefix); + + if ( $config->getCatalogItem() ) { + $ret[$prefix] = $config; + } } - return $configs; + + return $ret; } /** @@ -292,7 +302,7 @@ $main_object = $event->MasterEvent->getObject(); /* @var $main_object kDBItem */ - $sql = 'DELETE FROM ' . $this->Application->getUnitOption($event->Prefix, 'TableName') . ' + $sql = 'DELETE FROM ' . $event->getUnitConfig()->getTableName() . ' WHERE TargetId = ' . $main_object->GetDBField('ResourceId'); $this->Conn->Query($sql); }