Index: trunk/kernel/include/relationship.php =================================================================== diff -u -N --- trunk/kernel/include/relationship.php (revision 3491) +++ trunk/kernel/include/relationship.php (revision 0) @@ -1,444 +0,0 @@ -clsItemDB(); - $this->tablename = GetTablePrefix()."Relationship"; - $this->id_field = "RelationshipId"; - $this->NoResourceId = 1; - $this->expanded=FALSE; - GetModuleArray(); - if($id) - { - if(!$expanded) - { - $this->LoadFromDatabase($id); - } - else - $this->LoadExpanded($id); - } - } - - function LoadExpanded($id) - { - global $objModules; - $pre = GetTablePrefix(); - $reltable = $this->tablename; - - // ==== 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; - $this->SetFromArray($data); - $this->Clean(); - $this->expanded=TRUE; - return TRUE; - } - else - return FALSE; - } - - function LoadFromDatabase($id) - { - $table = $this->tablename; - $sql = "SELECT * FROM $table"; - $sql .= " WHERE ".$this->id_field."=".$id; - - $rs=$this->adodbConnection->execute($sql); - if($rs && !$rs->EOF) - { - $data = $rs->fields; - $this->SetFromArray($data); - $this->Clean(); - $this->expanded=FALSE; - return TRUE; - } - else - return FALSE; - } - - function GetTargetItemData() - { - global $objItemTypes; - - /*returns the table row in an array for the item this relationship points to */ - $type = $this->Get("TargetType"); - $Item = $objItemTypes->GetItem($type); - $table = $Item->Get("SourceTable"); - $titlefield = $Item->Get("TitleField"); - - if(strlen($table)) - { - $sql = "SELECT * FROM ".GetTablePrefix().$table." WHERE ResourceId=".$this->Get("TargetId"); - - $rs = $this->adodbConnection->execute($sql); - if($rs) - { - $res = $rs->fields; - $res["SourceTable"]=$table; - $res["TitleField"]=$titlefield; - return $res; - } - else - return FALSE; - } - else - return FALSE; - } - - function Admin_Icon() - { - global $imagesURL; - - $type = "reciprocal"; - if($this->Get("Type")==0) - { - $type = "one-way"; - } - $icon = $imagesURL."/itemicons/icon16_relation_".$type; - if($this->Get("Enabled")!=1) - { - $icon .= "_disabled"; - } - $icon .= ".gif"; - return $icon; - } - - function parse_template() - { - $item = $this->GetTargetItemData(); - $type=$this->Get("TargetType"); - - switch($type) - { - case 1: - $c = new clsCategory(); - $t = "cat_relate_element"; - break; - case 2: - $c = new clsNews(); - $t = "innews/news_relate_element"; - break; - case 3: - $c = new clsTopic(); - $t="inbulletin/bb_relate_element"; - break; - case 4: - $c = new clsLink(); - $t="inlink/link_relate_element"; - break; - case 5: - $c = new clsSurvey(); - $t="insurvey/s_relate_element"; - break; - default: - $c=NULL; - } - if(is_object($c)) - { - foreach($item as $key=>$value) - { - $c->Set($key,$value); - } - $o = $c->parse_template(parse($t)); - } - return $o; - } - - function &GetTargetItemClass() - { - global $objItemTypes; - - $objType = $objItemTypes->GetItem($this->Get("TargetType")); - $classname = $objType->Get("ClassName"); - if(strlen($classname)) - { - $c = new $classname; - } - else - $c = NULL; - if(is_object($c)) - { - $c->LoadFromResourceId($this->Get("TargetId")); - } - return $c; - } - - function &GetSourceItemClass() - { - global $objItemTypes; - - $objType = $objItemTypes->GetItem($this->Get("SourceType")); - $classname = $objType->Get("ClassName"); - - if(strlen($classname)) - { - $c = new $classname; - } - else - $c = NULL; - if(is_object($c)) - { - $c->LoadFromResourceId($this->Get("SourceId")); - } - return $c; - } - - //Changes priority - function MoveUp() - { - $this->Increment("Priority"); - } - - function MoveDown() - { - $this->Decrement("Priority"); - } - -} /*clsRelationship*/ - -class clsRelationshipList extends clsItemCollection -{ - var $Page; - var $PerPage; - - function clsRelationshipList($CategoryId=-1,$ItemId=-1) - { - global $objConfig; - $this->clsItemCollection(); - $this->classname="clsRelationship"; - $this->SourceTable = GetTablePrefix()."Relationship"; - $this->Page = 1; - $this->PerPage = $objConfig->Get('Perpage_Relations'); // 20; - $this->AdminSearchFields = array("ItemName","ItemType","RelationType","Status"); - $this->TargetItems = new clsItemCollection(); - $this->TargetItems->classname="clsItemDB"; - - } - - function GetNumPages($ItemsPerPage = null) - { - if (!isset($ItemsPerPage)) $ItemsPerPage = $this->PerPage; - - if ( count($this->Items) ) - { - global $objConfig; - return ceil($this->NumItems()/$this->PerPage); - } - else { - return parent::GetNumPages($ItemsPerPage); - } - } - - function GetAdminPageLinkList($link_template,$url) - { - global $objConfig, $bb_var_list_update, $var_list_update, $var_list; - - $NumPages = $this->GetNumPages(); - $o = ""; - if($this->Page>1) - { - $prev_url = $url."?env=".BuildEnv()."&lpn=".$this->Page-1; - $o = "<<"; - } - - for($p=1;$p<=$NumPages;$p++) - { - $t = admintemplate($link_template); - if($p!=$this->Page) - { - $href = $url."?env=".BuildEnv()."&lpn=".$p; - $o = "-$p-"; - } - else - { - $o .= "$p"; - } - } - if($this->Page<$NumPages) - { - $next_url = $url."?env=".BuildEnv()."&lpn=".$this->Page+1; - } - - return $o; - } - - function GetLimitSQL() - { - if($this->Page<1) - $this->Page=1; - - if(is_numeric($this->PerPage)) - { - $Start = ($this->Page-1)*$this->PerPage; - $limit = "LIMIT ".$Start.",".$this->PerPage; - } - else - $limit = NULL; - return $limit; - } - - function LoadRelated($where,$orderBy,$custom_sql = null) - { - global $objSession; - - $sql = isset($custom_sql) ? sprintf($custom_sql,$this->SourceTable) : "SELECT * FROM ".$this->SourceTable; - - if(strlen(trim($orderBy))>0) - { - $orderBy = "Priority, ".$orderBy; - } - else - $orderBy = "Priority "; - - if(strlen($where)) - $sql = sprintf('%s WHERE %s',$sql,$where); - - $sql = sprintf('%s ORDER BY %s',$sql,$orderBy); - $sql .= " ".$this->GetLimitSQL(); - if($objSession->HasSystemPermission("DEBUG.LIST")) - echo htmlentities($sql,ENT_NOQUOTES)."
\n"; - return $this->Query_Item($sql); - } - - function CountRelated($where) - { - $res = 0; - $sql = "SELECT count(*) as mycount from ".$this->SourceTable." WHERE $where "; - $rs = $this->adodbConnection->Execute($sql); - if($rs && !$rs->EOF) - $res = $rs->fields["mycount"]; - return $res; - } - - function Add($SourceId,$SourceType,$TargetId,$TargetType, - $Priority=0,$Enabled=1,$Type=0, $RelationId = -999) - { - $r = new clsRelationship(); - $r->Set(array("SourceId","SourceType","TargetId","TargetType","Priority","Type","Enabled"), - array($SourceId,$SourceType,$TargetId,$TargetType,$Priority,$Type,$Enabled)); - - if ($RelationId != -999) - { - $r->Set("RelationshipId", $RelationId); - } - - $r->tablename = $this->SourceTable; - $r->Create(); - return $r; - } - - function CopyToResource($OldSource,$NewSource) - { - $this->Clear(); - $sql = "SELECT * FROM ".$this->SourceTable." WHERE SourceId=$OldSource"; - $this->Query_Item($sql); - - if($this->NumItems()>0) - { - foreach($this->Items as $i) - { - $i->UnsetIdField(); - $i->Set("SourceId",$NewSource); - $i->Create(); - } - } - } - - function PurgeEditTable($idfield = "") - { - global $objSession; - - $edit_table = $objSession->GetEditTable($this->SourceTable); - $idlist = array(); - $sql = "DROP TABLE IF EXISTS $edit_table"; - $this->adodbConnection->Execute($sql); - } - - function CopyFromEditTable($ResourceId) - { - global $objSession; - $GLOBALS['_CopyFromEditTable']=1; - - $edit_table = $objSession->GetEditTable($this->SourceTable); - $idlist = array(); - $sql = "SELECT * FROM $edit_table WHERE SourceId='$ResourceId'"; - - $this->Clear(); - $rs = $this->adodbConnection->Execute($sql); - while($rs && !$rs->EOF) - { - $data = $rs->fields; - $c = $this->AddItemFromArray($data); - $c->Dirty(); - - if($data["RelationshipId"]>0) - { - $c->Update(); - } - else - { - $c->UnsetIdField(); - $c->Create(); - } - $idlist[] = $c->Get("RelationshipId"); - $rs->MoveNext(); - } - - if(count($idlist)>0) - { - $sql = "DELETE FROM ".GetTablePrefix()."Relationship WHERE SourceId=$ResourceId AND RelationshipId NOT IN (".implode(",",$idlist).")"; - } - else - { - $sql = "DELETE FROM ".GetTablePrefix()."Relationship WHERE SourceId=$ResourceId"; - } - - if((int)$GLOBALS["debuglevel"]) - echo $sql."
\n"; - - $this->adodbConnection->Execute($sql); -// $this->adodbConnection->Execute("DROP TABLE IF EXISTS $edit_table"); - unset($GLOBALS['_CopyFromEditTable']); - } - -} - -?>