Index: trunk/kernel/include/category.php =================================================================== diff -u -r667 -r676 --- trunk/kernel/include/category.php (.../category.php) (revision 667) +++ trunk/kernel/include/category.php (.../category.php) (revision 676) @@ -6,4630 +6,2314 @@ RegisterPrefix("clsCategory","cat","kernel/include/category.php"); - - class clsCategory extends clsItem - { - var $Permissions; - - - function clsCategory($CategoryId=NULL) - { - global $objSession; - - - $this->clsItem(TRUE); - //$this->adodbConnection = &GetADODBConnection(); - $this->tablename = GetTablePrefix()."Category"; - $this->type=1; - $this->BasePermission ="CATEGORY"; - $this->id_field = "CategoryId"; - $this->TagPrefix = "cat"; - - $this->debuglevel=0; - /* keyword highlighting */ - $this->OpenTagVar = "Category_Highlight_OpenTag"; - $this->CloseTagVar = "Category_Highlight_CloseTag"; - - if($CategoryId!=NULL) - { - $this->LoadFromDatabase($CategoryId); - $this->Permissions = new clsPermList($CategoryId,$objSession->Get("GroupId")); - - } - else - { - $this->Permissions = new clsPermList(); - - } - } - - function ClearCacheData() - { - $env = "':m".$this->Get("CategoryId")."%'"; - DeleteTagCache("m_itemcount","Category%"); - DeleteTagCache("m_list_cats","",$env); - } - - - function Delete() - { - global $CatDeleteList; - - if(!is_array($CatDeleteList)) - $CatDeleteList = array(); - if($this->UsingTempTable()==FALSE) - { - $this->Permissions->Delete_CatPerms($this->Get("CategoryId")); - $sql = "DELETE FROM ".GetTablePrefix()."CountCache WHERE CategoryId=".$this->Get("CategoryId"); - $this->adodbConnection->Execute($sql); - $CatDeleteList[] = $this->Get("CategoryId"); - if($this->Get("CreatedById")>0) - $this->SendUserEventMail("CATEGORY.DELETE",$this->Get("CreatedById")); - $this->SendAdminEventMail("CATEGORY.DELETE"); - - parent::Delete(); - $this->ClearCacheData(); - } - else - { - parent::Delete(); - } - } - - - function Update($UpdatedBy=NULL) - { - parent::Update($UpdatedBy); - if($this->tablename==GetTablePrefix()."Category") - $this->ClearCacheData(); - } - - function Create() - { - if((int)$this->Get("CreatedOn")==0) - $this->Set("CreatedOn",date("U")); - parent::Create(); - if($this->tablename==GetTablePrefix()."Category") - $this->ClearCacheData(); - } - - function SetParentId($value) - { - //Before we set a parent verify that propsed parent is not our child. - //Otherwise it will cause recursion. - - $id = $this->Get("CategoryId"); - $path = $this->Get("ParentPath"); - $sql = sprintf("SELECT CategoryId From ".GetTablePrefix()."Category WHERE ParentPath LIKE '$path%' AND CategoryId = %d ORDER BY ParentPath",$value); - $rs = $this->adodbConnection->SelectLimit($sql,1,0); - if(!$rs->EOF) - { - return; - } - $this->Set("ParentId",$value); - } - - function Approve() - { - global $objSession; - - if($this->Get("CreatedById")>0) - $this->SendUserEventMail("CATEGORY.APPROVE",$this->Get("CreatedById")); - $this->SendAdminEventMail("CATEGORY.APPROVE"); - $this->Set("Status", 1); - $this->Update(); - } - - function Deny() - { - global $objSession; - - if($this->Get("CreatedById")>0) - $this->SendUserEventMail("CATEGORY.DENY",$this->Get("CreatedById")); - $this->SendAdminEventMail("CATEGORY.DENY"); - - $this->Set("Status", 0); - $this->Update(); - } - - - function IsEditorsPick() - { - return $this->Is("EditorsPick"); - } - - function SetEditorsPick($value) - { - $this->Set("EditorsPick", $value); - } - - function GetSubCats($limit=NULL, $target_template=NULL, $separator=NULL, $anchor=NULL, $ending=NULL, $class=NULL) - { - global $m_var_list, $m_var_list_update, $var_list, $var_list_update; - - $sql = "SELECT CategoryId, Name from ".GetTablePrefix()."Category where ParentId=".$this->Get("CategoryId")." AND Status=1 ORDER BY Priority"; - if(isset($limit)) - { - $rs = $this->adodbConnection->SelectLimit($sql, $limit, 0); - } - else - { - $rs = $this->adodbConnection->Execute($sql); - } - $count=1; - - $class_name = is_null($class)? "catsub" : $class; - - - while($rs && !$rs->EOF) - { - - if(!is_null($target_template)) - { - $var_list_update["t"] = $target_template; - } - $m_var_list_update["cat"] = $rs->fields["CategoryId"]; - $m_var_list_update["p"] = "1"; - $cat_name = $rs->fields['Name']; - if (!is_null($anchor)) - $ret .= "$cat_name"; - else - $ret .= "$cat_name"; - - $rs->MoveNext(); - if(!$rs->EOF) - { - $ret.= is_null($separator)? ", " : $separator; - } - } - if(strlen($ret)) - $ret .= is_null($ending)? " ..." : $ending; - - unset($var_list_update["t"], $m_var_list_update["cat"], $m_var_list_update["p"]); - - return $ret; - } - - function Validate() - { - global $objSession; - - $dataValid = true; - if(!isset($this->m_Type)) - { - $Errors->AddError("error.fieldIsRequired",'Type',"","","clsCategory","Validate"); - $dataValid = false; - } - - if(!isset($this->m_Name)) - { - $Errors->AddError("error.fieldIsRequired",'Name',"","","clsCategory","Validate"); - $dataValid = false; - } - - if(!isset($this->m_Description)) - { - $Errors->AddError("error.fieldIsRequired",'Description',"","","clsCategory","Validate"); - $dataValid = false; - } - - if(!isset($this->m_Visible)) - { - $Errors->AddError("error.fieldIsRequired",'Visible',"","","clsCategory","Validate"); - $dataValid = false; - } - - if(!isset($this->m_CreatedById)) - { - $Errors->AddError("error.fieldIsRequired",'CreatedBy',"","","clsCategory","Validate"); - $dataValid = false; - } - return $dataValid; - } - - function UpdateCachedPath() - { - if($this->UsingTempTable()==TRUE) - return; - $Id = $this->Get("CategoryId"); - $Id2 = $Id; - $NavPath = ""; - $path = array(); - do - { - $rs = $this->adodbConnection->Execute("SELECT ParentId,Name from ".$this->tablename." where CategoryId='$Id2'"); - $path[] = $Id2; - $nav[] = $rs->fields["Name"]; - if ($rs && !$rs->EOF) - { - //echo $path; - $Id2 = $rs->fields["ParentId"]; - - } - else - $Id2="0"; //to prevent infinite loop - } while ($Id2 != "0"); - $parentpath = "|".implode("|",array_reverse($path))."|"; - $NavBar = implode(">",array_reverse($nav)); - //echo "
\n"; - //$rs = $this->adodbConnection->Execute("update Category set ParentPath='$path' where CategoryId='$Id'"); - if($this->Get("ParentPath")!=$parentpath || $this->Get("CachedNavbar")!=$NavBar) - { - $this->Set("ParentPath",$parentpath); - $this->Set("CachedNavbar",$NavBar); - $this->Update(); - } - } - - function GetCachedNavBar() - { - $res = $this->Get("CachedNavbar"); - if(!strlen($res)) - { - $this->UpdateCachedPath(); - $res = $this->Get("CachedNavbar"); - } - return $res; - } - function Increment_Count() - { - $this->Increment("CachedDescendantCatsQty"); - } - - function Decrement_Count() - { - $this->Decrement("CachedDescendantCatsQty"); - $this->Update(); - } - - function LoadFromDatabase($Id) - { - global $objSession, $Errors, $objConfig; - if($Id==0) - return FALSE; - - if(!isset($Id)) - { - $Errors->AddError("error.AppError",NULL,'Internal error: LoadFromDatabase id',"",get_class($this),"LoadFromDatabase"); - return false; - } - $sql = sprintf("SELECT * FROM ".$this->tablename." WHERE CategoryId = '%s'",$Id); - $result = $this->adodbConnection->Execute($sql); - if ($result === false) - { - $Errors->AddError("error.DatabaseError",NULL,$this->adodbConnection->ErrorMsg(),"",get_class($this),"LoadFromDatabase"); - return false; - } - $data = $result->fields; - if(is_array($data)) - { - $this->SetFromArray($data); - $this->Clean(); - } - else - return false; - return true; - } - - function SetNewItem() - { - global $objConfig; - - $value = $this->Get("CreatedOn"); - - $cutoff = adodb_date("U") - ($objConfig->Get("Category_DaysNew") * 86400); - $this->IsNew = FALSE; - if($value>$cutoff) - $this->IsNew = TRUE; - return $this->IsNew; - } - - - function LoadFromResourceId($Id) - { - global $objSession, $Errors; - if(!isset($Id)) - { - $Errors->AddError("error.AppError",NULL,'Internal error: LoadFromDatabase id',"",get_class($this),"LoadFromResourceId"); - return false; - } - $sql = sprintf("SELECT * FROM ".$this->tablename." WHERE ResourceId = '%s'",$Id); - $result = $this->adodbConnection->Execute($sql); - if ($result === false) - { - $Errors->AddError("error.DatabaseError",NULL,$adodbConnection->ErrorMsg(),"",get_class($this),"LoadFromResourceId"); - return false; - } - $data = $result->fields; - if(is_array($data)) - $this->SetFromArray($data); - else - return false; - return true; - } - - function GetParentField($fieldname,$skipvalue,$default) - { - /* this function moves up the category tree until a value for $field other than - $skipvalue is returned. if no matches are made, then $default is returned */ - - $path = $this->Get("ParentPath"); - $path = substr($path,1,-1); //strip off the first & last tokens - $aPath = explode("|",$path); - $aPath = array_slice($aPath,0,-1); - $ParentPath = implode("|",$aPath); - $sql = "SELECT $fieldname FROM category WHERE $fieldname != '$skipvalue' AND ParentPath LIKE '$ParentPath' ORDER BY ParentPath DESC"; - $rs = $this->adodbConnection->execute($sql); - if($rs && !$rs->EOF) - { - $ret = $rs->fields[$fieldname]; - } - else - $ret = $default; - $update = "UPDATE ".$this->SourceTable." SET $fieldname='$ret' WHERE CategoryId=".$this->Get("CategoryId"); - $this->adodbConnection->execute($update); - return $ret; - } - - - - function GetCustomField($fieldName) - { - global $objSession, $Errors; - - if(!isset($this->m_CategoryId)) - { - $Errors->AddError("error.appError","Get field is required in order to set custom field values","","",get_class($this),"GetCustomField"); - return false; - } - - return GetCustomFieldValue($this->m_CategoryId,"category",$fieldName); - } - - function SetCustomField($fieldName, $value) - { - global $objSession, $Errors; - - if(!isset($this->m_CategoryId)) - { - $Errors->AddError("error.appError","Set field is required in order to set custom field values","","",get_class($this),"SetCustomField"); - return false; - } - return SetCustomFieldValue($this->m_CategoryId,"category",$fieldName,$value); - } - - function LoadPermissions($first=1) - { - /* load all permissions for group on this category */ - $this->Permissions->CatId=$this->Get("CategoryId"); - if($this->Permissions->NumItems()==0) - { - $cats = explode("|",substr($this->Get("ParentPath"),1,-1)); - if(is_array($cats)) - { - $cats = array_reverse($cats); - $cats[] = 0; - foreach($cats as $catid) - { - $this->Permissions->LoadCategory($catid); - } - } - } - if($this->Permissions->NumItems()==0) - { - if($first==1) - { - $this->Permissions->GroupId=NULL; - $this->LoadPermissions(0); - } - } - } - - function PermissionObject() - { - return $this->Permissions; - } - - function PermissionItemObject($PermissionName) - { - $p = $this->Permissions->GetPermByName($PermissionName); - return $p; - } - - function HasPermission($PermissionName,$GroupID) - { - global $objSession; - - $perm = $this->PermissionValue($PermissionName,$GroupID); - // echo "Permission $PermissionName for $GroupID is $perm in ".$this->Get("CategoryId")."
\n"; - if(!$perm) - { - $perm=$objSession->HasSystemPermission("ROOT"); - } - return ($perm==1); - } - - function PermissionValue($PermissionName,$GroupID) - { - //$this->LoadPermissions(); - $ret=NULL; - //echo "Looping though ".count($this->Permissions)." permissions Looking for $PermissionName of $GroupID
\n"; - if($this->Permissions->GroupId != $GroupID) - { - $this->Permissions->Clear(); - $this->Permissions->GroupId = $GroupID; - } - - $this->Permissions->CatId=$this->Get("CategoryId"); - $ret = $this->Permissions->GetPermissionValue($PermissionName); - if($ret == NULL) - { - $cats = explode("|",substr($this->Get("ParentPath"),1,-1)); - - if(is_array($cats)) - { - $cats = array_reverse($cats); - $cats[] = 0; - foreach($cats as $catid) - { - $this->Permissions->LoadCategory($catid); - $ret = $this->Permissions->GetPermissionValue($PermissionName); - if(is_numeric($ret)) - break; - } - } - } - return $ret; - } - - function SetPermission($PermName,$GroupID,$Value,$Type=0) - { - global $objSession, $objPermissions, $objGroups; - - if($this->Permissions->GroupId != $GroupID) - { - $this->Permissions->Clear(); - $this->Permissions->GroupId = $GroupID; - } - - if($objSession->HasSystemPermission("GRANT")) - { - $current = $this->PermissionValue($PermName,$GroupID); - - if($current == NULL) - { - $this->Permissions->Add_Permission($this->Get("CategoryId"),$GroupId,$PermName,$Value,$Type); - } - else - { - $p = $this->Permissions->GetPermByName($PermName); - if($p->Inherited==FALSE) - { - $p->Set("PermissionValue",$Value); - $p->Update(); - } - else - $this->Permissions->Add_Permission($this->Get("CategoryId"),$GroupId,$PermName,$Value,$Type); - } - if($PermName == "CATEGORY.VIEW") - { - $Groups = $objGroups->GetAllGroupList(); - $ViewList = $this->Permissions->GetGroupPermList($this,"CATEGORY.VIEW",$Groups); - $this->SetViewPerms("CATEGORY.VIEW",$ViewList,$Groups); - $this->Update(); - } - } - } - - function SetViewPerms($PermName,$acl,$allgroups) - { - global $objPermCache; - - $dacl = array(); - if(!is_array($allgroups)) - { - global $objGroups; - $allgroups = $objGroups->GetAllGroupList(); - } - - for($i=0;$iPermissions->GetPermId($PermName); - $pc = $objPermCache->GetPerm($this->Get("CategoryId"),$PermId); - if(is_object($pc)) - { - $pc->Set("ACL",$aval); - $pc->Set("DACL",$dval); - $pc->Update(); - } - else - $objPermCache->AddPermCache($this->Get("CategoryId"),$PermId,$aval,$dval); - - //$this->Update(); - } - - function GetACL($PermName) - { - global $objPermCache; - - $ret = ""; - $PermId = $this->Permissions->GetPermId($PermName); - $pc = $objPermCache->GetPerm($this->Get("CategoryId"),$PermId); - if(is_object($pc)) - { - $ret = $this->Get("ACL"); - } - return $ret; - } - - - function UpdateACL() - { - global $objGroups, $objPermCache; - - $glist = $objGroups->GetAllGroupList(); - - $ViewList = $this->Permissions->GetGroupPermList($this,"CATEGORY.VIEW",$glist); - $perms = $this->Permissions->GetAllViewPermGroups($this,$glist); - //echo "
";print_r($perms); echo "
"; - foreach($perms as $PermName => $l) - { - $this->SetViewPerms($PermName,$l,$glist); - } - } - - function Cat_Link() - { - global $m_var_list_update; - - $m_var_list_update["cat"] = $this->Get("CategoryId"); - $ret = GetIndexURL()."?env=".BuildEnv(); - unset($m_var_list_update["cat"]); - return $ret; - } - - function Parent_Link() - { - global $m_var_list_update; - - $m_var_list_update["cat"] = $this->Get("ParentId"); - $ret = GetIndexURL()."?env=".BuildEnv(); - unset($m_var_list_update["cat"]); - return $ret; - } - - function Admin_Parent_Link($page=NULL) - { - global $m_var_list_update; - - if(!strlen($page)) - $page = $_SERVER["PHP_SELF"]; - $m_var_list_update["cat"] = $this->Get("ParentId"); - $ret = $page."?env=".BuildEnv(); - unset($m_var_list_update["cat"]); - return $ret; - } - - function StatusIcon() - { - global $imagesURL; - - $ret = $imagesURL."/itemicons/"; - - switch($this->Get("Status")) - { - case STATUS_DISABLED: - $ret .= "icon16_cat_disabled.gif"; - break; - case STATUS_PENDING: - $ret .= "icon16_cat_pending.gif"; - break; - case STATUS_ACTIVE: - $img = "icon16_cat.gif"; - if($this->IsPopItem()) - $img = "icon16_cat_pop.gif"; - if($this->IsHotItem()) - $img = "icon16_cat_hot.gif"; - if($this->IsNewItem()) - $img = "icon16_cat_new.gif"; - if($this->Is("EditorsPick")) - $img = "icon16_car_pick.gif"; - $ret .= $img; - break; - } - return $ret; - } - - function SubCatCount() - { - $ret = $this->Get("CachedDescendantCatsQty"); - - $sql = "SELECT COUNT(*) as SubCount FROM ".$this->tablename." WHERE ParentPath LIKE '".$this->Get("ParentPath")."%' AND CategoryId !=".$this->Get("CategoryId"); - $rs = $this->adodbConnection->Execute($sql); - if($rs && !$rs->EOF) - { - $val = $rs->fields["SubCount"]; - if($val != $this->Get("CachedDescendantCatsQty")) - { - $this->Set("CachedDescendantCatsQty",$val); - $this->Update(); - } - $ret = $this->Get("CachedDescendantCatsQty"); - } - return $ret; - } - - function GetSubCatIds() - { - $sql = "SELECT CategoryId FROM ".$this->tablename." WHERE ParentPath LIKE '".$this->Get("ParentPath")."%' AND CategoryId !=".$this->Get("CategoryId"); - $rs = $this->adodbConnection->Execute($sql); - $ret = array(); - while($rs && !$rs->EOF) - { - $ret[] = $rs->fields["CategoryId"]; - $rs->MoveNext(); - } - return $ret; - } - - function GetParentIds() - { - $Parents = array(); - $ParentPath = $this->Get("ParentPath"); - if(strlen($ParentPath)) - { - $ParentPath = substr($ParentPath,1,-1); - $Parents = explode("|",$ParentPath); - } - return $Parents; - } - - function ItemCount($ItemType="") - { - global $objItemTypes,$objCatList,$objCountCache; - - if(!is_numeric($ItemType)) - { - $TypeId = $objItemTypes->GetItemTypeValue($ItemType); - } - else - $TypeId = (int)$ItemType; - - //$path = $this->Get("ParentPath"); - //$path = substr($path,1,-1); - //$path = str_replace("|",",",$path); - $path = implode(",",$this->GetSubCatIds()); - if(strlen($path)) - { - $path = $this->Get("CategoryId").",".$path; - } - else - $path = $this->Get("CategoryId"); - - $res = TableCount(GetTablePrefix()."CategoryItems","CategoryId IN ($path)",FALSE); - - return $res; - } - - function ParseObject($element) - { - global $objConfig, $objCatList, $rootURL, $var_list, $var_list_update, $m_var_list_update, $objItemTypes,$objCountCache; - $extra_attribs = ExtraAttributes($element->attributes); - - //print_r($element); - if(strtolower($element->name)==$this->TagPrefix) - { - $field = strtolower( $element->GetAttributeByName('_field') ); - switch($field) - { - case "name": - case "Name": - /* - @field:cat.name - @description:Category name - */ - $ret = $this->HighlightField("Name"); - break; - case "description": - /* - @field:cat.description - @description:Category Description - */ - $ret = ($this->Get("Description")); - $ret = $this->HighlightText($ret); - break; - case "cachednavbar": - /* - @field:cat.cachednavbar - @description: Category cached navbar - */ - $ret = $this->HighlightField("CachedNavbar"); - if(!strlen($ret)) - { - $this->UpdateCachedPath(); - $ret = $this->HighlightField("CachedNavbar"); - } - break; - case "image": - /* - @field:cat.image - @description:Return an image associated with the category - @attrib:_default:bool:If true, will return the default image if the requested image does not exist - @attrib:_name::Return the image with this name - @attrib:_thumbnail:bool:If true, return the thumbnail version of the image - @attrib:_imagetag:bool:If true, returns a complete image tag. exta html attributes are passed to the image tag - */ - $default = $element->GetAttributeByName('_primary'); - $name = $element->GetAttributeByName('_name'); - if(strlen($name)) - { - $img = $this->GetImageByName($name); - } - else - { - if($default) - $img = $this->GetDefaultImage(); - } - if($img) - { - if( $element->GetAttributeByName('_thumbnail') ) - { - $url = $img->parsetag("thumb_url"); - } - else - $url = $img->parsetag("image_url"); - - } - else - { - $url = $element->GetAttributeByName('_defaulturl'); - } - - if( $element->GetAttributeByName('_imagetag') ) - { - if(strlen($url)) - { - $ret = ""; - } - else - $ret = ""; - } - else - $ret = $url; - break; - case "createdby": - /* - @field:cat.createdby - @description:parse a user field of the user that created the category - @attrib:_usertag::User field to return (defaults to login ID) - */ - $field = $element->GetAttributeByName('_usertag'); - if(!strlen($field)) - { - $field = "user_login"; - } - $u = $objUsers->GetUser($this->Get("CreatedById")); - $ret = $u->parsetag($field); - break; - case "custom": - /* - @field:cat.custom - @description:Returns a custom field - @attrib:_customfield::field name to return - @attrib:_default::default value - */ - $field = $element->GetAttributeByName('_customfield'); - $default = $element->GetAttributeByName('_default'); - $ret = $this->GetCustomFieldValue($field,$default); - break; - - case "catsubcats": - /* - @field:cat.catsubcats - @description:Returns a list of subcats of current category - @attrib:_limit:int:Number of categories to return - @attrib:_separator::Separator between categories - @attrib:_anchor:bool:Make an anchor (only if template is not specified) - @attrib:_TargetTemplate:tpl:Target template - @attrib:_Ending::Add special text at the end of subcategory list - @attrib:_Class::Specify stly sheet class for anchors (if used) or "span" object - */ - $limit = ((int)$element->attributes["_limit"]>0)? $element->attributes["_limit"] : NULL; - $separator = $element->attributes["_separator"]; - $anchor = (int)($element->attributes["_anchor"])? 1 : NULL; - $template = strlen($element->attributes["_TargetTemplate"])? $element->attributes["_TargetTemplate"] : NULL; - $ending = strlen($element->attributes["_ending"])? $element->attributes["_ending"] : NULL; - $class = strlen($element->attributes["_class"])? $element->attributes["_class"] : NULL; - - $ret = $this->GetSubCats($limit, $template, $separator, $anchor, $ending, $class); - - break; - - case "date": - /* - @field:cat.date - @description:Returns the date/time the category was created - @attrib:_tz:bool:Convert the date to the user's local time - @attrib:_part::Returns part of the date. The following options are available: month,day,year,time_24hr,time_12hr - */ - $d = $this->Get("CreatedOn"); - - if( $element->GetAttributeByName('_tz') ) - { - $d = GetLocalTime($d,$objSession->Get("tz")); - } - - $part = strtolower( $element->GetAttributeByName('_part') ); - if(strlen($part)) - { - $ret = ExtractDatePart($part,$d); - } - else - { - if(!is_numeric($d)) - { - $ret = ""; - } - else - $ret = LangDate($d); - } - break; - case "link": - /* - @field:cat.link - @description:Returns a URL setting the category to the current category - @attrib:_template:tpl:Template URL should point to - @attrib:_mod_template:tpl:Template INSIDE a module to which the category belongs URL should point to - */ - if ( strlen( $element->GetAttributeByName('_mod_template') ) ){ - //will prefix the template with module template root path depending on category - $ids = $this->GetParentIds(); - $tpath = GetModuleArray("template"); - $roots = GetModuleArray("rootcat"); - - // get template path of module, by searching for moudle name - // in this categories first parent category - // and then using found moudle name as a key for module template paths array - $path = $tpath[array_search ($ids[0], $roots)]; - $t = $path . $element->GetAttributeByName('_mod_template'); - } - else - $t = $element->GetAttributeByName('_template'); - - - if(strlen($t)) - { - $var_list_update["t"] = $t; - } - else - $var_list_update["t"] = $var_list["t"]; - $m_var_list_update["cat"] = $this->Get("CategoryId"); - $ret = GetIndexURL()."?env=" . BuildEnv(); - unset($m_var_list_update["cat"], $var_list_update["t"]); - break; - case "adminlink": - $m_var_list_update["cat"] = $this->Get("CategoryId"); - $m_var_list_update["p"] = 1; - $ret = $_SERVER["PHP_SELF"]."?env=" . BuildEnv(); - unset($m_var_list_update["cat"]); - unset($m_var_list_update["p"]); - return $ret; - break; - case "customlink": - $t = $this->GetCustomFieldValue("indextemplate",""); - if(strlen($t)) - { - $var_list_update["t"] = $t; - } - else - $var_list_update["t"] = $var_list["t"]; - $m_var_list_update["cat"] = $this->Get("CategoryId"); - $ret = GetIndexURL()."?env=" . BuildEnv(); - unset($m_var_list_update["cat"], $var_list_update["t"]); - break; - case "link_selector": - $m_var_list_update["cat"] = $this->Get("CategoryId"); - $ret = $_SERVER["PHP_SELF"]."?env=" . BuildEnv(); - - // pass through selector - if( isset($_REQUEST['Selector']) ) $ret .= '&Selector='.$_REQUEST['Selector']; - - // pass new status - if( isset($_REQUEST['new']) ) $ret .= '&new='.$_REQUEST['new']; - - unset($m_var_list_update["cat"]); - return $ret; - break; - case "admin_icon": - if( $element->GetAttributeByName('fulltag') ) - { - $ret = "StatusIcon()."\">"; - } - else - $ret = $this->StatusIcon(); - break; - case "subcats": - /* - @field:cat.subcats - @description: Loads category's subcategories into a list and renders using the m_list_cats global tag - @attrib:_subcattemplate:tpl:Template used to render subcategory list elements - @attrib: _columns:int: Numver of columns to display the categories in (defaults to 1) - @attrib: _maxlistcount:int: Maximum number of categories to list - @attrib: _FirstItemTemplate:tpl: Template used for the first category listed - @attrib: _LastItemTemplate:tpl: Template used for the last category listed - @attrib: _NoTable:bool: If set to 1, the categories will not be listed in a table. If a table is used, all HTML attributes are passed to the TABLE tag - */ - $attr = array(); - $attr["_catid"] = $this->Get("CategoryId"); - $attr["_itemtemplate"] = $element->GetAttributeByName('_subcattemplate'); - if( $element->GetAttributeByName('_notable') ) - $attr["_notable"]=1; - $ret = m_list_cats($attr); - break; - case "subcatcount": - /* - @field:cat.subcatcount - @description:returns number of subcategories - */ - $GroupOnly = $element->GetAttributeByName('_grouponly') ? 1 : 0; - $txt = "Get("CategoryId")."\" _SubCats=\"1\" "; - $txt .="_CategoryCount=\"1\" _ItemType=\"1\" _GroupOnly=\"$GroupOnly\" />"; - $tag = new clsHtmlTag($txt); - $ret = $tag->Execute(); - break; - case "itemcount": - /* - @field:cat.itemcount - @description:returns the number of items in the category - @attrib:_itemtype::name of item type to count, or all items if not set - */ - $typestr = $element->GetAttributeByName('_itemtype'); - if(strlen($typestr)) - { - $type = $objItemTypes->GetTypeByName($typestr); - if(is_object($type)) - { - $TypeId = $type->Get("ItemType"); - $GroupOnly = $element->GetAttributeByName('_grouponly') ? 1 : 0; - $txt = "Get("CategoryId")."\" _SubCats=\"1\" "; - $txt .=" _ListType=\"category\" _CountCurrent=\"1\" _ItemType=\"$TypeId\" _GroupOnly=\"$GroupOnly\" />"; - $tag = new clsHtmlTag($txt); - $ret = $tag->Execute(); - } - else - $ret = ""; - } - else - { - $ret = (int)$objCountCache->GetCatListTotal($this->Get("CategoryId")); - } - break; - case "totalitems": - /* - @field:cat.totalitems - @description:returns the number of items in the category and all subcategories - */ - $ret = $this->ItemCount(); - break; - - case 'modified': - $ret = ''; - $date = $this->Get('Modified'); - if(!$date) $date = $this->Get('CreatedOn'); - if( $element->GetAttributeByName('_tz') ) - { - $date = GetLocalTime($date,$objSession->Get("tz")); - } - - $part = strtolower($element->GetAttributeByName('_part') ); - if(strlen($part)) - { - $ret = ExtractDatePart($part,$date); - } - else - { - $ret = ($date <= 0) ? '' : LangDate($date); - } - break; - - case "itemdate": - /* - @field:cat.itemdate - @description:Returns the date the cache count was last updated - @attrib:_itemtype:Item name to check - @attrib:_tz:bool:Convert the date to the user's local time - @attrib:_part::Returns part of the date. The following options are available: month,day,year,time_24hr,time_12hr - */ - $typestr = $element->GetAttributeByName('_itemtype'); - $type = $objItemTypes->GetTypeByName($typestr); - if(is_object($type)) - { - $TypeId = $type->Get("ItemType"); - $cc = $objCountCache->GetCountObject(1,$TypeId,$this->get("CategoryId"),0); - if(is_object($cc)) - { - $date = $cc->Get("LastUpdate"); - } - else - $date = ""; - - //$date = $this->GetCacheCountDate($TypeId); - if( $element->GetAttributeByName('_tz') ) - { - $date = GetLocalTime($date,$objSession->Get("tz")); - } - - $part = strtolower($element->GetAttributeByName('_part') ); - if(strlen($part)) - { - $ret = ExtractDatePart($part,$date); - } - else - { - if($date<=0) - { - $ret = ""; - } - else - $ret = LangDate($date); - } - } - else - $ret = ""; - break; - case "new": - /* - @field:cat.new - @description:returns text if category's status is "new" - @attrib:_label:lang: Text to return if status is new - */ - if($this->IsNewItem()) - { - $ret = $element->GetAttributeByName('_label'); - if(!strlen($ret)) - $ret = "lu_new"; - $ret = language($ret); - } - else - $ret = ""; - break; - case "pick": - /* - @field:cat.pick - @description:returns text if article's status is "hot" - @attrib:_label:lang: Text to return if status is "hot" - */ - if($this->Get("EditorsPick")==1) - { - $ret = $element->GetAttributeByName('_label'); - if(!strlen($ret)) - $ret = "lu_pick"; - $ret = language($ret); - } - else - $ret = ""; - break; - - case "parsetag": - /* - @field:cat.parsetag - @description:returns a tag output with this categoriy set as a current category - @attrib:_tag:: tag name - */ - - $tag = new clsHtmlTag(); - $tag->name = $element->GetAttributeByName('_tag'); - $tag->attributes = $element->attributes; - $tag->attributes["_catid"] = $this->Get("CategoryId"); - $ret = $tag->Execute(); - break; - - - /* - @field:cat.relevance - @description:Displays the category relevance in search results - @attrib:_displaymode:: How the relevance should be displayed
-
    -
  • "Numerical": Show the decimal value -
  • "Bar": Show the HTML representing the relevance. Returns two HTML cells ≶td< with specified background colors -
  • "Graphical":Show image representing the relevance -
- @attrib:_onimage::Zero relevance image shown in graphical display mode. Also used as prefix to build other images (i.e. prefix+"_"+percentage+".file_extension" - @attrib:_OffBackGroundColor::Off background color of HTML cell in bar display mode - @attrib:_OnBackGroundColor::On background color of HTML cell in bar display mode - */ - - } - if( !isset($ret) ) $ret = parent::ParseObject($element); - - } - return $ret; - } - - - function parsetag($tag) - { - global $objConfig,$objUsers, $m_var_list, $m_var_list_update; - if(is_object($tag)) - { - $tagname = $tag->name; - } - else - $tagname = $tag; - - switch($tagname) - { - case "cat_id": - return $this->Get("CategoryId"); - break; - case "cat_parent": - return $this->Get("ParentId"); - break; - case "cat_fullpath": - return $this->Get("CachedNavbar"); - break; - case "cat_name": - return $this->Get("Name"); - break; - case "cat_desc": - return $this->Get("Description"); - break; - case "cat_priority": - if($this->Get("Priority")!=0) - { - return (int)$this->Get("Priority"); - } - else - return ""; - break; - case "cat_pick": - if ($this->Get("EditorsPick")) - return "pick"; - break; - case "cat_status": - return $this->Get("Status"); - break; - case "cat_Pending": - return $this->Get("Name"); - break; - - case "cat_pop": - if($this->IsPopItem()) - return "pop"; - break; - case "cat_new": - if($this->IsNewItem()) - return "new"; - break; - case "cat_hot": - if($this->IsHotItem()) - return "hot"; - break; - case "cat_metakeywords": - return $this->Get("MetaKeywords"); - break; - case "cat_metadesc": - return $this->Get("MetaDescription"); - break; - case "cat_createdby": - return $objUsers->GetUserName($this->Get("CreatedById")); - break; - case "cat_resourceid": - return $this->Get("ResourceId"); - break; - case "cat_sub_cats": - return $this->GetSubCats($objConfig->Get("SubCat_ListCount")); - break; - case "cat_link": - return $this->Cat_Link(); - break; - case "subcat_count": - return $this->SubCatCount(); - break; - case "cat_itemcount": - return (int)$this->GetTotalItemCount(); - break; - case "cat_link_admin": - $m_var_list_update["cat"] = $this->Get("CategoryId"); - $m_var_list_update["p"] = 1; - $ret = $_SERVER["PHP_SELF"]."?env=" . BuildEnv(); - unset($m_var_list_update["cat"]); - unset($m_var_list_update["p"]); - return $ret; - break; - case "cat_admin_icon": - $ret = $this->StatusIcon(); - return $ret; - break; - case "cat_link_selector": - $m_var_list_update["cat"] = $this->Get("CategoryId"); - $ret = $_SERVER["PHP_SELF"]."?env=" . BuildEnv(); - unset($m_var_list_update["cat"]); - return $ret; - break; - - case "cat_link_edit": - $m_var_list_update["id"] = $this->Get("CategoryId"); - $ret = "addcategory.php?env=" . BuildEnv(); - unset($m_var_list_update["id"]); - return $ret; - break; - - case "cat_date": - return LangDate($this->Get("CreatedOn")); - break; - case "cat_num_cats": - return $this->Get("CachedDescendantCatsQty"); - break; - case "cell_back": - if ($m_var_list_update["cat_cell"]=="#cccccc") - { - $m_var_list_update["cat_cell"]="#ffffff"; - return "#ffffff"; - } - else - { - $m_var_list_update["cat_cell"]="#cccccc"; - return "#cccccc"; - } - break; - default: - return "Undefined:$tagname"; - } - } - - function ParentNames() - { - global $objCatList; - - if(strlen($this->Get("CachedNavbar"))==0) - { - $nav = ""; - //echo "Rebuilding Navbar..
\n"; - if(strlen($this->Get("ParentPath"))==0) - { - $this->UpdateCachedPath(); - } - $cats = explode("|",substr($this->Get("ParentPath"),1,-1)); - - foreach($cats as $catid) - { - $cat =& $objCatList->GetCategory($catid); - if(is_object($cat)) - { - if(strlen($cat->Get("Name"))) - $names[] = $cat->Get("Name"); - - } - } - $nav = implode(">", $names); - $this->Set("CachedNavbar",$nav); - $this->Update(); - } - $res = explode(">",$this->Get("CachedNavbar")); - return $res; - } - - function UpdateCacheCounts() - { - global $objItemTypes; - - $CatId = $this->Get("CategoryId"); - - if($CatId>0) - { - //echo "Updating count for ".$this->Get("CachedNavbar")."
\n"; - UpdateCategoryCount(0,$CatId); - } - } - - /** - * @return void - * @param int $date - * @desc Set Modified field for category & all it's parent categories - */ - function SetLastUpdate($date) - { - $parents = $this->Get('ParentPath'); - $parents = substr($parents, 1, strlen($parents) - 2 ); - $parents = explode('|', $parents); - - $db =&GetADODBConnection(); - $sql = 'UPDATE '.$this->tablename.' SET Modified = '.$date.' WHERE CategoryId IN ('.implode(',', $parents).')'; - $db->Execute($sql); - } - - - } - - class clsCatList extends clsItemList //clsItemCollection - { - //var $Page; // no need because clsItemList class used instead of clsItemCollection - //var $PerPageVar; - - function clsCatList() - { - global $m_var_list; - $this->clsItemCollection(); - $this->classname="clsCategory"; - $this->AdminSearchFields = array("Name","Description"); - $this->Page = (int)$m_var_list["p"]; - $this->PerPageVar = "Perpage_Category"; - $this->SourceTable = GetTablePrefix()."Category"; - $this->BasePermission="CATEGORY"; - $this->DefaultPerPage = 20; - } - - function SaveNewPage() - { - global $m_var_list; - $m_var_list["p"] = $this->Page; - } - - function GetCountSQL($PermName,$CatId=NULL, $GroupId=NULL, $AdditonalWhere="") - { - global $objSession, $objPermissions, $objCatList; - - $ltable = $this->SourceTable; - $acl = $objSession->GetACLClause(); - $cattable = GetTablePrefix()."CategoryItems"; - $CategoryTable = GetTablePrefix()."Category"; - $ptable = GetTablePrefix()."PermCache"; - $VIEW = $objPermissions->GetPermId($PermName); - - $sql = "SELECT count(*) as CacheVal FROM $ltable "; - $sql .="INNER JOIN $ptable ON ($ltable.CategoryId=$ptable.CategoryId) "; - $sql .="WHERE ($acl AND PermId=$VIEW AND $ltable.Status=1) "; - - if(strlen($AdditonalWhere)>0) - { - $sql .= "AND (".$AdditonalWhere.")"; - } - return $sql; - } - - function CountCategories($attribs) - { - global $objSession; - - $cat = $attribs["_catid"]; - if(!is_numeric($cat)) - { - $cat = $this->CurrentCategoryID(); - } - if((int)$cat>0) - $c = $this->GetCategory($cat); - - if($attribs["_subcats"] && $cat>0) - { - $ParentWhere = "(ParentPath LIKE '".$c->Get("ParentPath")."%' AND ".$this->SourceTable.".CategoryId != $cat)"; - } - if($attribs["_today"]) - { - $today = mktime(0,0,0,date("m"),date("d"),date("Y")); - $TodayWhere = "(CreatedOn>=$today)"; - } - if($attribs["_grouponly"]) - { - $GroupList = $objSession->Get("GroupList"); - } - else - $GroupList = NULL; - - $where = ""; - if(strlen($ParentWhere)) - { - $where = $ParentWhere; - } - if(strlen($TodayWhere)) - { - if(strlen($where)) - $where .=" AND "; - $where .= $TodayWhere; - } - $sql = $this->GetCountSQL("CATEGORY.VIEW",$cat,$GroupList,$where); - - // echo "SQL: ".$sql."
"; - - $rs = $this->adodbConnection->Execute($sql); - if($rs && !$rs->EOF) - { - $ret = $rs->fields["CacheVal"]; - } - else - $ret = 0; - - return $ret; - } - - function CurrentCategoryID() - { - global $m_var_list; - return (int)$m_var_list["cat"]; - } - - function NumCategories() - { - return $this->NumItems(); - } - - function &CurrentCat() - { - //return $this->GetCategory($this->CurrentCategoryID()); - return $this->GetItem($this->CurrentCategoryID()); - } - - function &GetCategory($CatID) - { - return $this->GetItem($CatID); - } - - function GetByResource($ResId) - { - return $this->GetItemByField("ResourceId",$ResId); - } - - function QueryOrderByClause($EditorsPick=FALSE,$Priority=FALSE,$UseTableName=FALSE) - { - global $objSession; - - if($UseTableName) - { - $TableName = $this->SourceTable."."; - } - else - $TableName = ""; - - $Orders = array(); - - if($EditorsPick) - { - $Orders[] = $TableName."EditorsPick DESC"; - } - if($Priority) - { - $Orders[] = $TableName."Priority DESC"; - } - - $FieldVar = "Category_Sortfield"; - $OrderVar = "Category_Sortorder"; - - if(is_object($objSession)) - { - if(strlen($objSession->GetPersistantVariable($FieldVar))>0) - { - $Orders[] = trim($TableName.$objSession->GetPersistantVariable($FieldVar) . " ". - $objSession->GetPersistantVariable($OrderVar)); - } - } - - $FieldVar = "Category_Sortfield2"; - $OrderVar = "Category_Sortorder2"; - - if(is_object($objSession)) - { - if(strlen($objSession->GetPersistantVariable($FieldVar))>0) - { - $Orders[] = trim($TableName.$objSession->GetPersistantVariable($FieldVar) . " ". - $objSession->GetPersistantVariable($OrderVar)); - } - } - - - if(count($Orders)>0) - { - $OrderBy = "ORDER BY ".implode(", ",$Orders); - } - else - $OrderBy=""; - return $OrderBy; - } - - - function LoadCategories($where="", $orderBy = "", $no_limit = true, $fix_method = 'set_first') - { - // load category list using $where clause - // apply ordering specified in $orderBy - // show all cats ($no_limit = true) or only from current page ($no_limit = false) - // in case if stored page is greather then page count issue page_fixing with - // method specified (see "FixInvalidPage" method for details) - $PerPage = $this->GetPerPage(); - - $this->QueryItemCount = TableCount($this->SourceTable,$where,0); - if($no_limit == false) - { - $this->FixInvalidPage($fix_method); - $Start = ($this->Page-1) * $PerPage; - $limit = "LIMIT ".$Start.",".$PerPage; - } - else - $limit = NULL; - - return $this->Query_Category($where, $orderBy, $limit); - } - - function Query_Category($whereClause="",$orderByClause="",$limit=NULL) - { - global $m_var_list, $objSession, $Errors, $objPermissions; - $GroupID = $objSession->Get("GroupID"); - $resultset = array(); - - $table = $this->SourceTable; - $ptable = GetTablePrefix()."PermCache"; - $CAT_VIEW = $objPermissions->GetPermId("CATEGORY.VIEW"); - if(!$objSession->HasSystemPermission("ADMIN")) - { - $sql = "SELECT * FROM $table INNER JOIN $ptable ON ($ptable.CategoryId=$table.CategoryId)"; - $acl_where = $objSession->GetACLClause(); - if(strlen($whereClause)) - { - $sql .= " WHERE ($acl_where) AND PermId=$CAT_VIEW AND ".$whereClause; - } - else - $sql .= " WHERE ($acl_where) AND PermId=$CAT_VIEW "; - } - else - { - $sql ="SELECT * FROM $table ".($whereClause ? "WHERE $whereClause" : ''); - } - $sql .=" ".$orderByClause; - - if(isset($limit) && strlen(trim($limit))) - $sql .= " ".$limit; - if($objSession->HasSystemPermission("DEBUG.LIST")) - echo $sql; - - return $this->Query_item($sql); - } - - function CountPending() - { - return TableCount($this->SourceTable,"Status=".STATUS_PENDING,0); - } - - function GetPageLinkList($dest_template=NULL,$page="",$PagesToList=10,$HideEmpty=TRUE) - { - global $objConfig, $m_var_list_update, $var_list_update, $var_list; - - if(!strlen($page)) - $page = GetIndexURL(); - - $PerPage = $this->GetPerPage(); - $NumPages = ceil( $this->GetNumPages($PerPage) ); - - if($NumPages == 1 && $HideEmpty) return ''; - - if(strlen($dest_template)) - { - $var_list_update["t"] = $dest_template; - } - else - $var_list_update["t"] = $var_list["t"]; - - $o = ""; - if($this->Page>$NumPages) - $this->Page=$NumPages; - - $StartPage = (int)$this->Page - ($PagesToList/2); - if($StartPage<1) - $StartPage=1; - - $EndPage = $StartPage+($PagesToList-1); - if($EndPage>$NumPages) - { - $EndPage = $NumPages; - $StartPage = $EndPage-($PagesToList-1); - if($StartPage<1) - $StartPage=1; - } - - $o = ""; - if($StartPage>1) - { - $m_var_list_update["p"] = $this->Page-$PagesToList; - $prev_url = $page."?env=".BuildEnv(); - $o .= "<<"; - } - - - for($p=$StartPage;$p<=$EndPage;$p++) - { - if($p!=$this->Page) - { - $m_var_list_update["p"]=$p; - $href = $page."?env=".BuildEnv(); - $o .= " $p "; - } - else - { - $o .= "$p"; - } - } - if($EndPage<$NumPages && $EndPage>0) - { - $m_var_list_update["p"]=$this->Page+$PagesToList; - $next_url = $page."?env=".BuildEnv(); - $o .= " >>"; - } - unset($m_var_list_update,$var_list_update["t"] ); - return $o; - } - - function GetAdminPageLinkList($url) - { - global $objConfig, $m_var_list_update, $var_list_update, $var_list; - - $PerPage = $this->GetPerPage(); - $NumPages = ceil($this->GetNumPages($PerPage)); - $o = ""; - - if($this->Page>1) - { - $m_var_list_update["p"]=$this->Page-1; - $prev_url = $url."?env=".BuildEnv(); - unset($m_var_list_update["p"]); - $o .= "<<"; - } - - if($this->Page<$NumPages) - { - $m_var_list_update["p"]=$this->Page+1; - $next_url = $url."?env=".BuildEnv(); - unset($m_var_list_update["p"]); - } - - for($p=1;$p<=$NumPages;$p++) - { - if($p != $this->Page) - { - $m_var_list_update["p"]=$p; - $href = $url."?env=".BuildEnv(); - unset($m_var_list_update["p"]); - $o .= " $p "; - } - else - $o .= "$p"; - } - - if($this->Page < $NumPages) - $o .= ">>"; - - return $o; - } - - function Search_Category($orderByClause) - { - global $objSession, $objConfig, $Errors; - - $PerPage = $this->GetPerPage(); - $Start = ($this->Page-1) * $PerPage; - $objResults = new clsSearchResults("Category","clsCategory"); - $this->Clear(); - $this->Categories = $objResults->LoadSearchResults($Start,$PerPage); - - return $this->Categories; - } - - - function GetSubCats($ParentCat) - { - return $this->Query_Category("ParentId=".$ParentCat,""); - } - - function AllSubCats($ParentCat) - { - $c =& $this->GetCategory($ParentCat); - $sql = "SELECT * FROM ".$this->SourceTable." WHERE ParentPath LIKE '".$c->Get("ParentPath")."%'"; - $rs = $this->adodbConnection->Execute($sql); - $subcats = array(); - while($rs && !$rs->EOF) - { - if($rs->fields["CategoryId"]!=$ParentCat) - { - $subcats[] = $rs->fields["CategoryId"]; - } - $rs->MoveNext(); - } - if($ParentCat>0) - { - if($c->Get("CachedDescendantCatsQty")!=count($subcats)) - { - $c->Set("CachedDescendantCatsQty",count($subcats)); - } - } - return $subcats; - } - - function cat_navbar($admin=0, $cat, $target_template, $separator = " > ", $LinkLeaf = FALSE, - $root = 0,$RootTemplate="",$modcat=0, $ModTemplate="", $LinkRoot = FALSE) - { - // draw category navigation bar (at top) - global $Errors, $var_list_update, $var_list, $m_var_list_update, $m_var_list, $objConfig; - - $selector = isset($_REQUEST['Selector']) ? '&Selector='.$_REQUEST['Selector'] : ''; - $new = isset($_REQUEST['new']) ? '&new='.$_REQUEST['new'] : ''; - - $nav = ""; - $m_var_list_update["p"]=1; - if(strlen($target_template)==0) - $target_template = $var_list["t"]; - - - if($cat == 0) - { - $cat_name = language($objConfig->Get("Root_Name")); - if ($LinkRoot) - { - $var_list_update["t"] = strlen($RootTemplate)? $RootTemplate : $target_template; - $nav = "$cat_name"; } - else - $nav = "$cat_name"; - } - else - { - $nav = array(); - $c =& $this->GetCategory($cat); - $nav_unparsed = $c->Get("ParentPath"); - if(strlen($nav_unparsed)==0) - { - $c->UpdateCachedPath(); - $nav_unparsed = $c->Get("ParentPath"); - } - //echo " Before $nav_unparsed "; - if($root) - { - $r =& $this->GetCategory($root); - $rpath = $r->Get("ParentPath"); - $nav_unparsed = substr($nav_unparsed,strlen($rpath),-1); - $cat_name = $r->Get("Name"); - $m_var_list_update["cat"] = $root; - if($cat == $catid && !$LinkLeaf) - { - $nav[] = "".$cat_name.""; //href=\"browse.php?env=". BuildEnv() ."\" - } - else - { - if ($admin == 1) - { - $nav[] = "".$cat_name.""; - } - else - { - if(strlen($RootTemplate)) - { - $var_list_update["t"] = $RootTemplate; - } - else - { - $var_list_update["t"] = $target_template; - } - $nav[] = "".$cat_name.""; - } - } - } - else - { - $nav_unparsed = substr($nav_unparsed,1,-1); - $cat_name = language($objConfig->Get("Root_Name")); - $m_var_list_update["cat"] = 0; - if($cat == 0) - { - $nav[] = "".$cat_name.""; //href=\"browse.php?env=". BuildEnv() ."\" - } - else - { - if ($admin == 1) - { - $nav[] = "".$cat_name.""; - } - else - { - if(strlen($RootTemplate)) - { - $var_list_update["t"] = $RootTemplate; - } - else - $var_list_update["t"] = $target_template; - $nav[] = "".$cat_name.""; - } - } - - } - //echo " After $nav_unparsed
\n"; - if(strlen($target_template)==0) - $target_template = $var_list["t"]; - - $cats = explode("|", $nav_unparsed); - foreach($cats as $catid) - { - if($catid) - { - $c =& $this->GetCategory($catid); - if(is_object($c)) - { - $cat_name = $c->Get("Name"); - - $m_var_list_update["cat"] = $catid; - if($catid==$modcat && strlen($ModTemplate)>0) - { - $t = $ModTemplate; - } - else - $t = $target_template; - if($cat == $catid && !$LinkLeaf) - { - $nav[] = "".$cat_name.""; - } - else - { - if ($admin == 1) - { - $nav[] = "".$cat_name.""; - } - else - { - $var_list_update["t"] = $t; - $nav[] = "".$cat_name.""; - unset($var_list_update["t"]); - } - } - unset($m_var_list_update["cat"]); - } - } - } - $nav = implode($separator, $nav); - } - return $nav; - } - - function &Add($ParentId, $Name, $Description, $CreatedOn, $EditorsPick, $Status, $Hot, $New, $Pop, - $Priority, $MetaKeywords,$MetaDesc) - { - global $objSession; - - $UserId = $objSession->Get("UserId"); - - $d = new clsCategory(NULL); - $d->tablename = $this->SourceTable; - if($d->UsingTempTable()) - $d->Set("CategoryId",-1); - $d->idfield = "CategoryId"; - $d->Set(array("ParentId", "Name", "Description", "CreatedOn", "EditorsPick", "Status", "HotItem", - "NewItem","PopItem", "Priority", "MetaKeywords", "MetaDescription", "CreatedById"), - array($ParentId, $Name, $Description, $CreatedOn, $EditorsPick, $Status, $Hot, $New, - $Pop, $Priority, $MetaKeywords,$MetaDesc, $UserId)); - - $d->Create(); - if($Status==1) - { - $d->SendUserEventMail("CATEGORY.ADD",$objSession->Get("PortalUserId")); - $d->SendAdminEventMail("CATEGORY.ADD"); - } - else - { - $d->SendUserEventMail("CATEGORY.ADD.PENDING",$objSession->Get("PortalUserId")); - $d->SendAdminEventMail("CATEGORY.ADD.PENDING"); - } - $d->UpdateCachedPath(); - //RunUp($ParentId, "Increment_Count"); - - return $d; - } - - function &Edit_Category($CategoryId, $Name, $Description, $CreatedOn, $EditorsPick, $Status, $Hot, - $NewItem, $Pop, $Priority, $MetaKeywords,$MetaDesc) - { - $d =& $this->GetCategory($CategoryId); - $d->Set(array("Name", "Description", "CreatedOn", "EditorsPick", "Status", "HotItem", - "NewItem", "PopItem", "Priority", "MetaKeywords","MetaDescription"), - array($Name, $Description, $CreatedOn, $EditorsPick, $Status, $Hot, $NewItem, - $Pop, $Priority, $MetaKeywords,$MetaDesc)); - $d->Update(); - $d->UpdateCachedPath(); - return $d; - - } - - function Move_Category($Id, $ParentTo) - { - global $objCatList; - - $d =& $this->GetCategory($Id); - $oldparent = $d->Get("ParentId"); - $ChildList = $d->GetSubCatIds(); - - /* - echo "Target Parent Id: $ParentTo
\n"; - echo "
";print_r($ChildList); echo "
"; - echo "Old Parent: $oldparent
\n"; - echo "ID: $Id
\n"; - */ - /* sanity checks */ - - if(!in_array($ParentTo,$ChildList) && $oldparent != $ParentTo && $oldparent != $Id && - $Id != $ParentTo) - { - $d->Set("ParentId", $ParentTo); - $d->Update(); - $d->UpdateCachedPath(); - RunUp($oldparent, "Decrement_Count"); - RunUp($ParentTo, "Increment_Count"); - RunDown($ParentTo, "UpdateCachedPath"); - return TRUE; - } - else - { - global $Errors; - $Errors->AddAdminUserError("la_error_move_subcategory"); - return FALSE; - } - die(); - } - - function Copy_CategoryTree($Id, $ParentTo) - { - global $PastedCatIds; - - $new = $this->Copy_Category($Id, $ParentTo); - if($new) - { - $PastedCatIds[$Id] = $new; - $sql = "SELECT CategoryId from ".GetTablePrefix()."Category where ParentId=$Id"; - $result = $this->adodbConnection->Execute($sql); - if ($result && !$result->EOF) - { - while(!$result->EOF) - { - $this->Copy_CategoryTree($result->fields["CategoryId"], $new); - $result->MoveNext(); - } - } - } - return $new; - } - - function Copy_Category($Id, $ParentTo) - { - global $objGroups; - - - $src = $this->GetCategory($Id); - $Children = $src->GetSubCatIds(); - if($Id==$ParentTo || in_array($ParentTo,$Children)) - { - /* sanity error here */ - global $Errors; - $Errors->AddAdminUserError("la_error_copy_subcategory"); - return 0; - } - $dest = $src; - $dest->Set("ParentId", $ParentTo); - if ($src->get("ParentId") == $ParentTo) - { - $OldName = $src->Get("Name"); - if(substr($OldName,0,5)=="Copy ") - { - $parts = explode(" ",$OldName,4); - if($parts[2]=="of" && is_numeric($parts[1])) - { - $Name = $parts[3]; - } - else - if($parts[1]=="of") - { - $Name = $parts[2]." ".$parts[3]; - } - else - $Name = $OldName; - } - else - $Name = $OldName; - //echo "New Name: $Name
"; - $dest->Set("Name", $Name); - $Names = CategoryNameCount($ParentTo,$Name); - //echo "Names Count: ".count($Names)."
"; - if(count($Names)>0) - { - $NameCount = count($Names); - $found = FALSE; - $NewName = "Copy of $Name"; - - if(!in_array($NewName,$Names)) - { - //echo "Matched on $NewName in:
\n"; - $found = TRUE; - } - else - { - for($x=2;$x<$NameCount+2;$x++) - { - - $NewName = "Copy ".$x." of ".$Name; - if(!in_array($NewName,$Names)) - { - $found = TRUE; - break; - } - - } - } - if(!$found) - { - $NameCount++; - $NewName = "Copy $NameCount of $Name"; - } - //echo "New Name: $NewName
"; - $dest->Set("Name",$NewName); - } - - } - $dest->UnsetIdField(); - $dest->Set("CachedDescendantCatsQty",0); - $dest->Set("ResourceId",NULL); - $dest->Create(); - $dest->UpdateCachedPath(); - $p = new clsPermList(); - $p->Copy_Permissions($src->Get("CategoryId"),$dest->Get("CategoryId")); - $glist = $objGroups->GetAllGroupList(); - $view = $p->GetGroupPermList($dest, "CATEGORY.VIEW", $glist); - $dest->SetViewPerms("CATEGORY.VIEW",$view,$glist); - RunUp($ParentTo, "Increment_Count"); - return $dest->Get("CategoryId"); - } - - function Delete_Category($Id) - { - global $objSession; - - $d =& $this->GetCategory($Id); - - if(is_object($d)) - { - if($d->Get("CategoryId")==$Id) - { - $d->SendUserEventMail("CATEGORY.DELETE",$objSession->Get("PortalUserId")); - $d->SendAdminEventMail("CATEGORY.DELETE"); - $p =& $this->GetCategory($d->Get("ParentId")); - RunDown($d->Get("CategoryId"), "Delete"); - RunUp($p->Get("CategoryId"), "Decrement_Count"); - RunUp($d->Get("CategoryId"),"ClearCacheData"); - - } - } - } - - function PasteFromClipboard($TargetCat) - { - global $objSession; - - $clip = $objSession->GetVariable("ClipBoard"); - if(strlen($clip)) - { - $ClipBoard = ParseClipboard($clip); - $IsCopy = (substr($ClipBoard["command"],0,4)=="COPY") || ($ClipBoard["source"] == $TargetCat); - - $item_ids = explode(",",$ClipBoard["ids"]); - for($i=0;$iGetItem($item_ids[$i]); - if(!$IsCopy) - { - $this->Move_Category($ItemId, $TargetCat); - $clip = str_replace("CUT","COPY",$clip); - $objSession->SetVariable("ClipBoard",$clip); - } - else - { - $this->Copy_CategoryTree($ItemId,$TargetCat); - } - } - } - } - - - function NumChildren($ParentID) - { - $cat_filter = "m_cat_filter"; - global $$cat_filter; - - $filter = $$cat_filter; - $adodbConnection = &GetADODBConnection(); - - $sql = "SELECT COUNT(Name) as children from ".$this->SourceTable." where ParentId=" . $ParentID . $filter; - $result = $adodbConnection->Execute($sql); - return $result->fields["children"]; - } - - function UpdateMissingCacheData() - { - $rs = $this->adodbConnection->Execute("SELECT * FROM ".$this->SourceTable." WHERE ParentPath IS NULL or ParentPath=''"); - while($rs && !$rs->EOF) - { - $c = new clsCategory(NULL); - $data = $rs->fields; - $c->SetFromArray($data); - $c->UpdateCachedPath(); - $rs->MoveNext(); - } - - $rs = $this->adodbConnection->Execute("SELECT * FROM ".$this->SourceTable." WHERE CachedNavbar IS NULL or CachedNavBar=''"); - while($rs && !$rs->EOF) - { - $c = new clsCategory(NULL); - $data = $rs->fields; - $c->SetFromArray($data); - $c->UpdateCachedPath(); - $rs->MoveNext(); - } - } - - function CopyFromEditTable($idfield) - { - global $objGroups, $objSession, $objPermList; - - $objPermList = new clsPermList(); - $edit_table = $objSession->GetEditTable($this->SourceTable); - - $sql = "SELECT * FROM $edit_table"; - $rs = $this->adodbConnection->Execute($sql); - - while($rs && !$rs->EOF) - { - $data = $rs->fields; - $c = new $this->classname; - $c->SetFromArray($data); - $c->Dirty(); - - if($c->Get("CategoryId")>0) - { - $c->Update(); - } - else - { - $c->UnsetIdField(); - $c->Create(); - $sql = "UPDATE ".GetTablePrefix()."Permissions SET CatId=".$c->Get("CategoryId")." WHERE CatId=-1"; - $this->adodbConnection->Execute($sql); - } - $c->UpdateCachedPath(); - $c->UpdateACL(); - $c->SendUserEventMail("CATEGORY.MODIFY",$objSession->Get("PortalUserId")); - $c->SendAdminEventMail("CATEGORY.MODIFY"); - $c->Related = new clsRelationshipList(); - if(is_object($c->Related)) - { - $r = $c->Related; - $r->CopyFromEditTable($c->Get("ResourceId")); - } - - //RunDown($c->Get("CategoryId"),"UpdateCachedPath"); - //RunDown($c->Get("CategoryId"),"UpdateACL"); - unset($c); - unset($r); - $rs->MoveNext(); - } - @$this->adodbConnection->Execute("DROP TABLE IF EXISTS $edit_table"); - - //$this->UpdateMissingCacheData(); - } - - function PurgeEditTable($idfield) - { - parent::PurgeEditTable($idfield); - $sql = "DELETE FROM ".GetTablePrefix()."Permissions WHERE CatId=-1"; - $this->adodbConnection->Execute($sql); - } - - function GetExclusiveType($CatId) - { - global $objItemTypes, $objConfig; - - $itemtype = NULL; - $c =& $this->GetItem($CatId); - $path = $c->Get("ParentPath"); - foreach($objItemTypes->Items as $Type) - { - $RootVar = $Type->Get("ItemName")."_Root"; - $RootId = $objConfig->Get($RootVar); - if((int)$RootId) - { - $rcat = $this->GetItem($RootId); - $rpath = $rcat->Get("ParentPath"); - $p = substr($path,0,strlen($rpath)); - //echo $rpath." vs. .$p [$path]
\n"; - if($rpath==$p) - { - $itemtype = $Type; - break; - } - } - } - return $itemtype; - } - } - - function RunUp($Id, $function, $Param=NULL) - { - global $objCatList; - - $d = $objCatList->GetCategory($Id); - $ParentId = $d->Get("ParentId"); - if ($ParentId == 0) - { - if($Param == NULL) - { - $d->$function(); - } - else - { - $d->$function($Param); - } - } - else - { - RunUp($ParentId, $function, $Param); - if($Param == NULL) - { - $d->$function(); - } - else - { - $d->$function($Param); - } - - } - - } - - function RunDown($Id, $function, $Param=NULL) - { - global $objCatList; - - $adodbConnection = &GetADODBConnection(); - $sql = "select CategoryId from ".GetTablePrefix()."Category where ParentId='$Id'"; - $rs = $adodbConnection->Execute($sql); - - while($rs && !$rs->EOF) - { - RunDown($rs->fields["CategoryId"], $function, $Param); - $rs->MoveNext(); - } - $d = $objCatList->GetCategory($Id); - if($Param == NULL) - { - $d->$function(); - } - else - $d->$function($Param); - } - ?> \ No newline at end of file