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");
}
}