Index: trunk/kernel/include/config.php =================================================================== diff -u -N -r642 -r667 --- trunk/kernel/include/config.php (.../config.php) (revision 642) +++ trunk/kernel/include/config.php (.../config.php) (revision 667) @@ -1,515 +1,1024 @@ -m_IsDirty=false; - $this->adodbConnection = &GetADODBConnection(); - $this->config = array(); - $this->m_IsDefault = array(); - $this->VarType = array(); - } - - function SetDebugLevel($value) - { - } - - - function Load() - { - if(is_object($this->adodbConnection)) - { - LogEntry("Config Load Start\n"); - $sql = "select VariableName, VariableValue from ".GetTablePrefix()."ConfigurationValues"; - $rs = $this->adodbConnection->Execute($sql); - unset($this->config); - #this->config=array(); - $count=0; - while($rs && !$rs->EOF) - { - $this->config[$rs->fields["VariableName"]] = $rs->fields["VariableValue"]; - $this->m_VarType[$rs->fields["VariableName"]] = 0; - // $this->Set($rs->fields["VariableName"],$rs->fields["VariableValue"],0); - if( defined('ADODB_EXTENSION') && constant('ADODB_EXTENSION') > 0 ) - { - adodb_movenext($rs); - } - else - $rs->MoveNext(); - $count++; - } - LogEntry("Config Load End - $count Variables\n"); - } - unset($this->m_DirtyFields); - $this->m_IsDirty=false; - } - - function Get($property) - { - return isset($this->config[$property]) ? $this->config[$property] : ''; - } - - function Set($property, $value,$type=0,$force=FALSE) - { - if(is_array($this->config) && strlen($property)>0) - { - if(array_key_exists($property,$this->config)) - { - $current = $this->config[$property]; - $changed = ($current != $value); - } - else - $changed = true; - } - else - $changed = false; - $this->config[$property]=$value; - $this->m_IsDirty = ($this->m_IsDirty or $changed or $force); - if($changed || $force) - { - $this->m_DirtyFields[$property] = $value; - } - $this->m_VarType[$property] = $type; - } - - function Save() - { - if($this->m_IsDirty==TRUE) - { - foreach($this->m_DirtyFields as $field=>$value) - { - if($this->m_VarType[$field]==0) - { -// $sql = sprintf("UPDATE ".GetTablePrefix()."ConfigurationValues SET VariableValue=%s WHERE VariableName=%s", $this->adodbConnection->qstr($value), $this->adodbConnection->qstr($field)); - $sql = 'UPDATE '.GetTablePrefix().'ConfigurationValues SET VariableValue="'.addslashes($value).'" WHERE VariableName="'.addslashes($field).'"'; - // echo $sql."
\n"; - - $rs = $this->adodbConnection->execute($sql); - } - } - } - $this->m_IsDirty=FALSE; - unset($this->m_DirtyFields); - } - - function TimeFormat() - { - if($this->Get("ampm_time")=="1") - { - $format = "g:i:s A"; - } - else - $format = "H:i:s"; - return $format; - } - - /* vartype should be either 1 or 2, 1 = perstant data, 2 = session data */ - function GetDirtySessionValues($VarType) - { - $result = array(); - - if(is_array($this->m_DirtyFields)) - { - foreach($this->m_DirtyFields as $property=>$values) - { - if($this->m_VarType[$property]==$VarType) - $result[$property] = $values; - } - } - return $result; - } - - function GetConfigValues($postfix = '') - { - // return only varibles, that match specified criteria - if(!$postfix) return $this->config; - $result = Array(); - $postfix_len = $postfix ? strlen($postfix) : 0; - foreach($this->config as $config_var => $var_value) - { - if( substr($config_var, - $postfix_len) == $postfix ) - $result[$config_var] = $var_value; - } - return $result; - } -}/* clsConfig */ - -/* -To create the configuration forms in the admin section, populate the table ConfigurationAdmin and -ConfigurationValues. - - The tables are fairly straight-forward. The fields of concern in the ConfigurationValues table is -ModuleOwner and Section. ModuleOwner should either be the module name or In-Portal for kernel related stuff. -(Items which should appear under 'System Configuration'). - - The Section field determines the NavMenu section the value is associated with. For example, -in-portal:configure_general refers to items listed under System Configuration->General. - - In the ConfigurationAdmin table, ensure the VariableName field is the same as the one in ConfigurationValues -(this is the field that creates the natural join.) The prompt field is the text displayed to the left of the form element -in the table. This should contain LANGUAGE ELEMENT IDENTIFIERS that are plugged into the Language function. - - The element_type field describes the type of form element is associated with this item. Possible values are: - - text : textbox - - checkbox : a simple checkbox - - select : creates a dropdown box. In this case, the ValueList field should be populated with a comma-separated list - in name=value,name=value format (each element is translated to: - - - To add dynamic data to this list, enclose an SQL statement with tags for example: - SELECT FieldLabel as OptionName, FieldName as OptionValue FROM CustomField WHERE .CustomFieldType=3> - - note the specific field labels OptionName and OptionValue. They are required by the parser. - use the tag to insert the system's table prefix into the sql statement as appropriate - -*/ -class clsConfigAdminItem -{ - var $name; - var $heading; - var $prompt; - var $ElementType; - var $ValueList; /* comma-separated list in name=value pair format*/ - var $ValidationRules; - var $default_value; - var $adodbConnection; - var $NextItem=NULL; - var $Section; - - function clsConfigAdminItem($config_name=NULL) - { - $this->adodbConnection = &GetADODBConnection(); - if($config_name) - $this->LoadSetting($config_name); - } - - function LoadSetting($config_name) - { - $sql = "SELECT * FROM ".GetTablePrefix()."ConfigurationAdmin INNER JOIN ".GetTablePrefix()."ConfigurationValues Using(VariableName) WHERE ".GetTablePrefix()."ConfigurationAdmin.VariableName='".$config_name."'"; - $rs = $this->adodbConnection->Execute($sql); - if($rs && !$rs->EOF) - { - $this->name = $rs->fields["VariableName"]; - $this->heading = $rs->fields["heading"]; - $this->prompt = $rs->fields["prompt"]; - $this->ElementType = $rs->fields["element_type"]; - $this->ValidationRules=$rs->fields["validation"]; - $this->default_value = $rs->fields["VariableValue"]; - $this->ValueList=$rs->fields["ValueList"]; - $this->Section = $rs->fields["Section"]; - } - } - - function explode_sql($sql) - { - $s = ""; - - $rs = $this->adodbConnection->Execute($sql); - - while ($rs && !$rs->EOF) - { - if(strlen(trim($rs->fields["OptionName"]))>0 && strlen(trim($rs->fields["OptionValue"]))>0) - { - if(strlen($s)) - $s .= ","; - $s .= $rs->fields["OptionName"]."="."+".$rs->fields["OptionValue"]; - } - $rs->MoveNext(); - } - return $s; - } - - function replace_sql($string) - { - $string = str_replace("",GetTablePrefix(),$string); - - $start = strpos($string,""); - - while($start) - { - $end = strpos($string,""); - if(!$end) - { - $end = strlen($string); - } - $len = $end - $start; - $sql = substr($string,$start+5,$len-5); - - $sql_val = $this->explode_sql($sql); - $s = substr($string,0,$start) . $sql_val . substr($string,$end+5); - - $string = $s; - $start = strpos($string,""); - } - return $string; - } - - function ItemFormElement($StartFrom=1) - { - global $objConfig; - static $TabIndex; - - if (empty($TabIndex)) - $TabIndex = $StartFrom; - - $o = ""; - if($objConfig->Get($this->name)!="") - $this->default_value = $objConfig->Get($this->name); - $this->default_value=inp_htmlize($this->default_value); - switch($this->ElementType) - { - case "text": - $o .= "name."\" "; - $o .= "VALUE=\"".$this->default_value."\">"; - break; - case "checkbox": - $o .= "name."\" tabindex=\"".($TabIndex++)."\""; - if($this->default_value) - { - $o .= " CHECKED>"; - } - else - $o .= ">"; - - break; - case "password": - - /* To exclude config form from populating with Root (md5) password */ - if ($this->Section == "in-portal:configure_users") - $this->default_value = ""; - - $o .= "name."\" "; - $o .= "VALUE=\"".$this->default_value."\">"; - break; - case "textarea": - $o .= ""; - break; - case "label": - if($this->default_value) - { - $o .= $this->default_value; - } - break; - case "radio": - $radioname = $this->name; - - $ValList = $this->replace_sql($this->ValueList); - - $TabIndex++; - $localTabIndex = $TabIndex; - $TabIndex++; - - $val = explode(",",$ValList); - for($i=0;$i<=count($val);$i++) - { - if(strlen($val[$i])) - { - $parts = explode("=",$val[$i]); - $s = $parts[1]; - if(strlen($s)==0) - $s=""; - - $o .= "name."\" VALUE=\"".$parts[0]."\""; - if($this->default_value==$parts[0]) - { - $o .= " CHECKED>"; - } - else - $o .= ">"; - if(substr($s,0,1)=="+") - { - $o .= $s; - } - else - $o .= prompt_language($s); - } - } - - break; - case "select": - $o .= ""; - } - return $o; - } - - function GetPrompt() - { - $ret = prompt_language($this->prompt); - return $ret; - } -} - -class clsConfigAdmin -{ - var $module; - var $section; - var $Items; - - function clsConfigAdmin($module="",$section="",$Inst=FALSE) - { - $this->module = $module; - $this->section = $section; - $this->Items= array(); - if(strlen($module) && strlen($section)) - $this->LoadItems(TRUE,$Inst); - } - - function Clear() - { - unset($this->Items); - $this->Items = array(); - } - - function NumItems() - { - if(is_array($this->Items)) - { - return count($this->Items); - } - else - return 0; - } - - function LoadItems($CheckNextItems=TRUE, $inst=FALSE) - { - $this->Clear(); - if(!$inst) - { - $sql = "SELECT * FROM ".GetTablePrefix()."ConfigurationAdmin INNER JOIN ".GetTablePrefix()."ConfigurationValues Using(VariableName) - WHERE ModuleOwner='".$this->module."' AND Section='".$this->section."' ORDER BY DisplayOrder ASC"; - } - else - { - - $sql = "SELECT * FROM ".GetTablePrefix()."ConfigurationAdmin INNER JOIN ".GetTablePrefix()."ConfigurationValues Using(VariableName) - WHERE ModuleOwner='".$this->module."' AND Section='".$this->section."' AND Install=1 ORDER BY DisplayOrder ASC"; - } - if( $GLOBALS['debuglevel'] ) echo $sql."
\n"; - $adodbConnection = &GetADODBConnection(); - $rs = $adodbConnection->Execute($sql); - while($rs && !$rs->EOF) - { - $data = $rs->fields; - if(is_object($i) && $CheckNextItems) - { - $last = $i->prompt; - unset($i); - } - $i = new clsConfigAdminItem(NULL); - $i->name = $data["VariableName"]; - $i->default_value = $data["VariableValue"]; - $i->heading = $data["heading"]; - $i->prompt = $data["prompt"]; - $i->ElementType = $data["element_type"]; - $i->ValueList = $data["ValueList"]; - $i->ValidationRules = isset($data['validaton']) ? $data['validaton'] : ''; - $i->Section = $data["Section"]; - - if(strlen($last)>0) - { - if($i->prompt==$last) - { - $this->Items[count($this->Items)-1]->NextItem=$i; - } - else - { - $i->NextItem=NULL; - array_push($this->Items,$i); - } - } - else - { - $i->NextItem=NULL; - array_push($this->Items,$i); - } - //unset($i); - $rs->MoveNext(); - } - } - - function SaveItems($POSTVARS, $force=FALSE) - { - global $objConfig; - - foreach($this->Items as $i) - { - if($i->ElementType != "label") - { - if($i->ElementType != "checkbox") - { - $objConfig->Set($i->name,stripslashes($POSTVARS[$i->name])); - } - else - { - if($POSTVARS[$i->name]=="on") - { - $value=1; - } - else - $value = (int)$POSTVARS[$i->name]; - $objConfig->Set($i->name,stripslashes($value),0,$force); - } - } - } - $objConfig->Save(); - } - - function GetHeadingList() - { - $res = array(); - foreach($this->Items as $i) - { - $res[$i->heading]=1; - } - reset($res); - return array_keys($res); - } - - function GetHeadingItems($heading) - { - $res = array(); - foreach($this->Items as $i) - { - if($i->heading==$heading) - array_push($res,$i); - } - return $res; - } -} - - -?> +m_IsDirty=false; + + $this->adodbConnection = &GetADODBConnection(); + + $this->config = array(); + + $this->m_IsDefault = array(); + + $this->VarType = array(); + + } + + + + function SetDebugLevel($value) + + { + + } + + + + + + function Load() + + { + + if(is_object($this->adodbConnection)) + + { + + LogEntry("Config Load Start\n"); + + $sql = "select VariableName, VariableValue from ".GetTablePrefix()."ConfigurationValues"; + + $rs = $this->adodbConnection->Execute($sql); + + unset($this->config); + + #this->config=array(); + + $count=0; + + while($rs && !$rs->EOF) + + { + + $this->config[$rs->fields["VariableName"]] = $rs->fields["VariableValue"]; + + $this->m_VarType[$rs->fields["VariableName"]] = 0; + + // $this->Set($rs->fields["VariableName"],$rs->fields["VariableValue"],0); + + if( defined('ADODB_EXTENSION') && constant('ADODB_EXTENSION') > 0 ) + + { + + adodb_movenext($rs); + + } + + else + + $rs->MoveNext(); + + $count++; + + } + + LogEntry("Config Load End - $count Variables\n"); + + } + + unset($this->m_DirtyFields); + + $this->m_IsDirty=false; + + } + + + + function Get($property) + + { + + return isset($this->config[$property]) ? $this->config[$property] : ''; + + } + + + + function Set($property, $value,$type=0,$force=FALSE) + + { + + if(is_array($this->config) && strlen($property)>0) + + { + + if(array_key_exists($property,$this->config)) + + { + + $current = $this->config[$property]; + + $changed = ($current != $value); + + } + + else + + $changed = true; + + } + + else + + $changed = false; + + $this->config[$property]=$value; + + $this->m_IsDirty = ($this->m_IsDirty or $changed or $force); + + if($changed || $force) + + { + + $this->m_DirtyFields[$property] = $value; + + } + + $this->m_VarType[$property] = $type; + + } + + + + function Save() + + { + + if($this->m_IsDirty==TRUE) + + { + + foreach($this->m_DirtyFields as $field=>$value) + + { + + if($this->m_VarType[$field]==0) + + { + +// $sql = sprintf("UPDATE ".GetTablePrefix()."ConfigurationValues SET VariableValue=%s WHERE VariableName=%s", $this->adodbConnection->qstr($value), $this->adodbConnection->qstr($field)); + + $sql = 'UPDATE '.GetTablePrefix().'ConfigurationValues SET VariableValue="'.addslashes($value).'" WHERE VariableName="'.addslashes($field).'"'; + + // echo $sql."
\n"; + + + + $rs = $this->adodbConnection->execute($sql); + + } + + } + + } + + $this->m_IsDirty=FALSE; + + unset($this->m_DirtyFields); + + } + + + + function TimeFormat() + + { + + if($this->Get("ampm_time")=="1") + + { + + $format = "g:i:s A"; + + } + + else + + $format = "H:i:s"; + + return $format; + + } + + + + /* vartype should be either 1 or 2, 1 = perstant data, 2 = session data */ + + function GetDirtySessionValues($VarType) + + { + + $result = array(); + + + + if(is_array($this->m_DirtyFields)) + + { + + foreach($this->m_DirtyFields as $property=>$values) + + { + + if($this->m_VarType[$property]==$VarType) + + $result[$property] = $values; + + } + + } + + return $result; + + } + + + + function GetConfigValues($postfix = '') + + { + + // return only varibles, that match specified criteria + + if(!$postfix) return $this->config; + + $result = Array(); + + $postfix_len = $postfix ? strlen($postfix) : 0; + + foreach($this->config as $config_var => $var_value) + + { + + if( substr($config_var, - $postfix_len) == $postfix ) + + $result[$config_var] = $var_value; + + } + + return $result; + + } + +}/* clsConfig */ + + + +/* + +To create the configuration forms in the admin section, populate the table ConfigurationAdmin and + +ConfigurationValues. + + + + The tables are fairly straight-forward. The fields of concern in the ConfigurationValues table is + +ModuleOwner and Section. ModuleOwner should either be the module name or In-Portal for kernel related stuff. + +(Items which should appear under 'System Configuration'). + + + + The Section field determines the NavMenu section the value is associated with. For example, + +in-portal:configure_general refers to items listed under System Configuration->General. + + + + In the ConfigurationAdmin table, ensure the VariableName field is the same as the one in ConfigurationValues + +(this is the field that creates the natural join.) The prompt field is the text displayed to the left of the form element + +in the table. This should contain LANGUAGE ELEMENT IDENTIFIERS that are plugged into the Language function. + + + + The element_type field describes the type of form element is associated with this item. Possible values are: + + - text : textbox + + - checkbox : a simple checkbox + + - select : creates a dropdown box. In this case, the ValueList field should be populated with a comma-separated list + + in name=value,name=value format (each element is translated to: + + + + + + To add dynamic data to this list, enclose an SQL statement with tags for example: + + SELECT FieldLabel as OptionName, FieldName as OptionValue FROM CustomField WHERE .CustomFieldType=3> + + + + note the specific field labels OptionName and OptionValue. They are required by the parser. + + use the tag to insert the system's table prefix into the sql statement as appropriate + + + +*/ + +class clsConfigAdminItem + +{ + + var $name; + + var $heading; + + var $prompt; + + var $ElementType; + + var $ValueList; /* comma-separated list in name=value pair format*/ + + var $ValidationRules; + + var $default_value; + + var $adodbConnection; + + var $NextItem=NULL; + + var $Section; + + + + function clsConfigAdminItem($config_name=NULL) + + { + + $this->adodbConnection = &GetADODBConnection(); + + if($config_name) + + $this->LoadSetting($config_name); + + } + + + + function LoadSetting($config_name) + + { + + $sql = "SELECT * FROM ".GetTablePrefix()."ConfigurationAdmin INNER JOIN ".GetTablePrefix()."ConfigurationValues Using(VariableName) WHERE ".GetTablePrefix()."ConfigurationAdmin.VariableName='".$config_name."'"; + + $rs = $this->adodbConnection->Execute($sql); + + if($rs && !$rs->EOF) + + { + + $this->name = $rs->fields["VariableName"]; + + $this->heading = $rs->fields["heading"]; + + $this->prompt = $rs->fields["prompt"]; + + $this->ElementType = $rs->fields["element_type"]; + + $this->ValidationRules=$rs->fields["validation"]; + + $this->default_value = $rs->fields["VariableValue"]; + + $this->ValueList=$rs->fields["ValueList"]; + + $this->Section = $rs->fields["Section"]; + + } + + } + + + + function explode_sql($sql) + + { + + $s = ""; + + + + $rs = $this->adodbConnection->Execute($sql); + + + + while ($rs && !$rs->EOF) + + { + + if(strlen(trim($rs->fields["OptionName"]))>0 && strlen(trim($rs->fields["OptionValue"]))>0) + + { + + if(strlen($s)) + + $s .= ","; + + $s .= $rs->fields["OptionName"]."="."+".$rs->fields["OptionValue"]; + + } + + $rs->MoveNext(); + + } + + return $s; + + } + + + + function replace_sql($string) + + { + + $string = str_replace("",GetTablePrefix(),$string); + + + + $start = strpos($string,""); + + + + while($start) + + { + + $end = strpos($string,""); + + if(!$end) + + { + + $end = strlen($string); + + } + + $len = $end - $start; + + $sql = substr($string,$start+5,$len-5); + + + + $sql_val = $this->explode_sql($sql); + + $s = substr($string,0,$start) . $sql_val . substr($string,$end+5); + + + + $string = $s; + + $start = strpos($string,""); + + } + + return $string; + + } + + + + function ItemFormElement($StartFrom=1) + + { + + global $objConfig; + + static $TabIndex; + + + + if (empty($TabIndex)) + + $TabIndex = $StartFrom; + + + + $o = ""; + + if($objConfig->Get($this->name)!="") + + $this->default_value = $objConfig->Get($this->name); + + $this->default_value=inp_htmlize($this->default_value); + + switch($this->ElementType) + + { + + case "text": + + $o .= "name."\" "; + + $o .= "VALUE=\"".$this->default_value."\">"; + + break; + + case "checkbox": + + $o .= "name."\" tabindex=\"".($TabIndex++)."\""; + + if($this->default_value) + + { + + $o .= " CHECKED>"; + + } + + else + + $o .= ">"; + + + + break; + + case "password": + + + + /* To exclude config form from populating with Root (md5) password */ + + if ($this->Section == "in-portal:configure_users") + + $this->default_value = ""; + + + + $o .= "name."\" "; + + $o .= "VALUE=\"".$this->default_value."\">"; + + break; + + case "textarea": + + $o .= ""; + + break; + + case "label": + + if($this->default_value) + + { + + $o .= $this->default_value; + + } + + break; + + case "radio": + + $radioname = $this->name; + + + + $ValList = $this->replace_sql($this->ValueList); + + + + $TabIndex++; + + $localTabIndex = $TabIndex; + + $TabIndex++; + + + + $val = explode(",",$ValList); + + for($i=0;$i<=count($val);$i++) + + { + + if(strlen($val[$i])) + + { + + $parts = explode("=",$val[$i]); + + $s = $parts[1]; + + if(strlen($s)==0) + + $s=""; + + + + $o .= "name."\" VALUE=\"".$parts[0]."\""; + + if($this->default_value==$parts[0]) + + { + + $o .= " CHECKED>"; + + } + + else + + $o .= ">"; + + if(substr($s,0,1)=="+") + + { + + $o .= $s; + + } + + else + + $o .= prompt_language($s); + + } + + } + + + + break; + + case "select": + + $o .= ""; + + } + + return $o; + + } + + + + function GetPrompt() + + { + + $ret = prompt_language($this->prompt); + + return $ret; + + } + +} + + + +class clsConfigAdmin + +{ + + var $module; + + var $section; + + var $Items; + + + + function clsConfigAdmin($module="",$section="",$Inst=FALSE) + + { + + $this->module = $module; + + $this->section = $section; + + $this->Items= array(); + + if(strlen($module) && strlen($section)) + + $this->LoadItems(TRUE,$Inst); + + } + + + + function Clear() + + { + + unset($this->Items); + + $this->Items = array(); + + } + + + + function NumItems() + + { + + if(is_array($this->Items)) + + { + + return count($this->Items); + + } + + else + + return 0; + + } + + + + function LoadItems($CheckNextItems=TRUE, $inst=FALSE) + + { + + $this->Clear(); + + if(!$inst) + + { + + $sql = "SELECT * FROM ".GetTablePrefix()."ConfigurationAdmin INNER JOIN ".GetTablePrefix()."ConfigurationValues Using(VariableName) + + WHERE ModuleOwner='".$this->module."' AND Section='".$this->section."' ORDER BY DisplayOrder ASC"; + + } + + else + + { + + + + $sql = "SELECT * FROM ".GetTablePrefix()."ConfigurationAdmin INNER JOIN ".GetTablePrefix()."ConfigurationValues Using(VariableName) + + WHERE ModuleOwner='".$this->module."' AND Section='".$this->section."' AND Install=1 ORDER BY DisplayOrder ASC"; + + } + + if( $GLOBALS['debuglevel'] ) echo $sql."
\n"; + + $adodbConnection = &GetADODBConnection(); + + $rs = $adodbConnection->Execute($sql); + + while($rs && !$rs->EOF) + + { + + $data = $rs->fields; + + if(is_object($i) && $CheckNextItems) + + { + + $last = $i->prompt; + + unset($i); + + } + + $i = new clsConfigAdminItem(NULL); + + $i->name = $data["VariableName"]; + + $i->default_value = $data["VariableValue"]; + + $i->heading = $data["heading"]; + + $i->prompt = $data["prompt"]; + + $i->ElementType = $data["element_type"]; + + $i->ValueList = $data["ValueList"]; + + $i->ValidationRules = isset($data['validaton']) ? $data['validaton'] : ''; + + $i->Section = $data["Section"]; + + + + if(strlen($last)>0) + + { + + if($i->prompt==$last) + + { + + $this->Items[count($this->Items)-1]->NextItem=$i; + + } + + else + + { + + $i->NextItem=NULL; + + array_push($this->Items,$i); + + } + + } + + else + + { + + $i->NextItem=NULL; + + array_push($this->Items,$i); + + } + + //unset($i); + + $rs->MoveNext(); + + } + + } + + + + function SaveItems($POSTVARS, $force=FALSE) + + { + + global $objConfig; + + + + foreach($this->Items as $i) + + { + + if($i->ElementType != "label") + + { + + if($i->ElementType != "checkbox") + + { + + $objConfig->Set($i->name,stripslashes($POSTVARS[$i->name])); + + } + + else + + { + + if($POSTVARS[$i->name]=="on") + + { + + $value=1; + + } + + else + + $value = (int)$POSTVARS[$i->name]; + + $objConfig->Set($i->name,stripslashes($value),0,$force); + + } + + } + + } + + $objConfig->Save(); + + } + + + + function GetHeadingList() + + { + + $res = array(); + + foreach($this->Items as $i) + + { + + $res[$i->heading]=1; + + } + + reset($res); + + return array_keys($res); + + } + + + + function GetHeadingItems($heading) + + { + + $res = array(); + + foreach($this->Items as $i) + + { + + if($i->heading==$heading) + + array_push($res,$i); + + } + + return $res; + + } + +} +?> \ No newline at end of file Index: trunk/admin/category/category_maint.php =================================================================== diff -u -N -r618 -r667 --- trunk/admin/category/category_maint.php (.../category_maint.php) (revision 618) +++ trunk/admin/category/category_maint.php (.../category_maint.php) (revision 667) @@ -163,4 +163,4 @@ print ""; int_footer(); exit; -?> +?> \ No newline at end of file Index: trunk/admin/config/edit_customfields.php =================================================================== diff -u -N -r518 -r667 --- trunk/admin/config/edit_customfields.php (.../edit_customfields.php) (revision 518) +++ trunk/admin/config/edit_customfields.php (.../edit_customfields.php) (revision 667) @@ -172,7 +172,12 @@ { $objListView->RowIcons[] = $imagesURL."/itemicons/icon16_custom.gif"; $field =& $objCustomFields->GetItemRefByIndex($i); - $field->Set('FieldLabel', admin_language($field->Get('Prompt')) ); + if ($field->Get('Prompt') != '') { + $field->Set("FieldLabel", admin_language($field->Get('Prompt'))); + } + else { + $field->Set("FieldLabel", admin_language('lu_fieldcustom__'.strtolower($field->Get('FieldName')))); + } } Index: trunk/kernel/include/parseditem.php =================================================================== diff -u -N -r642 -r667 --- trunk/kernel/include/parseditem.php (.../parseditem.php) (revision 642) +++ trunk/kernel/include/parseditem.php (.../parseditem.php) (revision 667) @@ -1,2959 +1,5917 @@ -clsItemDB(); - $this->Parser = new clsTemplateList($TemplateRoot); - $this->AdminParser = new clsAdminTemplateList(); - } - -/* function ParseObject($element) - { - $extra_attribs = ExtraAttributes($element->attributes); - if(strtolower($element->name)==$this->TagPrefix) - { - $field = strtolower($element->attributes["_field"]); - $tag = $this->TagPrefix."_".$field; - $ret = $this->parsetag($tag); - } - return $ret; - } -*/ - function ParseTimeStamp($d,$attribs=array()) - { - if( isset($attribs["_tz"]) ) - { - $d = GetLocalTime($d,$objSession->Get("tz")); - } - $part = isset($attribs["_part"]) ? strtolower($attribs["_part"]) : ''; - if(strlen($part)) - { - $ret = ExtractDatePart($part,$d); - } - else - { - if($d<=0) - { - $ret = ""; - } - else - $ret = LangDate($d); - } - return $ret; - } - - function ParseObject($element) - { - global $objConfig, $objCatList, $var_list_update, $var_list, $n_var_list_update, $m_var_list_update; - - $extra_attribs = ExtraAttributes($element->attributes); - $ret = ""; - - if ($this->TagPrefix == "email" && strtolower($element->name) == "touser") { - $this->TagPrefix = "touser"; - } - - if(strtolower($element->name)==$this->TagPrefix) - { - $field = strtolower($element->attributes["_field"]); - switch($field) - { - case "id": - $ret = $this->Get($this->id_field); - break; - case "resourceid": - if(!$this->NoResourceId) - $ret = $this->Get("ResourceId"); - break; - case "category": - $c = $objCatList->GetItem($this->Get("CategoryId")); - if(is_object($c)) - { - $ret = $c->parsetag($element->attributes["_cattag"]); - } - break; - case "priority": - if($this->Get("Priority")!=0) - { - $ret = (int)$this->Get("Priority"); - } - else - $ret = ""; - break; - case "link": - if(method_exists($this,"ItemURL")) - { - $ret = $this->ItemURL($element->attributes["_template"],FALSE,""); - } - break; - case "cat_link": - if(method_exists($this,"ItemURL")) - { - $ret = $this->ItemURL($element->attributes["_template"],TRUE,""); - } - break; - case "fullpath": - $ret = $this->Get("CachedNavbar"); - if(!strlen($ret)) - { - if(is_numeric($this->Get("CategoryId"))) - { - $c = $objCatList->GetItem($this->Get("CategoryId")); - if(is_object($c)) - $ret = $c->Get("CachedNavbar"); - } - else - { - if(method_exists($this,"GetPrimaryCategory")) - { - $cat = $this->GetPrimaryCategory(); - $c = $objCatList->GetItem($cat); - if(is_object($c)) - $ret = $c->Get("CachedNavbar"); - } - } - } - // $ret = $this->HighlightText($ret); - break; - - case "relevance": - $style = $element->attributes["_displaymode"]; - if(!strlen($style)) - $style = "numerical"; - switch ($style) - { - case "numerical": - $ret = (100 * LangNumber($this->Get("Relevance"),1))."%"; - break; - case "bar": - $OffColor = $element->attributes["_offbackgroundcolor"]; - $OnColor = $element->attributes["_onbackgroundcolor"]; - $percentsOff = (int)(100 - (100 * $this->Get("Relevance"))); if ($percentsOff) - { - $percentsOn = 100 - $percentsOff; - $ret = ""; - } - else - $ret = ""; - break; - case "graphical": - $OnImage = $element->attributes["_onimage"]; - if (!strlen($OnImage)) - break; - // Get image extension - $image_data = explode(".", $OnImage); - $image_ext = $image_data[count($image_data)-1]; - unset($image_data[count($image_data)-1]); - $rel = (10 * LangNumber($this->Get("Relevance"),1)); - $OnImage1 = join(".", $image_data); - - if ($rel) - $img_src = $OnImage1."_".$rel.".".$image_ext; - else - $img_src = $OnImage; - - $ret = "\"".(10*$rel)."\""; - break; - } - - break; - - case "rating": - $style = $element->GetAttributeByName("_displaymode"); - if(!strlen($style)) - $style = "numerical"; - switch($style) - { - case "numerical": - $ret = LangNumber($this->Get("CachedRating"),1); - break; - case "text": - $ret = RatingText($this->Get("CachedRating")); - break; - case "graphical": - $OnImage = $element->attributes["_onimage"]; - $OffImage = $element->attributes["_offimage"]; - $images = RatingTickImage($this->Get("CachedRating"),$OnImage,$OffImage); - - for($i=1;$i<=count($images);$i++) - { - $url = $images[$i]; - if(strlen($url)) - { - $ret .= ""; - $ret .= $element->attributes["_separator"]; - } - } - break; - } - break; - case "reviews": - $today = FALSE; - - if(method_exists($this,"ReviewCount")) - { - if($element->GetAttributeByName("_today")) - $today = TRUE; - $ret = $this->ReviewCount($today); - } - else - $ret = ""; - - break; - case "votes": - $ret = (int)$this->Get("CachedVotesQty"); - break; - - case "favorite": - if(method_exists($this,"IsFavorite")) - { - if($this->IsFavorite()) - { - $ret = $element->attributes["_label"]; - if(!strlen($ret)) - $ret = "lu_favorite"; - $ret = language($ret); - } - else - $ret = ""; - } - break; - case "new": - if(method_exists($this,"IsNewItem")) - { - if($this->IsNewItem()) - { - $ret = $element->GetAttributeByName('_label'); - if(!strlen($ret)) - $ret = "lu_new"; - $ret = language($ret); - } - else - $ret = ""; - } - break; - case "pop": - if(method_exists($this,"IsPopItem")) - { - if($this->IsPopItem()) - { - $ret = $element->attributes["_label"]; - if(!strlen($ret)) - $ret = "lu_pop"; - $ret = language($ret); - } - else - $ret = ""; - } - break; - case "hot": - if(method_exists($this,"IsHotItem")) - { - if($this->IsHotItem()) - { - $ret = $element->GetAttributeByName("_label"); - if(!strlen($ret)) - $ret = "lu_hot"; - $ret = language($ret); - } - else - $ret = ""; - } - break; - case "pick": - if($this->Get("EditorsPick")==1) - { - $ret = $element->GetAttributeByName('_label'); - if(!strlen($ret)) - $ret = "lu_pick"; - $ret = language($ret); - } - else - $ret = ""; - break; - case "admin_icon": - if(method_exists($this,"StatusIcon")) - { - if($element->GetAttributeByName("fulltag")) - { - $ret = "StatusIcon()."\">"; - } - else - $ret = $this->StatusIcon(); - } - break; - case "custom": - if(method_exists($this,"GetCustomFieldValue")) - { - $field = $element->attributes["_customfield"]; - $default = $element->attributes["_default"]; - if (strlen($field)) - $ret = $this->GetCustomFieldValue($field,$default); - } - break; - case "image": - $default = $element->attributes["_primary"]; - $name = $element->attributes["_name"]; - - if(strlen($name)) - { - $img = $this->GetImageByName($name); - } - else - { - if($default) - $img = $this->GetDefaultImage(); - } - - if(is_object($img)) - { - - if(strlen($element->attributes["_imagetemplate"])) - { - $ret = $img->ParseTemplate($element->attributes["_imagetemplate"]); - break; - } - else - { - if($element->attributes["_thumbnail"]) - { - $url = $img->parsetag("thumb_url"); - } - else - { - - if(!$element->attributes["_nothumbnail"]) - { - $url = $img->parsetag("image_url"); - } - else - { - $url = $img->FullURL(TRUE,""); - } - } - } - } - else - { - $url = $element->attributes["_defaulturl"]; - - } - - if($element->attributes["_imagetag"]) - { - if(strlen($url)) - { - $ret = ""; - } - else - $ret = ""; - } - else - $ret = $url; - break; - default: - $ret = "Undefined:".$element->name; - break; - } - - } - else if ($this->TagPrefix == 'email'){ - $ret = "Undefined:".$element->name; - } - return $ret; - } - - function ParseString($name) - { - $el = new clsHtmlTag(); - $el->Clear(); - $el->prefix = "inp"; - $el->name = $name; - - $numargs = func_num_args(); - $arg_list = func_get_args(); - for ($i = 1; $i < $numargs; $i++) - { - $attr = $arg_list[$i]; - $parts = explode("=",$attr,2); - $name = $parts[0]; - $val = $parts[1]; - $el->attributes[$name] = $val; - } - return $this->ParseObject($el); - } - - /* pass attributes as strings - ie: ParseStringEcho('tagname','_field="something" _data="somethingelse"'); - */ - function ParseStringEcho($name) - { - $el = new clsHtmlTag(); - $el->Clear(); - $el->prefix = "inp"; - $el->name = $name; - - $numargs = func_num_args(); - $arg_list = func_get_args(); - for ($i = 1; $i < $numargs; $i++) - { - $attr = $arg_list[$i]; - $parts = explode("=",$attr,2); - $name = $parts[0]; - $val = $parts[1]; - $el->attributes[$name] = $val; - } - echo $this->ParseObject($el); - } - - function ParseElement($raw, $inner_html ="") - { - $tag = new clsHtmlTag($raw); - $tag->inner_html = $inner_html; - - if($tag->parsed) - { - if($tag->name=="include" || $tag->name=="perm_include" || $tag->name=="lang_include") - { - $output = $this->Parser->IncludeTemplate($tag); - } - else - { - $output = $this->ParseObject($tag); - //echo $output."
"; - if(substr($output,0,9)=="Undefined") - { - $output = $tag->Execute(); - // if(substr($output,0,8)="{Unknown") - // $output = $raw; - } return $output; - } - } - else - return ""; - } - - function AdminParseTemplate($file) - { - $html = ""; - $t = $this->AdminParser->GetTemplate($file); - - if(is_object($t)) - { - array_push($this->AdminParser->stack,$file); - $html = $t->source; - $next_tag = strpos($html,"",$next_tag); - $tagtext = substr($html,$next_tag,($end_tag - $next_tag)+2); - $pre = substr($html,0,$next_tag); - $post = substr($html,$end_tag+2); - $inner = $this->ParseElement($tagtext); - $html = $pre.$inner.$post; - $next_tag = strpos($html,"AdminParser->stack); - } - return $html; - } - - function ParseTemplateText($text) - { - $html = $text; - $search = "TagPrefix; - //$next_tag = strpos($html,"",$next_tag); - $end_tag = strpos($html,"/>",$next_tag); - if($end_tag < $closer || $closer == 0) - { - $tagtext = substr($html,$next_tag,($end_tag - $next_tag)+2); - $pre = substr($html,0,$next_tag); - $post = substr($html,$end_tag+2); - $inner = $this->ParseElement($tagtext); - $html = $pre.$inner.$post; - } - else - { - - $OldTagStyle = ""; - - ## Try to find end of TagName - $TagNameEnd = strpos($html, " ", $next_tag); - - ## Support Old version -// $closer = strpos(strtolower($html),"",$next_tag); - if ($TagNameEnd) - { - $Tag = strtolower(substr($html, $next_tag, $TagNameEnd-$next_tag)); - $TagName = explode(":", $Tag); - if (strlen($TagName[1])) - $CloserTag = ""; - } - else - { - $CloserTag = $OldTagStyle; - } - - $closer = strpos(strtolower($html), $CloserTag, $next_tag); - - ## Try to find old tag closer - if (!$closer && ($CloserTag != $OldTagStyle)) - { - $CloserTag = $OldTagStyle; - $closer = strpos(strtolower($html), $CloserTag, $next_tag); - } - - $end_tag = strpos($html,">",$next_tag); - $tagtext = substr($html,$next_tag,($end_tag - $next_tag)+1); - $pre = substr($html,0,$next_tag); - $inner = substr($html,$end_tag+1,$closer-($end_tag+1)); - $post = substr($html,$end_tag+1+strlen($inner) + strlen($CloserTag)); - //echo "PRE:". htmlentities($pre,ENT_NOQUOTES); - //echo "INNER:". htmlentities($inner,ENT_NOQUOTES); - //echo "POST:". htmlentities($post,ENT_NOQUOTES); - - $parsed = $this->ParseElement($tagtext); - if(strlen($parsed)) - { - $html = $pre.$this->ParseTemplateText($inner).$post; - } - else - $html = $pre.$post; - } - $next_tag = strpos($html,$search); - } - return $html; - } - - function ParseTemplate($tname) - { - global $objTemplate, $LogLevel,$ptime,$timestart; - - //echo 'Saving ID'.$this->UniqueId().' in Main parseTempalate
'; - //$GLOBALS[$this->TagPrefix.'_ID'] = $this->UniqueId(); - LogEntry("Parsing $tname\n"); - $LogLevel++; - $html = ""; - $t = $objTemplate->GetTemplate($tname); - //$t = $this->Parser->GetTemplate($tname); - if( is_array($this->Parser->stack) ) $this->Parser->stack = Array(); - if(is_object($t)) - { - array_push($this->Parser->stack,$tname); - $html = $t->source; - - $html = $this->ParseTemplateText($html); - array_pop($this->Parser->stack); - } - $LogLevel--; - LogEntry("Finished Parsing $tname\n"); - $ptime = round(getmicrotime() - $timestart,6); - $xf = 867530; //Download ID - if($xf != 0) - { - $x2 = substr($ptime,-6); - $ptime .= $xf ^ $x2; //(1/1000); - } - return $html; - } - - function SendUserEventMail($EventName,$ToUserId,$LangId=NULL,$RecptName=NULL) - { - global $objMessageList,$FrontEnd; - - $Event =& $objMessageList->GetEmailEventObject($EventName,0,$LangId); - - if(is_object($Event)) - { - if($Event->Get("Enabled")=="1" || ($Event->Get("Enabled")==2 && $FrontEnd)) - { - $Event->Item = $this; - if(is_numeric($ToUserId)) - { - return $Event->SendToUser($ToUserId); - } - else - return $Event->SendToAddress($ToUserId,$RecptName); - } - } - } - - function SendAdminEventMail($EventName,$LangId=NULL) - { - global $objMessageList,$FrontEnd; - - //echo "Firing Admin Event $EventName
\n"; - $Event =& $objMessageList->GetEmailEventObject($EventName,1,$LangId); - if(is_object($Event)) - { - if($Event->Get("Enabled")=="1" || ($Event->Get("Enabled")==2 && $FrontEnd)) - { - $Event->Item = $this; - //echo "Admin Event $EventName Enabled
\n"; - return $Event->SendAdmin($ToUserId); - } - } - } - - function parse_template($t) - { - } - -} - -class clsItemCollection -{ - var $Items; - var $CurrentItem; - var $adodbConnection; - var $classname; - var $SourceTable; - var $LiveTable; - var $QueryItemCount; - var $AdminSearchFields = array(); - var $SortField; - var $debuglevel; - var $id_field = null; // id field for list item - var $BasePermission; - var $Dummy = null; - - // enshure that same sql won't be queried twice - var $QueryDone = false; - var $LastQuerySQL = ''; - - function SetTable($action, $table_name = null) // new by Alex - { - // $action = {'live', 'restore','edit'} - switch($action) - { - case 'live': - $this->LiveTable = $table_name; - $this->SourceTable = $this->LiveTable; - break; - case 'restore': - $this->SourceTable = $this->LiveTable; - break; - case 'edit': - global $objSession; - $this->SourceTable = $objSession->GetEditTable($this->LiveTable); - break; - } - } - - function &GetDummy() // new by Alex - { - if( !isset($this->Dummy) ) - $this->Dummy =& new $this->classname(); - $this->Dummy->tablename = $this->SourceTable; - return $this->Dummy; - } - - function clsItemCollection() - { - - $this->adodbConnection = &GetADODBConnection(); - - $this->Clear(); - $this->BasePermission=""; - } - - function GetIDField() // new by Alex - { - // returns id field for list item - if( !isset($this->id_field) ) - { - $dummy =& $this->GetDummy(); - $this->id_field = $dummy->IdField(); - } - return $this->id_field; - } - - function &GetNewItemClass() - { - return new $this->classname(); - } - - function Clear() - { - unset($this->Items); - $this->Items = array(); - $this->CurrentItem=0; - } - - function &SetCurrentItem($id) - { - $this->CurrentItem=$id; - return $this->GetItem($id); - } - - function &GetCurrentItem() - { - if($this->CurrentItem>0) - { - return $this->GetItem($this->CurrentItem); - } - else - return FALSE; - } - - function NumItems() - { - if(is_array($this->Items)) - { -// echo "TEST COUNT: ".count($this->Items)."
"; - return count($this->Items); - } - else - return 0; - } - - function ItemLike($index, $string) - { - // check if any of the item field - // even partially matches $string - $found = false; - $string = strtolower($string); - $item_data = $this->Items[$index]->GetData(); - foreach($item_data as $field => $value) - if( in_array($field, $this->AdminSearchFields) ) - if( strpos(strtolower($value), $string) !== false) - { - $found = true; - break; - } - return $found; - } - - function DeleteItem($index) // by Alex - { - // deletes item with specific index from list - $i = $index; $item_count = $this->NumItems(); - while($i < $item_count - 1) - { - $this->Items[$i] = $this->Items[$i + 1]; - $i++; - } - unset($this->Items[$i]); - } - - function ShowItems() - { - $i = 0; $item_count = $this->NumItems(); - while($i < $item_count) - { - echo "Item No $i:
"; - $this->Items[$i]->PrintVars(); - $i++; - } - } - - function SwapItems($Index,$Index2) - { - $temp = $this->Items[$Index]->GetData(); - $this->Items[$Index]->SetData($this->Items[$Index2]->GetData()); - $this->Items[$Index2]->SetData($temp); - - } - - function CopyResource($OldId,$NewId) - { - $this->Clear(); - - $sql = "SELECT * FROM ".$this->SourceTable." WHERE ResourceId=$OldId"; - $this->Query_Item($sql); -// echo $sql."
\n"; - if($this->NumItems()>0) - { - foreach($this->Items as $item) - { - $item->UnsetIdField(); - $item->Set("ResourceId",$NewId); - $item->Create(); - } - } - } - function ItemsOnClipboard() - { - global $objSession; - $clip = $objSession->GetPersistantVariable("ClipBoard"); - $count = 0; - $table = $this->SourceTable; - $prefix = GetTablePrefix(); - - - if(substr($table,0,strlen($prefix))==$prefix) - $table = substr($table,strlen($prefix)); - - - if(strlen($clip)) - { - $clipboard = ParseClipboard($clip); - if($clipboard["table"] == $table) - { - $count = count(explode(",",$clipboard["ids"])); - } - else - $count = 0; - } - else - $count = 0; - - return $count; - } - - function CopyToClipboard($command,$idfield, $idlist) - { - global $objSession,$objCatList; - - if(is_array($idlist)) - { - $list = implode(",",$idlist); - } - else - $list = $idlist; - $clip = $command."-".$objCatList->CurrentCategoryID().".".$this->SourceTable.".$idfield=".$list; - - $objSession->SetVariable("ClipBoard",$clip); - } - - function SortItems($asc=TRUE) - { - $done = FALSE; - - $field = $this->SortField; - $ItemCount = $this->NumItems(); - while(!$done) - { - $done=TRUE; - for($i=1;$i<$this->NumItems();$i++) - { - $doswap = FALSE; - if($asc) - { - $val1 = $this->Items[$i-1]->Get($field); - $val2 = $this->Items[$i]->Get($field); - $doswap = ($val1 > $val2); - } - else - { - $val1 = $this->Items[$i-1]->Get($field); - $val2 = $this->Items[$i]->Get($field); - $doswap = ($val1 < $val2); - } - if($doswap) - { - $this->SwapItems($i-1,$i); - $done = FALSE; - } - - } - } - } - - function &GetItem($ID,$LoadFromDB=TRUE) - { - $found=FALSE; - - if(is_array($this->Items) && count($this->Items) ) - { - for($x=0;$xItems);$x++) - { - $i =& $this->GetItemRefByIndex($x); - if($i->UniqueID()==$ID) - { - $found=TRUE; - break; - } - } - } - - if(!$found) - { - if($LoadFromDB) - { - $n = NULL; - $n = new $this->classname(); - $n->tablename = $this->SourceTable; - $n->LoadFromDatabase($ID); - $index = array_push($this->Items, $n); - $i =& $this->Items[count($this->Items)-1]; - } - else - $i = FALSE; - } - return $i; - } - - function GetItemByIndex($index) - { - return $this->Items[$index]; - } - - function &GetItemRefByIndex($index) - { - return $this->Items[$index]; - } - - function &GetItemByField($Field,$Value,$LoadFromDB=TRUE) - { - $found=FALSE; - if(is_array($this->Items)) - { - foreach($this->Items as $i) - { - if($i->Get($Field)==$Value) - { - $found = TRUE; - break; - } - } - } - if(!$found && $LoadFromDB==TRUE) - { - $sql = "SELECT * FROM ".$this->SourceTable." WHERE $Field = '$Value'"; - //echo $sql; - $res = $this->adodbConnection->Execute($sql); - - if($res && !$res->EOF) - { - $i = $this->AddItemFromArray($res->fields); - $i->tablename = $this->SourceTable; - $i->Clean(); - } - else - $i = FALSE; - } - return $i; - } - - function GetPage($Page, $ItemsPerPage) - { - $result = array_slice($this->Items, ($Page * $ItemsPerPage) - $ItemsPerPage, $ItemsPerPage); - return $result; - } - - function GetNumPages($ItemsPerPage) - { - if( isset($_GET['reset']) && $_GET['reset'] == 1) $this->Page = 1; - return GetPageCount($ItemsPerPage,$this->QueryItemCount); - } - - function &AddItemFromArray($data, $clean=FALSE) - { - $class = new $this->classname; - $class->SetFromArray($data); - $class->tablename = $this->SourceTable; - if($clean==TRUE) - $class->Clean(); - //array_push($this->Items,$class); - $this->Items[] =& $class; - return $class; - } - - function Query_Item($sql, $offset=-1,$rows=-1) - { - global $Errors; - //echo "Method QItem [".get_class($this).'], sql: ['.$sql.']
'; - //if( get_class($this) == 'clsthemefilelist') trace(); - $dummy =& $this->GetDummy(); - if( !$dummy->TableExists() ) - { - if($this->debuglevel) echo "ERROR: table ".$dummy->tablename." missing.
"; - $this->Clear(); - return false; - } - - if($rows>-1 && $offset>-1) - { - //print_pre(debug_backtrace()); - //echo "Executing SelectLimit $sql Offset: $offset,$rows
\n"; - $result = $this->adodbConnection->SelectLimit($sql, $rows,$offset); - } - else { - $result = $this->adodbConnection->Execute($sql); - } - - if ($result === false) - { - $Errors->AddError("error.DatabaseError",NULL,$this->adodbConnection->ErrorMsg(),"",get_class($this),"Query_Item"); - if($this->debuglevel) { - echo '

'.$sql.'

'; - echo "Error: ".$this->adodbConnection->ErrorMsg()."
"; - } - $this->Clear(); - return false; - } - - $this->Clear(); - - if($this->debuglevel > 0) - { - echo "This SQL: $sql

"; - if( ($this->debuglevel > 1) && ($result->RecordCount() > 0) ) - { - echo '
'.print_r($result->GetRows(), true).'
'; - $result->MoveFirst(); - } - } - //echo "SQL: $sql

"; - LogEntry("SQL Loop Start\n"); - $count = 0; - - while ($result && !$result->EOF) - { - $count++; - $data = $result->fields; - $this->AddItemFromArray($data,TRUE); - if( defined('ADODB_EXTENSION') && constant('ADODB_EXTENSION') > 0 ) - adodb_movenext($result); - else - $result->MoveNext(); - } - - LogEntry("SQL Loop End ($count iterations)\n"); - $result->Free(); - return $this->Items; - } - - function GetOrderClause($FieldVar,$OrderVar,$DefaultField,$DefaultVar,$Priority=TRUE,$UseTableName=FALSE) - { - global $objConfig, $objSession; - - if($UseTableName) - { - $TableName = $this->SourceTable."."; - } - else - $TableName = ""; - - $PriorityClause = $TableName."EditorsPick DESC, ".$TableName."Priority DESC"; - - if(strlen(trim($FieldVar))>0) - { - if(is_object($objSession)) - { - if(strlen($objSession->GetPersistantVariable($FieldVar))>0) - { - $OrderBy = trim($TableName.$objSession->GetPersistantVariable($FieldVar) . " ". - $objSession->GetPersistantVariable($OrderVar)); - $FieldUsed = $objSession->GetPersistantVariable($FieldVar); - } - } - $OrderBy = trim($OrderBy); - if (strlen(trim($OrderBy))==0) - { - if(!$UseTableName) - { - $OrderBy = trim($DefaultField." ".$DefaultVar); - } - else - { - if(strlen(trim($DefaultField))>0) - { - $OrderBy = $this->SourceTable.".".$DefaultField.".".$DefaultVar; - } - $FieldUsed=$DefaultField; - } - } - } - if(($FieldUsed != "Priority" || strlen($OrderBy)==0) && $Priority==TRUE) - { - if(strlen($OrderBy)==0) - { - $OrderBy = $PriorityClause; - } - else - $OrderBy = $PriorityClause.", ".$OrderBy; - } - return $OrderBy; - } - - function GetResourceIDList() - { - $ret = array(); - foreach($this->Items as $i) - array_push($ret,$i->Get("ResourceId")); - return $ret; - } - - function GetFieldList($field) - { - $ret = array(); - foreach($this->Items as $i) - array_push($ret,$i->Get($field)); - return $ret; - } - - function SetCommonField($FieldName,$FieldValue) - { - for($i=0;$i<$this->NumItems();$i++) - { - $this->Items[$i]->Set($FieldName,$fieldValue); - $this->Items[$i]->Update(); - } - } - - function ClearCategoryItems($CatId,$CatTable = "CategoryItems") - { - $CatTable = AddTablePrefix($CatTable); - $sql = "SELECT * FROM ".$this->SourceTable." INNER JOIN $CatTable ". - " ON (".$this->SourceTable.".ResourceId=$CatTable.ItemResourceId) WHERE CategoryId=$CatId"; - $this->Clear(); - $this->Query_Item($sql); - if($this->NumItems()>0) - { - foreach($this->Items as $i) - { - $i->DeleteCategoryItems($CatId,$CatTable); - } - } - } - - function CopyToEditTable($idfield = null, $idlist = 0) - { - global $objSession; - - if($idfield == null) $idfield = $this->GetIDField(); - $edit_table = $objSession->GetEditTable($this->SourceTable); - @$this->adodbConnection->Execute("DROP TABLE IF EXISTS $edit_table"); - if(is_array($idlist)) - { - $list = implode(",",$idlist); - } - else - $list = $idlist; - $query = "SELECT * FROM ".$this->SourceTable." WHERE $idfield IN ($list)"; - $insert = "CREATE TABLE ".$edit_table." ".$query; - if($objSession->HasSystemPermission("DEBUG.LIST")) - echo htmlentities($insert,ENT_NOQUOTES)."
\n"; - $this->adodbConnection->Execute($insert); - } - - function CreateEmptyEditTable($idfield = null) - { - global $objSession; - if($idfield == null) $idfield = $this->GetIDField(); - - $edit_table = $objSession->GetEditTable($this->SourceTable); - @$this->adodbConnection->Execute("DROP TABLE IF EXISTS $edit_table"); - $query = "SELECT * FROM ".$this->SourceTable." WHERE $idfield = -1"; - $insert = "CREATE TABLE ".$edit_table." ".$query; - if($objSession->HasSystemPermission("DEBUG.LIST")) - echo htmlentities($insert,ENT_NOQUOTES)."
\n"; - $this->adodbConnection->Execute($insert); - //echo $insert."
"; - } - - function CopyFromEditTable($idfield = null) - { - global $objSession; - - $dropRelTableFlag = false; - if($idfield == null) $idfield = $this->GetIDField(); - $edit_table = $objSession->GetEditTable($this->SourceTable); - $sql = "SELECT * FROM $edit_table"; - $rs = $this->adodbConnection->Execute($sql); - - //echo "In Main CopyFromEditTable in class ".get_class($this).'
'; - //echo $sql."
"; - - while($rs && !$rs->EOF) - { - $data = $rs->fields; - $c = new $this->classname; - $c->SetFromArray($data); - $c->idfield = $idfield; - $c->Dirty(); - if($c->Get($idfield) < 1) - { - $old_id = $c->Get($idfield); - $c->UnsetIdField(); - if(!is_numeric($c->Get("OrgId")) || $c->Get("OrgId")==0) - { - $c->Clean(array("OrgId")); - } - else - { - if($c->Get("Status") != -2) - { - $org = new $this->classname(); - $org->LoadFromDatabase($c->Get("OrgId")); - $org->DeleteCustomData(); - $org->Delete(TRUE); - $c->Set("OrgId",0); - } - } - $c->Create(); - } - if(is_numeric($c->Get("ResourceId"))) - { - if( isset($c->Related) && is_object($c->Related) ) - { - $r = $c->Related; - $r->CopyFromEditTable($c->Get("ResourceId")); - $dropRelTableFlag = true; - } - - unset($r); - - if( isset($c->Reviews) && is_object($c->Reviews) ) - { - $r = $c->Reviews; - $r->CopyFromEditTable($c->Get("ResourceId")); - } - } - if(!is_numeric($c->Get("OrgId")) || $c->Get("OrgId")==0) - { - $c->Clean(array("OrgId")); - } - else - { - if($c->Get("Status") != -2) - { - $org = new $this->classname(); - $org->LoadFromDatabase($c->Get("OrgId")); - $org->DeleteCustomData(); - $org->Delete(TRUE); - $c->Set("OrgId",0); - } - } - - if(method_exists($c,"CategoryMemberList")) - { - $cats = $c->CategoryMemberList($objSession->GetEditTable("CategoryItems")); - $ci_table = $objSession->GetEditTable('CategoryItems'); - $primary_cat = $c->GetPrimaryCategory($ci_table); - $c->Update(); - UpdateCategoryItems($c,$cats,$primary_cat); - } - else - $c->Update(); - - unset($c); - unset($r); - - $rs->MoveNext(); - } - - if ($dropRelTableFlag) - { - $objRelGlobal = new clsRelationshipList(); - $objRelGlobal->PurgeEditTable(); - } - - if($edit_table) @$this->adodbConnection->Execute("DROP TABLE IF EXISTS $edit_table"); - @$this->adodbConnection->Execute("DROP TABLE IF EXISTS ".$objSession->GetEditTable("CategoryItems")); - } - - function GetNextTempID() - { - // get next temporary id (lower then zero) from temp table - $db =& $this->adodbConnection; - $sql = 'SELECT MIN(%s) AS MinValue FROM %s'; - return $db->GetOne( sprintf($sql, $this->GetIDField(), $this->SourceTable) ) - 1; - } - - function PurgeEditTable($idfield = null) - { - global $objSession; - - if($idfield == null) $idfield = $this->GetIDField(); - $edit_table = $objSession->GetEditTable($this->SourceTable); -/* $rs = $this->adodbConnection->Execute("SELECT * FROM $edit_table"); - while($rs && !$rs->EOF) - { - $data = $rs->fields; - $c = new $this->classname; - $c->SetFromArray($data); - $c->id_field = $idfield; - $c->tablename = $edit_table; - $c->Delete(); - $rs->MoveNext(); - }*/ - @$this->adodbConnection->Execute("DROP TABLE IF EXISTS $edit_table"); - @$this->adodbConnection->Execute("DROP TABLE IF EXISTS ".$objSession->GetEditTable("CategoryItems")); - } - - function CopyCatListToEditTable($idfield, $idlist) - { - global $objSession; - - $edit_table = $objSession->GetEditTable("CategoryItems"); - @$this->adodbConnection->Execute("DROP TABLE IF EXISTS $edit_table"); - if(is_array($idlist)) - { - $list = implode(",",$idlist); - } - else - $list = $idlist; - $query = "SELECT * FROM ".GetTablePrefix()."CategoryItems WHERE $idfield IN ($list)"; - - $insert = "CREATE TABLE ".$edit_table." ".$query; - if($objSession->HasSystemPermission("DEBUG.LIST")) - echo htmlentities($insert,ENT_NOQUOTES)."
\n"; - $this->adodbConnection->Execute($insert); - } - - function CreateEmptyCatListTable($idfield) - { - global $objSession; - - $edit_table = $objSession->GetEditTable("CategoryItems"); - @$this->adodbConnection->Execute("DROP TABLE IF EXISTS $edit_table"); - $query = "SELECT * FROM ".GetTablePrefix()."CategoryItems WHERE $idfield = -1"; - $insert = "CREATE TABLE ".$edit_table." ".$query; - if($objSession->HasSystemPermission("DEBUG.LIST")) - echo htmlentities($insert,ENT_NOQUOTES)."
\n"; - $this->adodbConnection->Execute($insert); - } - - - function PurgeCatListEditTable() - { - global $objSession; - - $edit_table = $objSession->GetEditTable("CategoryItems"); - $this->adodbConnection->Execute("DROP TABLE IF EXISTS $edit_table"); - } - - function AdminSearchWhereClause($SearchList) - { - $sql = ""; - if( !is_array($SearchList) ) $SearchList = explode(",",$SearchList); - - // remove empty elements - $SearchListTmp=Array(); - for($f = 0; $f < count($SearchList); $f++) - if($SearchList[$f]) - $SearchListTmp[]=$SearchList[$f]; - $SearchList=$SearchListTmp; - - if( !count($SearchList) || !count($this->AdminSearchFields) ) return ''; - - for($f = 0; $f < count($SearchList); $f++) - { - $value = $SearchList[$f]; - if( strlen($value) ) - { - $inner_sql = ""; - for($i = 0; $i < count($this->AdminSearchFields); $i++) - { - $field = $this->AdminSearchFields[$i]; - if( strlen( trim($value) ) ) - { - if( strlen($inner_sql) ) $inner_sql .= " OR "; - $inner_sql .= $field." LIKE '%".$value."%'"; - } - } - if( strlen($inner_sql) ) - { - $sql .= '('.$inner_sql.') '; - if($f < count($SearchList) - 1) $sql .= " AND "; - } - } - } - return $sql; - } - - function BackupData($OutFileName,$Start,$Limit) - { - $fp=fopen($Outfile,"a"); - if($fp) - { - if($Start==1) - { - $sql = "DELETE FROM ".$this->SourceTable; - fputs($fp,$sql); - } - $this->Query_Item("SELECT * FROM ".$this->SourceTable." LIMIT $Start, $Limit"); - foreach($this->Items as $i) - { - $sql = $i->CreateSQL(); - fputs($fp,$sql); - } - fclose($fp); - $this->Clear(); - } - } - - function RestoreData($InFileName,$Start,$Limit) - { - $res = -1; - $fp=fopen($InFileName,"r"); - if($fp) - { - fseek($fp,$Start); - $Line = 0; - while($Line < $Limit) - { - $sql = fgets($fp,16384); - $this->adodbConnection->Execute($sql); - $Line++; - } - $res = ftell($fp); - fclose($fp); - } - return $res; - } - - function Delete_Item($Id) - { - global $objCatList; - - $l =& $this->GetItem($Id); - $l->BasePermission=$this->BasePermission; - $l->DeleteCategoryItems($objCatList->CurrentCategoryID()); - } - - function Move_Item($Id, $OldCat, $ParentTo) - { - global $objCatList; - - $l = $this->GetItem($Id); - $l->BasePermission=$this->BasePermission; - $l->AddtoCategory($ParentTo); - $l->RemoveFromCategory($OldCat); - } - - function Copy_Item($Id, $ParentTo) - { - $l = $this->GetItem($Id); - $l->BasePermission=$this->BasePermission; - $l->AddtoCategory($ParentTo); - } - -}/* clsItemCollection */ - -class clsItemList extends clsItemCollection -{ - var $Page; - var $PerPageVar; - var $DefaultPerPage; // use this perpage value in case if no found in config - var $EnablePaging; - var $MaxListCount = 0; - var $PageEnvar; - var $PageEnvarIndex; - var $ListType; - - var $LastLimitClause = ''; // used to store last limit cluse used in query - - function clsItemList() - { - $this->clsItemCollection(); - $this->EnablePaging = TRUE; - $this->PageEnvarIndex = "p"; - } - - function GetPageLimitSQL() - { - global $objConfig; - $limit = NULL; - if($this->EnablePaging) - { - if($this->Page<1) - $this->Page=1; - //echo "Limited to ".$objConfig->Get($this->PerPageVar)." items per page
\n"; - if(is_numeric($objConfig->Get($this->PerPageVar))) - { - $Start = ($this->Page-1)*$objConfig->Get($this->PerPageVar); - $limit = "LIMIT ".$Start.",".$objConfig->Get($this->PerPageVar); - } - else - $limit = NULL; - } - else - { - if($this->MaxListCount) - { - $limit = "LIMIT 0, $MaxListCount"; - } - } - return $limit; - } - - function GetPageOffset() - { - $Start = 0; - if($this->EnablePaging) - { - if($this->Page < 1) $this->Page = 1; - $PerPage = $this->GetPerPage(); - $Start = ($this->Page - 1) * $PerPage; - } - else - { - if((int)$this->MaxListCount == 0) $Start = -1; - } - return $Start; - } - - function GetPageRowCount() - { - if($this->EnablePaging) - { - if($this->Page < 1) $this->Page = 1; - return $this->GetPerPage(); - } - else - return (int)$this->MaxListCount; - } - - function Query_Item($sql,$limit = null, $fix_method = 'set_first') - { - // query itemlist (module items) using $sql specified - // apply direct limit clause ($limit) or calculate it if not specified - // fix invalid page in case if needed by method specified in $fix_method - if(strlen($limit)) - { - $sql .= " ".$limit; - return parent::Query_Item($sql); - } - else - { - //echo "page fix pre (class: ".get_class($this).")
"; - $this->QueryItemCount = QueryCount($sql); // must get total item count before fixing - $this->FixInvalidPage($fix_method); - - // specially made for cats delete - if ( GetVar('Action', true) != 'm_cat_delete') { - return parent::Query_Item($sql,$this->GetPageOffset(),$this->GetPageRowCount()); - } - else { - return parent::Query_Item($sql); - } - } - } - - function Query_List($whereClause,$orderByClause=NULL,$JoinCats=TRUE,$fix_method='set_first') - { - global $objSession, $Errors; - - if($JoinCats) - { - $cattable = GetTablePrefix()."CategoryItems"; - $t = $this->SourceTable; - $sql = "SELECT *,CategoryId FROM $t INNER JOIN $cattable ON $cattable.ItemResourceId=$t.ResourceId"; - } - else - $sql = "SELECT * FROM ". $this->SourceTable; - if(trim($whereClause)!="") - { - if(isset($whereClause)) - $sql = sprintf('%s WHERE %s',$sql,$whereClause); - } - if(strlen($orderByClause)>0) - { - if(substr($orderByClause,0,8)=="ORDER BY") - { - $sql .= " ".$orderByClause; - } - else - { - $sql .= " ORDER BY $orderByClause"; - } - } - - if($objSession->HasSystemPermission("DEBUG.LIST")) - echo $sql."
\n"; - - return $this->Query_Item($sql, null, $fix_method); - } - - function GetPerPage() - { - // return category perpage - global $objConfig; - $PerPage = $objConfig->Get( $this->PerPageVar ); - if( !is_numeric($PerPage) ) $PerPage = $this->DefaultPerPage ? $this->DefaultPerPage : 10; - return $PerPage; - } - - function FixInvalidPage($fix_method = 'set_first') - { - // in case if current page > total page count, - // then set current page to last possible "set_last" - // or first possible "set_first" - $PerPage = $this->GetPerPage(); - $NumPages = ceil( $this->GetNumPages($PerPage) ); -/* - echo "=====
"; - echo "Class ".get_class($this).": Page ".$this->Page." of $NumPages
"; - echo "PerPage: $PerPage
"; - echo "Items Queries: ".$this->QueryItemCount."
"; - echo "=====
"; -*/ - if($this->Page > $NumPages) - { - switch($fix_method) - { - case 'set_first': - $this->Page = 1; - //echo "Move 2 First (class ".get_class($this).")
"; - break; - case 'set_last': - $this->Page = $NumPages; - //echo "Move 2 Last (class ".get_class($this).")
"; - break; - } - $this->SaveNewPage(); - } - } - - function SaveNewPage() - { - // redefine in each list, should save to env array new page value - - } - - function GetPageLinkList($dest_template=NULL,$page = "",$PagesToList=10, $HideEmpty=TRUE,$EnvSuffix = '') - { - global $objConfig, $var_list_update, $var_list; - - - $v= $this->PageEnvar; - - global ${$v}; - - if(!strlen($page)) - $page = GetIndexURL(); - - $PerPage = $objConfig->Get($this->PerPageVar); - if($PerPage<1) - $PerPage=20; - $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==0 || !is_numeric($this->Page)) - $this->Page=1; - 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) - { - ${$v}[$this->PageEnvarIndex] = $this->Page-$PagesToList; - - $prev_url = $page."?env=".BuildEnv().$EnvSuffix; - $o .= "<<"; - } - - for($p=$StartPage;$p<=$EndPage;$p++) - { - if($p!=$this->Page) - { - ${$v}[$this->PageEnvarIndex]=$p; - $href = $page."?env=".BuildEnv().$EnvSuffix; - $o .= " $p "; - } - else - { - $o .= " $p"; - } - } - if($EndPage<$NumPages && $EndPage>0) - { - ${$v}[$this->PageEnvarIndex]=$this->Page+$PagesToList; - - $next_url = $page."?env=".BuildEnv().$EnvSuffix; - $o .= " >>"; - } - unset(${$v}[$this->PageEnvarIndex],$var_list_update["t"] ); - return $o; - } - - function GetAdminPageLinkList($url) - { - global $objConfig; - - $update =& $GLOBALS[$this->PageEnvar]; // env_var_update - - // insteresting stuff :) - if(!$this->PerPageVar) $this->PerPageVar = "Perpage_Links"; - - $PerPage = $objConfig->Get($this->PerPageVar); - if($PerPage < 1) $PerPage = 20; - - $NumPages = ceil($this->GetNumPages($PerPage)); - - //echo $this->CurrentPage." of ".$NumPages." Pages"; - - if($this->Page > $NumPages) $this->Page = $NumPages; - - $StartPage = $this->Page - 5; - if($StartPage < 1) $StartPage = 1; - $EndPage = $StartPage + 9; - if($EndPage > $NumPages) - { - $EndPage = $NumPages; - $StartPage = $EndPage-9; - if($StartPage < 1) $StartPage = 1; - } - - $o = ''; - - if($StartPage > 1) - { - $update[$this->PageEnvarIndex]= $this->Page - 10; - $prev_url = $url.'?env='.BuildEnv(); - $o .= '<<'; - } - - - for($p = $StartPage; $p <= $EndPage; $p++) - { - if($p != $this->Page) - { - $update[$this->PageEnvarIndex] = $p; - $href = $url.'?env='.BuildEnv(); - $o .= ' '.$p.' '; - } - else - { - $o .= ''.$p.''; - } - } - if($EndPage < $NumPages) - { - $update[$this->PageEnvarIndex] = $this->Page + 10; - $next_url = $url.'?env='.BuildEnv(); - $o .= ' >>'; - } - unset( $update[$this->PageEnvarIndex] ); - return $o; - } -} - -function ParseClipboard($clip) -{ - $ret = array(); - - $parts = explode(".",$clip,3); - $command = $parts[0]; - $table = $parts[1]; - $prefix = GetTablePrefix(); - if(substr($table,0,strlen($prefix))==$prefix) - $table = substr($table,strlen($prefix)); - - $subparts = explode("=",$parts[2],2); - $idfield = $subparts[0]; - $idlist = $subparts[1]; - $cmd = explode("-",$command); - $ret["command"] = $cmd[0]; - $ret["source"] = $cmd[1]; - $ret["table"] = $table; - $ret["idfield"] = $idfield; - $ret["ids"] = $idlist; - //print_pre($ret); - return $ret; -} - -function UpdateCategoryItems($item,$NewCatList,$PrimaryCatId = false) -{ - global $objCatList; - - $CurrentList = explode(",",$item->CategoryMemberList()); - $del_list = array(); - $ins_list = array(); - - - if(!is_array($NewCatList)) - { - if(strlen(trim($NewCatList))==0) - $NewCatList = $objCatList->CurrentCategoryID(); - - $NewCatList = explode(",",$NewCatList); - } - //print_r($NewCatList); - - for($i=0;$iAddToCategory($cat); - } - for($i=0;$iRemoveFromCategory($cat); - } - if($PrimaryCatId !== false) $item->SetPrimaryCategory($PrimaryCatId); -} - -class clsCatItemList extends clsItemList -{ - var $PerPageVarLong; - var $PerPageShortVar; - var $Query_SortField; - var $Query_SortOrder; - var $ItemType; - - function clsCatItemList() - { - $this->ClsItemList(); - $this->Query_SortField = array(); - $this->Query_SortOrder = array(); - } - - 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"; - } - - if(count($this->Query_SortField)>0) - { - for($x=0; $xQuery_SortField); $x++) - { - $FieldVar = $this->Query_SortField[$x]; - $OrderVar = $this->Query_SortOrder[$x]; - - if(is_object($objSession)) - { - $FieldVarData = $objSession->GetPersistantVariable($FieldVar); - if(strlen($FieldVarData)>0) - { - $Orders[] = trim($TableName.$objSession->GetPersistantVariable($FieldVar) . " ". - $objSession->GetPersistantVariable($OrderVar)); - } - } - } - } - - if(count($Orders)>0) - { - $OrderBy = "ORDER BY ".implode(", ",$Orders); - } - else - $OrderBy=""; - - return $OrderBy; - } - - function AddSortField($SortField, $SortOrder) - { - if(strlen($SortField)) - { - $this->Query_SortField[] = $SortField; - $this->Query_SortOrder[] = $SortOrder; - } - } - - function ClearSortFields() - { - $this->Query_SortField = array(); - $this->Query_SortOrder = array(); - } - - /* skeletons in this closet */ - - function GetNewValue($CatId=NULL) - { - return 0; - } - - function GetPopValue($CategoryId=NULL) - { - return 0; - } - - /* end of skeletons */ - - 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 $cattable ON ($cattable.ItemResourceId=$ltable.ResourceId) "; - $sql .="INNER JOIN $CategoryTable ON ($CategoryTable.CategoryId=$cattable.CategoryId) "; - $sql .="INNER JOIN $ptable ON ($cattable.CategoryId=$ptable.CategoryId) "; - $sql .="WHERE ($acl AND PermId=$VIEW AND $cattable.PrimaryCat=1 AND $CategoryTable.Status=1) "; - - if(strlen($AdditonalWhere)>0) - { - $sql .= "AND (".$AdditonalWhere.")"; - } - - return $sql; - } - - function SqlCategoryList($attribs = array()) - { - $CatTable = GetTablePrefix()."CategoryItems"; - $t = $this->SourceTable; - - $sql = "SELECT *,$CatTable.CategoryId FROM $t INNER JOIN $CatTable ON $CatTable.ItemResourceId=$t.ResourceId "; - $sql .="WHERE ($CatTable.CategoryId=".$catid." AND $t.Status=1)"; - - return $sql; - } - - - function CategoryCount($attribs=array()) - { - global $objCatList, $objCountCache; - - $cat = $attribs["_catid"]; - if(!is_numeric($cat)) - { - $cat = $objCatList->CurrentCategoryID(); - } - if((int)$cat>0) - $c = $objCatList->GetCategory($cat); - - $CatTable = GetTablePrefix()."CategoryItems"; - $t = $this->SourceTable; - - $sql = "SELECT count(*) as MyCount FROM $t INNER JOIN $CatTable ON ($CatTable.ItemResourceId=$t.ResourceId) "; - if($attribs["_subcats"]) - { - $ctable = $objCatList->SourceTable; - $sql .= "INNER JOIN $ctable ON ($CatTable.CategoryId=$ctable.CategoryId) "; - $sql .= "WHERE (ParentPath LIKE '".$c->Get("ParentPath")."%' "; - if(!$attribs["_countcurrent"]) - { - $sql .=" AND $ctable.CategoryId != $cat) "; - } - else - $sql .=") "; - } - else - $sql .="WHERE ($CatTable.CategoryId=".$cat." AND $t.Status=1) "; - - if($attribs["_today"]) - { - $today = mktime(0,0,0,date("m"),date("d"),date("Y")); - $sql .= "AND ($t.CreatedOn>=$today) "; - } - //echo $sql."

