Index: trunk/kernel/include/relationship.php =================================================================== diff -u -r13 -r271 --- trunk/kernel/include/relationship.php (.../relationship.php) (revision 13) +++ trunk/kernel/include/relationship.php (.../relationship.php) (revision 271) @@ -11,6 +11,7 @@ $this->id_field = "RelationshipId"; $this->NoResourceId = 1; $this->expanded=FALSE; + GetModuleArray(); if($id) { if(!$expanded) @@ -24,21 +25,44 @@ function LoadExpanded($id) { + global $objModules; $pre = GetTablePrefix(); $reltable = $this->tablename; - $sql = "SELECT trim(concat(ifnull(".$pre."Category.name,' '), ifnull(".$pre."Link.name,' '),ifnull(".$pre."News.title,' '), ifnull(".$pre."Topic.TopicText,' '))) as ItemName,"; - $sql .=" ELT(rel.targettype, '".admin_language("la_Text_Category")."' ,'".admin_language("la_Text_Article"); - $sql .="' ,'".admin_language("la_Text_Topic")."','".admin_language("la_Text_Link")."') as ItemType,"; - $sql .=" ELT(rel.type+1,'".admin_language("la_Text_OneWay")."','".admin_language("la_Text_Reciprocal")."') as RelationType,"; - $sql .=" RelationshipId, rel.TargetId,rel.TargetType,rel.SourceId,rel.SourceType, rel.Type, rel.Enabled, rel.Priority, "; - $sql .=" ELT(rel.enabled+1,'Disabled','Enabled') as Status FROM ".$reltable." as rel "; - $sql .=" LEFT JOIN ".$pre."Category ON ".$pre."Category.ResourceId=rel.TargetId "; - $sql .="LEFT JOIN ".$pre."Link ON ".$pre."Link.ResourceId=rel.TargetId "; - $sql .="LEFT JOIN ".$pre."News ON ".$pre."News.ResourceId=rel.TargetId "; - $sql .="LEFT JOIN ".$pre."Topic ON ".$pre."Topic.ResourceId=rel.TargetId "; - $sql .="WHERE rel.RelationshipId=".$id; - $rs=$this->adodbConnection->Execute($sql); + // ==== build sql depending on modules installed: begin ==== + $prefix = GetTablePrefix(); + $modules = $objModules->GetModuleList(); + $sql_source = $objModules->ExecuteFunction('GetModuleInfo', 'rel_list'); + + $sql_templates['ItemName'] = 'IFNULL('.$prefix."%s.%s,' ')"; + $sql_templates['TableJoin'] = 'LEFT JOIN '.$prefix."%1\$s ON ".$prefix."%1\$s.ResourceId = rel.TargetId"; + $sql_templates['TargetName'] = "IF(rel.TargetType = %s, '%s', %s)"; + + $sql = "SELECT TRIM(CONCAT(%s)) AS ItemName, %s AS ItemType,". + GetELT('rel.Type+1', Array('la_Text_OneWay','la_Text_Reciprocal')).' AS RelationType,'. + "RelationshipId, rel.Priority AS Priority, rel.Type as Type, rel.Enabled as Enabled,". + "rel.TargetId, rel.TargetType, rel.SourceId, rel.SourceType,". + GetELT('rel.Enabled+1', Array('la_Text_Disabled','la_Text_Enabled')).' AS Status '. + 'FROM '.$reltable.' AS rel %s WHERE rel.RelationshipId = '.$id; + + $sql_parts = Array(); + $sql_parts['TargetName'] = "''"; + foreach($modules as $module) + { + $sql_parts['ItemName'][] = sprintf($sql_templates['ItemName'], $sql_source[$module]['MainTable'], $sql_source[$module]['ItemNameField']); + $sql_parts['TableJoin'][] = sprintf($sql_templates['TableJoin'], $sql_source[$module]['MainTable']); + + $sql_parts['TargetName'] = sprintf( $sql_templates['TargetName'], + $sql_source[$module]['TargetType'], + admin_language($sql_source[$module]['ItemNamePhrase']), + $sql_parts['TargetName']); + } + $sql = sprintf($sql, implode(', ',$sql_parts['ItemName']), $sql_parts['TargetName'], implode(' ',$sql_parts['TableJoin'])); + // ==== build sql depending on modules installed: end ==== + + //echo "SQL: ".$sql.'
'; + + $rs = $this->adodbConnection->Execute($sql); if($rs && !$rs->EOF) { $data = $rs->fields; @@ -75,8 +99,7 @@ global $objItemTypes; /*returns the table row in an array for the item this relationship points to */ - $type=$this->Get("TargetType"); - + $type = $this->Get("TargetType"); $Item = $objItemTypes->GetItem($type); $table = $Item->Get("SourceTable"); $titlefield = $Item->Get("TitleField"); @@ -357,7 +380,7 @@ $edit_table = $objSession->GetEditTable($this->SourceTable); $idlist = array(); - $sql = "DROP TABLE $edit_table"; + $sql = "DROP TABLE IF EXISTS $edit_table"; $this->adodbConnection->Execute($sql); } @@ -403,7 +426,7 @@ echo $sql."
\n"; $this->adodbConnection->Execute($sql); -// $this->adodbConnection->Execute("DROP TABLE $edit_table"); +// $this->adodbConnection->Execute("DROP TABLE IF EXISTS $edit_table"); } }