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