\n"; - $rs = $this->adodbConnection->Execute($sql); - $ret = ""; - if($rs && !$rs->EOF) - $ret = (int)$rs->fields["MyCount"]; - return $ret; - } - - function SqlGlobalCount($attribs=array()) - { - global $objSession; - - $p = $this->BasePermission.".VIEW"; - $t = $this->SourceTable; - if($attribs["_today"]) - { - $today = mktime(0,0,0,date("m"),date("d"),date("Y")); - $where = "($t.CreatedOn>=$today)"; - } - - if($attribs["_grouponly"]) - { - $GroupList = $objSession->Get("GroupList"); - } - else - $GroupList = NULL; - - $sql = $this->GetCountSQL($p,NULL,$GroupList,$where); - return $sql; - } - - function DoGlobalCount($attribs) - { - global $objCountCache; - - $cc = $objCountCache->GetValue($this->CacheListType("_"),$this->ItemType,$this->CacheListExtraId("_"),(int)$attribs["_today"], 3600); - if(!is_numeric($cc)) - { - $sql = $this->SqlGlobalCount($attribs); - $ret = QueryCount($sql); - $objCountCache->SetValue($this->CacheListType("_"),$this->ItemType,$this->CacheListExtraId("_"),(int)$attribs["_today"],$ret); - } - else - $ret = $cc; - return $ret; - } - - - function CacheListExtraId($ListType) - { - global $objSession; - - if(!strlen($ListType)) - $ListType="_"; - switch($ListType) - { - case "_": - $ExtraId = $objSession->Get("GroupList"); - break; - case "category": - $ExtraId = $objSession->Get("GroupList"); - break; - case "myitems": - $ExtraId = $objSession->Get("PortalUserId"); - break; - case "hot": - $ExtraId = $objSession->Get("GroupList"); - break; - case "pop": - $ExtraId = $objSession->Get("GroupList"); - break; - case "pick": - $ExtraId = $objSession->Get("GroupList"); - break; - case "favorites": - $ExtraId = $objSession->Get("PortalUserId"); - break; - case "new": - $ExtraId = $objSession->Get("GroupList"); - break; - } - return $ExtraId; - } - - function CacheListType($ListType) - { - if(!strlen($ListType)) - $ListType="_"; - switch($ListType) - { - case "_": - $ListTypeId = 0; - break; - case "category": - $ListTypeId = 1; - break; - case "myitems": - $ListTypeId = 2; - break; - case "hot": - $ListTypeId = 3; - break; - case "pop": - $ListTypeId = 4; - break; - case "pick": - $ListTypeId = 5; - break; - case "favorites": - $ListTypeId = 6; - break; - case "new": - $ListTypeId = 8; - break; - } - return $ListTypeId; - } - - function PerformItemCount($attribs=array()) - { - global $objCountCache, $objSession; - - $ret = ""; - $ListType = $attribs["_listtype"]; - if(!strlen($ListType)) - $ListType="_"; - - $ListTypeId = $this->CacheListType($ListType); - //echo "ListType: $ListType ($ListTypeId)
\n"; - $ExtraId = $this->CacheListExtraId($ListType); - switch($ListType) - { - case "_": - $ret = $this->DoGlobalCount($attribs); - break; - case "category": - $ret = $this->CategoryCount($attribs); - break; - case "myitems": - $sql = $this->SqlMyItems($attribs); - break; - case "hot": - $sql = $this->SqlHotItems($attribs); - break; - case "pop": - $sql = $this->SqlPopItems($attribs); - break; - case "pick": - $sql = $this->SqlPickItems($attribs); - break; - case "favorites": - $sql = $this->SqlFavorites($attribs); - break; - case "search": - $sql = $this->SqlSearchItems($attribs); - break; - case "new": - $sql = $this->SqlNewItems($attribs); - break; - } - //echo "SQL: $sql
"; - if(strlen($sql)) - { - if(is_numeric($ListTypeId)) - { - $cc = $objCountCache->GetValue($ListTypeId,$this->ItemType,$ExtraId,(int)$attribs["_today"], 3600); - - if(!is_numeric($cc) || $attribs['_nocache'] == 1) - { - $ret = QueryCount($sql); - $objCountCache->SetValue($ListTypeId,$this->ItemType,$ExtraId,(int)$attribs["_today"],$ret); - } - else - $ret = $cc; - } - else - $ret = QueryCount($sql); - } - - return $ret; - } - - function GetJoinedSQL($PermName, $CatId=NULL, $AdditionalWhere="") - { - global $objSession, $objPermissions; - - $ltable = $this->SourceTable; - $acl = $objSession->GetACLClause(); - $cattable = GetTablePrefix()."CategoryItems"; - $CategoryTable = GetTablePrefix()."Category"; - $ptable = GetTablePrefix()."PermCache"; - $VIEW = $objPermissions->GetPermId($PermName); - $sql ="INNER JOIN $cattable ON ($cattable.ItemResourceId=$ltable.ResourceId) "; - $sql .="INNER JOIN $CategoryTable ON ($CategoryTable.CategoryId=$cattable.CategoryId) "; - $sql .= "INNER JOIN $ptable ON ($cattable.CategoryId=$ptable.CategoryId) "; - $sql .="WHERE ($acl AND PermId=$VIEW AND PrimaryCat=1 AND $CategoryTable.Status=1) "; - - if(is_numeric($CatId)) - { - $sql .= " AND ($CategoryTable.CategoryId=$CatId) "; - } - if(strlen($AdditionalWhere)>0) - { - $sql .= "AND (".$AdditionalWhere.")"; - } - return $sql; - } - - function CountFavorites($attribs) - { - if($attribs["_today"]) - { - global $objSession, $objConfig, $objPermissions; - - $acl = $objSession->GetACLClause(); - $favtable = GetTablePrefix()."Favorites"; - $ltable = $this->SourceTable; - $cattable = GetTablePrefix()."CategoryItems"; - $CategoryTable = GetTablePrefix()."Category"; - $ptable = GetTablePrefix()."PermCache"; - $today = mktime(0,0,0,date("m"),date("d"),date("Y")); - - $where = "PortalUserId=".$objSession->Get("PortalUserId")." AND $ltable.Status=1"; - $where .= " AND $favtable.Modified >= $today AND ItemTypeId=".$this->ItemType; - $p = $this->BasePermission.".VIEW"; - - $sql = "SELECT $ltable.*,$CategoryTable.CategoryId,$CategoryTable.CachedNavBar FROM $favtable INNER JOIN $ltable ON ($favtable.ResourceId=$ltable.ResourceId) "; - $sql .= $this->GetJoinedSQL($p,NULL,$where); - $ret = QueryCount($sql); - } - else - { - if (!$this->ListType == "favorites") - { - $this->ListType = "favorites"; - $this->LoadFavorites($attribs); - $ret = $this->QueryItemCount; - } - else - $ret = $this->QueryItemCount; - } - return $ret; - } - - - - function CountPickItems($attribs) - { - if (!$this->ListType == "pick") - { - $this->ListType = "pick"; - $this->LoadPickItems($attribs); - $ret = $this->QueryItemCount; - } - else - $ret = $this->QueryItemCount; - - return $ret; - } - - function CountMyItems($attribs) - { - if (!$this->ListType == "myitems") - { - $this->ListType = "myitems"; - $this->LoadMyItems($attribs); - $ret = $this->QueryItemCount; - } - else - $ret = $this->QueryItemCount; - - return $ret; - } - - function CountHotItems($attribs) - { - if (!$this->ListType == "hotitems") - { - $this->ListType = "hotitems"; - $this->LoadHotItems($attribs); - $ret = $this->QueryItemCount; - } - else - $ret = $this->QueryItemCount; - - return $ret; - } - - function CountNewItems($attribs) - { - if (!$this->ListType == "newitems") - { - $this->ListType = "newitems"; - $this->LoadNewItems($attribs); - $ret = $this->QueryItemCount; - } - else - $ret = $this->QueryItemCount; - - return $ret; - } - - function CountPopItems($attribs) - { - if (!$this->ListType == "popitems") - { - $this->ListType = "popitems"; - $this->LoadPopItems($attribs); - $ret = $this->QueryItemCount; - } - else - $ret = $this->QueryItemCount; - - return $ret; - } - - - function CountSearchItems($attribs) - { - if (!$this->ListType == "search") - { - $this->ListType = "search"; - $this->LoadSearchItems($attribs); - $ret = $this->QueryItemCount; - } - else - $ret = $this->QueryItemCount; - - return $ret; - } - - function SqlFavorites($attribs) - { - global $objSession, $objConfig, $objPermissions; - - $acl = $objSession->GetACLClause(); - $favtable = GetTablePrefix()."Favorites"; - $ltable = $this->SourceTable; - $cattable = GetTablePrefix()."CategoryItems"; - $CategoryTable = GetTablePrefix()."Category"; - $ptable = GetTablePrefix()."PermCache"; - - $where = "PortalUserId=".$objSession->Get("PortalUserId")." AND $ltable.Status=1"; - if($attribs["_today"]) - { - $today = mktime(0,0,0,date("m"),date("d"),date("Y")); - $where .= " AND $favtable.Modified >= $today AND ItemTypeId=".$this->ItemType; - } - $p = $this->BasePermission.".VIEW"; - - $sql = "SELECT $ltable.*,$CategoryTable.CategoryId,$CategoryTable.CachedNavBar FROM $favtable INNER JOIN $ltable ON ($favtable.ResourceId=$ltable.ResourceId) "; - $sql .= $this->GetJoinedSQL($p,NULL,$where); - - - $OrderBy = $this->QueryOrderByClause(TRUE,TRUE,TRUE); - $sql .= " ".$OrderBy; - return $sql; - } - - function LoadFavorites($attribs) - { - global $objSession, $objCountCache; - - $sql = $this->SqlFavorites($attribs); - - if($objSession->HasSystemPermission("DEBUG.LIST")) - echo htmlentities($sql,ENT_NOQUOTES)."
\n"; - if($attribs["_shortlist"]) - { - $this->PerPageVar = $this->PerPageShortVar; - } - else - $this->PerPageVar = $this->PerPageVarLong; - - $CachedCount = $objCountCache->GetValue($this->CacheListType("favorites"),$this->ItemType,$this->CacheListExtraId("favorites"),(int)$attribs["_today"],3600); - if(!is_numeric($CachedCount)) - { - $this->QueryItemCount = QueryCount($sql); - $objCountCache->SetValue($this->CacheListType("favorites"),$this->ItemType,$this->CacheListExtraId("favorites"),(int)$attribs["_today"],$this->QueryItemCount); - } - else - $this->QueryItemCount = (int)$CachedCount; - - return $this->Query_Item($sql); - } - - function SqlPickItems($attribs) - { - global $objSession, $objCatList; - - $catid = (int)$attribs["_catid"]; - $scope = (int)$attribs["_scope"]; - //$JoinCats = (int)$attribs["_catinfo"] || $scope; - - $TableName = $this->SourceTable; - if($scope) - { - if (!$catid) - { - $catid = $objCatList->CurrentCategoryID(); - } - $where = "CategoryId =".$catid." AND ".$TableName.".EditorsPick=1 AND ".$TableName.".Status=1"; - } - else - { - $where = $TableName.".EditorsPick=1 AND ".$TableName.".Status=1 "; - $catid=NULL; - } - if($attribs["_today"]) - { - $today = mktime(0,0,0,date("m"),date("d"),date("Y")); - $where .= " AND ($TableName.CreatedOn>=$today)"; - } - $CategoryTable = GetTablePrefix()."Category"; - $sql = "SELECT $TableName.*,$CategoryTable.CategoryId,$CategoryTable.CachedNavBar FROM $TableName "; - $p = $this->BasePermission.".VIEW"; - $sql .= $this->GetJoinedSQL($p,$CatUd,$where); - - $OrderBy = $this->QueryOrderByClause(TRUE,TRUE,TRUE); - $sql .= " ".$OrderBy; - return $sql; - } - - function LoadPickItems($attribs) - { - global $objSession, $objCountCache; - - $sql = $this->SqlPickItems($attribs); - if($objSession->HasSystemPermission("DEBUG.LIST")) - echo htmlentities($sql,ENT_NOQUOTES)."
\n"; - - if($attribs["_shortlist"]) - { - $this->PerPageVar = $this->PerPageShortVar; - } - else - $this->PerPageVar = $this->PerPageVarLong; - - $CachedCount = $objCountCache->GetValue($this->CacheListType("pick"),$this->ItemType,$this->CacheListExtraId("pick"),(int)$attribs["_today"],3600); - if(!is_numeric($CachedCount)) - { - $this->QueryItemCount= QueryCount($sql); - $objCountCache->SetValue($this->CacheListType("pick"),$this->ItemType,$this->CacheListExtraId("pick"),(int)$attribs["_today"],$this->QueryItemCount); - } - else - $this->QueryItemCount=$CachedCount; - - return $this->Query_Item($sql); - } - - function SqlMyItems($attribs= array()) - { - global $objSession; - - $TableName = $this->SourceTable; - $where = " ".$TableName.".Status>-1 AND ".$TableName.".CreatedById=".$objSession->Get("PortalUserId"); - if($attribs["_today"]) - { - $today = mktime(0,0,0,date("m"),date("d"),date("Y")); - $where .= " AND ($TableName.CreatedOn>=$today)"; - } - $CategoryTable = GetTablePrefix()."Category"; - $sql = "SELECT $TableName.*,$CategoryTable.CategoryId,$CategoryTable.CachedNavBar FROM $TableName "; - $p = $this->BasePermission.".VIEW"; - $sql .= $this->GetJoinedSQL($p,$CatUd,$where); - - $OrderBy = $this->QueryOrderByClause(TRUE,TRUE,TRUE); - $sql .= " ".$OrderBy; - - return $sql; - } - - function LoadMyItems($attribs=array()) - { - global $objSession,$objCountCache; - $sql = $this->SqlMyItems($attribs); - if($objSession->HasSystemPermission("DEBUG.LIST")) - echo htmlentities($sql,ENT_NOQUOTES)."
\n"; - if($attribs["_shortlist"]) - { - $this->PerPageVar = $this->PerPageShortVar; - } - else - $this->PerPageVar = $this->PerPageVarLong; - - $CachedCount = $objCountCache->GetValue($this->CacheListType("myitems"),$this->ItemType,$this->CacheListExtraId("myitems"),(int)$attribs["_today"],3600); - if(!is_numeric($CachedCount)) - { - $this->QueryItemCount= QueryCount($sql); - $objCountCache->SetValue($this->CacheListType("myitems"),$this->ItemType,$this->CacheListExtraId("myitems"),(int)$attribs["_today"],$this->QueryItemCount); - } - else - $this->QueryItemCount=$CachedCount; - - return $this->Query_Item($sql); - } - - function SqlNewItems($attribs = array()) - { - global $objSession, $objCatList; - - $catid = (int)$attribs["_catid"]; - $scope = (int)$attribs["_scope"]; - //$JoinCats = (int)$attribs["_catinfo"] || $scope; - - $TableName = $this->SourceTable; - if($attribs["_today"]) - { - $cutoff = mktime(0,0,0,date("m"),date("d"),date("Y")); - } - else - { - if($scope) - { - if (!$catid) - { - $catid = $objCatList->CurrentCategoryID(); - } - $cutoff = $this->GetNewValue($catid); - } - else - $cutoff = $this->GetNewValue(); - } - if($scope) - { - if (!$catid) - { - $catid = $objCatList->CurrentCategoryID(); - } - - $where = "CategoryId =".$catid." AND ((".$TableName.".CreatedOn >=".$cutoff." AND ".$TableName.".NewItem != 0) OR ".$TableName.".NewItem=1 ) AND ".$TableName.".Status=1 "; - } - else - { - $where = "((".$TableName.".CreatedOn >=".$this->GetNewValue()." AND ".$TableName.".NewItem != 0) OR ".$TableName.".NewItem=1 ) AND ".$TableName.".Status=1 "; - } - - $CategoryTable = GetTablePrefix()."Category"; - $sql = "SELECT $TableName.*,$CategoryTable.CategoryId,$CategoryTable.CachedNavBar FROM $TableName "; - $p = $this->BasePermission.".VIEW"; - $sql .= $this->GetJoinedSQL($p,$CatUd,$where); - - $OrderBy = $this->QueryOrderByClause(TRUE,TRUE,TRUE); - $sql .= " ".$OrderBy; - return $sql; - } - - function LoadNewItems($attribs) - { - global $objSession,$objCountCache; - - $sql = $this->SqlNewItems($attribs); - - if($objSession->HasSystemPermission("DEBUG.LIST")) - echo htmlentities($sql,ENT_NOQUOTES)."
\n"; - if($attribs["_shortlist"]) - { - $this->PerPageVar = $this->PerPageShortVar; - } - else - $this->PerPageVar = $this->PerPageVarLong; - - $CachedCount = $objCountCache->GetValue($this->CacheListType("new"),$this->ItemType,$this->CacheListExtraId("new"),(int)$attribs["_today"],3600); - if(!is_numeric($CachedCount)) - { - $this->QueryItemCount= QueryCount($sql); - $objCountCache->SetValue($this->CacheListType("new"),$this->ItemType,$this->CacheListExtraId("new"),(int)$attribs["_today"],$this->QueryItemCount); - } - else - $this->QueryItemCount=$CachedCount; - - - return $this->Query_Item($sql); - } - - function SqlPopItems($attribs) - { - global $objSession, $objCatList; - - $catid = (int)$attribs["_catid"]; - $scope = (int)$attribs["_scope"]; - //$JoinCats = (int)$attribs["_catinfo"] || $scope; - - $TableName = $this->SourceTable; - - if($scope) - { - if (!$catid) - { - $catid = $objCatList->CurrentCategoryID(); - } - $where = "CategoryId =".$catid." AND ((".$TableName.".Hits >=".$this->GetLinkPopValue()." AND ".$TableName.".PopItem !=0) OR ".$TableName.".PopItem=1) AND ".$TableName.".Status=1"; - } - else - { - $where = "((".$TableName.".CachedRating >=".$this->GetPopValue()." AND ".$TableName.".PopItem !=0 ) OR ".$TableName.".PopItem=1) AND ".$TableName.".Status=1 "; - - $where = "((".$TableName.".Hits >=".$this->GetPopValue()." AND ".$TableName.".PopItem !=0) OR ".$TableName.".PopItem=1) AND ".$TableName.".Status=1 "; - } - if($attribs["_today"]) - { - $today = mktime(0,0,0,date("m"),date("d"),date("Y")); - $where .= " AND ($TableName.CreatedOn>=$today)"; - } - $CategoryTable = GetTablePrefix()."Category"; - $sql = "SELECT $TableName.*,$CategoryTable.CategoryId,$CategoryTable.CachedNavBar FROM $TableName "; - $p = $this->BasePermission.".VIEW"; - $sql .= $this->GetJoinedSQL($p,$catid,$where); - - $OrderBy = $this->QueryOrderByClause(TRUE,TRUE,TRUE); - $sql .= " ".$OrderBy; - - return $sql; - } - - function LoadPopItems($attribs) - { - global $objSession,$objCountCache; - $sql = $this->SqlPopItems($attribs); - - if($objSession->HasSystemPermission("DEBUG.LIST")) - echo htmlentities($sql,ENT_NOQUOTES)."
\n"; - if($attribs["_shortlist"]) - { - $this->PerPageVar = $this->PerPageShortVar; - } - else - $this->PerPageVar = $this->PerPageVarLong; - - $CachedCount = $objCountCache->GetValue($this->CacheListType("pop"),$this->ItemType,$this->CacheListExtraId("pop"),(int)$attribs["_today"],3600); - if(!is_numeric($CachedCount)) - { - $this->QueryItemCount= QueryCount($sql); - $objCountCache->SetValue($this->CacheListType("pop"),$this->ItemType,$this->CacheListExtraId("pop"),(int)$attribs["_today"],$this->QueryItemCount); - } - else - $this->QueryItemCount=$CachedCount; - - return $this->Query_Item($sql); - } - - function SqlHotItems($attribs) - { - global $objSession, $objCatList; - - $catid = (int)$attribs["_catid"]; - $scope = (int)$attribs["_scope"]; - -// $JoinCats = (int)$attribs["_catinfo"] || $scope; - - $TableName = $this->SourceTable; - - $OrderBy = $TableName.".CachedRating DESC"; - - if($scope) - { - if (!$catid) - { - $catid = $objCatList->CurrentCategoryID(); - } - $where = "CategoryId =".$catid." AND ((".$TableName.".CachedRating >=".$this->GetHotValue()." AND ".$TableName.".PopItem !=0) OR ".$TableName.".PopItem=1) AND ".$TableName.".Status=1"; - } - else - { - $where = "((".$TableName.".CachedRating >=".$this->GetPopValue()." AND ".$TableName.".PopItem !=0 ) OR ".$TableName.".PopItem=1) AND ".$TableName.".Status=1 "; - } - - if($attribs["_today"]) - { - $today = mktime(0,0,0,date("m"),date("d"),date("Y")); - $where .= " AND ($TableName.CreatedOn>=$today)"; - } - $CategoryTable = GetTablePrefix()."Category"; - $sql = "SELECT $TableName.*,$CategoryTable.CategoryId,$CategoryTable.CachedNavBar FROM $TableName "; - $p = $this->BasePermission.".VIEW"; - $CatId = !$scope? NULL : $catid; - $sql .= $this->GetJoinedSQL($p,$CatId,$where); - - if(strlen($OrderBy)) - $sql .= " ORDER BY $OrderBy "; - - return $sql; - } - - function LoadHotItems($attribs) - { - global $objSession,$objCountCache; - - $sql = $this->SqlHotItems($attribs); - if($objSession->HasSystemPermission("DEBUG.LIST")) - echo htmlentities($sql,ENT_NOQUOTES)."
\n"; - - if($attribs["_shortlist"]) - { - $this->PerPageVar = $this->PerPageShortVar; - } - else - $this->PerPageVar = $this->PerPageVarLong; - - $CachedCount = $objCountCache->GetValue($this->CacheListType("hot"),$this->ItemType,$this->CacheListExtraId("hot"),(int)$attribs["_today"], 0); - if(!is_numeric($CachedCount)) - { - $this->QueryItemCount= QueryCount($sql); - $objCountCache->SetValue($this->CacheListType("hot"),$this->ItemType,$this->CacheListExtraId("hot"),(int)$attribs["_today"],$this->QueryItemCount); - } - else - $this->QueryItemCount=$CachedCount; - - return $this->Query_Item($sql); - } - - function SqlSearchItems($attribs = array()) - { - global $objConfig, $objItemTypes, $objSession, $objPermissions, $CountVal; - - $acl = $objSession->GetACLClause(); - $this->Clear(); - //$stable = "ses_".$objSession->GetSessionKey()."_Search"; - $stable = $objSession->GetSearchTable(); - $ltable = $this->SourceTable; - $catitems = GetTablePrefix()."CategoryItems"; - $cattable = GetTablePrefix()."Category"; - $ptable = GetTablePrefix()."PermCache"; - $p = $this->BasePermission.".VIEW"; - $i = new $this->classname(); - - $sql = "SELECT $cattable.CategoryId,$cattable.CachedNavbar,$ltable.*, Relevance FROM $stable "; - $sql .= "INNER JOIN $ltable ON ($stable.ItemId=$ltable.".$i->id_field.") "; - - $where = "ItemType=".$this->ItemType." AND $ltable.Status=1"; - - $sql .= $this->GetJoinedSQL($p,NULL,$where); - $sql .= " ORDER BY EdPick DESC,Relevance DESC "; - - $tmp = $this->QueryOrderByClause(FALSE,TRUE,TRUE); - $tmp = substr($tmp,9); - if(strlen($tmp)) - { - $sql .= ", ".$tmp." "; - } - return $sql; - } - - function LoadSearchItems($attribs = array()) - { - global $CountVal, $objSession; - //echo "Loading ".get_class($this)." Search Items
"; - $sql = $this->SqlSearchItems($attribs); - //echo "$sql
"; - $this->Query_Item($sql); - $Keywords = GetKeywords($objSession->GetVariable("Search_Keywords")); - //echo "SQL Loaded ItemCount (".get_class($this).'): '.$this->NumItems().'
'; - for($i = 0; $i < $this->NumItems(); $i++) - { - $this->Items[$i]->Keywords = $Keywords; - } - if(is_numeric($CountVal[$this->ItemType])) - { - $this->QueryItemCount = $CountVal[$this->ItemType]; - //echo "CACHE:
"; print_r($CountVal); echo "

"; - } - else - { - $this->QueryItemCount = QueryCount($sql); - //echo "SQL: ".$sql."

"; - $CountVal[$this->ItemType] = $this->QueryItemCount; - } - - } - - function PasteFromClipboard($TargetCat,$NameField="") - { - global $objSession,$objCatList; - - $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) // paste to other category then current - { - $item->MoveToCategory($ClipBoard["source"],$TargetCat); - $clip = str_replace("CUT","COPY",$clip); - $objSession->SetVariable("ClipBoard",$clip); - } - else - { - $item->CopyToNewResource($TargetCat,$NameField); // create item copy, but with new ResourceId - $item->AddToCategory($TargetCat); - UpdateCategoryCount($item->type,$TargetCat); - - } - } - } - } - - function AdminPrintItems($template) - { - // prints item listing for admin (browse/advanced view) tabs - $o = ''; - - $i = 1; - - $topleft = 0; - $topright = 0; - $rightcount = 0; - $total_items = $this->NumItems(); - $topleft = ceil($total_items / 2); - $topright = $total_items - $topleft; - - for($x = 0; $x < $topleft; $x++) - { - //printingleft - $item = $this->Items[$x]; - if ($i > 2) - { - $o .= "\n"; - $i = 1; - } - $o .= $item->AdminParseTemplate($template); - $i++; - - //printingright - if ($rightcount < $topright && ( ($x + $topleft) < $total_items) ) - { - $item = $this->Items[ $x + $topleft ]; - if ($i > 2) - { - $o.="\n"; - $i = 1; - } - $o .= $item->AdminParseTemplate($template); - $i++; - $rightcount++; - } - } - $o .= "\n
\n"; - - return $o; - } - -} - -// -------------- NEW CLASSES ----------------------- - -class DBList { - - // table related attributes - var $db = null; - var $table_name = ''; - var $LiveTable = ''; - var $EditTable = ''; - - - // record related attributes - var $records = Array(); - var $record_count = 0; - var $cur_rec = -1; // "-1" means no records, or record index otherwise - - // query related attributes - var $SelectSQL = "SELECT * FROM %s"; - - function DBList() - { - // use $this->SetTable('live', 'table name'); - // in inherited constructors to set table for list - $this->db =&GetADODBConnection(); - } - - function SetTable($action, $table_name = null) - { - // $action = {'live', 'restore','edit'} - switch($action) - { - case 'live': - $this->LiveTable = $table_name; - $this->table_name = $this->LiveTable; - break; - case 'restore': - $this->table_name = $this->LiveTable; - break; - case 'edit': - global $objSession; - $this->table_name = $objSession->GetEditTable($this->LiveTable); - break; - } - } - - function Clear() - { - // no use of this method at a time :) - $this->records = Array(); - $this->record_count = 0; - $this->cur_rec = -1; - } - - function Query() - { - // query list - $sql = sprintf($this->SelectSQL, $this->table_name); - echo "SQL: $sql
"; - $rs =& $this->db->Execute($sql); - - if( $this->db->ErrorNo() == 0 ) - { - $this->records = $rs->GetRows(); - $this->record_count = count($this->records); - //$this->cur_rec = $this->record_count ? 0 : -1; - } - else - return false; - } - - function ProcessList($callback_method) - { - // process list using user-defined method called - // with one parameter - current record fields - // (associative array) - if($this->record_count > 0) - { - $this->cur_rec = 0; - while($this->cur_rec < $this->record_count) - { - if( method_exists($this, $callback_method) ) - $this->$callback_method( $this->GetCurrent() ); - $this->cur_rec++; - } - } - } - - function &GetCurrent() - { - // return currently processed record (with change ability) - return ($this->cur_rec != -1) ? $this->records[$this->cur_rec] : false; - } - - function GetDBField($field_name) - { - $rec =& $this->GetCurrent(); - return is_array($rec) && isset($rec[$field_name]) ? $rec[$field_name] : false; - } -} - - -?> +clsItemDB(); + + $this->Parser = new clsTemplateList($TemplateRoot); + + $this->AdminParser = new clsAdminTemplateList(); + + } + + + +/* function ParseObject($element) + + { + + $extra_attribs = ExtraAttributes($element->attributes); + + if(strtolower($element->name)==$this->TagPrefix) + + { + + $field = strtolower($element->attributes["_field"]); + + $tag = $this->TagPrefix."_".$field; + + $ret = $this->parsetag($tag); + + } + + return $ret; + + } + +*/ + + function ParseTimeStamp($d,$attribs=array()) + + { + + if( isset($attribs["_tz"]) ) + + { + + $d = GetLocalTime($d,$objSession->Get("tz")); + + } + + $part = isset($attribs["_part"]) ? strtolower($attribs["_part"]) : ''; + + if(strlen($part)) + + { + + $ret = ExtractDatePart($part,$d); + + } + + else + + { + + if($d<=0) + + { + + $ret = ""; + + } + + else + + $ret = LangDate($d); + + } + + return $ret; + + } + + + + function ParseObject($element) + + { + + global $objConfig, $objCatList, $var_list_update, $var_list, $n_var_list_update, $m_var_list_update; + + + + $extra_attribs = ExtraAttributes($element->attributes); + + $ret = ""; + + + + if ($this->TagPrefix == "email" && strtolower($element->name) == "touser") { + + $this->TagPrefix = "touser"; + + } + + + + if(strtolower($element->name)==$this->TagPrefix) + + { + + $field = strtolower($element->attributes["_field"]); + + switch($field) + + { + + case "id": + + $ret = $this->Get($this->id_field); + + break; + + case "resourceid": + + if(!$this->NoResourceId) + + $ret = $this->Get("ResourceId"); + + break; + + case "category": + + $c = $objCatList->GetItem($this->Get("CategoryId")); + + if(is_object($c)) + + { + + $ret = $c->parsetag($element->attributes["_cattag"]); + + } + + break; + + case "priority": + + if($this->Get("Priority")!=0) + + { + + $ret = (int)$this->Get("Priority"); + + } + + else + + $ret = ""; + + break; + + case "link": + + if(method_exists($this,"ItemURL")) + + { + + $ret = $this->ItemURL($element->attributes["_template"],FALSE,""); + + } + + break; + + case "cat_link": + + if(method_exists($this,"ItemURL")) + + { + + $ret = $this->ItemURL($element->attributes["_template"],TRUE,""); + + } + + break; + + case "fullpath": + + $ret = $this->Get("CachedNavbar"); + + if(!strlen($ret)) + + { + + if(is_numeric($this->Get("CategoryId"))) + + { + + $c = $objCatList->GetItem($this->Get("CategoryId")); + + if(is_object($c)) + + $ret = $c->Get("CachedNavbar"); + + } + + else + + { + + if(method_exists($this,"GetPrimaryCategory")) + + { + + $cat = $this->GetPrimaryCategory(); + + $c = $objCatList->GetItem($cat); + + if(is_object($c)) + + $ret = $c->Get("CachedNavbar"); + + } + + } + + } + + // $ret = $this->HighlightText($ret); + + break; + + + + case "relevance": + + $style = $element->attributes["_displaymode"]; + + if(!strlen($style)) + + $style = "numerical"; + + switch ($style) + + { + + case "numerical": + + $ret = (100 * LangNumber($this->Get("Relevance"),1))."%"; + + break; + + case "bar": + + $OffColor = $element->attributes["_offbackgroundcolor"]; + + $OnColor = $element->attributes["_onbackgroundcolor"]; + + $percentsOff = (int)(100 - (100 * $this->Get("Relevance"))); if ($percentsOff) + + { + + $percentsOn = 100 - $percentsOff; + + $ret = ""; + + } + + else + + $ret = ""; + + break; + + case "graphical": + + $OnImage = $element->attributes["_onimage"]; + + if (!strlen($OnImage)) + + break; + + // Get image extension + + $image_data = explode(".", $OnImage); + + $image_ext = $image_data[count($image_data)-1]; + + unset($image_data[count($image_data)-1]); + + $rel = (10 * LangNumber($this->Get("Relevance"),1)); + + $OnImage1 = join(".", $image_data); + + + + if ($rel) + + $img_src = $OnImage1."_".$rel.".".$image_ext; + + else + + $img_src = $OnImage; + + + + $ret = "\"".(10*$rel)."\""; + + break; + + } + + + + break; + + + + case "rating": + + $style = $element->GetAttributeByName("_displaymode"); + + if(!strlen($style)) + + $style = "numerical"; + + switch($style) + + { + + case "numerical": + + $ret = LangNumber($this->Get("CachedRating"),1); + + break; + + case "text": + + $ret = RatingText($this->Get("CachedRating")); + + break; + + case "graphical": + + $OnImage = $element->attributes["_onimage"]; + + $OffImage = $element->attributes["_offimage"]; + + $images = RatingTickImage($this->Get("CachedRating"),$OnImage,$OffImage); + + + + for($i=1;$i<=count($images);$i++) + + { + + $url = $images[$i]; + + if(strlen($url)) + + { + + $ret .= ""; + + $ret .= $element->attributes["_separator"]; + + } + + } + + break; + + } + + break; + + case "reviews": + + $today = FALSE; + + + + if(method_exists($this,"ReviewCount")) + + { + + if($element->GetAttributeByName("_today")) + + $today = TRUE; + + $ret = $this->ReviewCount($today); + + } + + else + + $ret = ""; + + + + break; + + case "votes": + + $ret = (int)$this->Get("CachedVotesQty"); + + break; + + + + case "favorite": + + if(method_exists($this,"IsFavorite")) + + { + + if($this->IsFavorite()) + + { + + $ret = $element->attributes["_label"]; + + if(!strlen($ret)) + + $ret = "lu_favorite"; + + $ret = language($ret); + + } + + else + + $ret = ""; + + } + + break; + + case "new": + + if(method_exists($this,"IsNewItem")) + + { + + if($this->IsNewItem()) + + { + + $ret = $element->GetAttributeByName('_label'); + + if(!strlen($ret)) + + $ret = "lu_new"; + + $ret = language($ret); + + } + + else + + $ret = ""; + + } + + break; + + case "pop": + + if(method_exists($this,"IsPopItem")) + + { + + if($this->IsPopItem()) + + { + + $ret = $element->attributes["_label"]; + + if(!strlen($ret)) + + $ret = "lu_pop"; + + $ret = language($ret); + + } + + else + + $ret = ""; + + } + + break; + + case "hot": + + if(method_exists($this,"IsHotItem")) + + { + + if($this->IsHotItem()) + + { + + $ret = $element->GetAttributeByName("_label"); + + if(!strlen($ret)) + + $ret = "lu_hot"; + + $ret = language($ret); + + } + + else + + $ret = ""; + + } + + break; + + case "pick": + + if($this->Get("EditorsPick")==1) + + { + + $ret = $element->GetAttributeByName('_label'); + + if(!strlen($ret)) + + $ret = "lu_pick"; + + $ret = language($ret); + + } + + else + + $ret = ""; + + break; + + case "admin_icon": + + if(method_exists($this,"StatusIcon")) + + { + + if($element->GetAttributeByName("fulltag")) + + { + + $ret = "StatusIcon()."\">"; + + } + + else + + $ret = $this->StatusIcon(); + + } + + break; + + case "custom": + + if(method_exists($this,"GetCustomFieldValue")) + + { + + $field = $element->attributes["_customfield"]; + + $default = $element->attributes["_default"]; + + if (strlen($field)) + + $ret = $this->GetCustomFieldValue($field,$default); + + } + + break; + + case "image": + + $default = $element->attributes["_primary"]; + + $name = $element->attributes["_name"]; + + + + if(strlen($name)) + + { + + $img = $this->GetImageByName($name); + + } + + else + + { + + if($default) + + $img = $this->GetDefaultImage(); + + } + + + + if(is_object($img)) + + { + + + + if(strlen($element->attributes["_imagetemplate"])) + + { + + $ret = $img->ParseTemplate($element->attributes["_imagetemplate"]); + + break; + + } + + else + + { + + if($element->attributes["_thumbnail"]) + + { + + $url = $img->parsetag("thumb_url"); + + } + + else + + { + + + + if(!$element->attributes["_nothumbnail"]) + + { + + $url = $img->parsetag("image_url"); + + } + + else + + { + + $url = $img->FullURL(TRUE,""); + + } + + } + + } + + } + + else + + { + + $url = $element->attributes["_defaulturl"]; + + + + } + + + + if($element->attributes["_imagetag"]) + + { + + if(strlen($url)) + + { + + $ret = ""; + + } + + else + + $ret = ""; + + } + + else + + $ret = $url; + + break; + + default: + + $ret = "Undefined:".$element->name; + + break; + + } + + + + } + + else if ($this->TagPrefix == 'email'){ + + $ret = "Undefined:".$element->name; + + } + + return $ret; + + } + + + + function ParseString($name) + + { + + $el = new clsHtmlTag(); + + $el->Clear(); + + $el->prefix = "inp"; + + $el->name = $name; + + + + $numargs = func_num_args(); + + $arg_list = func_get_args(); + + for ($i = 1; $i < $numargs; $i++) + + { + + $attr = $arg_list[$i]; + + $parts = explode("=",$attr,2); + + $name = $parts[0]; + + $val = $parts[1]; + + $el->attributes[$name] = $val; + + } + + return $this->ParseObject($el); + + } + + + + /* pass attributes as strings + + ie: ParseStringEcho('tagname','_field="something" _data="somethingelse"'); + + */ + + function ParseStringEcho($name) + + { + + $el = new clsHtmlTag(); + + $el->Clear(); + + $el->prefix = "inp"; + + $el->name = $name; + + + + $numargs = func_num_args(); + + $arg_list = func_get_args(); + + for ($i = 1; $i < $numargs; $i++) + + { + + $attr = $arg_list[$i]; + + $parts = explode("=",$attr,2); + + $name = $parts[0]; + + $val = $parts[1]; + + $el->attributes[$name] = $val; + + } + + echo $this->ParseObject($el); + + } + + + + function ParseElement($raw, $inner_html ="") + + { + + $tag = new clsHtmlTag($raw); + + $tag->inner_html = $inner_html; + + + + if($tag->parsed) + + { + + if($tag->name=="include" || $tag->name=="perm_include" || $tag->name=="lang_include") + + { + + $output = $this->Parser->IncludeTemplate($tag); + + } + + else + + { + + $output = $this->ParseObject($tag); + + //echo $output."
"; + + if(substr($output,0,9)=="Undefined") + + { + + $output = $tag->Execute(); + + // if(substr($output,0,8)="{Unknown") + + // $output = $raw; + + } return $output; + + } + + } + + else + + return ""; + + } + + + + function AdminParseTemplate($file) + + { + + $html = ""; + + $t = $this->AdminParser->GetTemplate($file); + + + + if(is_object($t)) + + { + + array_push($this->AdminParser->stack,$file); + + $html = $t->source; + + $next_tag = strpos($html,"",$next_tag); + + $tagtext = substr($html,$next_tag,($end_tag - $next_tag)+2); + + $pre = substr($html,0,$next_tag); + + $post = substr($html,$end_tag+2); + + $inner = $this->ParseElement($tagtext); + + $html = $pre.$inner.$post; + + $next_tag = strpos($html,"AdminParser->stack); + + } + + return $html; + + } + + + + function ParseTemplateText($text) + + { + + $html = $text; + + $search = "TagPrefix; + + //$next_tag = strpos($html,"",$next_tag); + + $end_tag = strpos($html,"/>",$next_tag); + + if($end_tag < $closer || $closer == 0) + + { + + $tagtext = substr($html,$next_tag,($end_tag - $next_tag)+2); + + $pre = substr($html,0,$next_tag); + + $post = substr($html,$end_tag+2); + + $inner = $this->ParseElement($tagtext); + + $html = $pre.$inner.$post; + + } + + else + + { + + + + $OldTagStyle = ""; + + + + ## Try to find end of TagName + + $TagNameEnd = strpos($html, " ", $next_tag); + + + + ## Support Old version + +// $closer = strpos(strtolower($html),"",$next_tag); + + if ($TagNameEnd) + + { + + $Tag = strtolower(substr($html, $next_tag, $TagNameEnd-$next_tag)); + + $TagName = explode(":", $Tag); + + if (strlen($TagName[1])) + + $CloserTag = ""; + + } + + else + + { + + $CloserTag = $OldTagStyle; + + } + + + + $closer = strpos(strtolower($html), $CloserTag, $next_tag); + + + + ## Try to find old tag closer + + if (!$closer && ($CloserTag != $OldTagStyle)) + + { + + $CloserTag = $OldTagStyle; + + $closer = strpos(strtolower($html), $CloserTag, $next_tag); + + } + + + + $end_tag = strpos($html,">",$next_tag); + + $tagtext = substr($html,$next_tag,($end_tag - $next_tag)+1); + + $pre = substr($html,0,$next_tag); + + $inner = substr($html,$end_tag+1,$closer-($end_tag+1)); + + $post = substr($html,$end_tag+1+strlen($inner) + strlen($CloserTag)); + + //echo "PRE:". htmlentities($pre,ENT_NOQUOTES); + + //echo "INNER:". htmlentities($inner,ENT_NOQUOTES); + + //echo "POST:". htmlentities($post,ENT_NOQUOTES); + + + + $parsed = $this->ParseElement($tagtext); + + if(strlen($parsed)) + + { + + $html = $pre.$this->ParseTemplateText($inner).$post; + + } + + else + + $html = $pre.$post; + + } + + $next_tag = strpos($html,$search); + + } + + return $html; + + } + + + + function ParseTemplate($tname) + + { + + global $objTemplate, $LogLevel,$ptime,$timestart; + + + + //echo 'Saving ID'.$this->UniqueId().' in Main parseTempalate
'; + + //$GLOBALS[$this->TagPrefix.'_ID'] = $this->UniqueId(); + + LogEntry("Parsing $tname\n"); + + $LogLevel++; + + $html = ""; + + $t = $objTemplate->GetTemplate($tname); + + //$t = $this->Parser->GetTemplate($tname); + + if( is_array($this->Parser->stack) ) $this->Parser->stack = Array(); + + if(is_object($t)) + + { + + array_push($this->Parser->stack,$tname); + + $html = $t->source; + + + + $html = $this->ParseTemplateText($html); + + array_pop($this->Parser->stack); + + } + + $LogLevel--; + + LogEntry("Finished Parsing $tname\n"); + + $ptime = round(getmicrotime() - $timestart,6); + + $xf = 867530; //Download ID + + if($xf != 0) + + { + + $x2 = substr($ptime,-6); + + $ptime .= $xf ^ $x2; //(1/1000); + + } + + return $html; + + } + + + + function SendUserEventMail($EventName,$ToUserId,$LangId=NULL,$RecptName=NULL) + + { + + global $objMessageList,$FrontEnd; + + + + $Event =& $objMessageList->GetEmailEventObject($EventName,0,$LangId); + + + + if(is_object($Event)) + + { + + if($Event->Get("Enabled")=="1" || ($Event->Get("Enabled")==2 && $FrontEnd)) + + { + + $Event->Item = $this; + + if(is_numeric($ToUserId)) + + { + + return $Event->SendToUser($ToUserId); + + } + + else + + return $Event->SendToAddress($ToUserId,$RecptName); + + } + + } + + } + + + + function SendAdminEventMail($EventName,$LangId=NULL) + + { + + global $objMessageList,$FrontEnd; + + + + //echo "Firing Admin Event $EventName
\n"; + + $Event =& $objMessageList->GetEmailEventObject($EventName,1,$LangId); + + if(is_object($Event)) + + { + + if($Event->Get("Enabled")=="1" || ($Event->Get("Enabled")==2 && $FrontEnd)) + + { + + $Event->Item = $this; + + //echo "Admin Event $EventName Enabled
\n"; + + return $Event->SendAdmin($ToUserId); + + } + + } + + } + + + + function parse_template($t) + + { + + } + + + +} + + + +class clsItemCollection + +{ + + var $Items; + + var $CurrentItem; + + var $adodbConnection; + + var $classname; + + var $SourceTable; + + var $LiveTable; + + var $QueryItemCount; + + var $AdminSearchFields = array(); + + var $SortField; + + var $debuglevel; + + var $id_field = null; // id field for list item + + var $BasePermission; + + var $Dummy = null; + + + + // enshure that same sql won't be queried twice + + var $QueryDone = false; + + var $LastQuerySQL = ''; + + + + function SetTable($action, $table_name = null) // new by Alex + + { + + // $action = {'live', 'restore','edit'} + + switch($action) + + { + + case 'live': + + $this->LiveTable = $table_name; + + $this->SourceTable = $this->LiveTable; + + break; + + case 'restore': + + $this->SourceTable = $this->LiveTable; + + break; + + case 'edit': + + global $objSession; + + $this->SourceTable = $objSession->GetEditTable($this->LiveTable); + + break; + + } + + } + + + + function &GetDummy() // new by Alex + + { + + if( !isset($this->Dummy) ) + + $this->Dummy =& new $this->classname(); + + $this->Dummy->tablename = $this->SourceTable; + + return $this->Dummy; + + } + + + + function clsItemCollection() + + { + + + + $this->adodbConnection = &GetADODBConnection(); + + + + $this->Clear(); + + $this->BasePermission=""; + + } + + + + function GetIDField() // new by Alex + + { + + // returns id field for list item + + if( !isset($this->id_field) ) + + { + + $dummy =& $this->GetDummy(); + + $this->id_field = $dummy->IdField(); + + } + + return $this->id_field; + + } + + + + function &GetNewItemClass() + + { + + return new $this->classname(); + + } + + + + function Clear() + + { + + unset($this->Items); + + $this->Items = array(); + + $this->CurrentItem=0; + + } + + + + function &SetCurrentItem($id) + + { + + $this->CurrentItem=$id; + + return $this->GetItem($id); + + } + + + + function &GetCurrentItem() + + { + + if($this->CurrentItem>0) + + { + + return $this->GetItem($this->CurrentItem); + + } + + else + + return FALSE; + + } + + + + function NumItems() + + { + + if(is_array($this->Items)) + + { + +// echo "TEST COUNT: ".count($this->Items)."
"; + + return count($this->Items); + + } + + else + + return 0; + + } + + + + function ItemLike($index, $string) + + { + + // check if any of the item field + + // even partially matches $string + + $found = false; + + $string = strtolower($string); + + $item_data = $this->Items[$index]->GetData(); + + foreach($item_data as $field => $value) + + if( in_array($field, $this->AdminSearchFields) ) + + if( strpos(strtolower($value), $string) !== false) + + { + + $found = true; + + break; + + } + + return $found; + + } + + + + function DeleteItem($index) // by Alex + + { + + // deletes item with specific index from list + + $i = $index; $item_count = $this->NumItems(); + + while($i < $item_count - 1) + + { + + $this->Items[$i] = $this->Items[$i + 1]; + + $i++; + + } + + unset($this->Items[$i]); + + } + + + + function ShowItems() + + { + + $i = 0; $item_count = $this->NumItems(); + + while($i < $item_count) + + { + + echo "Item No $i:
"; + + $this->Items[$i]->PrintVars(); + + $i++; + + } + + } + + + + function SwapItems($Index,$Index2) + + { + + $temp = $this->Items[$Index]->GetData(); + + $this->Items[$Index]->SetData($this->Items[$Index2]->GetData()); + + $this->Items[$Index2]->SetData($temp); + + + + } + + + + function CopyResource($OldId,$NewId) + + { + + $this->Clear(); + + + + $sql = "SELECT * FROM ".$this->SourceTable." WHERE ResourceId=$OldId"; + + $this->Query_Item($sql); + +// echo $sql."
\n"; + + if($this->NumItems()>0) + + { + + foreach($this->Items as $item) + + { + + $item->UnsetIdField(); + + $item->Set("ResourceId",$NewId); + + $item->Create(); + + } + + } + + } + + function ItemsOnClipboard() + + { + + global $objSession; + + $clip = $objSession->GetPersistantVariable("ClipBoard"); + + $count = 0; + + $table = $this->SourceTable; + + $prefix = GetTablePrefix(); + + + + + + if(substr($table,0,strlen($prefix))==$prefix) + + $table = substr($table,strlen($prefix)); + + + + + + if(strlen($clip)) + + { + + $clipboard = ParseClipboard($clip); + + if($clipboard["table"] == $table) + + { + + $count = count(explode(",",$clipboard["ids"])); + + } + + else + + $count = 0; + + } + + else + + $count = 0; + + + + return $count; + + } + + + + function CopyToClipboard($command,$idfield, $idlist) + + { + + global $objSession,$objCatList; + + + + if(is_array($idlist)) + + { + + $list = implode(",",$idlist); + + } + + else + + $list = $idlist; + + $clip = $command."-".$objCatList->CurrentCategoryID().".".$this->SourceTable.".$idfield=".$list; + + + + $objSession->SetVariable("ClipBoard",$clip); + + } + + + + function SortItems($asc=TRUE) + + { + + $done = FALSE; + + + + $field = $this->SortField; + + $ItemCount = $this->NumItems(); + + while(!$done) + + { + + $done=TRUE; + + for($i=1;$i<$this->NumItems();$i++) + + { + + $doswap = FALSE; + + if($asc) + + { + + $val1 = $this->Items[$i-1]->Get($field); + + $val2 = $this->Items[$i]->Get($field); + + $doswap = ($val1 > $val2); + + } + + else + + { + + $val1 = $this->Items[$i-1]->Get($field); + + $val2 = $this->Items[$i]->Get($field); + + $doswap = ($val1 < $val2); + + } + + if($doswap) + + { + + $this->SwapItems($i-1,$i); + + $done = FALSE; + + } + + + + } + + } + + } + + + + function &GetItem($ID,$LoadFromDB=TRUE) + + { + + $found=FALSE; + + + + if(is_array($this->Items) && count($this->Items) ) + + { + + for($x=0;$xItems);$x++) + + { + + $i =& $this->GetItemRefByIndex($x); + + if($i->UniqueID()==$ID) + + { + + $found=TRUE; + + break; + + } + + } + + } + + + + if(!$found) + + { + + if($LoadFromDB) + + { + + $n = NULL; + + $n = new $this->classname(); + + $n->tablename = $this->SourceTable; + + $n->LoadFromDatabase($ID); + + $index = array_push($this->Items, $n); + + $i =& $this->Items[count($this->Items)-1]; + + } + + else + + $i = FALSE; + + } + + return $i; + + } + + + + function GetItemByIndex($index) + + { + + return $this->Items[$index]; + + } + + + + function &GetItemRefByIndex($index) + + { + + return $this->Items[$index]; + + } + + + + function &GetItemByField($Field,$Value,$LoadFromDB=TRUE) + + { + + $found=FALSE; + + if(is_array($this->Items)) + + { + + foreach($this->Items as $i) + + { + + if($i->Get($Field)==$Value) + + { + + $found = TRUE; + + break; + + } + + } + + } + + if(!$found && $LoadFromDB==TRUE) + + { + + $sql = "SELECT * FROM ".$this->SourceTable." WHERE $Field = '$Value'"; + + //echo $sql; + + $res = $this->adodbConnection->Execute($sql); + + + + if($res && !$res->EOF) + + { + + $i = $this->AddItemFromArray($res->fields); + + $i->tablename = $this->SourceTable; + + $i->Clean(); + + } + + else + + $i = FALSE; + + } + + return $i; + + } + + + + function GetPage($Page, $ItemsPerPage) + + { + + $result = array_slice($this->Items, ($Page * $ItemsPerPage) - $ItemsPerPage, $ItemsPerPage); + + return $result; + + } + + + + function GetNumPages($ItemsPerPage) + + { + + if( isset($_GET['reset']) && $_GET['reset'] == 1) $this->Page = 1; + + return GetPageCount($ItemsPerPage,$this->QueryItemCount); + + } + + + + function &AddItemFromArray($data, $clean=FALSE) + + { + + $class = new $this->classname; + + $class->SetFromArray($data); + + $class->tablename = $this->SourceTable; + + if($clean==TRUE) + + $class->Clean(); + + //array_push($this->Items,$class); + + $this->Items[] =& $class; + + return $class; + + } + + + + function Query_Item($sql, $offset=-1,$rows=-1) + + { + + global $Errors; + + //echo "Method QItem [".get_class($this).'], sql: ['.$sql.']
'; + + //if( get_class($this) == 'clsthemefilelist') trace(); + + $dummy =& $this->GetDummy(); + + if( !$dummy->TableExists() ) + + { + + if($this->debuglevel) echo "ERROR: table ".$dummy->tablename." missing.
"; + + $this->Clear(); + + return false; + + } + + + + if($rows>-1 && $offset>-1) + + { + + //print_pre(debug_backtrace()); + + //echo "Executing SelectLimit $sql Offset: $offset,$rows
\n"; + + $result = $this->adodbConnection->SelectLimit($sql, $rows,$offset); + + } + + else { + + $result = $this->adodbConnection->Execute($sql); + + } + + + + if ($result === false) + + { + + $Errors->AddError("error.DatabaseError",NULL,$this->adodbConnection->ErrorMsg(),"",get_class($this),"Query_Item"); + + if($this->debuglevel) { + + echo '

'.$sql.'

'; + + echo "Error: ".$this->adodbConnection->ErrorMsg()."
"; + + } + + $this->Clear(); + + return false; + + } + + + + $this->Clear(); + + + + if($this->debuglevel > 0) + + { + + echo "This SQL: $sql

"; + + if( ($this->debuglevel > 1) && ($result->RecordCount() > 0) ) + + { + + echo '
'.print_r($result->GetRows(), true).'
'; + + $result->MoveFirst(); + + } + + } + + //echo "SQL: $sql

"; + + LogEntry("SQL Loop Start\n"); + + $count = 0; + + + + while ($result && !$result->EOF) + + { + + $count++; + + $data = $result->fields; + + $this->AddItemFromArray($data,TRUE); + + if( defined('ADODB_EXTENSION') && constant('ADODB_EXTENSION') > 0 ) + + adodb_movenext($result); + + else + + $result->MoveNext(); + + } + + + + LogEntry("SQL Loop End ($count iterations)\n"); + + $result->Free(); + + return $this->Items; + + } + + + + function GetOrderClause($FieldVar,$OrderVar,$DefaultField,$DefaultVar,$Priority=TRUE,$UseTableName=FALSE) + + { + + global $objConfig, $objSession; + + + + if($UseTableName) + + { + + $TableName = $this->SourceTable."."; + + } + + else + + $TableName = ""; + + + + $PriorityClause = $TableName."EditorsPick DESC, ".$TableName."Priority DESC"; + + + + if(strlen(trim($FieldVar))>0) + + { + + if(is_object($objSession)) + + { + + if(strlen($objSession->GetPersistantVariable($FieldVar))>0) + + { + + $OrderBy = trim($TableName.$objSession->GetPersistantVariable($FieldVar) . " ". + + $objSession->GetPersistantVariable($OrderVar)); + + $FieldUsed = $objSession->GetPersistantVariable($FieldVar); + + } + + } + + $OrderBy = trim($OrderBy); + + if (strlen(trim($OrderBy))==0) + + { + + if(!$UseTableName) + + { + + $OrderBy = trim($DefaultField." ".$DefaultVar); + + } + + else + + { + + if(strlen(trim($DefaultField))>0) + + { + + $OrderBy = $this->SourceTable.".".$DefaultField.".".$DefaultVar; + + } + + $FieldUsed=$DefaultField; + + } + + } + + } + + if(($FieldUsed != "Priority" || strlen($OrderBy)==0) && $Priority==TRUE) + + { + + if(strlen($OrderBy)==0) + + { + + $OrderBy = $PriorityClause; + + } + + else + + $OrderBy = $PriorityClause.", ".$OrderBy; + + } + + return $OrderBy; + + } + + + + function GetResourceIDList() + + { + + $ret = array(); + + foreach($this->Items as $i) + + array_push($ret,$i->Get("ResourceId")); + + return $ret; + + } + + + + function GetFieldList($field) + + { + + $ret = array(); + + foreach($this->Items as $i) + + array_push($ret,$i->Get($field)); + + return $ret; + + } + + + + function SetCommonField($FieldName,$FieldValue) + + { + + for($i=0;$i<$this->NumItems();$i++) + + { + + $this->Items[$i]->Set($FieldName,$fieldValue); + + $this->Items[$i]->Update(); + + } + + } + + + + function ClearCategoryItems($CatId,$CatTable = "CategoryItems") + + { + + $CatTable = AddTablePrefix($CatTable); + + $sql = "SELECT * FROM ".$this->SourceTable." INNER JOIN $CatTable ". + + " ON (".$this->SourceTable.".ResourceId=$CatTable.ItemResourceId) WHERE CategoryId=$CatId"; + + $this->Clear(); + + $this->Query_Item($sql); + + if($this->NumItems()>0) + + { + + foreach($this->Items as $i) + + { + + $i->DeleteCategoryItems($CatId,$CatTable); + + } + + } + + } + + + + function CopyToEditTable($idfield = null, $idlist = 0) + + { + + global $objSession; + + + + if($idfield == null) $idfield = $this->GetIDField(); + + $edit_table = $objSession->GetEditTable($this->SourceTable); + + @$this->adodbConnection->Execute("DROP TABLE IF EXISTS $edit_table"); + + if(is_array($idlist)) + + { + + $list = implode(",",$idlist); + + } + + else + + $list = $idlist; + + $query = "SELECT * FROM ".$this->SourceTable." WHERE $idfield IN ($list)"; + + $insert = "CREATE TABLE ".$edit_table." ".$query; + + if($objSession->HasSystemPermission("DEBUG.LIST")) + + echo htmlentities($insert,ENT_NOQUOTES)."
\n"; + + $this->adodbConnection->Execute($insert); + + } + + + + function CreateEmptyEditTable($idfield = null) + + { + + global $objSession; + + if($idfield == null) $idfield = $this->GetIDField(); + + + + $edit_table = $objSession->GetEditTable($this->SourceTable); + + @$this->adodbConnection->Execute("DROP TABLE IF EXISTS $edit_table"); + + $query = "SELECT * FROM ".$this->SourceTable." WHERE $idfield = -1"; + + $insert = "CREATE TABLE ".$edit_table." ".$query; + + if($objSession->HasSystemPermission("DEBUG.LIST")) + + echo htmlentities($insert,ENT_NOQUOTES)."
\n"; + + $this->adodbConnection->Execute($insert); + + //echo $insert."
"; + + } + + + + function CopyFromEditTable($idfield = null) + + { + + global $objSession; + + + + $dropRelTableFlag = false; + + if($idfield == null) $idfield = $this->GetIDField(); + + $edit_table = $objSession->GetEditTable($this->SourceTable); + + $sql = "SELECT * FROM $edit_table"; + + $rs = $this->adodbConnection->Execute($sql); + + + + //echo "In Main CopyFromEditTable in class ".get_class($this).'
'; + + //echo $sql."
"; + + + + while($rs && !$rs->EOF) + + { + + $data = $rs->fields; + + $c = new $this->classname; + + $c->SetFromArray($data); + + $c->idfield = $idfield; + + $c->Dirty(); + + if($c->Get($idfield) < 1) + + { + + $old_id = $c->Get($idfield); + + $c->UnsetIdField(); + + if(!is_numeric($c->Get("OrgId")) || $c->Get("OrgId")==0) + + { + + $c->Clean(array("OrgId")); + + } + + else + + { + + if($c->Get("Status") != -2) + + { + + $org = new $this->classname(); + + $org->LoadFromDatabase($c->Get("OrgId")); + + $org->DeleteCustomData(); + + $org->Delete(TRUE); + + $c->Set("OrgId",0); + + } + + } + + $c->Create(); + + } + + if(is_numeric($c->Get("ResourceId"))) + + { + + if( isset($c->Related) && is_object($c->Related) ) + + { + + $r = $c->Related; + + $r->CopyFromEditTable($c->Get("ResourceId")); + + $dropRelTableFlag = true; + + } + + + + unset($r); + + + + if( isset($c->Reviews) && is_object($c->Reviews) ) + + { + + $r = $c->Reviews; + + $r->CopyFromEditTable($c->Get("ResourceId")); + + } + + } + + if(!is_numeric($c->Get("OrgId")) || $c->Get("OrgId")==0) + + { + + $c->Clean(array("OrgId")); + + } + + else + + { + + if($c->Get("Status") != -2) + + { + + $org = new $this->classname(); + + $org->LoadFromDatabase($c->Get("OrgId")); + + $org->DeleteCustomData(); + + $org->Delete(TRUE); + + $c->Set("OrgId",0); + + } + + } + + + + if(method_exists($c,"CategoryMemberList")) + + { + + $cats = $c->CategoryMemberList($objSession->GetEditTable("CategoryItems")); + + $ci_table = $objSession->GetEditTable('CategoryItems'); + + $primary_cat = $c->GetPrimaryCategory($ci_table); + + $c->Update(); + + UpdateCategoryItems($c,$cats,$primary_cat); + + } + + else + + $c->Update(); + + + + unset($c); + + unset($r); + + + + $rs->MoveNext(); + + } + + + + if ($dropRelTableFlag) + + { + + $objRelGlobal = new clsRelationshipList(); + + $objRelGlobal->PurgeEditTable(); + + } + + + + if($edit_table) @$this->adodbConnection->Execute("DROP TABLE IF EXISTS $edit_table"); + + @$this->adodbConnection->Execute("DROP TABLE IF EXISTS ".$objSession->GetEditTable("CategoryItems")); + + } + + + + function GetNextTempID() + + { + + // get next temporary id (lower then zero) from temp table + + $db =& $this->adodbConnection; + + $sql = 'SELECT MIN(%s) AS MinValue FROM %s'; + + return $db->GetOne( sprintf($sql, $this->GetIDField(), $this->SourceTable) ) - 1; + + } + + + + function PurgeEditTable($idfield = null) + + { + + global $objSession; + + + + if($idfield == null) $idfield = $this->GetIDField(); + + $edit_table = $objSession->GetEditTable($this->SourceTable); + +/* $rs = $this->adodbConnection->Execute("SELECT * FROM $edit_table"); + + while($rs && !$rs->EOF) + + { + + $data = $rs->fields; + + $c = new $this->classname; + + $c->SetFromArray($data); + + $c->id_field = $idfield; + + $c->tablename = $edit_table; + + $c->Delete(); + + $rs->MoveNext(); + + }*/ + + @$this->adodbConnection->Execute("DROP TABLE IF EXISTS $edit_table"); + + @$this->adodbConnection->Execute("DROP TABLE IF EXISTS ".$objSession->GetEditTable("CategoryItems")); + + } + + + + function CopyCatListToEditTable($idfield, $idlist) + + { + + global $objSession; + + + + $edit_table = $objSession->GetEditTable("CategoryItems"); + + @$this->adodbConnection->Execute("DROP TABLE IF EXISTS $edit_table"); + + if(is_array($idlist)) + + { + + $list = implode(",",$idlist); + + } + + else + + $list = $idlist; + + $query = "SELECT * FROM ".GetTablePrefix()."CategoryItems WHERE $idfield IN ($list)"; + + + + $insert = "CREATE TABLE ".$edit_table." ".$query; + + if($objSession->HasSystemPermission("DEBUG.LIST")) + + echo htmlentities($insert,ENT_NOQUOTES)."
\n"; + + $this->adodbConnection->Execute($insert); + + } + + + + function CreateEmptyCatListTable($idfield) + + { + + global $objSession; + + + + $edit_table = $objSession->GetEditTable("CategoryItems"); + + @$this->adodbConnection->Execute("DROP TABLE IF EXISTS $edit_table"); + + $query = "SELECT * FROM ".GetTablePrefix()."CategoryItems WHERE $idfield = -1"; + + $insert = "CREATE TABLE ".$edit_table." ".$query; + + if($objSession->HasSystemPermission("DEBUG.LIST")) + + echo htmlentities($insert,ENT_NOQUOTES)."
\n"; + + $this->adodbConnection->Execute($insert); + + } + + + + + + function PurgeCatListEditTable() + + { + + global $objSession; + + + + $edit_table = $objSession->GetEditTable("CategoryItems"); + + $this->adodbConnection->Execute("DROP TABLE IF EXISTS $edit_table"); + + } + + + + function AdminSearchWhereClause($SearchList) + + { + + $sql = ""; + + if( !is_array($SearchList) ) $SearchList = explode(",",$SearchList); + + + + // remove empty elements + + $SearchListTmp=Array(); + + for($f = 0; $f < count($SearchList); $f++) + + if($SearchList[$f]) + + $SearchListTmp[]=$SearchList[$f]; + + $SearchList=$SearchListTmp; + + + + if( !count($SearchList) || !count($this->AdminSearchFields) ) return ''; + + + + for($f = 0; $f < count($SearchList); $f++) + + { + + $value = $SearchList[$f]; + + if( strlen($value) ) + + { + + $inner_sql = ""; + + for($i = 0; $i < count($this->AdminSearchFields); $i++) + + { + + $field = $this->AdminSearchFields[$i]; + + if( strlen( trim($value) ) ) + + { + + if( strlen($inner_sql) ) $inner_sql .= " OR "; + + $inner_sql .= $field." LIKE '%".$value."%'"; + + } + + } + + if( strlen($inner_sql) ) + + { + + $sql .= '('.$inner_sql.') '; + + if($f < count($SearchList) - 1) $sql .= " AND "; + + } + + } + + } + + return $sql; + + } + + + + function BackupData($OutFileName,$Start,$Limit) + + { + + $fp=fopen($Outfile,"a"); + + if($fp) + + { + + if($Start==1) + + { + + $sql = "DELETE FROM ".$this->SourceTable; + + fputs($fp,$sql); + + } + + $this->Query_Item("SELECT * FROM ".$this->SourceTable." LIMIT $Start, $Limit"); + + foreach($this->Items as $i) + + { + + $sql = $i->CreateSQL(); + + fputs($fp,$sql); + + } + + fclose($fp); + + $this->Clear(); + + } + + } + + + + function RestoreData($InFileName,$Start,$Limit) + + { + + $res = -1; + + $fp=fopen($InFileName,"r"); + + if($fp) + + { + + fseek($fp,$Start); + + $Line = 0; + + while($Line < $Limit) + + { + + $sql = fgets($fp,16384); + + $this->adodbConnection->Execute($sql); + + $Line++; + + } + + $res = ftell($fp); + + fclose($fp); + + } + + return $res; + + } + + + + function Delete_Item($Id) + + { + + global $objCatList; + + + + $l =& $this->GetItem($Id); + + $l->BasePermission=$this->BasePermission; + + $l->DeleteCategoryItems($objCatList->CurrentCategoryID()); + + } + + + + function Move_Item($Id, $OldCat, $ParentTo) + + { + + global $objCatList; + + + + $l = $this->GetItem($Id); + + $l->BasePermission=$this->BasePermission; + + $l->AddtoCategory($ParentTo); + + $l->RemoveFromCategory($OldCat); + + } + + + + function Copy_Item($Id, $ParentTo) + + { + + $l = $this->GetItem($Id); + + $l->BasePermission=$this->BasePermission; + + $l->AddtoCategory($ParentTo); + + } + + + +}/* clsItemCollection */ + + + +class clsItemList extends clsItemCollection + +{ + + var $Page; + + var $PerPageVar; + + var $DefaultPerPage; // use this perpage value in case if no found in config + + var $EnablePaging; + + var $MaxListCount = 0; + + var $PageEnvar; + + var $PageEnvarIndex; + + var $ListType; + + + + var $LastLimitClause = ''; // used to store last limit cluse used in query + + + + function clsItemList() + + { + + $this->clsItemCollection(); + + $this->EnablePaging = TRUE; + + $this->PageEnvarIndex = "p"; + + } + + + + function GetPageLimitSQL() + + { + + global $objConfig; + + $limit = NULL; + + if($this->EnablePaging) + + { + + if($this->Page<1) + + $this->Page=1; + + //echo "Limited to ".$objConfig->Get($this->PerPageVar)." items per page
\n"; + + if(is_numeric($objConfig->Get($this->PerPageVar))) + + { + + $Start = ($this->Page-1)*$objConfig->Get($this->PerPageVar); + + $limit = "LIMIT ".$Start.",".$objConfig->Get($this->PerPageVar); + + } + + else + + $limit = NULL; + + } + + else + + { + + if($this->MaxListCount) + + { + + $limit = "LIMIT 0, $MaxListCount"; + + } + + } + + return $limit; + + } + + + + function GetPageOffset() + + { + + $Start = 0; + + if($this->EnablePaging) + + { + + if($this->Page < 1) $this->Page = 1; + + $PerPage = $this->GetPerPage(); + + $Start = ($this->Page - 1) * $PerPage; + + } + + else + + { + + if((int)$this->MaxListCount == 0) $Start = -1; + + } + + return $Start; + + } + + + + function GetPageRowCount() + + { + + if($this->EnablePaging) + + { + + if($this->Page < 1) $this->Page = 1; + + return $this->GetPerPage(); + + } + + else + + return (int)$this->MaxListCount; + + } + + + + function Query_Item($sql,$limit = null, $fix_method = 'set_first') + + { + + // query itemlist (module items) using $sql specified + + // apply direct limit clause ($limit) or calculate it if not specified + + // fix invalid page in case if needed by method specified in $fix_method + + if(strlen($limit)) + + { + + $sql .= " ".$limit; + + return parent::Query_Item($sql); + + } + + else + + { + + //echo "page fix pre (class: ".get_class($this).")
"; + + $this->QueryItemCount = QueryCount($sql); // must get total item count before fixing + + $this->FixInvalidPage($fix_method); + + + + // specially made for cats delete + + if ( GetVar('Action', true) != 'm_cat_delete') { + + return parent::Query_Item($sql,$this->GetPageOffset(),$this->GetPageRowCount()); + + } + + else { + + return parent::Query_Item($sql); + + } + + } + + } + + + + function Query_List($whereClause,$orderByClause=NULL,$JoinCats=TRUE,$fix_method='set_first') + + { + + global $objSession, $Errors; + + + + if($JoinCats) + + { + + $cattable = GetTablePrefix()."CategoryItems"; + + $t = $this->SourceTable; + + $sql = "SELECT *,CategoryId FROM $t INNER JOIN $cattable ON $cattable.ItemResourceId=$t.ResourceId"; + + } + + else + + $sql = "SELECT * FROM ". $this->SourceTable; + + if(trim($whereClause)!="") + + { + + if(isset($whereClause)) + + $sql = sprintf('%s WHERE %s',$sql,$whereClause); + + } + + if(strlen($orderByClause)>0) + + { + + if(substr($orderByClause,0,8)=="ORDER BY") + + { + + $sql .= " ".$orderByClause; + + } + + else + + { + + $sql .= " ORDER BY $orderByClause"; + + } + + } + + + + if($objSession->HasSystemPermission("DEBUG.LIST")) + + echo $sql."
\n"; + + + + return $this->Query_Item($sql, null, $fix_method); + + } + + + + function GetPerPage() + + { + + // return category perpage + + global $objConfig; + + $PerPage = $objConfig->Get( $this->PerPageVar ); + + if( !is_numeric($PerPage) ) $PerPage = $this->DefaultPerPage ? $this->DefaultPerPage : 10; + + return $PerPage; + + } + + + + function FixInvalidPage($fix_method = 'set_first') + + { + + // in case if current page > total page count, + + // then set current page to last possible "set_last" + + // or first possible "set_first" + + $PerPage = $this->GetPerPage(); + + $NumPages = ceil( $this->GetNumPages($PerPage) ); + +/* + + echo "=====
"; + + echo "Class ".get_class($this).": Page ".$this->Page." of $NumPages
"; + + echo "PerPage: $PerPage
"; + + echo "Items Queries: ".$this->QueryItemCount."
"; + + echo "=====
"; + +*/ + + if($this->Page > $NumPages) + + { + + switch($fix_method) + + { + + case 'set_first': + + $this->Page = 1; + + //echo "Move 2 First (class ".get_class($this).")
"; + + break; + + case 'set_last': + + $this->Page = $NumPages; + + //echo "Move 2 Last (class ".get_class($this).")
"; + + break; + + } + + $this->SaveNewPage(); + + } + + } + + + + function SaveNewPage() + + { + + // redefine in each list, should save to env array new page value + + + + } + + + + function GetPageLinkList($dest_template=NULL,$page = "",$PagesToList=10, $HideEmpty=TRUE,$EnvSuffix = '') + + { + + global $objConfig, $var_list_update, $var_list; + + + + + + $v= $this->PageEnvar; + + + + global ${$v}; + + + + if(!strlen($page)) + + $page = GetIndexURL(); + + + + $PerPage = $objConfig->Get($this->PerPageVar); + + if($PerPage<1) + + $PerPage=20; + + $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==0 || !is_numeric($this->Page)) + + $this->Page=1; + + 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) + + { + + ${$v}[$this->PageEnvarIndex] = $this->Page-$PagesToList; + + + + $prev_url = $page."?env=".BuildEnv().$EnvSuffix; + + $o .= "<<"; + + } + + + + for($p=$StartPage;$p<=$EndPage;$p++) + + { + + if($p!=$this->Page) + + { + + ${$v}[$this->PageEnvarIndex]=$p; + + $href = $page."?env=".BuildEnv().$EnvSuffix; + + $o .= " $p "; + + } + + else + + { + + $o .= " $p"; + + } + + } + + if($EndPage<$NumPages && $EndPage>0) + + { + + ${$v}[$this->PageEnvarIndex]=$this->Page+$PagesToList; + + + + $next_url = $page."?env=".BuildEnv().$EnvSuffix; + + $o .= " >>"; + + } + + unset(${$v}[$this->PageEnvarIndex],$var_list_update["t"] ); + + return $o; + + } + + + + function GetAdminPageLinkList($url) + + { + + global $objConfig; + + + + $update =& $GLOBALS[$this->PageEnvar]; // env_var_update + + + + // insteresting stuff :) + + if(!$this->PerPageVar) $this->PerPageVar = "Perpage_Links"; + + + + $PerPage = $objConfig->Get($this->PerPageVar); + + if($PerPage < 1) $PerPage = 20; + + + + $NumPages = ceil($this->GetNumPages($PerPage)); + + + + //echo $this->CurrentPage." of ".$NumPages." Pages"; + + + + if($this->Page > $NumPages) $this->Page = $NumPages; + + + + $StartPage = $this->Page - 5; + + if($StartPage < 1) $StartPage = 1; + + $EndPage = $StartPage + 9; + + if($EndPage > $NumPages) + + { + + $EndPage = $NumPages; + + $StartPage = $EndPage-9; + + if($StartPage < 1) $StartPage = 1; + + } + + + + $o = ''; + + + + if($StartPage > 1) + + { + + $update[$this->PageEnvarIndex]= $this->Page - 10; + + $prev_url = $url.'?env='.BuildEnv(); + + $o .= '<<'; + + } + + + + + + for($p = $StartPage; $p <= $EndPage; $p++) + + { + + if($p != $this->Page) + + { + + $update[$this->PageEnvarIndex] = $p; + + $href = $url.'?env='.BuildEnv(); + + $o .= ' '.$p.' '; + + } + + else + + { + + $o .= ''.$p.''; + + } + + } + + if($EndPage < $NumPages) + + { + + $update[$this->PageEnvarIndex] = $this->Page + 10; + + $next_url = $url.'?env='.BuildEnv(); + + $o .= ' >>'; + + } + + unset( $update[$this->PageEnvarIndex] ); + + return $o; + + } + +} + + + +function ParseClipboard($clip) + +{ + + $ret = array(); + + + + $parts = explode(".",$clip,3); + + $command = $parts[0]; + + $table = $parts[1]; + + $prefix = GetTablePrefix(); + + if(substr($table,0,strlen($prefix))==$prefix) + + $table = substr($table,strlen($prefix)); + + + + $subparts = explode("=",$parts[2],2); + + $idfield = $subparts[0]; + + $idlist = $subparts[1]; + + $cmd = explode("-",$command); + + $ret["command"] = $cmd[0]; + + $ret["source"] = $cmd[1]; + + $ret["table"] = $table; + + $ret["idfield"] = $idfield; + + $ret["ids"] = $idlist; + + //print_pre($ret); + + return $ret; + +} + + + +function UpdateCategoryItems($item,$NewCatList,$PrimaryCatId = false) + +{ + + global $objCatList; + + + + $CurrentList = explode(",",$item->CategoryMemberList()); + + $del_list = array(); + + $ins_list = array(); + + + + + + if(!is_array($NewCatList)) + + { + + if(strlen(trim($NewCatList))==0) + + $NewCatList = $objCatList->CurrentCategoryID(); + + + + $NewCatList = explode(",",$NewCatList); + + } + + //print_r($NewCatList); + + + + for($i=0;$iAddToCategory($cat); + + } + + for($i=0;$iRemoveFromCategory($cat); + + } + + if($PrimaryCatId !== false) $item->SetPrimaryCategory($PrimaryCatId); + +} + + + +class clsCatItemList extends clsItemList + +{ + + var $PerPageVarLong; + + var $PerPageShortVar; + + var $Query_SortField; + + var $Query_SortOrder; + + var $ItemType; + + + + function clsCatItemList() + + { + + $this->ClsItemList(); + + $this->Query_SortField = array(); + + $this->Query_SortOrder = array(); + + } + + + + 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"; + + } + + + + if(count($this->Query_SortField)>0) + + { + + for($x=0; $xQuery_SortField); $x++) + + { + + $FieldVar = $this->Query_SortField[$x]; + + $OrderVar = $this->Query_SortOrder[$x]; + + + + if(is_object($objSession)) + + { + + $FieldVarData = $objSession->GetPersistantVariable($FieldVar); + + if(strlen($FieldVarData)>0) + + { + + $Orders[] = trim($TableName.$objSession->GetPersistantVariable($FieldVar) . " ". + + $objSession->GetPersistantVariable($OrderVar)); + + } + + } + + } + + } + + + + if(count($Orders)>0) + + { + + $OrderBy = "ORDER BY ".implode(", ",$Orders); + + } + + else + + $OrderBy=""; + + + + return $OrderBy; + + } + + + + function AddSortField($SortField, $SortOrder) + + { + + if(strlen($SortField)) + + { + + $this->Query_SortField[] = $SortField; + + $this->Query_SortOrder[] = $SortOrder; + + } + + } + + + + function ClearSortFields() + + { + + $this->Query_SortField = array(); + + $this->Query_SortOrder = array(); + + } + + + + /* skeletons in this closet */ + + + + function GetNewValue($CatId=NULL) + + { + + return 0; + + } + + + + function GetPopValue($CategoryId=NULL) + + { + + return 0; + + } + + + + /* end of skeletons */ + + + + 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 $cattable ON ($cattable.ItemResourceId=$ltable.ResourceId) "; + + $sql .="INNER JOIN $CategoryTable ON ($CategoryTable.CategoryId=$cattable.CategoryId) "; + + $sql .="INNER JOIN $ptable ON ($cattable.CategoryId=$ptable.CategoryId) "; + + $sql .="WHERE ($acl AND PermId=$VIEW AND $cattable.PrimaryCat=1 AND $CategoryTable.Status=1) "; + + + + if(strlen($AdditonalWhere)>0) + + { + + $sql .= "AND (".$AdditonalWhere.")"; + + } + + + + return $sql; + + } + + + + function SqlCategoryList($attribs = array()) + + { + + $CatTable = GetTablePrefix()."CategoryItems"; + + $t = $this->SourceTable; + + + + $sql = "SELECT *,$CatTable.CategoryId FROM $t INNER JOIN $CatTable ON $CatTable.ItemResourceId=$t.ResourceId "; + + $sql .="WHERE ($CatTable.CategoryId=".$catid." AND $t.Status=1)"; + + + + return $sql; + + } + + + + + + function CategoryCount($attribs=array()) + + { + + global $objCatList, $objCountCache; + + + + $cat = $attribs["_catid"]; + + if(!is_numeric($cat)) + + { + + $cat = $objCatList->CurrentCategoryID(); + + } + + if((int)$cat>0) + + $c = $objCatList->GetCategory($cat); + + + + $CatTable = GetTablePrefix()."CategoryItems"; + + $t = $this->SourceTable; + + + + $sql = "SELECT count(*) as MyCount FROM $t INNER JOIN $CatTable ON ($CatTable.ItemResourceId=$t.ResourceId) "; + + if($attribs["_subcats"]) + + { + + $ctable = $objCatList->SourceTable; + + $sql .= "INNER JOIN $ctable ON ($CatTable.CategoryId=$ctable.CategoryId) "; + + $sql .= "WHERE (ParentPath LIKE '".$c->Get("ParentPath")."%' "; + + if(!$attribs["_countcurrent"]) + + { + + $sql .=" AND $ctable.CategoryId != $cat) "; + + } + + else + + $sql .=") "; + + } + + else + + $sql .="WHERE ($CatTable.CategoryId=".$cat." AND $t.Status=1) "; + + + + if($attribs["_today"]) + + { + + $today = mktime(0,0,0,date("m"),date("d"),date("Y")); + + $sql .= "AND ($t.CreatedOn>=$today) "; + + } + + //echo $sql."

\n"; + + $rs = $this->adodbConnection->Execute($sql); + + $ret = ""; + + if($rs && !$rs->EOF) + + $ret = (int)$rs->fields["MyCount"]; + + return $ret; + + } + + + + function SqlGlobalCount($attribs=array()) + + { + + global $objSession; + + + + $p = $this->BasePermission.".VIEW"; + + $t = $this->SourceTable; + + if($attribs["_today"]) + + { + + $today = mktime(0,0,0,date("m"),date("d"),date("Y")); + + $where = "($t.CreatedOn>=$today)"; + + } + + + + if($attribs["_grouponly"]) + + { + + $GroupList = $objSession->Get("GroupList"); + + } + + else + + $GroupList = NULL; + + + + $sql = $this->GetCountSQL($p,NULL,$GroupList,$where); + + return $sql; + + } + + + + function DoGlobalCount($attribs) + + { + + global $objCountCache; + + + + $cc = $objCountCache->GetValue($this->CacheListType("_"),$this->ItemType,$this->CacheListExtraId("_"),(int)$attribs["_today"], 3600); + + if(!is_numeric($cc)) + + { + + $sql = $this->SqlGlobalCount($attribs); + + $ret = QueryCount($sql); + + $objCountCache->SetValue($this->CacheListType("_"),$this->ItemType,$this->CacheListExtraId("_"),(int)$attribs["_today"],$ret); + + } + + else + + $ret = $cc; + + return $ret; + + } + + + + + + function CacheListExtraId($ListType) + + { + + global $objSession; + + + + if(!strlen($ListType)) + + $ListType="_"; + + switch($ListType) + + { + + case "_": + + $ExtraId = $objSession->Get("GroupList"); + + break; + + case "category": + + $ExtraId = $objSession->Get("GroupList"); + + break; + + case "myitems": + + $ExtraId = $objSession->Get("PortalUserId"); + + break; + + case "hot": + + $ExtraId = $objSession->Get("GroupList"); + + break; + + case "pop": + + $ExtraId = $objSession->Get("GroupList"); + + break; + + case "pick": + + $ExtraId = $objSession->Get("GroupList"); + + break; + + case "favorites": + + $ExtraId = $objSession->Get("PortalUserId"); + + break; + + case "new": + + $ExtraId = $objSession->Get("GroupList"); + + break; + + } + + return $ExtraId; + + } + + + + function CacheListType($ListType) + + { + + if(!strlen($ListType)) + + $ListType="_"; + + switch($ListType) + + { + + case "_": + + $ListTypeId = 0; + + break; + + case "category": + + $ListTypeId = 1; + + break; + + case "myitems": + + $ListTypeId = 2; + + break; + + case "hot": + + $ListTypeId = 3; + + break; + + case "pop": + + $ListTypeId = 4; + + break; + + case "pick": + + $ListTypeId = 5; + + break; + + case "favorites": + + $ListTypeId = 6; + + break; + + case "new": + + $ListTypeId = 8; + + break; + + } + + return $ListTypeId; + + } + + + + function PerformItemCount($attribs=array()) + + { + + global $objCountCache, $objSession; + + + + $ret = ""; + + $ListType = $attribs["_listtype"]; + + if(!strlen($ListType)) + + $ListType="_"; + + + + $ListTypeId = $this->CacheListType($ListType); + + //echo "ListType: $ListType ($ListTypeId)
\n"; + + $ExtraId = $this->CacheListExtraId($ListType); + + switch($ListType) + + { + + case "_": + + $ret = $this->DoGlobalCount($attribs); + + break; + + case "category": + + $ret = $this->CategoryCount($attribs); + + break; + + case "myitems": + + $sql = $this->SqlMyItems($attribs); + + break; + + case "hot": + + $sql = $this->SqlHotItems($attribs); + + break; + + case "pop": + + $sql = $this->SqlPopItems($attribs); + + break; + + case "pick": + + $sql = $this->SqlPickItems($attribs); + + break; + + case "favorites": + + $sql = $this->SqlFavorites($attribs); + + break; + + case "search": + + $sql = $this->SqlSearchItems($attribs); + + break; + + case "new": + + $sql = $this->SqlNewItems($attribs); + + break; + + } + + //echo "SQL: $sql
"; + + if(strlen($sql)) + + { + + if(is_numeric($ListTypeId)) + + { + + $cc = $objCountCache->GetValue($ListTypeId,$this->ItemType,$ExtraId,(int)$attribs["_today"], 3600); + + + + if(!is_numeric($cc) || $attribs['_nocache'] == 1) + + { + + $ret = QueryCount($sql); + + $objCountCache->SetValue($ListTypeId,$this->ItemType,$ExtraId,(int)$attribs["_today"],$ret); + + } + + else + + $ret = $cc; + + } + + else + + $ret = QueryCount($sql); + + } + + + + return $ret; + + } + + + + function GetJoinedSQL($PermName, $CatId=NULL, $AdditionalWhere="") + + { + + global $objSession, $objPermissions; + + + + $ltable = $this->SourceTable; + + $acl = $objSession->GetACLClause(); + + $cattable = GetTablePrefix()."CategoryItems"; + + $CategoryTable = GetTablePrefix()."Category"; + + $ptable = GetTablePrefix()."PermCache"; + + $VIEW = $objPermissions->GetPermId($PermName); + + $sql ="INNER JOIN $cattable ON ($cattable.ItemResourceId=$ltable.ResourceId) "; + + $sql .="INNER JOIN $CategoryTable ON ($CategoryTable.CategoryId=$cattable.CategoryId) "; + + $sql .= "INNER JOIN $ptable ON ($cattable.CategoryId=$ptable.CategoryId) "; + + $sql .="WHERE ($acl AND PermId=$VIEW AND PrimaryCat=1 AND $CategoryTable.Status=1) "; + + + + if(is_numeric($CatId)) + + { + + $sql .= " AND ($CategoryTable.CategoryId=$CatId) "; + + } + + if(strlen($AdditionalWhere)>0) + + { + + $sql .= "AND (".$AdditionalWhere.")"; + + } + + return $sql; + + } + + + + function CountFavorites($attribs) + + { + + if($attribs["_today"]) + + { + + global $objSession, $objConfig, $objPermissions; + + + + $acl = $objSession->GetACLClause(); + + $favtable = GetTablePrefix()."Favorites"; + + $ltable = $this->SourceTable; + + $cattable = GetTablePrefix()."CategoryItems"; + + $CategoryTable = GetTablePrefix()."Category"; + + $ptable = GetTablePrefix()."PermCache"; + + $today = mktime(0,0,0,date("m"),date("d"),date("Y")); + + + + $where = "PortalUserId=".$objSession->Get("PortalUserId")." AND $ltable.Status=1"; + + $where .= " AND $favtable.Modified >= $today AND ItemTypeId=".$this->ItemType; + + $p = $this->BasePermission.".VIEW"; + + + + $sql = "SELECT $ltable.*,$CategoryTable.CategoryId,$CategoryTable.CachedNavBar FROM $favtable INNER JOIN $ltable ON ($favtable.ResourceId=$ltable.ResourceId) "; + + $sql .= $this->GetJoinedSQL($p,NULL,$where); + + $ret = QueryCount($sql); + + } + + else + + { + + if (!$this->ListType == "favorites") + + { + + $this->ListType = "favorites"; + + $this->LoadFavorites($attribs); + + $ret = $this->QueryItemCount; + + } + + else + + $ret = $this->QueryItemCount; + + } + + return $ret; + + } + + + + + + + + function CountPickItems($attribs) + + { + + if (!$this->ListType == "pick") + + { + + $this->ListType = "pick"; + + $this->LoadPickItems($attribs); + + $ret = $this->QueryItemCount; + + } + + else + + $ret = $this->QueryItemCount; + + + + return $ret; + + } + + + + function CountMyItems($attribs) + + { + + if (!$this->ListType == "myitems") + + { + + $this->ListType = "myitems"; + + $this->LoadMyItems($attribs); + + $ret = $this->QueryItemCount; + + } + + else + + $ret = $this->QueryItemCount; + + + + return $ret; + + } + + + + function CountHotItems($attribs) + + { + + if (!$this->ListType == "hotitems") + + { + + $this->ListType = "hotitems"; + + $this->LoadHotItems($attribs); + + $ret = $this->QueryItemCount; + + } + + else + + $ret = $this->QueryItemCount; + + + + return $ret; + + } + + + + function CountNewItems($attribs) + + { + + if (!$this->ListType == "newitems") + + { + + $this->ListType = "newitems"; + + $this->LoadNewItems($attribs); + + $ret = $this->QueryItemCount; + + } + + else + + $ret = $this->QueryItemCount; + + + + return $ret; + + } + + + + function CountPopItems($attribs) + + { + + if (!$this->ListType == "popitems") + + { + + $this->ListType = "popitems"; + + $this->LoadPopItems($attribs); + + $ret = $this->QueryItemCount; + + } + + else + + $ret = $this->QueryItemCount; + + + + return $ret; + + } + + + + + + function CountSearchItems($attribs) + + { + + if (!$this->ListType == "search") + + { + + $this->ListType = "search"; + + $this->LoadSearchItems($attribs); + + $ret = $this->QueryItemCount; + + } + + else + + $ret = $this->QueryItemCount; + + + + return $ret; + + } + + + + function SqlFavorites($attribs) + + { + + global $objSession, $objConfig, $objPermissions; + + + + $acl = $objSession->GetACLClause(); + + $favtable = GetTablePrefix()."Favorites"; + + $ltable = $this->SourceTable; + + $cattable = GetTablePrefix()."CategoryItems"; + + $CategoryTable = GetTablePrefix()."Category"; + + $ptable = GetTablePrefix()."PermCache"; + + + + $where = "PortalUserId=".$objSession->Get("PortalUserId")." AND $ltable.Status=1"; + + if($attribs["_today"]) + + { + + $today = mktime(0,0,0,date("m"),date("d"),date("Y")); + + $where .= " AND $favtable.Modified >= $today AND ItemTypeId=".$this->ItemType; + + } + + $p = $this->BasePermission.".VIEW"; + + + + $sql = "SELECT $ltable.*,$CategoryTable.CategoryId,$CategoryTable.CachedNavBar FROM $favtable INNER JOIN $ltable ON ($favtable.ResourceId=$ltable.ResourceId) "; + + $sql .= $this->GetJoinedSQL($p,NULL,$where); + + + + + + $OrderBy = $this->QueryOrderByClause(TRUE,TRUE,TRUE); + + $sql .= " ".$OrderBy; + + return $sql; + + } + + + + function LoadFavorites($attribs) + + { + + global $objSession, $objCountCache; + + + + $sql = $this->SqlFavorites($attribs); + + + + if($objSession->HasSystemPermission("DEBUG.LIST")) + + echo htmlentities($sql,ENT_NOQUOTES)."
\n"; + + if($attribs["_shortlist"]) + + { + + $this->PerPageVar = $this->PerPageShortVar; + + } + + else + + $this->PerPageVar = $this->PerPageVarLong; + + + + $CachedCount = $objCountCache->GetValue($this->CacheListType("favorites"),$this->ItemType,$this->CacheListExtraId("favorites"),(int)$attribs["_today"],3600); + + if(!is_numeric($CachedCount)) + + { + + $this->QueryItemCount = QueryCount($sql); + + $objCountCache->SetValue($this->CacheListType("favorites"),$this->ItemType,$this->CacheListExtraId("favorites"),(int)$attribs["_today"],$this->QueryItemCount); + + } + + else + + $this->QueryItemCount = (int)$CachedCount; + + + + return $this->Query_Item($sql); + + } + + + + function SqlPickItems($attribs) + + { + + global $objSession, $objCatList; + + + + $catid = (int)$attribs["_catid"]; + + $scope = (int)$attribs["_scope"]; + + //$JoinCats = (int)$attribs["_catinfo"] || $scope; + + + + $TableName = $this->SourceTable; + + if($scope) + + { + + if (!$catid) + + { + + $catid = $objCatList->CurrentCategoryID(); + + } + + $where = "CategoryId =".$catid." AND ".$TableName.".EditorsPick=1 AND ".$TableName.".Status=1"; + + } + + else + + { + + $where = $TableName.".EditorsPick=1 AND ".$TableName.".Status=1 "; + + $catid=NULL; + + } + + if($attribs["_today"]) + + { + + $today = mktime(0,0,0,date("m"),date("d"),date("Y")); + + $where .= " AND ($TableName.CreatedOn>=$today)"; + + } + + $CategoryTable = GetTablePrefix()."Category"; + + $sql = "SELECT $TableName.*,$CategoryTable.CategoryId,$CategoryTable.CachedNavBar FROM $TableName "; + + $p = $this->BasePermission.".VIEW"; + + $sql .= $this->GetJoinedSQL($p,$CatUd,$where); + + + + $OrderBy = $this->QueryOrderByClause(TRUE,TRUE,TRUE); + + $sql .= " ".$OrderBy; + + return $sql; + + } + + + + function LoadPickItems($attribs) + + { + + global $objSession, $objCountCache; + + + + $sql = $this->SqlPickItems($attribs); + + if($objSession->HasSystemPermission("DEBUG.LIST")) + + echo htmlentities($sql,ENT_NOQUOTES)."
\n"; + + + + if($attribs["_shortlist"]) + + { + + $this->PerPageVar = $this->PerPageShortVar; + + } + + else + + $this->PerPageVar = $this->PerPageVarLong; + + + + $CachedCount = $objCountCache->GetValue($this->CacheListType("pick"),$this->ItemType,$this->CacheListExtraId("pick"),(int)$attribs["_today"],3600); + + if(!is_numeric($CachedCount)) + + { + + $this->QueryItemCount= QueryCount($sql); + + $objCountCache->SetValue($this->CacheListType("pick"),$this->ItemType,$this->CacheListExtraId("pick"),(int)$attribs["_today"],$this->QueryItemCount); + + } + + else + + $this->QueryItemCount=$CachedCount; + + + + return $this->Query_Item($sql); + + } + + + + function SqlMyItems($attribs= array()) + + { + + global $objSession; + + + + $TableName = $this->SourceTable; + + $where = " ".$TableName.".Status>-1 AND ".$TableName.".CreatedById=".$objSession->Get("PortalUserId"); + + if($attribs["_today"]) + + { + + $today = mktime(0,0,0,date("m"),date("d"),date("Y")); + + $where .= " AND ($TableName.CreatedOn>=$today)"; + + } + + $CategoryTable = GetTablePrefix()."Category"; + + $sql = "SELECT $TableName.*,$CategoryTable.CategoryId,$CategoryTable.CachedNavBar FROM $TableName "; + + $p = $this->BasePermission.".VIEW"; + + $sql .= $this->GetJoinedSQL($p,$CatUd,$where); + + + + $OrderBy = $this->QueryOrderByClause(TRUE,TRUE,TRUE); + + $sql .= " ".$OrderBy; + + + + return $sql; + + } + + + + function LoadMyItems($attribs=array()) + + { + + global $objSession,$objCountCache; + + $sql = $this->SqlMyItems($attribs); + + if($objSession->HasSystemPermission("DEBUG.LIST")) + + echo htmlentities($sql,ENT_NOQUOTES)."
\n"; + + if($attribs["_shortlist"]) + + { + + $this->PerPageVar = $this->PerPageShortVar; + + } + + else + + $this->PerPageVar = $this->PerPageVarLong; + + + + $CachedCount = $objCountCache->GetValue($this->CacheListType("myitems"),$this->ItemType,$this->CacheListExtraId("myitems"),(int)$attribs["_today"],3600); + + if(!is_numeric($CachedCount)) + + { + + $this->QueryItemCount= QueryCount($sql); + + $objCountCache->SetValue($this->CacheListType("myitems"),$this->ItemType,$this->CacheListExtraId("myitems"),(int)$attribs["_today"],$this->QueryItemCount); + + } + + else + + $this->QueryItemCount=$CachedCount; + + + + return $this->Query_Item($sql); + + } + + + + function SqlNewItems($attribs = array()) + + { + + global $objSession, $objCatList; + + + + $catid = (int)$attribs["_catid"]; + + $scope = (int)$attribs["_scope"]; + + //$JoinCats = (int)$attribs["_catinfo"] || $scope; + + + + $TableName = $this->SourceTable; + + if($attribs["_today"]) + + { + + $cutoff = mktime(0,0,0,date("m"),date("d"),date("Y")); + + } + + else + + { + + if($scope) + + { + + if (!$catid) + + { + + $catid = $objCatList->CurrentCategoryID(); + + } + + $cutoff = $this->GetNewValue($catid); + + } + + else + + $cutoff = $this->GetNewValue(); + + } + + if($scope) + + { + + if (!$catid) + + { + + $catid = $objCatList->CurrentCategoryID(); + + } + + + + $where = "CategoryId =".$catid." AND ((".$TableName.".CreatedOn >=".$cutoff." AND ".$TableName.".NewItem != 0) OR ".$TableName.".NewItem=1 ) AND ".$TableName.".Status=1 "; + + } + + else + + { + + $where = "((".$TableName.".CreatedOn >=".$this->GetNewValue()." AND ".$TableName.".NewItem != 0) OR ".$TableName.".NewItem=1 ) AND ".$TableName.".Status=1 "; + + } + + + + $CategoryTable = GetTablePrefix()."Category"; + + $sql = "SELECT $TableName.*,$CategoryTable.CategoryId,$CategoryTable.CachedNavBar FROM $TableName "; + + $p = $this->BasePermission.".VIEW"; + + $sql .= $this->GetJoinedSQL($p,$CatUd,$where); + + + + $OrderBy = $this->QueryOrderByClause(TRUE,TRUE,TRUE); + + $sql .= " ".$OrderBy; + + return $sql; + + } + + + + function LoadNewItems($attribs) + + { + + global $objSession,$objCountCache; + + + + $sql = $this->SqlNewItems($attribs); + + + + if($objSession->HasSystemPermission("DEBUG.LIST")) + + echo htmlentities($sql,ENT_NOQUOTES)."
\n"; + + if($attribs["_shortlist"]) + + { + + $this->PerPageVar = $this->PerPageShortVar; + + } + + else + + $this->PerPageVar = $this->PerPageVarLong; + + + + $CachedCount = $objCountCache->GetValue($this->CacheListType("new"),$this->ItemType,$this->CacheListExtraId("new"),(int)$attribs["_today"],3600); + + if(!is_numeric($CachedCount)) + + { + + $this->QueryItemCount= QueryCount($sql); + + $objCountCache->SetValue($this->CacheListType("new"),$this->ItemType,$this->CacheListExtraId("new"),(int)$attribs["_today"],$this->QueryItemCount); + + } + + else + + $this->QueryItemCount=$CachedCount; + + + + + + return $this->Query_Item($sql); + + } + + + + function SqlPopItems($attribs) + + { + + global $objSession, $objCatList; + + + + $catid = (int)$attribs["_catid"]; + + $scope = (int)$attribs["_scope"]; + + //$JoinCats = (int)$attribs["_catinfo"] || $scope; + + + + $TableName = $this->SourceTable; + + + + if($scope) + + { + + if (!$catid) + + { + + $catid = $objCatList->CurrentCategoryID(); + + } + + $where = "CategoryId =".$catid." AND ((".$TableName.".Hits >=".$this->GetLinkPopValue()." AND ".$TableName.".PopItem !=0) OR ".$TableName.".PopItem=1) AND ".$TableName.".Status=1"; + + } + + else + + { + + $where = "((".$TableName.".CachedRating >=".$this->GetPopValue()." AND ".$TableName.".PopItem !=0 ) OR ".$TableName.".PopItem=1) AND ".$TableName.".Status=1 "; + + + + $where = "((".$TableName.".Hits >=".$this->GetPopValue()." AND ".$TableName.".PopItem !=0) OR ".$TableName.".PopItem=1) AND ".$TableName.".Status=1 "; + + } + + if($attribs["_today"]) + + { + + $today = mktime(0,0,0,date("m"),date("d"),date("Y")); + + $where .= " AND ($TableName.CreatedOn>=$today)"; + + } + + $CategoryTable = GetTablePrefix()."Category"; + + $sql = "SELECT $TableName.*,$CategoryTable.CategoryId,$CategoryTable.CachedNavBar FROM $TableName "; + + $p = $this->BasePermission.".VIEW"; + + $sql .= $this->GetJoinedSQL($p,$catid,$where); + + + + $OrderBy = $this->QueryOrderByClause(TRUE,TRUE,TRUE); + + $sql .= " ".$OrderBy; + + + + return $sql; + + } + + + + function LoadPopItems($attribs) + + { + + global $objSession,$objCountCache; + + $sql = $this->SqlPopItems($attribs); + + + + if($objSession->HasSystemPermission("DEBUG.LIST")) + + echo htmlentities($sql,ENT_NOQUOTES)."
\n"; + + if($attribs["_shortlist"]) + + { + + $this->PerPageVar = $this->PerPageShortVar; + + } + + else + + $this->PerPageVar = $this->PerPageVarLong; + + + + $CachedCount = $objCountCache->GetValue($this->CacheListType("pop"),$this->ItemType,$this->CacheListExtraId("pop"),(int)$attribs["_today"],3600); + + if(!is_numeric($CachedCount)) + + { + + $this->QueryItemCount= QueryCount($sql); + + $objCountCache->SetValue($this->CacheListType("pop"),$this->ItemType,$this->CacheListExtraId("pop"),(int)$attribs["_today"],$this->QueryItemCount); + + } + + else + + $this->QueryItemCount=$CachedCount; + + + + return $this->Query_Item($sql); + + } + + + + function SqlHotItems($attribs) + + { + + global $objSession, $objCatList; + + + + $catid = (int)$attribs["_catid"]; + + $scope = (int)$attribs["_scope"]; + + + +// $JoinCats = (int)$attribs["_catinfo"] || $scope; + + + + $TableName = $this->SourceTable; + + + + $OrderBy = $TableName.".CachedRating DESC"; + + + + if($scope) + + { + + if (!$catid) + + { + + $catid = $objCatList->CurrentCategoryID(); + + } + + $where = "CategoryId =".$catid." AND ((".$TableName.".CachedRating >=".$this->GetHotValue()." AND ".$TableName.".PopItem !=0) OR ".$TableName.".PopItem=1) AND ".$TableName.".Status=1"; + + } + + else + + { + + $where = "((".$TableName.".CachedRating >=".$this->GetPopValue()." AND ".$TableName.".PopItem !=0 ) OR ".$TableName.".PopItem=1) AND ".$TableName.".Status=1 "; + + } + + + + if($attribs["_today"]) + + { + + $today = mktime(0,0,0,date("m"),date("d"),date("Y")); + + $where .= " AND ($TableName.CreatedOn>=$today)"; + + } + + $CategoryTable = GetTablePrefix()."Category"; + + $sql = "SELECT $TableName.*,$CategoryTable.CategoryId,$CategoryTable.CachedNavBar FROM $TableName "; + + $p = $this->BasePermission.".VIEW"; + + $CatId = !$scope? NULL : $catid; + + $sql .= $this->GetJoinedSQL($p,$CatId,$where); + + + + if(strlen($OrderBy)) + + $sql .= " ORDER BY $OrderBy "; + + + + return $sql; + + } + + + + function LoadHotItems($attribs) + + { + + global $objSession,$objCountCache; + + + + $sql = $this->SqlHotItems($attribs); + + if($objSession->HasSystemPermission("DEBUG.LIST")) + + echo htmlentities($sql,ENT_NOQUOTES)."
\n"; + + + + if($attribs["_shortlist"]) + + { + + $this->PerPageVar = $this->PerPageShortVar; + + } + + else + + $this->PerPageVar = $this->PerPageVarLong; + + + + $CachedCount = $objCountCache->GetValue($this->CacheListType("hot"),$this->ItemType,$this->CacheListExtraId("hot"),(int)$attribs["_today"], 0); + + if(!is_numeric($CachedCount)) + + { + + $this->QueryItemCount= QueryCount($sql); + + $objCountCache->SetValue($this->CacheListType("hot"),$this->ItemType,$this->CacheListExtraId("hot"),(int)$attribs["_today"],$this->QueryItemCount); + + } + + else + + $this->QueryItemCount=$CachedCount; + + + + return $this->Query_Item($sql); + + } + + + + function SqlSearchItems($attribs = array()) + + { + + global $objConfig, $objItemTypes, $objSession, $objPermissions, $CountVal; + + + + $acl = $objSession->GetACLClause(); + + $this->Clear(); + + //$stable = "ses_".$objSession->GetSessionKey()."_Search"; + + $stable = $objSession->GetSearchTable(); + + $ltable = $this->SourceTable; + + $catitems = GetTablePrefix()."CategoryItems"; + + $cattable = GetTablePrefix()."Category"; + + $ptable = GetTablePrefix()."PermCache"; + + $p = $this->BasePermission.".VIEW"; + + $i = new $this->classname(); + + + + $sql = "SELECT $cattable.CategoryId,$cattable.CachedNavbar,$ltable.*, Relevance FROM $stable "; + + $sql .= "INNER JOIN $ltable ON ($stable.ItemId=$ltable.".$i->id_field.") "; + + + + $where = "ItemType=".$this->ItemType." AND $ltable.Status=1"; + + + + $sql .= $this->GetJoinedSQL($p,NULL,$where); + + $sql .= " ORDER BY EdPick DESC,Relevance DESC "; + + + + $tmp = $this->QueryOrderByClause(FALSE,TRUE,TRUE); + + $tmp = substr($tmp,9); + + if(strlen($tmp)) + + { + + $sql .= ", ".$tmp." "; + + } + + return $sql; + + } + + + + function LoadSearchItems($attribs = array()) + + { + + global $CountVal, $objSession; + + //echo "Loading ".get_class($this)." Search Items
"; + + $sql = $this->SqlSearchItems($attribs); + + //echo "$sql
"; + + $this->Query_Item($sql); + + $Keywords = GetKeywords($objSession->GetVariable("Search_Keywords")); + + //echo "SQL Loaded ItemCount (".get_class($this).'): '.$this->NumItems().'
'; + + for($i = 0; $i < $this->NumItems(); $i++) + + { + + $this->Items[$i]->Keywords = $Keywords; + + } + + if(is_numeric($CountVal[$this->ItemType])) + + { + + $this->QueryItemCount = $CountVal[$this->ItemType]; + + //echo "CACHE:
"; print_r($CountVal); echo "

"; + + } + + else + + { + + $this->QueryItemCount = QueryCount($sql); + + //echo "SQL: ".$sql."

"; + + $CountVal[$this->ItemType] = $this->QueryItemCount; + + } + + + + } + + + + function PasteFromClipboard($TargetCat,$NameField="") + + { + + global $objSession,$objCatList; + + + + $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) // paste to other category then current + + { + + $item->MoveToCategory($ClipBoard["source"],$TargetCat); + + $clip = str_replace("CUT","COPY",$clip); + + $objSession->SetVariable("ClipBoard",$clip); + + } + + else + + { + + $item->CopyToNewResource($TargetCat,$NameField); // create item copy, but with new ResourceId + + $item->AddToCategory($TargetCat); + + UpdateCategoryCount($item->type,$TargetCat); + + + + } + + } + + } + + } + + + + function AdminPrintItems($template) + + { + + // prints item listing for admin (browse/advanced view) tabs + + $o = ''; + + + + $i = 1; + + + + $topleft = 0; + + $topright = 0; + + $rightcount = 0; + + $total_items = $this->NumItems(); + + $topleft = ceil($total_items / 2); + + $topright = $total_items - $topleft; + + + + for($x = 0; $x < $topleft; $x++) + + { + + //printingleft + + $item = $this->Items[$x]; + + if ($i > 2) + + { + + $o .= "\n"; + + $i = 1; + + } + + $o .= $item->AdminParseTemplate($template); + + $i++; + + + + //printingright + + if ($rightcount < $topright && ( ($x + $topleft) < $total_items) ) + + { + + $item = $this->Items[ $x + $topleft ]; + + if ($i > 2) + + { + + $o.="\n"; + + $i = 1; + + } + + $o .= $item->AdminParseTemplate($template); + + $i++; + + $rightcount++; + + } + + } + + $o .= "\n
\n"; + + + + return $o; + + } + + + +} + + + +// -------------- NEW CLASSES ----------------------- + + + +class DBList { + + + + // table related attributes + + var $db = null; + + var $table_name = ''; + + var $LiveTable = ''; + + var $EditTable = ''; + + + + + + // record related attributes + + var $records = Array(); + + var $record_count = 0; + + var $cur_rec = -1; // "-1" means no records, or record index otherwise + + + + // query related attributes + + var $SelectSQL = "SELECT * FROM %s"; + + + + function DBList() + + { + + // use $this->SetTable('live', 'table name'); + + // in inherited constructors to set table for list + + $this->db =&GetADODBConnection(); + + } + + + + function SetTable($action, $table_name = null) + + { + + // $action = {'live', 'restore','edit'} + + switch($action) + + { + + case 'live': + + $this->LiveTable = $table_name; + + $this->table_name = $this->LiveTable; + + break; + + case 'restore': + + $this->table_name = $this->LiveTable; + + break; + + case 'edit': + + global $objSession; + + $this->table_name = $objSession->GetEditTable($this->LiveTable); + + break; + + } + + } + + + + function Clear() + + { + + // no use of this method at a time :) + + $this->records = Array(); + + $this->record_count = 0; + + $this->cur_rec = -1; + + } + + + + function Query() + + { + + // query list + + $sql = sprintf($this->SelectSQL, $this->table_name); + + echo "SQL: $sql
"; + + $rs =& $this->db->Execute($sql); + + + + if( $this->db->ErrorNo() == 0 ) + + { + + $this->records = $rs->GetRows(); + + $this->record_count = count($this->records); + + //$this->cur_rec = $this->record_count ? 0 : -1; + + } + + else + + return false; + + } + + + + function ProcessList($callback_method) + + { + + // process list using user-defined method called + + // with one parameter - current record fields + + // (associative array) + + if($this->record_count > 0) + + { + + $this->cur_rec = 0; + + while($this->cur_rec < $this->record_count) + + { + + if( method_exists($this, $callback_method) ) + + $this->$callback_method( $this->GetCurrent() ); + + $this->cur_rec++; + + } + + } + + } + + + + function &GetCurrent() + + { + + // return currently processed record (with change ability) + + return ($this->cur_rec != -1) ? $this->records[$this->cur_rec] : false; + + } + + + + function GetDBField($field_name) + + { + + $rec =& $this->GetCurrent(); + + return is_array($rec) && isset($rec[$field_name]) ? $rec[$field_name] : false; + + } + +} + + + + + +?> \ No newline at end of file Index: trunk/kernel/parser.php =================================================================== diff -u -N -r655 -r667 --- trunk/kernel/parser.php (.../parser.php) (revision 655) +++ trunk/kernel/parser.php (.../parser.php) (revision 667) @@ -1597,7 +1597,7 @@ function LoadCatSearchResults($attribs) { - global $objSession, $objPermissions, $objCatList, $objSearchCats, $objConfig, $CountVal; + global $objSession, $objPermissions, $objCatList, $objSearchCats, $objConfig, $CountVal, $m_var_list; $GroupList = $objSession->Get("GroupList"); if(strlen($GroupList)) @@ -1778,7 +1778,7 @@ $objSearchCats->PerPageVar = "Perpage_Category_Short"; } - $keywords = $objSession->GetVariable("Search_Keywords"); // for using in all this func branches + $keywords = $objSession->GetVariable("Search_Keywords"); // for using in all this func branches if($objSearchCats->NumItems()==0) { @@ -1818,10 +1818,11 @@ $o=""; $notable = $attribs["_notable"]; + $max_categories = $objConfig->Get($objSearchCats->PerPageVar); $count=0; $row=0; $var_list_update["t"] = $var_list["t"]; - + if(!$notable) { $per_row = ceil($objCatList->NumItems()/$cols); @@ -1877,6 +1878,7 @@ $row++; $i++; $count++; + if($count == $max_categories) break; } } } Index: trunk/admin/category/addcategory_custom.php =================================================================== diff -u -N -r642 -r667 --- trunk/admin/category/addcategory_custom.php (.../addcategory_custom.php) (revision 642) +++ trunk/admin/category/addcategory_custom.php (.../addcategory_custom.php) (revision 667) @@ -1,253 +1,516 @@ -Get("Site_Path"); - -$admin = $objConfig->Get("AdminDirectory"); -if(!strlen($admin)) - $admin = "admin"; - -$localURL=$rootURL."kernel/"; -$adminURL = $rootURL.$admin; -$imagesURL = $adminURL."/images"; - -//$pathtolocal = $pathtoroot."in-news/"; -require_once ($pathtoroot.$admin."/include/elements.php"); -require_once ($pathtoroot."kernel/admin/include/navmenu.php"); -//require_once ($pathtolocal."admin/include/navmenu.php"); -require_once($pathtoroot.$admin."/toolbar.php"); -require_once($pathtoroot.$admin."/listview/listview.php"); - -$m = GetModuleArray(); -foreach($m as $key=>$value) - -{ - $path = $pathtoroot. $value."admin/include/parser.php"; - if(file_exists($path)) - { - include_once($path); - } -} -unset($objEditItems); - -$objEditItems = new clsCatList(); -$objEditItems->SourceTable = $objSession->GetEditTable("Category"); - -//Multiedit init -$en = (int)$_GET["en"]; -$objEditItems->Query_Item("SELECT * FROM ".$objEditItems->SourceTable); -$itemcount=$objEditItems->NumItems(); - -$c = $objEditItems->GetItemByIndex($en); - -if($itemcount>1) -{ - if ($en+1 == $itemcount) - $en_next = -1; - else - $en_next = $en+1; - - if ($en == 0) - $en_prev = -1; - else - $en_prev = $en-1; -} -$action = "m_edit_category"; - -$envar = "env=" . BuildEnv() . "&en=$en"; - -$section = 'in-portal:editcategory_custom'; - -$title = admin_language("la_Text_Editing")." ".admin_language("la_Text_Category")." '".$c->Get("Name")."' - ".admin_language("la_tab_Custom"); - -$formaction = $rootURL.$admin."/category/addcategory_custom.php?".$envar; - -//echo $envar."
\n"; - -//Display header -$sec = $objSections->GetSection($section); -$objCatToolBar = new clsToolBar(); - -$ListForm = "permlistform"; -$CheckClass = "PermChecks"; -$objCatToolBar->Set("CheckClass",$CheckClass); -$objCatToolBar->Set("CheckForm",$ListForm); - -$saveURL = $admin."/category/category_maint.php"; -$cancelURL = $admin."/".$objSession->GetVariable('ReturnScript'); -$objCatToolBar->Add("img_save", "la_Save","#","swap('img_save','toolbar/tool_select_f2.gif');", "swap('img_save', 'toolbar/tool_select.gif');","do_edit_save('category','CatEditStatus','$saveURL',1);","tool_select.gif"); -$objCatToolBar->Add("img_cancel", "la_Cancel","#","swap('img_cancel','toolbar/tool_cancel_f2.gif');", "swap('img_cancel', 'toolbar/tool_cancel.gif');","do_edit_save('category','CatEditStatus','".$cancelURL."',2);","tool_cancel.gif"); - -if ( isset($en_prev) || isset($en_next) ) -{ - $url = $RootUrl.$admin."/category/addcategory_custom.php"; - $StatusField = "CatEditStatus"; - $form = "category"; - MultiEditButtons($objCatToolBar,$en_next,$en_prev,$form,$StatusField,$url,$sec->Get("OnClick"),'','la_PrevCategory','la_NextCategory'); -} - - int_header($objCatToolBar,NULL,$title); - -if ($objSession->GetVariable("HasChanges") == 1) { -?> - - - - -
- -
- -
-SourceTable = $objSession->GetEditTable("CustomMetaData"); - $objCustomDataList->LoadResource($c->Get("ResourceId")); - - for($i=0;$i<$objCustomFields->NumItems(); $i++) - { - $field =& $objCustomFields->GetItemRefByIndex($i); - $fieldid = $field->Get("CustomFieldId"); - - $f = $objCustomDataList->GetDataItem($fieldid); - $fieldname = "CustomData[$fieldid]"; - if(is_object($f)) - { - $val_field = "Get("Value"))."\" name=\"$fieldname\">"; - $field->Set("Value", $val_field); - $field->Set("FieldLabel", admin_language($field->Get('Prompt'))); - $field->Set("DataId",$f->Get("CustomDataId")); - } - else - { - $val_field = ""; - $field->Set("Value", $val_field); - $field->Set("FieldLabel", admin_language($field->Get('Prompt'))); - $field->Set("DataId",0); - } - } - $objCustomFields->SortField = $objConfig->Get("CustomData_LV_Sortfield");; - $objCustomFields->SortItems($objConfig->Get("CustomData_LV_Sortorder")!="desc"); - - $objListView = new clsListView($objCatToolBar,$objCustomFields); - $objListView->IdField = "DataId"; - - $order = $objConfig->Get("CustomData_LV_Sortfield"); - $SortOrder=0; - if($objConfig->Get("CustomData_LV_Sortorder")=="asc") - $SortOrder=1; - - $objListView->ColumnHeaders->Add("FieldName",admin_language("la_ColHeader_FieldName"),1,0,$order,"width=\"30%\"","CustomData_LV_Sortfield","CustomData_LV_Sortorder","FieldName"); - $objListView->ColumnHeaders->Add("FieldLabel",admin_language("la_ColHeader_FieldLabel"),1,0,$order,"width=\"30%\"","CustomData_LV_Sortfield","CustomData_LV_Sortorder","FieldLabel"); - $objListView->ColumnHeaders->Add("Value",admin_language("la_ColHeader_Value"),1,0,$order,"width=\"40%\"","CustomData_LV_Sortfield","CustomData_LV_Sortorder","Value"); - - $objListView->ColumnHeaders->SetSort($objConfig->Get("CustomData_LV_Sortfield"), $objConfig->Get("CustomData_LV_Sortorder")); - - $objListView->PrintToolBar = FALSE; - $objListView->checkboxes = FALSE; - - $objListView->CurrentPageVar = "Page_CustomData"; - $objListView->PerPageVar = "Perpage_CustomData"; - //$objListView->CheckboxName = "itemlist[]"; - - for($i=0;$iItems);$i++) - { - $objListView->RowIcons[] = $imagesURL."/itemicons/icon16_custom.gif"; - } - $objListView->PageLinks = $objListView->PrintPageLinks(); - - $objListView->SliceItems(); - print $objListView->PrintList(); -?> - "> - - - - - -
- -
- -
" name="viewmenu"> - - - - -
- - +Get("Site_Path"); + + + +$admin = $objConfig->Get("AdminDirectory"); + +if(!strlen($admin)) + + $admin = "admin"; + + + +$localURL=$rootURL."kernel/"; + +$adminURL = $rootURL.$admin; + +$imagesURL = $adminURL."/images"; + + + +//$pathtolocal = $pathtoroot."in-news/"; + +require_once ($pathtoroot.$admin."/include/elements.php"); + +require_once ($pathtoroot."kernel/admin/include/navmenu.php"); + +//require_once ($pathtolocal."admin/include/navmenu.php"); + +require_once($pathtoroot.$admin."/toolbar.php"); + +require_once($pathtoroot.$admin."/listview/listview.php"); + + + +$m = GetModuleArray(); + +foreach($m as $key=>$value) + + + +{ + + $path = $pathtoroot. $value."admin/include/parser.php"; + + if(file_exists($path)) + + { + + include_once($path); + + } + +} + +unset($objEditItems); + + + +$objEditItems = new clsCatList(); + +$objEditItems->SourceTable = $objSession->GetEditTable("Category"); + + + +//Multiedit init + +$en = (int)$_GET["en"]; + +$objEditItems->Query_Item("SELECT * FROM ".$objEditItems->SourceTable); + +$itemcount=$objEditItems->NumItems(); + + + +$c = $objEditItems->GetItemByIndex($en); + + + +if($itemcount>1) + +{ + + if ($en+1 == $itemcount) + + $en_next = -1; + + else + + $en_next = $en+1; + + + + if ($en == 0) + + $en_prev = -1; + + else + + $en_prev = $en-1; + +} + +$action = "m_edit_category"; + + + +$envar = "env=" . BuildEnv() . "&en=$en"; + + + +$section = 'in-portal:editcategory_custom'; + + + +$title = admin_language("la_Text_Editing")." ".admin_language("la_Text_Category")." '".$c->Get("Name")."' - ".admin_language("la_tab_Custom"); + + + +$formaction = $rootURL.$admin."/category/addcategory_custom.php?".$envar; + + + +//echo $envar."
\n"; + + + +//Display header + +$sec = $objSections->GetSection($section); + +$objCatToolBar = new clsToolBar(); + + + +$ListForm = "permlistform"; + +$CheckClass = "PermChecks"; + +$objCatToolBar->Set("CheckClass",$CheckClass); + +$objCatToolBar->Set("CheckForm",$ListForm); + + + +$saveURL = $admin."/category/category_maint.php"; + +$cancelURL = $admin."/".$objSession->GetVariable('ReturnScript'); + +$objCatToolBar->Add("img_save", "la_Save","#","swap('img_save','toolbar/tool_select_f2.gif');", "swap('img_save', 'toolbar/tool_select.gif');","do_edit_save('category','CatEditStatus','$saveURL',1);","tool_select.gif"); + +$objCatToolBar->Add("img_cancel", "la_Cancel","#","swap('img_cancel','toolbar/tool_cancel_f2.gif');", "swap('img_cancel', 'toolbar/tool_cancel.gif');","do_edit_save('category','CatEditStatus','".$cancelURL."',2);","tool_cancel.gif"); + + + +if ( isset($en_prev) || isset($en_next) ) + +{ + + $url = $RootUrl.$admin."/category/addcategory_custom.php"; + + $StatusField = "CatEditStatus"; + + $form = "category"; + + MultiEditButtons($objCatToolBar,$en_next,$en_prev,$form,$StatusField,$url,$sec->Get("OnClick"),'','la_PrevCategory','la_NextCategory'); + +} + + + + int_header($objCatToolBar,NULL,$title); + + + +if ($objSession->GetVariable("HasChanges") == 1) { + +?> + + + + + + + + + +
+ + + +
+ + + +
+ +SourceTable = $objSession->GetEditTable("CustomMetaData"); + + $objCustomDataList->LoadResource($c->Get("ResourceId")); + + + + for($i=0;$i<$objCustomFields->NumItems(); $i++) + + { + + $field =& $objCustomFields->GetItemRefByIndex($i); + + $fieldid = $field->Get("CustomFieldId"); + + + + $f = $objCustomDataList->GetDataItem($fieldid); + + $fieldname = "CustomData[$fieldid]"; + + if(is_object($f)) + + { + + $val_field = "Get("Value"))."\" name=\"$fieldname\">"; + + $field->Set("Value", $val_field); + + if ($field->Get('Prompt') != '') { + $field->Set("FieldLabel", admin_language($field->Get('Prompt'))); + } + else { + $field->Set("FieldLabel", admin_language('lu_fieldcustom__'.strtolower($field->Get('FieldName')))); + } + + $field->Set("DataId",$f->Get("CustomDataId")); + + } + + else + + { + + $val_field = ""; + + $field->Set("Value", $val_field); + + if ($field->Get('Prompt') != '') { + $field->Set("FieldLabel", admin_language($field->Get('Prompt'))); + } + else { + $field->Set("FieldLabel", admin_language('lu_fieldcustom__'.strtolower($field->Get('FieldName')))); + } + + $field->Set("DataId",0); + + } + + } + + $objCustomFields->SortField = $objConfig->Get("CustomData_LV_Sortfield");; + + $objCustomFields->SortItems($objConfig->Get("CustomData_LV_Sortorder")!="desc"); + + + + $objListView = new clsListView($objCatToolBar,$objCustomFields); + + $objListView->IdField = "DataId"; + + + + $order = $objConfig->Get("CustomData_LV_Sortfield"); + + $SortOrder=0; + + if($objConfig->Get("CustomData_LV_Sortorder")=="asc") + + $SortOrder=1; + + + + $objListView->ColumnHeaders->Add("FieldName",admin_language("la_ColHeader_FieldName"),1,0,$order,"width=\"30%\"","CustomData_LV_Sortfield","CustomData_LV_Sortorder","FieldName"); + + $objListView->ColumnHeaders->Add("FieldLabel",admin_language("la_ColHeader_FieldLabel"),1,0,$order,"width=\"30%\"","CustomData_LV_Sortfield","CustomData_LV_Sortorder","FieldLabel"); + + $objListView->ColumnHeaders->Add("Value",admin_language("la_ColHeader_Value"),1,0,$order,"width=\"40%\"","CustomData_LV_Sortfield","CustomData_LV_Sortorder","Value"); + + + + $objListView->ColumnHeaders->SetSort($objConfig->Get("CustomData_LV_Sortfield"), $objConfig->Get("CustomData_LV_Sortorder")); + + + + $objListView->PrintToolBar = FALSE; + + $objListView->checkboxes = FALSE; + + + + $objListView->CurrentPageVar = "Page_CustomData"; + + $objListView->PerPageVar = "Perpage_CustomData"; + + //$objListView->CheckboxName = "itemlist[]"; + + + + for($i=0;$iItems);$i++) + + { + + $objListView->RowIcons[] = $imagesURL."/itemicons/icon16_custom.gif"; + + } + + $objListView->PageLinks = $objListView->PrintPageLinks(); + + + + $objListView->SliceItems(); + + print $objListView->PrintList(); + +?> + + "> + + + + + + + + + + + +
+ + + +
+ + + +
" name="viewmenu"> + + + + + + + + + +
+ + + + + Index: trunk/kernel/include/itemreview.php =================================================================== diff -u -N -r642 -r667 --- trunk/kernel/include/itemreview.php (.../itemreview.php) (revision 642) +++ trunk/kernel/include/itemreview.php (.../itemreview.php) (revision 667) @@ -1,618 +1,1235 @@ -Execute($sql); - if($rs) - { - $count = $rs->fields["DupCount"]; - } - return ($count>0); -} - -RegisterPrefix("clsItemReview","review","kernel/include/itemreview.php"); - -class clsItemReview extends clsParsedItem -{ - function clsItemReview($ReviewId=NULL,$table="ItemReview") - { - $this->clsParsedItem(); - $this->tablename = $table; - $this->id_field = "ReviewId"; - $this->type=-20; - $this->NoResourceId=1; - $this->TagPrefix = "review"; - - if($ReviewId!=NULL) - $this->LoadFromDatabase($ReviewId); - } - - function Validate() - { - global $Errors; - - $dataValid = true; - if(!isset($this->m_CreatedOn)) - { - $Errors->AddError("error.fieldIsRequired",'CreatedOn',"","",get_class($this),"Validate"); - $dataValid = false; - } - - if(!isset($this->m_ReviewText)) - { - $Errors->AddError("error.fieldIsRequired",'ReviewText',"","",get_class($this),"Validate"); - $dataValid = false; - } - - if(!isset($this->m_Pending)) - { - $Error->AddError("error.fieldIsRequired",'Pending',"","",get_class($this),"Validate"); - $dataValid = false; - } - - if(!isset($this->m_IPAddress)) - { - $Error->AddError("error.fieldIsRequired",'IPAddress',"","",get_class($this),"Validate"); - $dataValid = false; - } - - if(!isset($this->m_ItemId)) - { - $Error->AddError("error.fieldIsRequired",'ItemId',"","",get_class($this),"Validate"); - $dataValid = false; - } - - if(!isset($this->m_CreatedById)) - { - $Error->AddError("error.fieldIsRequired",'CreatedBy',"","",get_class($this),"Validate"); - $dataValid = false; - } - - return $dataValid; - } - - function LoadFromDatabase($Id) - { - global $objSession, $Errors; - - 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 ReviewId = '%s'",$Id); - if( $GLOBALS['debuglevel'] ) echo $sql."
"; - $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(); - return TRUE; - } - - function MoveUp() - { - $this->Increment("Priority"); - } - - function MoveDown() - { - $this->Decrement("Priority"); - } - - function ParseObject($element) - { - global $objConfig, $objCatList, $rootURL, $objUsers; - - $extra_attribs = ExtraAttributes($element->attributes); - - if(strtolower($element->name)==$this->TagPrefix) - { - $field = strtolower($element->attributes["_field"]); - switch($field) - { - case "id": - /* - @field:review.id - @description: review id - */ - $ret = $this->Get("ReviewId"); - break; - case "item_id": - /* - @field:review.item_id - @description: ID of the item being reviewed - */ - $ret = $this->Get("ItemId"); - break; - case "text": - /* - @field:review.text - @description:Review text - */ - if($this->Get("TextFormat")==0 || $element->attribues["_textonly"]) - { - $ret = inp_htmlize($this->Get("ReviewText")); - } - else - { - $ret = $this->Get("ReviewText"); - } - break; - case "ip": - /* - @field:review.ip - @description:IP address of remote host submitting the review - */ - $ret = $this->Get("IPAddress"); - break; - case "pending": - /* - @field:review.pending - @description: Returns the review pening status - */ - $ret = $this->Get("Pending"); - break; - case "item_type": - /* - @field:review.item_type - @description:Returns the name of the reviewed item type - */ - $type =& $objItemTypes->GetItem($this->Get("ItemType")); - if(is_object($type)) - $ret = $type->Get("ItemName"); - break; - case "date": - /* - @field:review.date - @description:Returns the date/time the review 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->attributes["_tz"]) - { - $d = GetLocalTime($d,$objSession->Get("tz")); - } - - $part = strtolower($element->attributes["_part"]); - if(strlen($part)) - { - $ret = ExtractDatePart($part,$d); - } - else - { - if($d<=0) - { - $ret = ""; - } - else - $ret = LangDate($d); - } - break; - case "reviewer": - /* - @field:revier.reviewer - @description:Parse a user tag for the user submitting the review - @attrib:_usertag::User tag to parse, defaults to the users login name - */ - $userfield = $element->attributes["_usertag"]; - if(!strlen($userfield)) - { - $userfield = "login"; - } - if($this->Get("CreatedById")>0) - { - $u =& $objUsers->GetItem($this->Get("CreatedById")); - $e = new clsHtmlTag(); - $e->name = $u->TagPrefix; - $e->attributes = $element->attributes; - $e->attributes["_field"] = $userfield; - $ret = $u->ParseObject($e); - } - else - if($userfield=="login") - $ret = "root"; - break; - default: - $tag = $this->TagPrefix."_".$field; - $ret = "Undefined: ".$tag->name; - break; - } - } - else - { - $ret = $element->Execute(); - } - return $ret; - } - - function parsetag($tag) - { - global $objConfig, $objUsers, $objItemTypes; - if(is_object($tag)) - { - $tagname = $tag->name; - } - else - $tagname = $tag; - switch($tagname) - { - case "review_id": - return $this->Get("ReviewId"); - break; - case "review_item_id": - return $this->Get("ItemId"); - break; - case "review_text": - return $this->Get("ReviewText"); - break; - case "review_ip_address": - return $this->Get("IPAddress"); - break; - case "review_pending": - return $this->Get("Pending"); - break; - case "review_item_type": - $type =& $objItemTypes->GetItem($this->Get("ItemType")); - $res = $type->Get("ItemName"); - return $res; - break; - case "review_created_date": - return LangDate($this->Get("CreatedOn")); - break; - case "review_created_time": - if($this->Get("CreatedOn")<=0) - return ""; - return adodb_date($objConfig->TimeFormat(), $this->Get("CreatedOn")); - break; - - case "review_created_date_month": - return adodb_date("m", $this->Get("CreatedOn")); - break; - case "review_created_date_day": - return adodb_date("d", $this->Get("CreatedOn")); - break; - case "review_created_date_year": - return adodb_date("Y", $this->Get("CreatedOn")); - break; - default: - if (substr($tagname, 0, 16) == "review_createdby") - { - /* parse the created by user */ - $u = $objUsers->GetUser($this->Get("CreatedById")); - $usertag = substr($tag,17); - return $u->parsetag($usertag); - } - else - return "Undefined:$tagname"; - break; - } - } - - function SendUserEventMail($Suffix,$ToUserId,$LangId=NULL) - { - global $objItemTypes, $objMessageList; - - $type =& $objItemTypes->GetItem($this->Get("ItemType")); - $res = $type->Get("ItemName"); - $EventName = $res.$Suffix; - - $Event =& $objMessageList->GetEmailEventObject($EventName,0,$LangId); - if(is_object($Event)) - { - if($Event->Get("Enabled")=="1") - { - $Event->Item = $this; - return $Event->SendToUser($ToUserId); - } - } - } - - function SendAdminEventMail($EventName,$LangId=NULL) - { - global $objItemTypes, $objMessageList; - - $type =& $objItemTypes->GetItem($this->Get("ItemType")); - $res = $type->Get("ItemName"); - $EventName = $res; //.$Suffix; - - $Event =& $objMessageList->GetEmailEventObject($EventName,1,$LangId); - if(is_object($Event)) - { - if($Event->Get("Enabled")=="1") - { - $Event->Item = $this; - return $Event->SendAdmin($ToUserId); - } - } - } -} /*clsIItemReview*/ - -class clsItemReviewList extends clsItemCollection -{ - var $itemID; - var $Page; - var $PerPageVar; - - function clsItemReviewList($id=NULL) - { - $this->clsItemCollection(); - $this->classname = "clsItemReview"; - $this->SourceTable = GetTablePrefix()."ItemReview"; - $this->Page = 1; - $this->PerPageVar = "Perpage_Review"; - if(isset($id)) - $this->itemID=$id; - $this->AdminSearchFields = array("ReviewText"); - } - - function ItemCount() - { - return $this->NumItems(); - } - - function GetReview($ID) - { - return $this->GetItem($ID); - } - - function GetReviewList($StatusWhere = "Status=1", $OrderBy=NULL) - { - $this->Clear(); - $where = "ItemId=".$this->itemID; - $sql = "SELECT * FROM ".$this->SourceTable." WHERE "; - if(strlen($StatusWhere)) - $where .= " AND ".$StatusWhere; - $sql .= $where; - if(strlen($OrderBy)) - $sql .= " ORDER BY ".$OrderBy; - $Limit = $this->GetLimitSQL(); - if(strlen($Limit)) - $sql .= " ".$Limit; - $this->QueryItemCount=TableCount($this->SourceTable,$where,0); - return $this->Query_item($sql); - } - - function GetItemReviewCount($TodayOnly = FALSE) - { - $sql = "SELECT count(*) as ItemCount FROM ".$this->SourceTable." WHERE ItemId=".$this->itemID." AND Status=1"; - if($TodayOnly) - { - $today = mktime(0,0,0,date("m"),date("d"),date("Y")); - $where .= " AND CreatedOn>=$today"; - } - $rs = $this->adodbConnection->execute($sql); - $count=0; - if($rs) - $count = $rs->fields["ItemCount"]; - return (int)$count; - } - - function ip_exists($ip,$id) - { - return ip_exists($ip,id,$this->SourceTable); - } - - function GetLimitSQL() - { - global $objConfig; - if($this->Page<1) - $this->Page=1; - $PerPage = $objConfig->Get($this->PerPageVar); - if(is_numeric($PerPage)) - { - $Start = ($this->Page-1)*$PerPage; - $limit = "LIMIT ".$Start.",".$PerPage; - } - else - $limit = NULL; - return $limit; - } - - - function Query_Review($whereClause=NULL,$orderByClause=NULL) - { - global $Errors; - - $this->Clear(); - $sql = "SELECT * FROM ".$this->SourceTable." "; - - if(isset($whereClause) && strlen(trim($whereClause))>0) - $sql = sprintf("%s WHERE %s",$sql,$whereClause); - - if(isset($orderByClause) && strlen(trim($orderByClause))>0) - $sql = sprintf("%s ORDER BY %s",$sql,$orderByClause); - - return $this->Query_Item($sql); - } - - function &AddReview($CreatedOn,$ReviewText, $Status, $IPAddress, - $Priority, $ItemId,$ItemType,$CreatedById,$TextFormat=0,$Module) - { - global $objSession; - - $r = new clsItemReview(NULL,$this->SourceTable); - - $ReviewText = str_replace("env=".$objSession->GetSessionKey(), "env=",$ReviewText); - //$r->debuglevel = 1; - - $r->Set(array("CreatedOn","ReviewText","Status", "IPAddress", - "Priority","ItemId","ItemType","CreatedById","TextFormat","Module"), - array($CreatedOn,$ReviewText,$Status, $IPAddress, - $Priority, $ItemId,$ItemType,$CreatedById,$TextFormat,$Module)); - $r->Create(); - array_push($this->Items,$r); - if($Status==1) - { - $r->SendUserEventMail("REVIEW.ADD",$CreatedById); - $r->SendAdminEventMail("REVIEW.ADD"); - } - else - { - $r->SendUserEventMail("REVIEW.ADD.PENDING",$CreatedById); - $r->SendAdminEventMail("REVIEW.ADD.PENDING"); - } - - return $r; - } - - function EditReview($ReviewId,$CreatedOn,$ReviewText, $Status, - $IPAddress, $Priority, $ItemId,$ItemType,$CreatedById,$TextFormat,$Module) - { - global $objSession; - - $r = $this->GetItem($ReviewId); - if($CreatedById==0) - $CreatedById = $r->Get("CreatedById"); - $r->Set(array("ReviewId","CreatedOn","ReviewText","Status", - "IPAddress", "Priority", "ItemId","ItemType","CreatedById","TextFormat","Module"), - array($ReviewId,$CreatedOn,$ReviewText,$Status, - $IPAddress, $Priority, $ItemId,$ItemType,$CreatedById,$TextFormat,$Module)); - $r->Update(); - //$r->SendUserEventMail("REVIEW.MODIFY",$objSession->Get("PortalUserId")); - $r->SendAdminEventMail("REVIEW.MODIFY"); - return $r; - } - - function DeleteReview($ReviewId) - { - $r = $this->GetItem($ReviewId); - $r->Delete(); - } - - function CopyToItemId($OldId,$NewId) - { - $this->Clear(); - $this->Query_Review("ItemId=$OldId",""); - if($this->NumItems()>0) - { - foreach($this->Items as $i) - { - $i->Set("ItemId",$NewId); - $i->UnsetIdField(); - $i->Create(); - } - } - } - - function CopyFromEditTable($ResourceId) - { - global $objSession; - //echo "ToLive [Reviews]
"; - $edit_table = $objSession->GetEditTable($this->SourceTable); - $idlist = array(); - $sql = "SELECT * FROM $edit_table"; - $this->Clear(); - // get all items in edit-table - $rs = $this->adodbConnection->Execute($sql); - while($rs && !$rs->EOF) - { - $data =& $rs->fields; - - $c = $this->AddItemFromArray($data); - - $c->Dirty(); - if($data["ReviewId"]>0) - { - $c->Update(); - } - else - { - $c->UnsetIdField(); - $c->Create(); - } - $idlist[] = $c->Get("ReviewId"); - $rs->MoveNext(); - } - //print_pre($idlist); - $sql = "DELETE FROM ".$this->SourceTable." WHERE ItemId=$ResourceId ".(count($idlist) > 0 ? "AND ReviewId NOT IN (".implode(",",$idlist).")" : ""); - //echo "DEL REVIEW SQL: $sql
"; - $this->adodbConnection->Execute($sql); - @$this->adodbConnection->Execute("DROP TABLE IF EXISTS ".$edit_table); - } - - - function GetPageLinkList(&$UpdateVar,$dest_template=NULL,$page = NULL,$PagesToList=10,$HideEmpty=TRUE) - { - global $objConfig, $var_list_update, $var_list; - - if(!strlen($page)) - $page = GetIndexURL(); - $PerPage = $objConfig->Get($this->PerPageVar); - if($PerPage<1) - $PerPage=20; - $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) - { - $UpdateVar["rp"] = $this->Page-$PagesToList; - $prev_url = $page."?env=".BuildEnv(); - $o .= "<<"; - } - - - for($p=$StartPage;$p<=$EndPage;$p++) - { - if($p!=$this->Page) - { - $UpdateVar["rp"]=$p; - $href = $page."?env=".BuildEnv(); - $o .= " $p "; - } - else - { - $o .= "$p"; - } - } - if($EndPage<$NumPages && $EndPage>0) - { - $UpdateVar["rp"]=$this->Page+$PagesToList; - $next_url = $page."?env=".BuildEnv(); - $o .= " >>"; - } - unset($UpdateVar,$var_list_update["t"] ); - return $o; - } - - -} /*clsItemReviewList*/ - -?> +Execute($sql); + + if($rs) + + { + + $count = $rs->fields["DupCount"]; + + } + + return ($count>0); + +} + + + +RegisterPrefix("clsItemReview","review","kernel/include/itemreview.php"); + + + +class clsItemReview extends clsParsedItem + +{ + + function clsItemReview($ReviewId=NULL,$table="ItemReview") + + { + + $this->clsParsedItem(); + + $this->tablename = $table; + + $this->id_field = "ReviewId"; + + $this->type=-20; + + $this->NoResourceId=1; + + $this->TagPrefix = "review"; + + + + if($ReviewId!=NULL) + + $this->LoadFromDatabase($ReviewId); + + } + + + + function Validate() + + { + + global $Errors; + + + + $dataValid = true; + + if(!isset($this->m_CreatedOn)) + + { + + $Errors->AddError("error.fieldIsRequired",'CreatedOn',"","",get_class($this),"Validate"); + + $dataValid = false; + + } + + + + if(!isset($this->m_ReviewText)) + + { + + $Errors->AddError("error.fieldIsRequired",'ReviewText',"","",get_class($this),"Validate"); + + $dataValid = false; + + } + + + + if(!isset($this->m_Pending)) + + { + + $Error->AddError("error.fieldIsRequired",'Pending',"","",get_class($this),"Validate"); + + $dataValid = false; + + } + + + + if(!isset($this->m_IPAddress)) + + { + + $Error->AddError("error.fieldIsRequired",'IPAddress',"","",get_class($this),"Validate"); + + $dataValid = false; + + } + + + + if(!isset($this->m_ItemId)) + + { + + $Error->AddError("error.fieldIsRequired",'ItemId',"","",get_class($this),"Validate"); + + $dataValid = false; + + } + + + + if(!isset($this->m_CreatedById)) + + { + + $Error->AddError("error.fieldIsRequired",'CreatedBy',"","",get_class($this),"Validate"); + + $dataValid = false; + + } + + + + return $dataValid; + + } + + + + function LoadFromDatabase($Id) + + { + + global $objSession, $Errors; + + + + 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 ReviewId = '%s'",$Id); + + if( $GLOBALS['debuglevel'] ) echo $sql."
"; + + $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(); + + return TRUE; + + } + + + + function MoveUp() + + { + + $this->Increment("Priority"); + + } + + + + function MoveDown() + + { + + $this->Decrement("Priority"); + + } + + + + function ParseObject($element) + + { + + global $objConfig, $objCatList, $rootURL, $objUsers; + + + + $extra_attribs = ExtraAttributes($element->attributes); + + + + if(strtolower($element->name)==$this->TagPrefix) + + { + + $field = strtolower($element->attributes["_field"]); + + switch($field) + + { + + case "id": + + /* + + @field:review.id + + @description: review id + + */ + + $ret = $this->Get("ReviewId"); + + break; + + case "item_id": + + /* + + @field:review.item_id + + @description: ID of the item being reviewed + + */ + + $ret = $this->Get("ItemId"); + + break; + + case "text": + + /* + + @field:review.text + + @description:Review text + + */ + + if($this->Get("TextFormat")==0 || $element->attribues["_textonly"]) + + { + + $ret = inp_htmlize($this->Get("ReviewText")); + + } + + else + + { + + $ret = $this->Get("ReviewText"); + + } + + break; + + case "ip": + + /* + + @field:review.ip + + @description:IP address of remote host submitting the review + + */ + + $ret = $this->Get("IPAddress"); + + break; + + case "pending": + + /* + + @field:review.pending + + @description: Returns the review pening status + + */ + + $ret = $this->Get("Pending"); + + break; + + case "item_type": + + /* + + @field:review.item_type + + @description:Returns the name of the reviewed item type + + */ + + $type =& $objItemTypes->GetItem($this->Get("ItemType")); + + if(is_object($type)) + + $ret = $type->Get("ItemName"); + + break; + + case "date": + + /* + + @field:review.date + + @description:Returns the date/time the review 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->attributes["_tz"]) + + { + + $d = GetLocalTime($d,$objSession->Get("tz")); + + } + + + + $part = strtolower($element->attributes["_part"]); + + if(strlen($part)) + + { + + $ret = ExtractDatePart($part,$d); + + } + + else + + { + + if($d<=0) + + { + + $ret = ""; + + } + + else + + $ret = LangDate($d); + + } + + break; + + case "reviewer": + + /* + + @field:revier.reviewer + + @description:Parse a user tag for the user submitting the review + + @attrib:_usertag::User tag to parse, defaults to the users login name + + */ + + $userfield = $element->attributes["_usertag"]; + + if(!strlen($userfield)) + + { + + $userfield = "login"; + + } + + if($this->Get("CreatedById")>0) + + { + + $u =& $objUsers->GetItem($this->Get("CreatedById")); + + $e = new clsHtmlTag(); + + $e->name = $u->TagPrefix; + + $e->attributes = $element->attributes; + + $e->attributes["_field"] = $userfield; + + $ret = $u->ParseObject($e); + + } + + else + + if($userfield=="login") + + $ret = "root"; + + break; + + default: + + $tag = $this->TagPrefix."_".$field; + + $ret = "Undefined: ".$tag->name; + + break; + + } + + } + + else + + { + + $ret = $element->Execute(); + + } + + return $ret; + + } + + + + function parsetag($tag) + + { + + global $objConfig, $objUsers, $objItemTypes; + + if(is_object($tag)) + + { + + $tagname = $tag->name; + + } + + else + + $tagname = $tag; + + switch($tagname) + + { + + case "review_id": + + return $this->Get("ReviewId"); + + break; + + case "review_item_id": + + return $this->Get("ItemId"); + + break; + + case "review_text": + + return $this->Get("ReviewText"); + + break; + + case "review_ip_address": + + return $this->Get("IPAddress"); + + break; + + case "review_pending": + + return $this->Get("Pending"); + + break; + + case "review_item_type": + + $type =& $objItemTypes->GetItem($this->Get("ItemType")); + + $res = $type->Get("ItemName"); + + return $res; + + break; + + case "review_created_date": + + return LangDate($this->Get("CreatedOn")); + + break; + + case "review_created_time": + + if($this->Get("CreatedOn")<=0) + + return ""; + + return adodb_date($objConfig->TimeFormat(), $this->Get("CreatedOn")); + + break; + + + + case "review_created_date_month": + + return adodb_date("m", $this->Get("CreatedOn")); + + break; + + case "review_created_date_day": + + return adodb_date("d", $this->Get("CreatedOn")); + + break; + + case "review_created_date_year": + + return adodb_date("Y", $this->Get("CreatedOn")); + + break; + + default: + + if (substr($tagname, 0, 16) == "review_createdby") + + { + + /* parse the created by user */ + + $u = $objUsers->GetUser($this->Get("CreatedById")); + + $usertag = substr($tag,17); + + return $u->parsetag($usertag); + + } + + else + + return "Undefined:$tagname"; + + break; + + } + + } + + + + function SendUserEventMail($Suffix,$ToUserId,$LangId=NULL) + + { + + global $objItemTypes, $objMessageList; + + + + $type =& $objItemTypes->GetItem($this->Get("ItemType")); + + $res = $type->Get("ItemName"); + + $EventName = $res.$Suffix; + + + + $Event =& $objMessageList->GetEmailEventObject($EventName,0,$LangId); + + if(is_object($Event)) + + { + + if($Event->Get("Enabled")=="1") + + { + + $Event->Item = $this; + + return $Event->SendToUser($ToUserId); + + } + + } + + } + + + + function SendAdminEventMail($EventName,$LangId=NULL) + + { + + global $objItemTypes, $objMessageList; + + + + $type =& $objItemTypes->GetItem($this->Get("ItemType")); + + $res = $type->Get("ItemName"); + + $EventName = $res; //.$Suffix; + + + + $Event =& $objMessageList->GetEmailEventObject($EventName,1,$LangId); + + if(is_object($Event)) + + { + + if($Event->Get("Enabled")=="1") + + { + + $Event->Item = $this; + + return $Event->SendAdmin($ToUserId); + + } + + } + + } + +} /*clsIItemReview*/ + + + +class clsItemReviewList extends clsItemCollection + +{ + + var $itemID; + + var $Page; + + var $PerPageVar; + + + + function clsItemReviewList($id=NULL) + + { + + $this->clsItemCollection(); + + $this->classname = "clsItemReview"; + + $this->SourceTable = GetTablePrefix()."ItemReview"; + + $this->Page = 1; + + $this->PerPageVar = "Perpage_Review"; + + if(isset($id)) + + $this->itemID=$id; + + $this->AdminSearchFields = array("ReviewText"); + + } + + + + function ItemCount() + + { + + return $this->NumItems(); + + } + + + + function GetReview($ID) + + { + + return $this->GetItem($ID); + + } + + + + function GetReviewList($StatusWhere = "Status=1", $OrderBy=NULL) + + { + + $this->Clear(); + + $where = "ItemId=".$this->itemID; + + $sql = "SELECT * FROM ".$this->SourceTable." WHERE "; + + if(strlen($StatusWhere)) + + $where .= " AND ".$StatusWhere; + + $sql .= $where; + + if(strlen($OrderBy)) + + $sql .= " ORDER BY ".$OrderBy; + + $Limit = $this->GetLimitSQL(); + + if(strlen($Limit)) + + $sql .= " ".$Limit; + + $this->QueryItemCount=TableCount($this->SourceTable,$where,0); + + return $this->Query_item($sql); + + } + + + + function GetItemReviewCount($TodayOnly = FALSE) + + { + + $sql = "SELECT count(*) as ItemCount FROM ".$this->SourceTable." WHERE ItemId=".$this->itemID." AND Status=1"; + + if($TodayOnly) + + { + + $today = mktime(0,0,0,date("m"),date("d"),date("Y")); + + $where .= " AND CreatedOn>=$today"; + + } + + $rs = $this->adodbConnection->execute($sql); + + $count=0; + + if($rs) + + $count = $rs->fields["ItemCount"]; + + return (int)$count; + + } + + + + function ip_exists($ip,$id) + + { + + return ip_exists($ip,id,$this->SourceTable); + + } + + + + function GetLimitSQL() + + { + + global $objConfig; + + if($this->Page<1) + + $this->Page=1; + + $PerPage = $objConfig->Get($this->PerPageVar); + + if(is_numeric($PerPage)) + + { + + $Start = ($this->Page-1)*$PerPage; + + $limit = "LIMIT ".$Start.",".$PerPage; + + } + + else + + $limit = NULL; + + return $limit; + + } + + + + + + function Query_Review($whereClause=NULL,$orderByClause=NULL) + + { + + global $Errors; + + + + $this->Clear(); + + $sql = "SELECT * FROM ".$this->SourceTable." "; + + + + if(isset($whereClause) && strlen(trim($whereClause))>0) + + $sql = sprintf("%s WHERE %s",$sql,$whereClause); + + + + if(isset($orderByClause) && strlen(trim($orderByClause))>0) + + $sql = sprintf("%s ORDER BY %s",$sql,$orderByClause); + + + + return $this->Query_Item($sql); + + } + + + + function &AddReview($CreatedOn,$ReviewText, $Status, $IPAddress, + + $Priority, $ItemId,$ItemType,$CreatedById,$TextFormat=0,$Module) + + { + + global $objSession; + + + + $r = new clsItemReview(NULL,$this->SourceTable); + + + + $ReviewText = str_replace("env=".$objSession->GetSessionKey(), "env=",$ReviewText); + + //$r->debuglevel = 1; + + + + $r->Set(array("CreatedOn","ReviewText","Status", "IPAddress", + + "Priority","ItemId","ItemType","CreatedById","TextFormat","Module"), + + array($CreatedOn,$ReviewText,$Status, $IPAddress, + + $Priority, $ItemId,$ItemType,$CreatedById,$TextFormat,$Module)); + + $r->Create(); + + array_push($this->Items,$r); + + if($Status==1) + + { + + $r->SendUserEventMail("REVIEW.ADD",$CreatedById); + + $r->SendAdminEventMail("REVIEW.ADD"); + + } + + else + + { + + $r->SendUserEventMail("REVIEW.ADD.PENDING",$CreatedById); + + $r->SendAdminEventMail("REVIEW.ADD.PENDING"); + + } + + + + return $r; + + } + + + + function EditReview($ReviewId,$CreatedOn,$ReviewText, $Status, + + $IPAddress, $Priority, $ItemId,$ItemType,$CreatedById,$TextFormat,$Module) + + { + + global $objSession; + + + + $r = $this->GetItem($ReviewId); + + if($CreatedById==0) + + $CreatedById = $r->Get("CreatedById"); + + $r->Set(array("ReviewId","CreatedOn","ReviewText","Status", + + "IPAddress", "Priority", "ItemId","ItemType","CreatedById","TextFormat","Module"), + + array($ReviewId,$CreatedOn,$ReviewText,$Status, + + $IPAddress, $Priority, $ItemId,$ItemType,$CreatedById,$TextFormat,$Module)); + + $r->Update(); + + //$r->SendUserEventMail("REVIEW.MODIFY",$objSession->Get("PortalUserId")); + + $r->SendAdminEventMail("REVIEW.MODIFY"); + + return $r; + + } + + + + function DeleteReview($ReviewId) + + { + + $r = $this->GetItem($ReviewId); + + $r->Delete(); + + } + + + + function CopyToItemId($OldId,$NewId) + + { + + $this->Clear(); + + $this->Query_Review("ItemId=$OldId",""); + + if($this->NumItems()>0) + + { + + foreach($this->Items as $i) + + { + + $i->Set("ItemId",$NewId); + + $i->UnsetIdField(); + + $i->Create(); + + } + + } + + } + + + + function CopyFromEditTable($ResourceId) + + { + + global $objSession; + + //echo "ToLive [Reviews]
"; + + $edit_table = $objSession->GetEditTable($this->SourceTable); + + $idlist = array(); + + $sql = "SELECT * FROM $edit_table"; + + $this->Clear(); + + // get all items in edit-table + + $rs = $this->adodbConnection->Execute($sql); + + while($rs && !$rs->EOF) + + { + + $data =& $rs->fields; + + + + $c = $this->AddItemFromArray($data); + + + + $c->Dirty(); + + if($data["ReviewId"]>0) + + { + + $c->Update(); + + } + + else + + { + + $c->UnsetIdField(); + + $c->Create(); + + } + + $idlist[] = $c->Get("ReviewId"); + + $rs->MoveNext(); + + } + + //print_pre($idlist); + + $sql = "DELETE FROM ".$this->SourceTable." WHERE ItemId=$ResourceId ".(count($idlist) > 0 ? "AND ReviewId NOT IN (".implode(",",$idlist).")" : ""); + + //echo "DEL REVIEW SQL: $sql
"; + + $this->adodbConnection->Execute($sql); + + @$this->adodbConnection->Execute("DROP TABLE IF EXISTS ".$edit_table); + + } + + + + + + function GetPageLinkList(&$UpdateVar,$dest_template=NULL,$page = NULL,$PagesToList=10,$HideEmpty=TRUE) + + { + + global $objConfig, $var_list_update, $var_list; + + + + if(!strlen($page)) + + $page = GetIndexURL(); + + $PerPage = $objConfig->Get($this->PerPageVar); + + if($PerPage<1) + + $PerPage=20; + + $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) + + { + + $UpdateVar["rp"] = $this->Page-$PagesToList; + + $prev_url = $page."?env=".BuildEnv(); + + $o .= "<<"; + + } + + + + + + for($p=$StartPage;$p<=$EndPage;$p++) + + { + + if($p!=$this->Page) + + { + + $UpdateVar["rp"]=$p; + + $href = $page."?env=".BuildEnv(); + + $o .= " $p "; + + } + + else + + { + + $o .= "$p"; + + } + + } + + if($EndPage<$NumPages && $EndPage>0) + + { + + $UpdateVar["rp"]=$this->Page+$PagesToList; + + $next_url = $page."?env=".BuildEnv(); + + $o .= " >>"; + + } + + unset($UpdateVar,$var_list_update["t"] ); + + return $o; + + } + + + + + +} /*clsItemReviewList*/ + + + +?> \ No newline at end of file Index: trunk/kernel/include/category.php =================================================================== diff -u -N -r642 -r667 --- trunk/kernel/include/category.php (.../category.php) (revision 642) +++ trunk/kernel/include/category.php (.../category.php) (revision 667) @@ -1,2318 +1,4635 @@ -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); -} -?> +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 Index: trunk/admin/category/addcategory.php =================================================================== diff -u -N -r642 -r667 --- trunk/admin/category/addcategory.php (.../addcategory.php) (revision 642) +++ trunk/admin/category/addcategory.php (.../addcategory.php) (revision 667) @@ -1,385 +1,747 @@ -Get("Site_Path"); -$admin = $objConfig->Get("AdminDirectory"); -if(!strlen($admin)) - $admin = "admin"; -$localURL=$rootURL."kernel/"; -$adminURL = $rootURL.$admin; -$imagesURL = $adminURL."/images"; -//$pathtolocal = $pathtoroot."in-news/"; - -require_once ($pathtoroot.$admin."/include/elements.php"); -require_once ($pathtoroot."kernel/admin/include/navmenu.php"); -//require_once ($pathtolocal."admin/include/navmenu.php"); -require_once($pathtoroot.$admin."/toolbar.php"); - -unset($objEditItems); - -if($_REQUEST['item']) -{ - // smulate like normal edit button pressed - $tmp_cat =& $objCatList->GetItemByField('ResourceId', $_REQUEST['item']); - $_POST['catlist'][] = $tmp_cat->UniqueId(); -} - -$objEditItems = new clsCatList(); -$objEditItems->SourceTable = $objSession->GetEditTable("Category"); -$objCustomFields = new clsCustomFieldList(1); -$objCustomDataList = new clsCustomDataList(); -$objRelList = new clsRelationshipList(); -$objImages = new clsImageList(); - -//Multiedit init -if ($_GET["new"] == 1) -{ - $c = new clsCategory(NULL); - $c->Set("CreatedOn", time()); - $c->Set("EndOn", time()); - $c->Set("ParentId",$objCatList->CurrentCategoryID()); - $c->Set("NewItem",2); //auto - $c->Set("Status",2); //pending - $en = 0; - $action = "m_add_category"; - $objCatList->CreateEmptyEditTable("CategoryId"); - $objRelList->CreateEmptyEditTable("RelationshipId"); - $objCustomDataList->CreateEmptyEditTable("CustomDataId"); - $objImages->CreateEmptyEditTable("ResourceId"); - - $TitleVerb = prompt_language("la_Text_Adding"); -} -else -{ - if(isset($_POST["catlist"])) - { - $cats = $_POST["catlist"]; - $objCatList->CopyToEditTable("CategoryId",$cats); - $objEditItems->Query_Item("SELECT * FROM ".$objEditItems->SourceTable); - /* make a copy of the relationship records */ - $ids = $objEditItems->GetResourceIDList(); - $objRelList->CopyToEditTable("SourceId", $ids); - $objCustomDataList->CopyToEditTable("ResourceId",$ids); - $objImages->CopyToEditTable("ResourceId", $ids); - $c = $objEditItems->GetItemByIndex(0); - $itemcount=$objEditItems->NumItems(); - $en = 0; - } - else - { - if($_GET["item"]) - { - /*shortcut to edit link */ - $objCatList->CopyToEditTable("ResourceId",$_GET["item"]); - $backurl = $_GET["return"]; - } - - //Multiedit init - $en = (int)$_GET["en"]; - $objEditItems->Query_Item("SELECT * FROM ".$objEditItems->SourceTable); - - //$ids = $objEditItems->GetResourceIDList(); - //$objRelList->CopyToEditTable("SourceId", $ids); - //$objCustomDataList->CopyToEditTable("ResourceId",$ids); - //$objImages->CopyToEditTable("ResourceId", $ids); - - $itemcount=$objEditItems->NumItems(); - $c = $objEditItems->GetItemByIndex($en); - } - - if($itemcount>1) - { - if ($en+1 == $itemcount) - $en_next = -1; - else - $en_next = $en+1; - - if ($en == 0) - $en_prev = -1; - else - $en_prev = $en-1; - } - - $action = "m_edit_category"; - $TitleVerb = prompt_language("la_Text_Editing"); -} - -$envar = "env=" . BuildEnv() . "&en=$en"; -$section = 'in-portal:editcategory_general'; - -if (strlen($c->Get("Name"))) - $editing_category_title = "'".$c->Get("Name")."' "; -else - $editing_category_title = ""; - -$title = $TitleVerb." ".prompt_language("la_Text_Category")." $editing_category_title- ".prompt_language("la_tab_General"); - -//$saveURL = $admin."/browse.php"; -$saveURL = $admin."/category/category_maint.php"; -$cancelURL = $admin."/".$objSession->GetVariable('ReturnScript'); - -//Display header -$sec = $objSections->GetSection($section); - -$objCatToolBar = new clsToolBar(); -$objCatToolBar->Add("img_save", "la_Save","#","swap('img_save','toolbar/tool_select_f2.gif');", "swap('img_save', 'toolbar/tool_select.gif');","edit_submit('category','CatEditStatus','$saveURL',1,'');","tool_select.gif"); -$objCatToolBar->Add("img_cancel", "la_Cancel","#","swap('img_cancel','toolbar/tool_cancel_f2.gif');", "swap('img_cancel', 'toolbar/tool_cancel.gif');","edit_submit('category','CatEditStatus','$cancelURL',2,'');","tool_cancel.gif"); - -if ( isset($en_prev) || isset($en_next) ) -{ - $url = $RootUrl.$admin."/category/addcategory.php"; - $StatusField = "CatEditStatus"; - $form = "category"; - MultiEditButtons($objCatToolBar,$en_next,$en_prev,$form,$StatusField,$url,$sec->Get("OnClick"),'','la_PrevCategory','la_NextCategory'); -} - -int_header($objCatToolBar,NULL,$title); -$c->Data=inp_htmlize($c->Data); -if ($objSession->GetVariable("HasChanges") == 1) { -?> - - - - -
- -
- - - - > - - - - Get("CategoryId") > 0 ) { ?> - > - - - - - - > - - - - - > - - - - - - - > - - - - - > - - - - - > - - - - - > - - - - - > - - - - - - - > - - - - - > - - - - -GetFieldUIList(TRUE); -if($CustomFieldUI->NumItems()>0) -{ - $objCustomDataList->SourceTable = $objSession->GetEditTable("CustomMetaData"); - if((int)$c->Get("ResourceId")>0) - { - $objCustomDataList->LoadResource($c->Get("ResourceId")); - } - $headings = $CustomFieldUI->GetHeadingList(); - //echo "
";print_r($objCustomFields); echo "
"; - for($i=0;$i<=count($headings);$i++) - { - $h = $headings[$i]; - if(strlen($h)) - { - int_subsection_title(prompt_language($h)); - $Items = $CustomFieldUI->GetHeadingItems($h); - foreach($Items as $f) - { - $n = substr($f->name,1); - - $cfield = $objCustomFields->GetItemByField("FieldName",$n,FALSE); - if(is_object($cfield)) - { - $cv = $objCustomDataList->GetDataItem($cfield->Get("CustomFieldId")); - if(is_object($cv)) - { - $f->default_value = $cv->Get("Value"); - } - } - print "\n"; - print " \n"; - print " "; - if(is_object($f->NextItem)) - { - $n = $f->NextItem; - print " "; - } - else - print " \n"; - print "\n"; - } - } - } -} -?> - "> - "> - - - - -
- -
- -
Get("CategoryId"); ?> 
- "> -
-
- - - -
- -
- Get("Status") == 1) echo "checked"; ?>> - Get("Status") == 2) echo "checked"; ?>> - Get("Status") == 0) echo "checked"; ?>> -  
- Get("NewItem") == 2) echo "checked"; ?>> - Get("NewItem") == 1) echo "checked"; ?>> - Get("NewItem") == 0) echo "checked"; ?>> - -  
- Get("EditorsPick") == 1) echo "checked"; ?>> -  
"> 
- "> - - - DBG: '.date('M d. Y H:i:s', $c->get('Modified') ); ?> -
- "> -  
- -  
".$f->GetPrompt()."".$f->ItemFormElement()."".$n->ItemFormElement()." 
- - - -
- -
- - - - +Get("Site_Path"); + +$admin = $objConfig->Get("AdminDirectory"); + +if(!strlen($admin)) + + $admin = "admin"; + +$localURL=$rootURL."kernel/"; + +$adminURL = $rootURL.$admin; + +$imagesURL = $adminURL."/images"; + +//$pathtolocal = $pathtoroot."in-news/"; + + + +require_once ($pathtoroot.$admin."/include/elements.php"); + +require_once ($pathtoroot."kernel/admin/include/navmenu.php"); + +//require_once ($pathtolocal."admin/include/navmenu.php"); + +require_once($pathtoroot.$admin."/toolbar.php"); + + + +unset($objEditItems); + + + +if($_REQUEST['item']) + +{ + + // smulate like normal edit button pressed + + $tmp_cat =& $objCatList->GetItemByField('ResourceId', $_REQUEST['item']); + + $_POST['catlist'][] = $tmp_cat->UniqueId(); + +} + + + +$objEditItems = new clsCatList(); + +$objEditItems->SourceTable = $objSession->GetEditTable("Category"); + +$objCustomFields = new clsCustomFieldList(1); + +$objCustomDataList = new clsCustomDataList(); + +$objRelList = new clsRelationshipList(); + +$objImages = new clsImageList(); + + + +//Multiedit init + +if ($_GET["new"] == 1) + +{ + + $c = new clsCategory(NULL); + + $c->Set("CreatedOn", time()); + + $c->Set("EndOn", time()); + + $c->Set("ParentId",$objCatList->CurrentCategoryID()); + + $c->Set("NewItem",2); //auto + + $c->Set("Status",2); //pending + + $en = 0; + + $action = "m_add_category"; + + $objCatList->CreateEmptyEditTable("CategoryId"); + + $objRelList->CreateEmptyEditTable("RelationshipId"); + + $objCustomDataList->CreateEmptyEditTable("CustomDataId"); + + $objImages->CreateEmptyEditTable("ResourceId"); + + + + $TitleVerb = prompt_language("la_Text_Adding"); + +} + +else + +{ + + if(isset($_POST["catlist"])) + + { + + $cats = $_POST["catlist"]; + + $objCatList->CopyToEditTable("CategoryId",$cats); + + $objEditItems->Query_Item("SELECT * FROM ".$objEditItems->SourceTable); + + /* make a copy of the relationship records */ + + $ids = $objEditItems->GetResourceIDList(); + + $objRelList->CopyToEditTable("SourceId", $ids); + + $objCustomDataList->CopyToEditTable("ResourceId",$ids); + + $objImages->CopyToEditTable("ResourceId", $ids); + + $c = $objEditItems->GetItemByIndex(0); + + $itemcount=$objEditItems->NumItems(); + + $en = 0; + + } + + else + + { + + if($_GET["item"]) + + { + + /*shortcut to edit link */ + + $objCatList->CopyToEditTable("ResourceId",$_GET["item"]); + + $backurl = $_GET["return"]; + + } + + + + //Multiedit init + + $en = (int)$_GET["en"]; + + $objEditItems->Query_Item("SELECT * FROM ".$objEditItems->SourceTable); + + + + //$ids = $objEditItems->GetResourceIDList(); + + //$objRelList->CopyToEditTable("SourceId", $ids); + + //$objCustomDataList->CopyToEditTable("ResourceId",$ids); + + //$objImages->CopyToEditTable("ResourceId", $ids); + + + + $itemcount=$objEditItems->NumItems(); + + $c = $objEditItems->GetItemByIndex($en); + + } + + + + if($itemcount>1) + + { + + if ($en+1 == $itemcount) + + $en_next = -1; + + else + + $en_next = $en+1; + + + + if ($en == 0) + + $en_prev = -1; + + else + + $en_prev = $en-1; + + } + + + + $action = "m_edit_category"; + + $TitleVerb = prompt_language("la_Text_Editing"); + +} + + + +$envar = "env=" . BuildEnv() . "&en=$en"; + +$section = 'in-portal:editcategory_general'; + + + +if (strlen($c->Get("Name"))) + + $editing_category_title = "'".$c->Get("Name")."' "; + +else + + $editing_category_title = ""; + + + +$title = $TitleVerb." ".prompt_language("la_Text_Category")." $editing_category_title- ".prompt_language("la_tab_General"); + + + +//$saveURL = $admin."/browse.php"; + +$saveURL = $admin."/category/category_maint.php"; + +$cancelURL = $admin."/".$objSession->GetVariable('ReturnScript'); + + + +//Display header + +$sec = $objSections->GetSection($section); + + + +$objCatToolBar = new clsToolBar(); + +$objCatToolBar->Add("img_save", "la_Save","#","swap('img_save','toolbar/tool_select_f2.gif');", "swap('img_save', 'toolbar/tool_select.gif');","edit_submit('category','CatEditStatus','$saveURL',1,'');","tool_select.gif"); + +$objCatToolBar->Add("img_cancel", "la_Cancel","#","swap('img_cancel','toolbar/tool_cancel_f2.gif');", "swap('img_cancel', 'toolbar/tool_cancel.gif');","edit_submit('category','CatEditStatus','$cancelURL',2,'');","tool_cancel.gif"); + + + +if ( isset($en_prev) || isset($en_next) ) + +{ + + $url = $RootUrl.$admin."/category/addcategory.php"; + + $StatusField = "CatEditStatus"; + + $form = "category"; + + MultiEditButtons($objCatToolBar,$en_next,$en_prev,$form,$StatusField,$url,$sec->Get("OnClick"),'','la_PrevCategory','la_NextCategory'); + +} + + + +int_header($objCatToolBar,NULL,$title); + +$c->Data=inp_htmlize($c->Data); + +if ($objSession->GetVariable("HasChanges") == 1) { + +?> + + + + + + + + +
+ + + +
+ + + + + + > + + + + + + + + Get("CategoryId") > 0 ) { ?> + + > + + + + + + + + + + > + + + + + + + + + + > + + + + + + + + + + > + + + + + + + + + + > + + + + + + + + + + > + + + + + + + + + + > + + + + + + + + + + > + + + + + + + + + + > + + + + + + + + + + > + + + + + + + + +GetFieldUIList(TRUE); + +if($CustomFieldUI->NumItems()>0) + +{ + + $objCustomDataList->SourceTable = $objSession->GetEditTable("CustomMetaData"); + + if((int)$c->Get("ResourceId")>0) + + { + + $objCustomDataList->LoadResource($c->Get("ResourceId")); + + } + + $headings = $CustomFieldUI->GetHeadingList(); + + //echo "
";print_r($objCustomFields); echo "
"; + + for($i=0;$i<=count($headings);$i++) + + { + + $h = $headings[$i]; + + if(strlen($h)) + + { + + int_subsection_title(prompt_language($h)); + + $Items = $CustomFieldUI->GetHeadingItems($h); + + foreach($Items as $f) + + { + + $n = substr($f->name,1); + + + + $cfield = $objCustomFields->GetItemByField("FieldName",$n,FALSE); + + if(is_object($cfield)) + + { + + $cv = $objCustomDataList->GetDataItem($cfield->Get("CustomFieldId")); + + if(is_object($cv)) + + { + + $f->default_value = $cv->Get("Value"); + + } + + } + + print "\n"; + + print " \n"; + + print " "; + + if(is_object($f->NextItem)) + + { + + $n = $f->NextItem; + + print " "; + + } + + else + + print " \n"; + + print "\n"; + + } + + } + + } + +} + +?> + "> + + "> + + + + + + + + + +
+ + + +
+ + + +
Get("CategoryId"); ?> 
+ + "> + +
+ +
+ + + + + + + +
+ + + +
+ + Get("Status") == 1) echo "checked"; ?>> + + Get("Status") == 2) echo "checked"; ?>> + + Get("Status") == 0) echo "checked"; ?>> + +  
+ + Get("NewItem") == 2) echo "checked"; ?>> + + Get("NewItem") == 1) echo "checked"; ?>> + + Get("NewItem") == 0) echo "checked"; ?>> + + + +  
+ + Get("EditorsPick") == 1) echo "checked"; ?>> + +  
"> 
+ + "> + + + + + + DBG: '.date('M d. Y H:i:s', $c->get('Modified') ); ?> + +
+ + "> + +  
+ + + +  
".$f->GetPrompt()."".$f->ItemFormElement()."".$n->ItemFormElement()." 
+ + + + + + + +
+ + + +
+ \ No newline at end of file Index: trunk/kernel/action.php =================================================================== diff -u -N -r629 -r667 --- trunk/kernel/action.php (.../action.php) (revision 629) +++ trunk/kernel/action.php (.../action.php) (revision 667) @@ -2420,4 +2420,4 @@ //echo "==== END ====
"; -?> +?> \ No newline at end of file Index: trunk/kernel/include/searchitems.php =================================================================== diff -u -N -r642 -r667 --- trunk/kernel/include/searchitems.php (.../searchitems.php) (revision 642) +++ trunk/kernel/include/searchitems.php (.../searchitems.php) (revision 667) @@ -1,739 +1,1477 @@ - : is required - - : cannot exist in the searched field - "word word" : contents between the quotes are treated as a single entity - +/-"word word" is supported - ignore words are not case sensitive -*/ -class clsSearchLog extends clsItemDB -{ - function clsSearchLog($id=NULL) - { - $this->clsItemDB(); - $this->tablename = GetTablePrefix()."SearchLog"; - $this->id_field = "SearchLogId"; - $this->NoResourceId = 1; - if($id) - $this->LoadFromDatabase($id); - } - - function LoadFromDatabase($Id) - { - global $Errors; - - 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 ".$this->IdField()." = '%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; - - $this->SetFromArray($data); - $this->Clean(); - return true; - } -} - -class clsSearchLogList extends clsItemCollection -{ - var $Page; - var $PerPageVar; - - function clsSearchLogList() - { - $this->clsItemCollection(); - $this->SourceTable = GetTablePrefix()."SearchLog"; - $this->classname = "clsSearchLog"; - $this->Page=1; - $this->PerPageVar = "Perpage_SearchLog"; - $this->AdminSearchFields = array("Keyword"); - } - - function UpdateKeyword($keyword,$SearchType) - { - $sql = "UPDATE ".$this->SourceTable." SET Indices = Indices+1 WHERE Keyword='$keyword' AND SearchType=$SearchType"; - //echo $sql."
\n"; - $this->adodbConnection->Execute($sql); - if($this->adodbConnection->Affected_Rows()==0) - { - //echo "Creating Keyword record..
\n"; - $k = new clsSearchLog(); - $k->Set("Keyword",$keyword); - $k->Set("Indices",1); - $k->Set("SearchType",$SearchType); - $k->Create(); - } - } - - function AddKeywords($Keywords) - { - if(is_array($Keywords)) - { - for($i=0;$iUpdateKeyword($Keywords[$i]); - } - } - else - $this->UpdateKeyword($Keywords); - } -} - -class clsEmailLog extends clsItemDB -{ - function clsEmailLog($id=NULL) - { - $this->clsItemDB(); - $this->tablename = GetTablePrefix()."SearchLog"; - $this->id_field = "SearchLogId"; - $this->NoResourceId = 1; - if($id) - $this->LoadFromDatabase($id); - } - - function LoadFromDatabase($Id) - { - global $Errors; - - 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 ".$this->IdField()." = '%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; - - $this->SetFromArray($data); - $this->Clean(); - return true; - } -} - -class clsEmailLogList extends clsItemCollection -{ - var $Page; - var $PerPageVar; - - function clsEmailLogList() - { - $this->clsItemCollection(); - $this->SourceTable = GetTablePrefix()."SearchLog"; - $this->classname = "clsEmailLog"; - $this->Page=1; - $this->PerPageVar = "Perpage_EmailsL"; - $this->AdminSearchFields = array("event", "fromuser", "addressto", "subject"); - } - - function UpdateKeyword($keyword,$SearchType) - { - $sql = "UPDATE ".$this->SourceTable." SET Indices = Indices+1 WHERE Keyword='$keyword' AND SearchType=$SearchType"; - //echo $sql."
\n"; - $this->adodbConnection->Execute($sql); - if($this->adodbConnection->Affected_Rows()==0) - { - //echo "Creating Keyword record..
\n"; - $k = new clsSearchLog(); - $k->Set("Keyword",$keyword); - $k->Set("Indices",1); - $k->Set("SearchType",$SearchType); - $k->Create(); - } - } - - function AddKeywords($Keywords) - { - if(is_array($Keywords)) - { - for($i=0;$iUpdateKeyword($Keywords[$i]); - } - } - else - $this->UpdateKeyword($Keywords); - } -} - -class clsSearchResults extends clsItemCollection -{ - var $ResultTable; - var $FieldList; - var $FieldWeight; - var $WhereClauses; - var $SourceTable; - var $Relationships; - var $Ignored_Words; - var $CatClause; - var $Keywords; - var $Phrase = ""; - var $SearchType; - var $RequiredRelevance; - var $PctRelevance; - var $PctPop; - var $PctRating; - - function clsSearchResults($SearchSource,$DataClass) - { - global $objConfig; - - $this->clsItemCollection(); - $this->SourceTable = $SearchSource; - $this->SetResultTable($SearchSource,$DataClass); - $this->FieldList = array(); - $this->Relationships = array(); - $this->Ignored_Words = array(); - $this->WhereClauses = array(); - $this->FieldWeight = array(); - $this->Keywords = GetKeywords(""); - $this->SearchType = 0; //simple - $this->RequiredRelevance=0; - $this->PctRelevance = $objConfig->Get("SearchRel_DefaultKeyword")/100; - $this->PctPop = $objConfig->Get("SearchRel_DefaultPop")/100; - $this->PctRating = $objConfig->Get("SearchRel_DefaultRating")/100; - } - - function SetResultTable($SearchSource,$DataClass) - { - global $objSession; - - $this->ResultTable = $objSession->GetSearchTable(); - $this->classname= $DataClass; - } - - function LoadSearchResults($Start=0,$PerPage=NULL) - { - if($PerPage) - { - $limit = "LIMIT $Start,$PerPage"; - } - $sql = "SELECT * FROM ".$this->ResultTable." ".$limit; - - $this->Clear(); - $rs = $this->adodbConnection->Execute($sql); - return $this->Query_Item($sql); - } - - function SetCategoryClause($whereclause) - { - $this->CatClause=$whereclause; - } - - function AddRelationship($JoinTable,$JoinExpression=NULL) - { - - $this->Relationships[$JoinTable]=$JoinExpression; - } - - function SetKeywords($keywords) - { - $this->Phrase=$keywords; - $this->keywords = GetKeywords($keywords); - } - - function AddSimpleCustomFields() - { - $sql = "SELECT * FROM ".GetTablePrefix()."SearchConfig WHERE TableName='".$this->SourceTable."' AND SimpleSearch=1 AND CustomFieldId>0"; - //echo $sql; - foreach($this->Relationships as $Table=>$clause) - { - if(strlen($Table)>0 && $Table != "Category") - $sql .= " OR TableName='".$Table."'"; - } - $ctable = GetTablePrefix()."CustomMetaData"; - $rs = $this->adodbConnection->Execute($sql); - $CustomJoined = FALSE; - while($rs && !$rs->EOF) - { - $x = $rs->fields["CustomFieldId"]; - $t = $ctable." as c".$x; - $join = "(c$x.ResourceId=".GetTablePrefix().$this->SourceTable.".ResourceId AND c$x.CustomFieldId=".$rs->fields["CustomFieldId"].")"; - $this->AddRelationship($t,$join); - $f = "c".$x.".Value "; - $this->FieldList[] = $f; - $this->FieldWeight[$f] = $rs->fields["Priority"]; - $rs->MoveNext(); - } - } - - function AddSimpleFields() - { - $sql = "SELECT * FROM ".GetTablePrefix()."SearchConfig WHERE TableName='".$this->SourceTable."' AND SimpleSearch=1 AND CustomFieldId=0"; - //echo $sql; - foreach($this->Relationships as $Table=>$clause) - { - if(strlen($Table)>0 && $Table != "Category") - $sql .= " OR TableName='".$Table."'"; - } - $rs = $this->adodbConnection->Execute($sql); - - while($rs && !$rs->EOF) - { - $f = GetTablePrefix().$rs->fields["TableName"].".".$rs->fields["FieldName"]; - $this->FieldList[] = $f; - $this->FieldWeight[$f] = $rs->fields["Priority"]; - $rs->MoveNext(); - } - $this->AddSimpleCustomFields(); - } - - function AddSearchWhereClause($FieldName) - { - $req_where = ""; - /* build required keywords string */ - - if(count($this->keywords["required"])>0) - { - $required = $this->keywords["required"]; - for($i=0;$i0) - { - if($i>0) - { - $or =" AND "; - } - else - $or = ""; - $w .= $or." ".$FieldName." LIKE '%".$required[$i]."%'"; - } - } - if(strlen($w)>0) - { - $req_where = "(". $w.")"; - } - else - $req_where = ""; - } - $w = ""; - $not_where=""; - if(count($this->keywords["notallowed"])>0) - { - $words = $this->keywords["notallowed"]; - for($i=0;$i0) - { - if($i>0) - { - $or =" AND "; - } - else - $or = ""; - $w .= $or." ".$FieldName." NOT LIKE '%".$words[$i]."%'"; - } - } - if(strlen($w)>0) - { - $not_where = "(".$w.")"; - } - else - $not_where = ""; - } - - $w=""; - $normal = $this->keywords["normal"]; - if(count($normal)>0) - { - for($i=0;$i0) - { - if($i>0) - { - $or =" OR "; - } - else - $or = ""; - $w .= "$or $FieldName LIKE '%".$normal[$i]."%'"; - } - } - if(count($required)>0) - $w .= " OR "; - for($i=0;$i0) - { - if($i>0) - { - $or = " OR "; - } - else - $or=""; - $w .= "$or $FieldName LIKE '%".$required[$i]."%'"; - } - } - if(strlen($w)>0) - { - $where = "(".$w.")"; - } - else - $where = ""; - } - - $complete= BuildWhereClause($where,$req_where,$not_where); - $this->WhereClauses[$FieldName]="(".$complete.")"; - $this->Ignored_Words=$this->keywords["ignored"]; - } - - function PerformSearch($ItemType,$OrderBy=NULL,$InitTable=FALSE, $idlist=NULL) - { - static $SelectSQL, $OldItemType; - global $objSession, $objItemTypes; - //echo "perfirming Simple Search
"; - //echo "Old Item Type: $OldItemType New: $ItemType
\n"; - if($ItemType != $OldItemType) - $SelectSQL = ""; - $OldItemType = $ItemType; - - $ctype = $objItemTypes->GetItem($ItemType); - $idField = $ctype->Get("SourceTable")."Id"; - $this->SourceTable = GetTablePrefix().$ctype->Get("SourceTable"); - $result=0; - $PopField = $ctype->Get("PopField"); - $RateField = $ctype->Get("RateField"); - - //print_pre($this->keywords); - - if(!strlen($SelectSQL)) - { - $typestr = str_pad($ItemType,2,"0",STR_PAD_LEFT); - $SelectSQL = "SELECT "; - $ifs = array(); - $weightsum = 0; - foreach($this->FieldWeight as $w) - $weightsum += $w; - $wordcount = count($this->keywords["normal"])+count($this->keywords["required"]); - $single = ($wordcount == 1); - foreach($this->FieldList as $f) - { - $weight = (int)$this->FieldWeight[$f]; - $s = array(); - - if(!$single) - { - $full = trim(implode(" ",$this->keywords["normal"])); - $s[] = " (IF ($f LIKE '%$full%', ".$weightsum.", 0))"; - } - foreach($this->keywords["normal"] as $k) - { - if($k != $full || $single) - { - $temp = " (IF ($f LIKE '%$k%', ".$weight.", 0))"; - $s[] = $temp; - } - } - - foreach($this->keywords["required"] as $k) - { - if($this->RequiredRelevance>0) - $weight = $this->FieldWeight[$f] + ($this->FieldWeight[$f]*($this->RequiredRelevance/100)); - - if($k != $full || $single) - { - $s[] = " (IF ($f LIKE '%$k%', ".$weight.", 0))"; - } - } - // echo "
";print_r($s); echo "
"; - $txt = implode("+",$s); - //echo $txt."
\n"; - $ifs[] = $txt; - unset($s); - } -// echo "
";print_r($ifs); echo "
"; - - /* add relevance formula for weighting hits & popularity */ - - if($weightsum==0) - $weightsum=1; - - if(strlen($PopField)>0 && $this->PctPop>0) - { - $popcalc = " + ((($PopField + 1) / (max($PopField)+1)*".$this->PctPop."))"; - } - else - $popcalc = ""; - - if(strlen($RateField)>0 && $this->PctRating>0) - { - $ratecalc = " + ((($RateField + 1) / (max($RateField)+1)*".$this->PctRating."))"; - } - else - $ratecalc = ""; - - if($this->PctRelevance>0) - { - $relcalc = "(((".implode("+",$ifs).")/$weightsum)*".$this->PctRelevance.")"; - } - else - $relcalc = "0"; - - $SelectSQL .= $relcalc.$popcalc.$ratecalc." as Relevance, "; - - $SelectSQL .= $this->SourceTable.".".$idField." as ItemId, ".$this->SourceTable.".ResourceId as ResourceId, CONCAT($typestr) as ItemType, EditorsPick as EdPick FROM ".$this->SourceTable." "; - - foreach($this->Relationships as $JoinTable=>$OnClause) - { - $SelectSQL .= "LEFT JOIN $JoinTable ON $OnClause "; - } - $first=1; - $where=0; - - foreach($this->FieldList as $field) - { - if(strpos($field,"as")>0) - { - $fparts = explode("as",$field,2); - $f = $fparts[1]; - $this->AddSearchWhereClause($field); - } - else { - $this->AddSearchWhereClause($field); - } - } - - $SelectSQL .= " WHERE "; - $SelectSQL .= implode(" or ",$this->WhereClauses); - - if(is_array($idlist)) - { - $SelectSQL .= " AND (ResourceId IN (".implode(",",$idlist)."))"; - } - } - $SelectSQL .= "GROUP BY $idField "; - //echo $SelectSQL."

\n"; - if($InitTable) - { - $this->adodbConnection->Execute("DROP TABLE IF EXISTS ".$this->ResultTable); - //$indexSQL = "(INDEX(Relevance), INDEX(ItemId), INDEX(ItemType), INDEX sorting (EdPick,Relevance)) "; - $full_sql = "CREATE TABLE ".$this->ResultTable." ".$indexSQL.$SelectSQL; - //echo $full_sql."
\n"; - $this->adodbConnection->Execute($full_sql); - //echo $this->adodbConnection->ErrorMsg()."
\n"; - $objSession->SetVariable("Search_Keywords",$this->Phrase); - } - else - { - $full_sql = "INSERT INTO ".$this->ResultTable." (Relevance,ItemId,ResourceId,ItemType,EdPick) ".$SelectSQL; - //echo "[".htmlspecialchars($full_sql)."]
\n"; - $this->adodbConnection->Execute($full_sql); - //echo $this->adodbConnection->ErrorMsg()."
\n"; - } - //Here we need to remove found items which was found by HTML tags matching keywords - //$this->adodbConnection->Execute("DELETE FROM ".$this->ResultTable." WHERE ItemId = 13 AND ItemType = 4"); - } - - function BuildIndexes() - { - $sql = "ALTER TABLE ".$this->ResultTable." ADD INDEX (Relevance), "; - $sql .="ADD INDEX (ItemId), "; - $sql .="ADD INDEX (ItemType), "; - $sql .=" ADD INDEX sorting (EdPick,Relevance)"; - //echo $sql; - $this->adodbConnection->Execute($sql); - } - - function Result_IdList() - { - /* returns an array contain a resource ID list */ - $sql = "SELECT DISTINCT(ResourceId) FROM ".$this->ResultTable; - $rs = $this->adodbConnection->Execute($sql); - $result = array(); - while($rs && !$rs->EOF) - { - $result[] = $rs->fields["ResourceId"]; - $rs->MoveNext(); - } - return $result; - } -} - -function count_words($string) -{ - // below line added to make contiguous spaces count as one space - if(strlen($string)) - { - $string = eregi_replace(" +", " ", $string); - return substr_count($string," ")+1; - } - else - return 0; -} - -function GetKeywords($phrase) -{ - global $KeywordIgnore; - - if(count($KeywordIgnore)==0) - GetIgnoreList(); - $keywords["normal"]= array(); - $keywords["required"]= array(); - $keywords["notallowed"] = array(); - $keywords["ignored"] = array(); - if(!strlen($phrase)) - return $keywords; - $w_array = array(); - $phrase=trim($phrase); - //if(count_words($phrase)>1) - // $keywords["normal"][] = $phrase; - $t_len = strlen($phrase); - $ce=0; - for ($i=0; $i<$t_len; $i++) - { #search for next special tag - switch ($phrase[$i]) - { - case "\"": - $exact_match_close = strpos($phrase,"\"", $i+1); - if(!$exact_match_close) - break; - $exact_word=substr($phrase, $i+1, ($exact_match_close-$i)-1); - $i=$exact_match_close; - if($exact_word) - { - if(strlen($token)==0) - $token="|"; - $w_array[$ce]=$token.addslashes($exact_word); - $token=""; - $ce++; - $exact_word=""; - } - break; - - case "+": - if(strlen($exact_word)==0) - { - $token = "+"; - } - else - $exact_word .= "+"; - break; - case "-": - if(strlen($exact_word)==0) - { - $token = "-"; - } - else - $exact_word .="-"; - break; - case " ": - case ",": - if($exact_word) - { - if(strlen($token)==0) - $token="|"; - if($token=="|") - { - if($KeywordIgnore[strtolower($exact_word)]==1) - { - $w_array[$ce]= "=".addslashes($exact_word); - $ce++; - } - else - { - $w_array[$ce]=$token.addslashes($exact_word); - $ce++; - } - } - else - { - $w_array[$ce]=$token.addslashes($exact_word); - $ce++; - } - $token=""; - $exact_word=""; - } - break; - - default: - $exact_word.=$phrase[$i]; - } - } - if($exact_word) - { - if(strlen($token)==0) - $token="|"; - if($KeywordIgnore[strtolower($exact_word)]==1 && ($token =="|" || $token=="=")) - { - $w_array[$ce]= "=".addslashes($exact_word); - $ce++; - } - else - { - $w_array[$ce]=$token.addslashes($exact_word); - $ce++; - } - } - for ($i=0;$i0 && strlen($notallowed)>0) - { - $return .= " AND "; - } - $return .= $notallowed; - if(strlen($return)>0 && strlen($normal)>0) - { - $return .= " AND "; - } - $return .= $normal; - return $return; -} - -function GetIgnoreList() -{ - global $KeywordIgnore; - - $adodbConnection = &GetADODBConnection(); - - $rs = $adodbConnection->Execute("SELECT * FROM ".GetTablePrefix()."IgnoreKeywords"); - while($rs && !$rs->EOF) - { - $KeywordIgnore[strtolower($rs->fields["keyword"])]=1; - $rs->MoveNext(); - } -// foreach($KeywordIgnore as $word=>$dummy) -// echo $word.","; -// echo "
\n"; -} - -?> + : is required + + - : cannot exist in the searched field + + "word word" : contents between the quotes are treated as a single entity + + +/-"word word" is supported + + ignore words are not case sensitive + +*/ + +class clsSearchLog extends clsItemDB + +{ + + function clsSearchLog($id=NULL) + + { + + $this->clsItemDB(); + + $this->tablename = GetTablePrefix()."SearchLog"; + + $this->id_field = "SearchLogId"; + + $this->NoResourceId = 1; + + if($id) + + $this->LoadFromDatabase($id); + + } + + + + function LoadFromDatabase($Id) + + { + + global $Errors; + + + + 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 ".$this->IdField()." = '%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; + + + + $this->SetFromArray($data); + + $this->Clean(); + + return true; + + } + +} + + + +class clsSearchLogList extends clsItemCollection + +{ + + var $Page; + + var $PerPageVar; + + + + function clsSearchLogList() + + { + + $this->clsItemCollection(); + + $this->SourceTable = GetTablePrefix()."SearchLog"; + + $this->classname = "clsSearchLog"; + + $this->Page=1; + + $this->PerPageVar = "Perpage_SearchLog"; + + $this->AdminSearchFields = array("Keyword"); + + } + + + + function UpdateKeyword($keyword,$SearchType) + + { + + $sql = "UPDATE ".$this->SourceTable." SET Indices = Indices+1 WHERE Keyword='$keyword' AND SearchType=$SearchType"; + + //echo $sql."
\n"; + + $this->adodbConnection->Execute($sql); + + if($this->adodbConnection->Affected_Rows()==0) + + { + + //echo "Creating Keyword record..
\n"; + + $k = new clsSearchLog(); + + $k->Set("Keyword",$keyword); + + $k->Set("Indices",1); + + $k->Set("SearchType",$SearchType); + + $k->Create(); + + } + + } + + + + function AddKeywords($Keywords) + + { + + if(is_array($Keywords)) + + { + + for($i=0;$iUpdateKeyword($Keywords[$i]); + + } + + } + + else + + $this->UpdateKeyword($Keywords); + + } + +} + + + +class clsEmailLog extends clsItemDB + +{ + + function clsEmailLog($id=NULL) + + { + + $this->clsItemDB(); + + $this->tablename = GetTablePrefix()."SearchLog"; + + $this->id_field = "SearchLogId"; + + $this->NoResourceId = 1; + + if($id) + + $this->LoadFromDatabase($id); + + } + + + + function LoadFromDatabase($Id) + + { + + global $Errors; + + + + 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 ".$this->IdField()." = '%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; + + + + $this->SetFromArray($data); + + $this->Clean(); + + return true; + + } + +} + + + +class clsEmailLogList extends clsItemCollection + +{ + + var $Page; + + var $PerPageVar; + + + + function clsEmailLogList() + + { + + $this->clsItemCollection(); + + $this->SourceTable = GetTablePrefix()."SearchLog"; + + $this->classname = "clsEmailLog"; + + $this->Page=1; + + $this->PerPageVar = "Perpage_EmailsL"; + + $this->AdminSearchFields = array("event", "fromuser", "addressto", "subject"); + + } + + + + function UpdateKeyword($keyword,$SearchType) + + { + + $sql = "UPDATE ".$this->SourceTable." SET Indices = Indices+1 WHERE Keyword='$keyword' AND SearchType=$SearchType"; + + //echo $sql."
\n"; + + $this->adodbConnection->Execute($sql); + + if($this->adodbConnection->Affected_Rows()==0) + + { + + //echo "Creating Keyword record..
\n"; + + $k = new clsSearchLog(); + + $k->Set("Keyword",$keyword); + + $k->Set("Indices",1); + + $k->Set("SearchType",$SearchType); + + $k->Create(); + + } + + } + + + + function AddKeywords($Keywords) + + { + + if(is_array($Keywords)) + + { + + for($i=0;$iUpdateKeyword($Keywords[$i]); + + } + + } + + else + + $this->UpdateKeyword($Keywords); + + } + +} + + + +class clsSearchResults extends clsItemCollection + +{ + + var $ResultTable; + + var $FieldList; + + var $FieldWeight; + + var $WhereClauses; + + var $SourceTable; + + var $Relationships; + + var $Ignored_Words; + + var $CatClause; + + var $Keywords; + + var $Phrase = ""; + + var $SearchType; + + var $RequiredRelevance; + + var $PctRelevance; + + var $PctPop; + + var $PctRating; + + + + function clsSearchResults($SearchSource,$DataClass) + + { + + global $objConfig; + + + + $this->clsItemCollection(); + + $this->SourceTable = $SearchSource; + + $this->SetResultTable($SearchSource,$DataClass); + + $this->FieldList = array(); + + $this->Relationships = array(); + + $this->Ignored_Words = array(); + + $this->WhereClauses = array(); + + $this->FieldWeight = array(); + + $this->Keywords = GetKeywords(""); + + $this->SearchType = 0; //simple + + $this->RequiredRelevance=0; + + $this->PctRelevance = $objConfig->Get("SearchRel_DefaultKeyword")/100; + + $this->PctPop = $objConfig->Get("SearchRel_DefaultPop")/100; + + $this->PctRating = $objConfig->Get("SearchRel_DefaultRating")/100; + + } + + + + function SetResultTable($SearchSource,$DataClass) + + { + + global $objSession; + + + + $this->ResultTable = $objSession->GetSearchTable(); + + $this->classname= $DataClass; + + } + + + + function LoadSearchResults($Start=0,$PerPage=NULL) + + { + + if($PerPage) + + { + + $limit = "LIMIT $Start,$PerPage"; + + } + + $sql = "SELECT * FROM ".$this->ResultTable." ".$limit; + + + + $this->Clear(); + + $rs = $this->adodbConnection->Execute($sql); + + return $this->Query_Item($sql); + + } + + + + function SetCategoryClause($whereclause) + + { + + $this->CatClause=$whereclause; + + } + + + + function AddRelationship($JoinTable,$JoinExpression=NULL) + + { + + + + $this->Relationships[$JoinTable]=$JoinExpression; + + } + + + + function SetKeywords($keywords) + + { + + $this->Phrase=$keywords; + + $this->keywords = GetKeywords($keywords); + + } + + + + function AddSimpleCustomFields() + + { + + $sql = "SELECT * FROM ".GetTablePrefix()."SearchConfig WHERE TableName='".$this->SourceTable."' AND SimpleSearch=1 AND CustomFieldId>0"; + + //echo $sql; + + foreach($this->Relationships as $Table=>$clause) + + { + + if(strlen($Table)>0 && $Table != "Category") + + $sql .= " OR TableName='".$Table."'"; + + } + + $ctable = GetTablePrefix()."CustomMetaData"; + + $rs = $this->adodbConnection->Execute($sql); + + $CustomJoined = FALSE; + + while($rs && !$rs->EOF) + + { + + $x = $rs->fields["CustomFieldId"]; + + $t = $ctable." as c".$x; + + $join = "(c$x.ResourceId=".GetTablePrefix().$this->SourceTable.".ResourceId AND c$x.CustomFieldId=".$rs->fields["CustomFieldId"].")"; + + $this->AddRelationship($t,$join); + + $f = "c".$x.".Value "; + + $this->FieldList[] = $f; + + $this->FieldWeight[$f] = $rs->fields["Priority"]; + + $rs->MoveNext(); + + } + + } + + + + function AddSimpleFields() + + { + + $sql = "SELECT * FROM ".GetTablePrefix()."SearchConfig WHERE TableName='".$this->SourceTable."' AND SimpleSearch=1 AND CustomFieldId=0"; + + //echo $sql; + + foreach($this->Relationships as $Table=>$clause) + + { + + if(strlen($Table)>0 && $Table != "Category") + + $sql .= " OR TableName='".$Table."'"; + + } + + $rs = $this->adodbConnection->Execute($sql); + + + + while($rs && !$rs->EOF) + + { + + $f = GetTablePrefix().$rs->fields["TableName"].".".$rs->fields["FieldName"]; + + $this->FieldList[] = $f; + + $this->FieldWeight[$f] = $rs->fields["Priority"]; + + $rs->MoveNext(); + + } + + $this->AddSimpleCustomFields(); + + } + + + + function AddSearchWhereClause($FieldName) + + { + + $req_where = ""; + + /* build required keywords string */ + + + + if(count($this->keywords["required"])>0) + + { + + $required = $this->keywords["required"]; + + for($i=0;$i0) + + { + + if($i>0) + + { + + $or =" AND "; + + } + + else + + $or = ""; + + $w .= $or." ".$FieldName." LIKE '%".$required[$i]."%'"; + + } + + } + + if(strlen($w)>0) + + { + + $req_where = "(". $w.")"; + + } + + else + + $req_where = ""; + + } + + $w = ""; + + $not_where=""; + + if(count($this->keywords["notallowed"])>0) + + { + + $words = $this->keywords["notallowed"]; + + for($i=0;$i0) + + { + + if($i>0) + + { + + $or =" AND "; + + } + + else + + $or = ""; + + $w .= $or." ".$FieldName." NOT LIKE '%".$words[$i]."%'"; + + } + + } + + if(strlen($w)>0) + + { + + $not_where = "(".$w.")"; + + } + + else + + $not_where = ""; + + } + + + + $w=""; + + $normal = $this->keywords["normal"]; + + if(count($normal)>0) + + { + + for($i=0;$i0) + + { + + if($i>0) + + { + + $or =" OR "; + + } + + else + + $or = ""; + + $w .= "$or $FieldName LIKE '%".$normal[$i]."%'"; + + } + + } + + if(count($required)>0) + + $w .= " OR "; + + for($i=0;$i0) + + { + + if($i>0) + + { + + $or = " OR "; + + } + + else + + $or=""; + + $w .= "$or $FieldName LIKE '%".$required[$i]."%'"; + + } + + } + + if(strlen($w)>0) + + { + + $where = "(".$w.")"; + + } + + else + + $where = ""; + + } + + + + $complete= BuildWhereClause($where,$req_where,$not_where); + + $this->WhereClauses[$FieldName]="(".$complete.")"; + + $this->Ignored_Words=$this->keywords["ignored"]; + + } + + + + function PerformSearch($ItemType,$OrderBy=NULL,$InitTable=FALSE, $idlist=NULL) + + { + + static $SelectSQL, $OldItemType; + + global $objSession, $objItemTypes; + + //echo "perfirming Simple Search
"; + + //echo "Old Item Type: $OldItemType New: $ItemType
\n"; + + if($ItemType != $OldItemType) + + $SelectSQL = ""; + + $OldItemType = $ItemType; + + + + $ctype = $objItemTypes->GetItem($ItemType); + + $idField = $ctype->Get("SourceTable")."Id"; + + $this->SourceTable = GetTablePrefix().$ctype->Get("SourceTable"); + + $result=0; + + $PopField = $ctype->Get("PopField"); + + $RateField = $ctype->Get("RateField"); + + + + //print_pre($this->keywords); + + + + if(!strlen($SelectSQL)) + + { + + $typestr = str_pad($ItemType,2,"0",STR_PAD_LEFT); + + $SelectSQL = "SELECT "; + + $ifs = array(); + + $weightsum = 0; + + foreach($this->FieldWeight as $w) + + $weightsum += $w; + + $wordcount = count($this->keywords["normal"])+count($this->keywords["required"]); + + $single = ($wordcount == 1); + + foreach($this->FieldList as $f) + + { + + $weight = (int)$this->FieldWeight[$f]; + + $s = array(); + + + + if(!$single) + + { + + $full = trim(implode(" ",$this->keywords["normal"])); + + $s[] = " (IF ($f LIKE '%$full%', ".$weightsum.", 0))"; + + } + + foreach($this->keywords["normal"] as $k) + + { + + if($k != $full || $single) + + { + + $temp = " (IF ($f LIKE '%$k%', ".$weight.", 0))"; + + $s[] = $temp; + + } + + } + + + + foreach($this->keywords["required"] as $k) + + { + + if($this->RequiredRelevance>0) + + $weight = $this->FieldWeight[$f] + ($this->FieldWeight[$f]*($this->RequiredRelevance/100)); + + + + if($k != $full || $single) + + { + + $s[] = " (IF ($f LIKE '%$k%', ".$weight.", 0))"; + + } + + } + + // echo "
";print_r($s); echo "
"; + + $txt = implode("+",$s); + + //echo $txt."
\n"; + + $ifs[] = $txt; + + unset($s); + + } + +// echo "
";print_r($ifs); echo "
"; + + + + /* add relevance formula for weighting hits & popularity */ + + + + if($weightsum==0) + + $weightsum=1; + + + + if(strlen($PopField)>0 && $this->PctPop>0) + + { + + $popcalc = " + ((($PopField + 1) / (max($PopField)+1)*".$this->PctPop."))"; + + } + + else + + $popcalc = ""; + + + + if(strlen($RateField)>0 && $this->PctRating>0) + + { + + $ratecalc = " + ((($RateField + 1) / (max($RateField)+1)*".$this->PctRating."))"; + + } + + else + + $ratecalc = ""; + + + + if($this->PctRelevance>0) + + { + + $relcalc = "(((".implode("+",$ifs).")/$weightsum)*".$this->PctRelevance.")"; + + } + + else + + $relcalc = "0"; + + + + $SelectSQL .= $relcalc.$popcalc.$ratecalc." as Relevance, "; + + + + $SelectSQL .= $this->SourceTable.".".$idField." as ItemId, ".$this->SourceTable.".ResourceId as ResourceId, CONCAT($typestr) as ItemType, EditorsPick as EdPick FROM ".$this->SourceTable." "; + + + + foreach($this->Relationships as $JoinTable=>$OnClause) + + { + + $SelectSQL .= "LEFT JOIN $JoinTable ON $OnClause "; + + } + + $first=1; + + $where=0; + + + + foreach($this->FieldList as $field) + + { + + if(strpos($field,"as")>0) + + { + + $fparts = explode("as",$field,2); + + $f = $fparts[1]; + + $this->AddSearchWhereClause($field); + + } + + else { + + $this->AddSearchWhereClause($field); + + } + + } + + + + $SelectSQL .= " WHERE "; + + $SelectSQL .= implode(" or ",$this->WhereClauses); + + + + if(is_array($idlist)) + + { + + $SelectSQL .= " AND (ResourceId IN (".implode(",",$idlist)."))"; + + } + + } + + $SelectSQL .= "GROUP BY $idField "; + + //echo $SelectSQL."

\n"; + + if($InitTable) + + { + + $this->adodbConnection->Execute("DROP TABLE IF EXISTS ".$this->ResultTable); + + //$indexSQL = "(INDEX(Relevance), INDEX(ItemId), INDEX(ItemType), INDEX sorting (EdPick,Relevance)) "; + + $full_sql = "CREATE TABLE ".$this->ResultTable." ".$indexSQL.$SelectSQL; + + //echo $full_sql."
\n"; + + $this->adodbConnection->Execute($full_sql); + + //echo $this->adodbConnection->ErrorMsg()."
\n"; + + $objSession->SetVariable("Search_Keywords",$this->Phrase); + + } + + else + + { + + $full_sql = "INSERT INTO ".$this->ResultTable." (Relevance,ItemId,ResourceId,ItemType,EdPick) ".$SelectSQL; + + //echo "[".htmlspecialchars($full_sql)."]
\n"; + + $this->adodbConnection->Execute($full_sql); + + //echo $this->adodbConnection->ErrorMsg()."
\n"; + + } + + //Here we need to remove found items which was found by HTML tags matching keywords + + //$this->adodbConnection->Execute("DELETE FROM ".$this->ResultTable." WHERE ItemId = 13 AND ItemType = 4"); + + } + + + + function BuildIndexes() + + { + + $sql = "ALTER TABLE ".$this->ResultTable." ADD INDEX (Relevance), "; + + $sql .="ADD INDEX (ItemId), "; + + $sql .="ADD INDEX (ItemType), "; + + $sql .=" ADD INDEX sorting (EdPick,Relevance)"; + + //echo $sql; + + $this->adodbConnection->Execute($sql); + + } + + + + function Result_IdList() + + { + + /* returns an array contain a resource ID list */ + + $sql = "SELECT DISTINCT(ResourceId) FROM ".$this->ResultTable; + + $rs = $this->adodbConnection->Execute($sql); + + $result = array(); + + while($rs && !$rs->EOF) + + { + + $result[] = $rs->fields["ResourceId"]; + + $rs->MoveNext(); + + } + + return $result; + + } + +} + + + +function count_words($string) + +{ + + // below line added to make contiguous spaces count as one space + + if(strlen($string)) + + { + + $string = eregi_replace(" +", " ", $string); + + return substr_count($string," ")+1; + + } + + else + + return 0; + +} + + + +function GetKeywords($phrase) + +{ + + global $KeywordIgnore; + + + + if(count($KeywordIgnore)==0) + + GetIgnoreList(); + + $keywords["normal"]= array(); + + $keywords["required"]= array(); + + $keywords["notallowed"] = array(); + + $keywords["ignored"] = array(); + + if(!strlen($phrase)) + + return $keywords; + + $w_array = array(); + + $phrase=trim($phrase); + + //if(count_words($phrase)>1) + + // $keywords["normal"][] = $phrase; + + $t_len = strlen($phrase); + + $ce=0; + + for ($i=0; $i<$t_len; $i++) + + { #search for next special tag + + switch ($phrase[$i]) + + { + + case "\"": + + $exact_match_close = strpos($phrase,"\"", $i+1); + + if(!$exact_match_close) + + break; + + $exact_word=substr($phrase, $i+1, ($exact_match_close-$i)-1); + + $i=$exact_match_close; + + if($exact_word) + + { + + if(strlen($token)==0) + + $token="|"; + + $w_array[$ce]=$token.addslashes($exact_word); + + $token=""; + + $ce++; + + $exact_word=""; + + } + + break; + + + + case "+": + + if(strlen($exact_word)==0) + + { + + $token = "+"; + + } + + else + + $exact_word .= "+"; + + break; + + case "-": + + if(strlen($exact_word)==0) + + { + + $token = "-"; + + } + + else + + $exact_word .="-"; + + break; + + case " ": + + case ",": + + if($exact_word) + + { + + if(strlen($token)==0) + + $token="|"; + + if($token=="|") + + { + + if($KeywordIgnore[strtolower($exact_word)]==1) + + { + + $w_array[$ce]= "=".addslashes($exact_word); + + $ce++; + + } + + else + + { + + $w_array[$ce]=$token.addslashes($exact_word); + + $ce++; + + } + + } + + else + + { + + $w_array[$ce]=$token.addslashes($exact_word); + + $ce++; + + } + + $token=""; + + $exact_word=""; + + } + + break; + + + + default: + + $exact_word.=$phrase[$i]; + + } + + } + + if($exact_word) + + { + + if(strlen($token)==0) + + $token="|"; + + if($KeywordIgnore[strtolower($exact_word)]==1 && ($token =="|" || $token=="=")) + + { + + $w_array[$ce]= "=".addslashes($exact_word); + + $ce++; + + } + + else + + { + + $w_array[$ce]=$token.addslashes($exact_word); + + $ce++; + + } + + } + + for ($i=0;$i0 && strlen($notallowed)>0) + + { + + $return .= " AND "; + + } + + $return .= $notallowed; + + if(strlen($return)>0 && strlen($normal)>0) + + { + + $return .= " AND "; + + } + + $return .= $normal; + + return $return; + +} + + + +function GetIgnoreList() + +{ + + global $KeywordIgnore; + + + + $adodbConnection = &GetADODBConnection(); + + + + $rs = $adodbConnection->Execute("SELECT * FROM ".GetTablePrefix()."IgnoreKeywords"); + + while($rs && !$rs->EOF) + + { + + $KeywordIgnore[strtolower($rs->fields["keyword"])]=1; + + $rs->MoveNext(); + + } + +// foreach($KeywordIgnore as $word=>$dummy) + +// echo $word.","; + +// echo "
\n"; + +} + + + +?> \ No newline at end of file Index: trunk/kernel/include/customfield.php =================================================================== diff -u -N -r660 -r667 --- trunk/kernel/include/customfield.php (.../customfield.php) (revision 660) +++ trunk/kernel/include/customfield.php (.../customfield.php) (revision 667) @@ -20,7 +20,7 @@ function GetAdminUI() { $a = new clsConfigAdminItem(); - $a->name = "_".($this->Get("FieldName")); + $a->name = "_".$this->Get("FieldName"); $a->heading = $this->Get("Heading"); $a->prompt = $this->Get("Prompt"); $a->ElementType = $this->Get("ElementType"); @@ -173,7 +173,7 @@ global $objItemTypes,$objSearchConfig,$objLanguages; //if(!is_numeric($Type)) - // { + // { $f = new clsCustomField(); $f->tablename = $this->SourceTable; $f->Set(array("Type","FieldName","FieldLabel","OnGeneralTab","Heading","Prompt",