Index: trunk/kernel/include/parseditem.php
===================================================================
diff -u -r642 -r667
--- trunk/kernel/include/parseditem.php (.../parseditem.php) (revision 642)
+++ trunk/kernel/include/parseditem.php (.../parseditem.php) (revision 667)
@@ -1,2959 +1,5917 @@
-clsItemDB();
- $this->Parser = new clsTemplateList($TemplateRoot);
- $this->AdminParser = new clsAdminTemplateList();
- }
-
-/* function ParseObject($element)
- {
- $extra_attribs = ExtraAttributes($element->attributes);
- if(strtolower($element->name)==$this->TagPrefix)
- {
- $field = strtolower($element->attributes["_field"]);
- $tag = $this->TagPrefix."_".$field;
- $ret = $this->parsetag($tag);
- }
- return $ret;
- }
-*/
- function ParseTimeStamp($d,$attribs=array())
- {
- if( isset($attribs["_tz"]) )
- {
- $d = GetLocalTime($d,$objSession->Get("tz"));
- }
- $part = isset($attribs["_part"]) ? strtolower($attribs["_part"]) : '';
- if(strlen($part))
- {
- $ret = ExtractDatePart($part,$d);
- }
- else
- {
- if($d<=0)
- {
- $ret = "";
- }
- else
- $ret = LangDate($d);
- }
- return $ret;
- }
-
- function ParseObject($element)
- {
- global $objConfig, $objCatList, $var_list_update, $var_list, $n_var_list_update, $m_var_list_update;
-
- $extra_attribs = ExtraAttributes($element->attributes);
- $ret = "";
-
- if ($this->TagPrefix == "email" && strtolower($element->name) == "touser") {
- $this->TagPrefix = "touser";
- }
-
- if(strtolower($element->name)==$this->TagPrefix)
- {
- $field = strtolower($element->attributes["_field"]);
- switch($field)
- {
- case "id":
- $ret = $this->Get($this->id_field);
- break;
- case "resourceid":
- if(!$this->NoResourceId)
- $ret = $this->Get("ResourceId");
- break;
- case "category":
- $c = $objCatList->GetItem($this->Get("CategoryId"));
- if(is_object($c))
- {
- $ret = $c->parsetag($element->attributes["_cattag"]);
- }
- break;
- case "priority":
- if($this->Get("Priority")!=0)
- {
- $ret = (int)$this->Get("Priority");
- }
- else
- $ret = "";
- break;
- case "link":
- if(method_exists($this,"ItemURL"))
- {
- $ret = $this->ItemURL($element->attributes["_template"],FALSE,"");
- }
- break;
- case "cat_link":
- if(method_exists($this,"ItemURL"))
- {
- $ret = $this->ItemURL($element->attributes["_template"],TRUE,"");
- }
- break;
- case "fullpath":
- $ret = $this->Get("CachedNavbar");
- if(!strlen($ret))
- {
- if(is_numeric($this->Get("CategoryId")))
- {
- $c = $objCatList->GetItem($this->Get("CategoryId"));
- if(is_object($c))
- $ret = $c->Get("CachedNavbar");
- }
- else
- {
- if(method_exists($this,"GetPrimaryCategory"))
- {
- $cat = $this->GetPrimaryCategory();
- $c = $objCatList->GetItem($cat);
- if(is_object($c))
- $ret = $c->Get("CachedNavbar");
- }
- }
- }
- // $ret = $this->HighlightText($ret);
- break;
-
- case "relevance":
- $style = $element->attributes["_displaymode"];
- if(!strlen($style))
- $style = "numerical";
- switch ($style)
- {
- case "numerical":
- $ret = (100 * LangNumber($this->Get("Relevance"),1))."%";
- break;
- case "bar":
- $OffColor = $element->attributes["_offbackgroundcolor"];
- $OnColor = $element->attributes["_onbackgroundcolor"];
- $percentsOff = (int)(100 - (100 * $this->Get("Relevance"))); if ($percentsOff)
- {
- $percentsOn = 100 - $percentsOff;
- $ret = "
 |  | ";
- }
- else
- $ret = " | ";
- break;
- case "graphical":
- $OnImage = $element->attributes["_onimage"];
- if (!strlen($OnImage))
- break;
- // Get image extension
- $image_data = explode(".", $OnImage);
- $image_ext = $image_data[count($image_data)-1];
- unset($image_data[count($image_data)-1]);
- $rel = (10 * LangNumber($this->Get("Relevance"),1));
- $OnImage1 = join(".", $image_data);
-
- if ($rel)
- $img_src = $OnImage1."_".$rel.".".$image_ext;
- else
- $img_src = $OnImage;
-
- $ret = "
";
- break;
- }
-
- break;
-
- case "rating":
- $style = $element->GetAttributeByName("_displaymode");
- if(!strlen($style))
- $style = "numerical";
- switch($style)
- {
- case "numerical":
- $ret = LangNumber($this->Get("CachedRating"),1);
- break;
- case "text":
- $ret = RatingText($this->Get("CachedRating"));
- break;
- case "graphical":
- $OnImage = $element->attributes["_onimage"];
- $OffImage = $element->attributes["_offimage"];
- $images = RatingTickImage($this->Get("CachedRating"),$OnImage,$OffImage);
-
- for($i=1;$i<=count($images);$i++)
- {
- $url = $images[$i];
- if(strlen($url))
- {
- $ret .= "
";
- $ret .= $element->attributes["_separator"];
- }
- }
- break;
- }
- break;
- case "reviews":
- $today = FALSE;
-
- if(method_exists($this,"ReviewCount"))
- {
- if($element->GetAttributeByName("_today"))
- $today = TRUE;
- $ret = $this->ReviewCount($today);
- }
- else
- $ret = "";
-
- break;
- case "votes":
- $ret = (int)$this->Get("CachedVotesQty");
- break;
-
- case "favorite":
- if(method_exists($this,"IsFavorite"))
- {
- if($this->IsFavorite())
- {
- $ret = $element->attributes["_label"];
- if(!strlen($ret))
- $ret = "lu_favorite";
- $ret = language($ret);
- }
- else
- $ret = "";
- }
- break;
- case "new":
- if(method_exists($this,"IsNewItem"))
- {
- if($this->IsNewItem())
- {
- $ret = $element->GetAttributeByName('_label');
- if(!strlen($ret))
- $ret = "lu_new";
- $ret = language($ret);
- }
- else
- $ret = "";
- }
- break;
- case "pop":
- if(method_exists($this,"IsPopItem"))
- {
- if($this->IsPopItem())
- {
- $ret = $element->attributes["_label"];
- if(!strlen($ret))
- $ret = "lu_pop";
- $ret = language($ret);
- }
- else
- $ret = "";
- }
- break;
- case "hot":
- if(method_exists($this,"IsHotItem"))
- {
- if($this->IsHotItem())
- {
- $ret = $element->GetAttributeByName("_label");
- if(!strlen($ret))
- $ret = "lu_hot";
- $ret = language($ret);
- }
- else
- $ret = "";
- }
- break;
- case "pick":
- if($this->Get("EditorsPick")==1)
- {
- $ret = $element->GetAttributeByName('_label');
- if(!strlen($ret))
- $ret = "lu_pick";
- $ret = language($ret);
- }
- else
- $ret = "";
- break;
- case "admin_icon":
- if(method_exists($this,"StatusIcon"))
- {
- if($element->GetAttributeByName("fulltag"))
- {
- $ret = "
StatusIcon()."\">";
- }
- else
- $ret = $this->StatusIcon();
- }
- break;
- case "custom":
- if(method_exists($this,"GetCustomFieldValue"))
- {
- $field = $element->attributes["_customfield"];
- $default = $element->attributes["_default"];
- if (strlen($field))
- $ret = $this->GetCustomFieldValue($field,$default);
- }
- break;
- case "image":
- $default = $element->attributes["_primary"];
- $name = $element->attributes["_name"];
-
- if(strlen($name))
- {
- $img = $this->GetImageByName($name);
- }
- else
- {
- if($default)
- $img = $this->GetDefaultImage();
- }
-
- if(is_object($img))
- {
-
- if(strlen($element->attributes["_imagetemplate"]))
- {
- $ret = $img->ParseTemplate($element->attributes["_imagetemplate"]);
- break;
- }
- else
- {
- if($element->attributes["_thumbnail"])
- {
- $url = $img->parsetag("thumb_url");
- }
- else
- {
-
- if(!$element->attributes["_nothumbnail"])
- {
- $url = $img->parsetag("image_url");
- }
- else
- {
- $url = $img->FullURL(TRUE,"");
- }
- }
- }
- }
- else
- {
- $url = $element->attributes["_defaulturl"];
-
- }
-
- if($element->attributes["_imagetag"])
- {
- if(strlen($url))
- {
- $ret = "
";
- }
- else
- $ret = "";
- }
- else
- $ret = $url;
- break;
- default:
- $ret = "Undefined:".$element->name;
- break;
- }
-
- }
- else if ($this->TagPrefix == 'email'){
- $ret = "Undefined:".$element->name;
- }
- return $ret;
- }
-
- function ParseString($name)
- {
- $el = new clsHtmlTag();
- $el->Clear();
- $el->prefix = "inp";
- $el->name = $name;
-
- $numargs = func_num_args();
- $arg_list = func_get_args();
- for ($i = 1; $i < $numargs; $i++)
- {
- $attr = $arg_list[$i];
- $parts = explode("=",$attr,2);
- $name = $parts[0];
- $val = $parts[1];
- $el->attributes[$name] = $val;
- }
- return $this->ParseObject($el);
- }
-
- /* pass attributes as strings
- ie: ParseStringEcho('tagname','_field="something" _data="somethingelse"');
- */
- function ParseStringEcho($name)
- {
- $el = new clsHtmlTag();
- $el->Clear();
- $el->prefix = "inp";
- $el->name = $name;
-
- $numargs = func_num_args();
- $arg_list = func_get_args();
- for ($i = 1; $i < $numargs; $i++)
- {
- $attr = $arg_list[$i];
- $parts = explode("=",$attr,2);
- $name = $parts[0];
- $val = $parts[1];
- $el->attributes[$name] = $val;
- }
- echo $this->ParseObject($el);
- }
-
- function ParseElement($raw, $inner_html ="")
- {
- $tag = new clsHtmlTag($raw);
- $tag->inner_html = $inner_html;
-
- if($tag->parsed)
- {
- if($tag->name=="include" || $tag->name=="perm_include" || $tag->name=="lang_include")
- {
- $output = $this->Parser->IncludeTemplate($tag);
- }
- else
- {
- $output = $this->ParseObject($tag);
- //echo $output."
";
- if(substr($output,0,9)=="Undefined")
- {
- $output = $tag->Execute();
- // if(substr($output,0,8)="{Unknown")
- // $output = $raw;
- } return $output;
- }
- }
- else
- return "";
- }
-
- function AdminParseTemplate($file)
- {
- $html = "";
- $t = $this->AdminParser->GetTemplate($file);
-
- if(is_object($t))
- {
- array_push($this->AdminParser->stack,$file);
- $html = $t->source;
- $next_tag = strpos($html,"",$next_tag);
- $tagtext = substr($html,$next_tag,($end_tag - $next_tag)+2);
- $pre = substr($html,0,$next_tag);
- $post = substr($html,$end_tag+2);
- $inner = $this->ParseElement($tagtext);
- $html = $pre.$inner.$post;
- $next_tag = strpos($html,"AdminParser->stack);
- }
- return $html;
- }
-
- function ParseTemplateText($text)
- {
- $html = $text;
- $search = "TagPrefix;
- //$next_tag = strpos($html,"",$next_tag);
- $end_tag = strpos($html,"/>",$next_tag);
- if($end_tag < $closer || $closer == 0)
- {
- $tagtext = substr($html,$next_tag,($end_tag - $next_tag)+2);
- $pre = substr($html,0,$next_tag);
- $post = substr($html,$end_tag+2);
- $inner = $this->ParseElement($tagtext);
- $html = $pre.$inner.$post;
- }
- else
- {
-
- $OldTagStyle = "";
-
- ## Try to find end of TagName
- $TagNameEnd = strpos($html, " ", $next_tag);
-
- ## Support Old version
-// $closer = strpos(strtolower($html),"",$next_tag);
- if ($TagNameEnd)
- {
- $Tag = strtolower(substr($html, $next_tag, $TagNameEnd-$next_tag));
- $TagName = explode(":", $Tag);
- if (strlen($TagName[1]))
- $CloserTag = "";
- }
- else
- {
- $CloserTag = $OldTagStyle;
- }
-
- $closer = strpos(strtolower($html), $CloserTag, $next_tag);
-
- ## Try to find old tag closer
- if (!$closer && ($CloserTag != $OldTagStyle))
- {
- $CloserTag = $OldTagStyle;
- $closer = strpos(strtolower($html), $CloserTag, $next_tag);
- }
-
- $end_tag = strpos($html,">",$next_tag);
- $tagtext = substr($html,$next_tag,($end_tag - $next_tag)+1);
- $pre = substr($html,0,$next_tag);
- $inner = substr($html,$end_tag+1,$closer-($end_tag+1));
- $post = substr($html,$end_tag+1+strlen($inner) + strlen($CloserTag));
- //echo "PRE:". htmlentities($pre,ENT_NOQUOTES);
- //echo "INNER:". htmlentities($inner,ENT_NOQUOTES);
- //echo "POST:". htmlentities($post,ENT_NOQUOTES);
-
- $parsed = $this->ParseElement($tagtext);
- if(strlen($parsed))
- {
- $html = $pre.$this->ParseTemplateText($inner).$post;
- }
- else
- $html = $pre.$post;
- }
- $next_tag = strpos($html,$search);
- }
- return $html;
- }
-
- function ParseTemplate($tname)
- {
- global $objTemplate, $LogLevel,$ptime,$timestart;
-
- //echo 'Saving ID'.$this->UniqueId().' in Main parseTempalate
';
- //$GLOBALS[$this->TagPrefix.'_ID'] = $this->UniqueId();
- LogEntry("Parsing $tname\n");
- $LogLevel++;
- $html = "";
- $t = $objTemplate->GetTemplate($tname);
- //$t = $this->Parser->GetTemplate($tname);
- if( is_array($this->Parser->stack) ) $this->Parser->stack = Array();
- if(is_object($t))
- {
- array_push($this->Parser->stack,$tname);
- $html = $t->source;
-
- $html = $this->ParseTemplateText($html);
- array_pop($this->Parser->stack);
- }
- $LogLevel--;
- LogEntry("Finished Parsing $tname\n");
- $ptime = round(getmicrotime() - $timestart,6);
- $xf = 867530; //Download ID
- if($xf != 0)
- {
- $x2 = substr($ptime,-6);
- $ptime .= $xf ^ $x2; //(1/1000);
- }
- return $html;
- }
-
- function SendUserEventMail($EventName,$ToUserId,$LangId=NULL,$RecptName=NULL)
- {
- global $objMessageList,$FrontEnd;
-
- $Event =& $objMessageList->GetEmailEventObject($EventName,0,$LangId);
-
- if(is_object($Event))
- {
- if($Event->Get("Enabled")=="1" || ($Event->Get("Enabled")==2 && $FrontEnd))
- {
- $Event->Item = $this;
- if(is_numeric($ToUserId))
- {
- return $Event->SendToUser($ToUserId);
- }
- else
- return $Event->SendToAddress($ToUserId,$RecptName);
- }
- }
- }
-
- function SendAdminEventMail($EventName,$LangId=NULL)
- {
- global $objMessageList,$FrontEnd;
-
- //echo "Firing Admin Event $EventName
\n";
- $Event =& $objMessageList->GetEmailEventObject($EventName,1,$LangId);
- if(is_object($Event))
- {
- if($Event->Get("Enabled")=="1" || ($Event->Get("Enabled")==2 && $FrontEnd))
- {
- $Event->Item = $this;
- //echo "Admin Event $EventName Enabled
\n";
- return $Event->SendAdmin($ToUserId);
- }
- }
- }
-
- function parse_template($t)
- {
- }
-
-}
-
-class clsItemCollection
-{
- var $Items;
- var $CurrentItem;
- var $adodbConnection;
- var $classname;
- var $SourceTable;
- var $LiveTable;
- var $QueryItemCount;
- var $AdminSearchFields = array();
- var $SortField;
- var $debuglevel;
- var $id_field = null; // id field for list item
- var $BasePermission;
- var $Dummy = null;
-
- // enshure that same sql won't be queried twice
- var $QueryDone = false;
- var $LastQuerySQL = '';
-
- function SetTable($action, $table_name = null) // new by Alex
- {
- // $action = {'live', 'restore','edit'}
- switch($action)
- {
- case 'live':
- $this->LiveTable = $table_name;
- $this->SourceTable = $this->LiveTable;
- break;
- case 'restore':
- $this->SourceTable = $this->LiveTable;
- break;
- case 'edit':
- global $objSession;
- $this->SourceTable = $objSession->GetEditTable($this->LiveTable);
- break;
- }
- }
-
- function &GetDummy() // new by Alex
- {
- if( !isset($this->Dummy) )
- $this->Dummy =& new $this->classname();
- $this->Dummy->tablename = $this->SourceTable;
- return $this->Dummy;
- }
-
- function clsItemCollection()
- {
-
- $this->adodbConnection = &GetADODBConnection();
-
- $this->Clear();
- $this->BasePermission="";
- }
-
- function GetIDField() // new by Alex
- {
- // returns id field for list item
- if( !isset($this->id_field) )
- {
- $dummy =& $this->GetDummy();
- $this->id_field = $dummy->IdField();
- }
- return $this->id_field;
- }
-
- function &GetNewItemClass()
- {
- return new $this->classname();
- }
-
- function Clear()
- {
- unset($this->Items);
- $this->Items = array();
- $this->CurrentItem=0;
- }
-
- function &SetCurrentItem($id)
- {
- $this->CurrentItem=$id;
- return $this->GetItem($id);
- }
-
- function &GetCurrentItem()
- {
- if($this->CurrentItem>0)
- {
- return $this->GetItem($this->CurrentItem);
- }
- else
- return FALSE;
- }
-
- function NumItems()
- {
- if(is_array($this->Items))
- {
-// echo "TEST COUNT: ".count($this->Items)."
";
- return count($this->Items);
- }
- else
- return 0;
- }
-
- function ItemLike($index, $string)
- {
- // check if any of the item field
- // even partially matches $string
- $found = false;
- $string = strtolower($string);
- $item_data = $this->Items[$index]->GetData();
- foreach($item_data as $field => $value)
- if( in_array($field, $this->AdminSearchFields) )
- if( strpos(strtolower($value), $string) !== false)
- {
- $found = true;
- break;
- }
- return $found;
- }
-
- function DeleteItem($index) // by Alex
- {
- // deletes item with specific index from list
- $i = $index; $item_count = $this->NumItems();
- while($i < $item_count - 1)
- {
- $this->Items[$i] = $this->Items[$i + 1];
- $i++;
- }
- unset($this->Items[$i]);
- }
-
- function ShowItems()
- {
- $i = 0; $item_count = $this->NumItems();
- while($i < $item_count)
- {
- echo "Item No $i:
";
- $this->Items[$i]->PrintVars();
- $i++;
- }
- }
-
- function SwapItems($Index,$Index2)
- {
- $temp = $this->Items[$Index]->GetData();
- $this->Items[$Index]->SetData($this->Items[$Index2]->GetData());
- $this->Items[$Index2]->SetData($temp);
-
- }
-
- function CopyResource($OldId,$NewId)
- {
- $this->Clear();
-
- $sql = "SELECT * FROM ".$this->SourceTable." WHERE ResourceId=$OldId";
- $this->Query_Item($sql);
-// echo $sql."
\n";
- if($this->NumItems()>0)
- {
- foreach($this->Items as $item)
- {
- $item->UnsetIdField();
- $item->Set("ResourceId",$NewId);
- $item->Create();
- }
- }
- }
- function ItemsOnClipboard()
- {
- global $objSession;
- $clip = $objSession->GetPersistantVariable("ClipBoard");
- $count = 0;
- $table = $this->SourceTable;
- $prefix = GetTablePrefix();
-
-
- if(substr($table,0,strlen($prefix))==$prefix)
- $table = substr($table,strlen($prefix));
-
-
- if(strlen($clip))
- {
- $clipboard = ParseClipboard($clip);
- if($clipboard["table"] == $table)
- {
- $count = count(explode(",",$clipboard["ids"]));
- }
- else
- $count = 0;
- }
- else
- $count = 0;
-
- return $count;
- }
-
- function CopyToClipboard($command,$idfield, $idlist)
- {
- global $objSession,$objCatList;
-
- if(is_array($idlist))
- {
- $list = implode(",",$idlist);
- }
- else
- $list = $idlist;
- $clip = $command."-".$objCatList->CurrentCategoryID().".".$this->SourceTable.".$idfield=".$list;
-
- $objSession->SetVariable("ClipBoard",$clip);
- }
-
- function SortItems($asc=TRUE)
- {
- $done = FALSE;
-
- $field = $this->SortField;
- $ItemCount = $this->NumItems();
- while(!$done)
- {
- $done=TRUE;
- for($i=1;$i<$this->NumItems();$i++)
- {
- $doswap = FALSE;
- if($asc)
- {
- $val1 = $this->Items[$i-1]->Get($field);
- $val2 = $this->Items[$i]->Get($field);
- $doswap = ($val1 > $val2);
- }
- else
- {
- $val1 = $this->Items[$i-1]->Get($field);
- $val2 = $this->Items[$i]->Get($field);
- $doswap = ($val1 < $val2);
- }
- if($doswap)
- {
- $this->SwapItems($i-1,$i);
- $done = FALSE;
- }
-
- }
- }
- }
-
- function &GetItem($ID,$LoadFromDB=TRUE)
- {
- $found=FALSE;
-
- if(is_array($this->Items) && count($this->Items) )
- {
- for($x=0;$xItems);$x++)
- {
- $i =& $this->GetItemRefByIndex($x);
- if($i->UniqueID()==$ID)
- {
- $found=TRUE;
- break;
- }
- }
- }
-
- if(!$found)
- {
- if($LoadFromDB)
- {
- $n = NULL;
- $n = new $this->classname();
- $n->tablename = $this->SourceTable;
- $n->LoadFromDatabase($ID);
- $index = array_push($this->Items, $n);
- $i =& $this->Items[count($this->Items)-1];
- }
- else
- $i = FALSE;
- }
- return $i;
- }
-
- function GetItemByIndex($index)
- {
- return $this->Items[$index];
- }
-
- function &GetItemRefByIndex($index)
- {
- return $this->Items[$index];
- }
-
- function &GetItemByField($Field,$Value,$LoadFromDB=TRUE)
- {
- $found=FALSE;
- if(is_array($this->Items))
- {
- foreach($this->Items as $i)
- {
- if($i->Get($Field)==$Value)
- {
- $found = TRUE;
- break;
- }
- }
- }
- if(!$found && $LoadFromDB==TRUE)
- {
- $sql = "SELECT * FROM ".$this->SourceTable." WHERE $Field = '$Value'";
- //echo $sql;
- $res = $this->adodbConnection->Execute($sql);
-
- if($res && !$res->EOF)
- {
- $i = $this->AddItemFromArray($res->fields);
- $i->tablename = $this->SourceTable;
- $i->Clean();
- }
- else
- $i = FALSE;
- }
- return $i;
- }
-
- function GetPage($Page, $ItemsPerPage)
- {
- $result = array_slice($this->Items, ($Page * $ItemsPerPage) - $ItemsPerPage, $ItemsPerPage);
- return $result;
- }
-
- function GetNumPages($ItemsPerPage)
- {
- if( isset($_GET['reset']) && $_GET['reset'] == 1) $this->Page = 1;
- return GetPageCount($ItemsPerPage,$this->QueryItemCount);
- }
-
- function &AddItemFromArray($data, $clean=FALSE)
- {
- $class = new $this->classname;
- $class->SetFromArray($data);
- $class->tablename = $this->SourceTable;
- if($clean==TRUE)
- $class->Clean();
- //array_push($this->Items,$class);
- $this->Items[] =& $class;
- return $class;
- }
-
- function Query_Item($sql, $offset=-1,$rows=-1)
- {
- global $Errors;
- //echo "Method QItem [".get_class($this).'], sql: ['.$sql.']
';
- //if( get_class($this) == 'clsthemefilelist') trace();
- $dummy =& $this->GetDummy();
- if( !$dummy->TableExists() )
- {
- if($this->debuglevel) echo "ERROR: table ".$dummy->tablename." missing.
";
- $this->Clear();
- return false;
- }
-
- if($rows>-1 && $offset>-1)
- {
- //print_pre(debug_backtrace());
- //echo "Executing SelectLimit $sql Offset: $offset,$rows
\n";
- $result = $this->adodbConnection->SelectLimit($sql, $rows,$offset);
- }
- else {
- $result = $this->adodbConnection->Execute($sql);
- }
-
- if ($result === false)
- {
- $Errors->AddError("error.DatabaseError",NULL,$this->adodbConnection->ErrorMsg(),"",get_class($this),"Query_Item");
- if($this->debuglevel) {
- echo '
'.$sql.'
';
- echo "Error: ".$this->adodbConnection->ErrorMsg()."
";
- }
- $this->Clear();
- return false;
- }
-
- $this->Clear();
-
- if($this->debuglevel > 0)
- {
- echo "This SQL: $sql
";
- if( ($this->debuglevel > 1) && ($result->RecordCount() > 0) )
- {
- echo ''.print_r($result->GetRows(), true).'
';
- $result->MoveFirst();
- }
- }
- //echo "SQL: $sql
";
- LogEntry("SQL Loop Start\n");
- $count = 0;
-
- while ($result && !$result->EOF)
- {
- $count++;
- $data = $result->fields;
- $this->AddItemFromArray($data,TRUE);
- if( defined('ADODB_EXTENSION') && constant('ADODB_EXTENSION') > 0 )
- adodb_movenext($result);
- else
- $result->MoveNext();
- }
-
- LogEntry("SQL Loop End ($count iterations)\n");
- $result->Free();
- return $this->Items;
- }
-
- function GetOrderClause($FieldVar,$OrderVar,$DefaultField,$DefaultVar,$Priority=TRUE,$UseTableName=FALSE)
- {
- global $objConfig, $objSession;
-
- if($UseTableName)
- {
- $TableName = $this->SourceTable.".";
- }
- else
- $TableName = "";
-
- $PriorityClause = $TableName."EditorsPick DESC, ".$TableName."Priority DESC";
-
- if(strlen(trim($FieldVar))>0)
- {
- if(is_object($objSession))
- {
- if(strlen($objSession->GetPersistantVariable($FieldVar))>0)
- {
- $OrderBy = trim($TableName.$objSession->GetPersistantVariable($FieldVar) . " ".
- $objSession->GetPersistantVariable($OrderVar));
- $FieldUsed = $objSession->GetPersistantVariable($FieldVar);
- }
- }
- $OrderBy = trim($OrderBy);
- if (strlen(trim($OrderBy))==0)
- {
- if(!$UseTableName)
- {
- $OrderBy = trim($DefaultField." ".$DefaultVar);
- }
- else
- {
- if(strlen(trim($DefaultField))>0)
- {
- $OrderBy = $this->SourceTable.".".$DefaultField.".".$DefaultVar;
- }
- $FieldUsed=$DefaultField;
- }
- }
- }
- if(($FieldUsed != "Priority" || strlen($OrderBy)==0) && $Priority==TRUE)
- {
- if(strlen($OrderBy)==0)
- {
- $OrderBy = $PriorityClause;
- }
- else
- $OrderBy = $PriorityClause.", ".$OrderBy;
- }
- return $OrderBy;
- }
-
- function GetResourceIDList()
- {
- $ret = array();
- foreach($this->Items as $i)
- array_push($ret,$i->Get("ResourceId"));
- return $ret;
- }
-
- function GetFieldList($field)
- {
- $ret = array();
- foreach($this->Items as $i)
- array_push($ret,$i->Get($field));
- return $ret;
- }
-
- function SetCommonField($FieldName,$FieldValue)
- {
- for($i=0;$i<$this->NumItems();$i++)
- {
- $this->Items[$i]->Set($FieldName,$fieldValue);
- $this->Items[$i]->Update();
- }
- }
-
- function ClearCategoryItems($CatId,$CatTable = "CategoryItems")
- {
- $CatTable = AddTablePrefix($CatTable);
- $sql = "SELECT * FROM ".$this->SourceTable." INNER JOIN $CatTable ".
- " ON (".$this->SourceTable.".ResourceId=$CatTable.ItemResourceId) WHERE CategoryId=$CatId";
- $this->Clear();
- $this->Query_Item($sql);
- if($this->NumItems()>0)
- {
- foreach($this->Items as $i)
- {
- $i->DeleteCategoryItems($CatId,$CatTable);
- }
- }
- }
-
- function CopyToEditTable($idfield = null, $idlist = 0)
- {
- global $objSession;
-
- if($idfield == null) $idfield = $this->GetIDField();
- $edit_table = $objSession->GetEditTable($this->SourceTable);
- @$this->adodbConnection->Execute("DROP TABLE IF EXISTS $edit_table");
- if(is_array($idlist))
- {
- $list = implode(",",$idlist);
- }
- else
- $list = $idlist;
- $query = "SELECT * FROM ".$this->SourceTable." WHERE $idfield IN ($list)";
- $insert = "CREATE TABLE ".$edit_table." ".$query;
- if($objSession->HasSystemPermission("DEBUG.LIST"))
- echo htmlentities($insert,ENT_NOQUOTES)."
\n";
- $this->adodbConnection->Execute($insert);
- }
-
- function CreateEmptyEditTable($idfield = null)
- {
- global $objSession;
- if($idfield == null) $idfield = $this->GetIDField();
-
- $edit_table = $objSession->GetEditTable($this->SourceTable);
- @$this->adodbConnection->Execute("DROP TABLE IF EXISTS $edit_table");
- $query = "SELECT * FROM ".$this->SourceTable." WHERE $idfield = -1";
- $insert = "CREATE TABLE ".$edit_table." ".$query;
- if($objSession->HasSystemPermission("DEBUG.LIST"))
- echo htmlentities($insert,ENT_NOQUOTES)."
\n";
- $this->adodbConnection->Execute($insert);
- //echo $insert."
";
- }
-
- function CopyFromEditTable($idfield = null)
- {
- global $objSession;
-
- $dropRelTableFlag = false;
- if($idfield == null) $idfield = $this->GetIDField();
- $edit_table = $objSession->GetEditTable($this->SourceTable);
- $sql = "SELECT * FROM $edit_table";
- $rs = $this->adodbConnection->Execute($sql);
-
- //echo "In Main CopyFromEditTable in class ".get_class($this).'
';
- //echo $sql."
";
-
- while($rs && !$rs->EOF)
- {
- $data = $rs->fields;
- $c = new $this->classname;
- $c->SetFromArray($data);
- $c->idfield = $idfield;
- $c->Dirty();
- if($c->Get($idfield) < 1)
- {
- $old_id = $c->Get($idfield);
- $c->UnsetIdField();
- if(!is_numeric($c->Get("OrgId")) || $c->Get("OrgId")==0)
- {
- $c->Clean(array("OrgId"));
- }
- else
- {
- if($c->Get("Status") != -2)
- {
- $org = new $this->classname();
- $org->LoadFromDatabase($c->Get("OrgId"));
- $org->DeleteCustomData();
- $org->Delete(TRUE);
- $c->Set("OrgId",0);
- }
- }
- $c->Create();
- }
- if(is_numeric($c->Get("ResourceId")))
- {
- if( isset($c->Related) && is_object($c->Related) )
- {
- $r = $c->Related;
- $r->CopyFromEditTable($c->Get("ResourceId"));
- $dropRelTableFlag = true;
- }
-
- unset($r);
-
- if( isset($c->Reviews) && is_object($c->Reviews) )
- {
- $r = $c->Reviews;
- $r->CopyFromEditTable($c->Get("ResourceId"));
- }
- }
- if(!is_numeric($c->Get("OrgId")) || $c->Get("OrgId")==0)
- {
- $c->Clean(array("OrgId"));
- }
- else
- {
- if($c->Get("Status") != -2)
- {
- $org = new $this->classname();
- $org->LoadFromDatabase($c->Get("OrgId"));
- $org->DeleteCustomData();
- $org->Delete(TRUE);
- $c->Set("OrgId",0);
- }
- }
-
- if(method_exists($c,"CategoryMemberList"))
- {
- $cats = $c->CategoryMemberList($objSession->GetEditTable("CategoryItems"));
- $ci_table = $objSession->GetEditTable('CategoryItems');
- $primary_cat = $c->GetPrimaryCategory($ci_table);
- $c->Update();
- UpdateCategoryItems($c,$cats,$primary_cat);
- }
- else
- $c->Update();
-
- unset($c);
- unset($r);
-
- $rs->MoveNext();
- }
-
- if ($dropRelTableFlag)
- {
- $objRelGlobal = new clsRelationshipList();
- $objRelGlobal->PurgeEditTable();
- }
-
- if($edit_table) @$this->adodbConnection->Execute("DROP TABLE IF EXISTS $edit_table");
- @$this->adodbConnection->Execute("DROP TABLE IF EXISTS ".$objSession->GetEditTable("CategoryItems"));
- }
-
- function GetNextTempID()
- {
- // get next temporary id (lower then zero) from temp table
- $db =& $this->adodbConnection;
- $sql = 'SELECT MIN(%s) AS MinValue FROM %s';
- return $db->GetOne( sprintf($sql, $this->GetIDField(), $this->SourceTable) ) - 1;
- }
-
- function PurgeEditTable($idfield = null)
- {
- global $objSession;
-
- if($idfield == null) $idfield = $this->GetIDField();
- $edit_table = $objSession->GetEditTable($this->SourceTable);
-/* $rs = $this->adodbConnection->Execute("SELECT * FROM $edit_table");
- while($rs && !$rs->EOF)
- {
- $data = $rs->fields;
- $c = new $this->classname;
- $c->SetFromArray($data);
- $c->id_field = $idfield;
- $c->tablename = $edit_table;
- $c->Delete();
- $rs->MoveNext();
- }*/
- @$this->adodbConnection->Execute("DROP TABLE IF EXISTS $edit_table");
- @$this->adodbConnection->Execute("DROP TABLE IF EXISTS ".$objSession->GetEditTable("CategoryItems"));
- }
-
- function CopyCatListToEditTable($idfield, $idlist)
- {
- global $objSession;
-
- $edit_table = $objSession->GetEditTable("CategoryItems");
- @$this->adodbConnection->Execute("DROP TABLE IF EXISTS $edit_table");
- if(is_array($idlist))
- {
- $list = implode(",",$idlist);
- }
- else
- $list = $idlist;
- $query = "SELECT * FROM ".GetTablePrefix()."CategoryItems WHERE $idfield IN ($list)";
-
- $insert = "CREATE TABLE ".$edit_table." ".$query;
- if($objSession->HasSystemPermission("DEBUG.LIST"))
- echo htmlentities($insert,ENT_NOQUOTES)."
\n";
- $this->adodbConnection->Execute($insert);
- }
-
- function CreateEmptyCatListTable($idfield)
- {
- global $objSession;
-
- $edit_table = $objSession->GetEditTable("CategoryItems");
- @$this->adodbConnection->Execute("DROP TABLE IF EXISTS $edit_table");
- $query = "SELECT * FROM ".GetTablePrefix()."CategoryItems WHERE $idfield = -1";
- $insert = "CREATE TABLE ".$edit_table." ".$query;
- if($objSession->HasSystemPermission("DEBUG.LIST"))
- echo htmlentities($insert,ENT_NOQUOTES)."
\n";
- $this->adodbConnection->Execute($insert);
- }
-
-
- function PurgeCatListEditTable()
- {
- global $objSession;
-
- $edit_table = $objSession->GetEditTable("CategoryItems");
- $this->adodbConnection->Execute("DROP TABLE IF EXISTS $edit_table");
- }
-
- function AdminSearchWhereClause($SearchList)
- {
- $sql = "";
- if( !is_array($SearchList) ) $SearchList = explode(",",$SearchList);
-
- // remove empty elements
- $SearchListTmp=Array();
- for($f = 0; $f < count($SearchList); $f++)
- if($SearchList[$f])
- $SearchListTmp[]=$SearchList[$f];
- $SearchList=$SearchListTmp;
-
- if( !count($SearchList) || !count($this->AdminSearchFields) ) return '';
-
- for($f = 0; $f < count($SearchList); $f++)
- {
- $value = $SearchList[$f];
- if( strlen($value) )
- {
- $inner_sql = "";
- for($i = 0; $i < count($this->AdminSearchFields); $i++)
- {
- $field = $this->AdminSearchFields[$i];
- if( strlen( trim($value) ) )
- {
- if( strlen($inner_sql) ) $inner_sql .= " OR ";
- $inner_sql .= $field." LIKE '%".$value."%'";
- }
- }
- if( strlen($inner_sql) )
- {
- $sql .= '('.$inner_sql.') ';
- if($f < count($SearchList) - 1) $sql .= " AND ";
- }
- }
- }
- return $sql;
- }
-
- function BackupData($OutFileName,$Start,$Limit)
- {
- $fp=fopen($Outfile,"a");
- if($fp)
- {
- if($Start==1)
- {
- $sql = "DELETE FROM ".$this->SourceTable;
- fputs($fp,$sql);
- }
- $this->Query_Item("SELECT * FROM ".$this->SourceTable." LIMIT $Start, $Limit");
- foreach($this->Items as $i)
- {
- $sql = $i->CreateSQL();
- fputs($fp,$sql);
- }
- fclose($fp);
- $this->Clear();
- }
- }
-
- function RestoreData($InFileName,$Start,$Limit)
- {
- $res = -1;
- $fp=fopen($InFileName,"r");
- if($fp)
- {
- fseek($fp,$Start);
- $Line = 0;
- while($Line < $Limit)
- {
- $sql = fgets($fp,16384);
- $this->adodbConnection->Execute($sql);
- $Line++;
- }
- $res = ftell($fp);
- fclose($fp);
- }
- return $res;
- }
-
- function Delete_Item($Id)
- {
- global $objCatList;
-
- $l =& $this->GetItem($Id);
- $l->BasePermission=$this->BasePermission;
- $l->DeleteCategoryItems($objCatList->CurrentCategoryID());
- }
-
- function Move_Item($Id, $OldCat, $ParentTo)
- {
- global $objCatList;
-
- $l = $this->GetItem($Id);
- $l->BasePermission=$this->BasePermission;
- $l->AddtoCategory($ParentTo);
- $l->RemoveFromCategory($OldCat);
- }
-
- function Copy_Item($Id, $ParentTo)
- {
- $l = $this->GetItem($Id);
- $l->BasePermission=$this->BasePermission;
- $l->AddtoCategory($ParentTo);
- }
-
-}/* clsItemCollection */
-
-class clsItemList extends clsItemCollection
-{
- var $Page;
- var $PerPageVar;
- var $DefaultPerPage; // use this perpage value in case if no found in config
- var $EnablePaging;
- var $MaxListCount = 0;
- var $PageEnvar;
- var $PageEnvarIndex;
- var $ListType;
-
- var $LastLimitClause = ''; // used to store last limit cluse used in query
-
- function clsItemList()
- {
- $this->clsItemCollection();
- $this->EnablePaging = TRUE;
- $this->PageEnvarIndex = "p";
- }
-
- function GetPageLimitSQL()
- {
- global $objConfig;
- $limit = NULL;
- if($this->EnablePaging)
- {
- if($this->Page<1)
- $this->Page=1;
- //echo "Limited to ".$objConfig->Get($this->PerPageVar)." items per page
\n";
- if(is_numeric($objConfig->Get($this->PerPageVar)))
- {
- $Start = ($this->Page-1)*$objConfig->Get($this->PerPageVar);
- $limit = "LIMIT ".$Start.",".$objConfig->Get($this->PerPageVar);
- }
- else
- $limit = NULL;
- }
- else
- {
- if($this->MaxListCount)
- {
- $limit = "LIMIT 0, $MaxListCount";
- }
- }
- return $limit;
- }
-
- function GetPageOffset()
- {
- $Start = 0;
- if($this->EnablePaging)
- {
- if($this->Page < 1) $this->Page = 1;
- $PerPage = $this->GetPerPage();
- $Start = ($this->Page - 1) * $PerPage;
- }
- else
- {
- if((int)$this->MaxListCount == 0) $Start = -1;
- }
- return $Start;
- }
-
- function GetPageRowCount()
- {
- if($this->EnablePaging)
- {
- if($this->Page < 1) $this->Page = 1;
- return $this->GetPerPage();
- }
- else
- return (int)$this->MaxListCount;
- }
-
- function Query_Item($sql,$limit = null, $fix_method = 'set_first')
- {
- // query itemlist (module items) using $sql specified
- // apply direct limit clause ($limit) or calculate it if not specified
- // fix invalid page in case if needed by method specified in $fix_method
- if(strlen($limit))
- {
- $sql .= " ".$limit;
- return parent::Query_Item($sql);
- }
- else
- {
- //echo "page fix pre (class: ".get_class($this).")
";
- $this->QueryItemCount = QueryCount($sql); // must get total item count before fixing
- $this->FixInvalidPage($fix_method);
-
- // specially made for cats delete
- if ( GetVar('Action', true) != 'm_cat_delete') {
- return parent::Query_Item($sql,$this->GetPageOffset(),$this->GetPageRowCount());
- }
- else {
- return parent::Query_Item($sql);
- }
- }
- }
-
- function Query_List($whereClause,$orderByClause=NULL,$JoinCats=TRUE,$fix_method='set_first')
- {
- global $objSession, $Errors;
-
- if($JoinCats)
- {
- $cattable = GetTablePrefix()."CategoryItems";
- $t = $this->SourceTable;
- $sql = "SELECT *,CategoryId FROM $t INNER JOIN $cattable ON $cattable.ItemResourceId=$t.ResourceId";
- }
- else
- $sql = "SELECT * FROM ". $this->SourceTable;
- if(trim($whereClause)!="")
- {
- if(isset($whereClause))
- $sql = sprintf('%s WHERE %s',$sql,$whereClause);
- }
- if(strlen($orderByClause)>0)
- {
- if(substr($orderByClause,0,8)=="ORDER BY")
- {
- $sql .= " ".$orderByClause;
- }
- else
- {
- $sql .= " ORDER BY $orderByClause";
- }
- }
-
- if($objSession->HasSystemPermission("DEBUG.LIST"))
- echo $sql."
\n";
-
- return $this->Query_Item($sql, null, $fix_method);
- }
-
- function GetPerPage()
- {
- // return category perpage
- global $objConfig;
- $PerPage = $objConfig->Get( $this->PerPageVar );
- if( !is_numeric($PerPage) ) $PerPage = $this->DefaultPerPage ? $this->DefaultPerPage : 10;
- return $PerPage;
- }
-
- function FixInvalidPage($fix_method = 'set_first')
- {
- // in case if current page > total page count,
- // then set current page to last possible "set_last"
- // or first possible "set_first"
- $PerPage = $this->GetPerPage();
- $NumPages = ceil( $this->GetNumPages($PerPage) );
-/*
- echo "=====
";
- echo "Class ".get_class($this).": Page ".$this->Page." of $NumPages
";
- echo "PerPage: $PerPage
";
- echo "Items Queries: ".$this->QueryItemCount."
";
- echo "=====
";
-*/
- if($this->Page > $NumPages)
- {
- switch($fix_method)
- {
- case 'set_first':
- $this->Page = 1;
- //echo "Move 2 First (class ".get_class($this).")
";
- break;
- case 'set_last':
- $this->Page = $NumPages;
- //echo "Move 2 Last (class ".get_class($this).")
";
- break;
- }
- $this->SaveNewPage();
- }
- }
-
- function SaveNewPage()
- {
- // redefine in each list, should save to env array new page value
-
- }
-
- function GetPageLinkList($dest_template=NULL,$page = "",$PagesToList=10, $HideEmpty=TRUE,$EnvSuffix = '')
- {
- global $objConfig, $var_list_update, $var_list;
-
-
- $v= $this->PageEnvar;
-
- global ${$v};
-
- if(!strlen($page))
- $page = GetIndexURL();
-
- $PerPage = $objConfig->Get($this->PerPageVar);
- if($PerPage<1)
- $PerPage=20;
- $NumPages = ceil($this->GetNumPages($PerPage));
- if($NumPages==1 && $HideEmpty)
- return "";
-
- if(strlen($dest_template))
- {
- $var_list_update["t"] = $dest_template;
- }
- else
- $var_list_update["t"] = $var_list["t"];
-
- $o = "";
- if($this->Page==0 || !is_numeric($this->Page))
- $this->Page=1;
- if($this->Page>$NumPages)
- $this->Page=$NumPages;
-
- $StartPage = (int)$this->Page - ($PagesToList/2);
- if($StartPage<1)
- $StartPage=1;
-
- $EndPage = $StartPage+($PagesToList-1);
- if($EndPage>$NumPages)
- {
- $EndPage = $NumPages;
- $StartPage = $EndPage-($PagesToList-1);
- if($StartPage<1)
- $StartPage=1;
- }
-
- $o = "";
- if($StartPage>1)
- {
- ${$v}[$this->PageEnvarIndex] = $this->Page-$PagesToList;
-
- $prev_url = $page."?env=".BuildEnv().$EnvSuffix;
- $o .= "<<";
- }
-
- for($p=$StartPage;$p<=$EndPage;$p++)
- {
- if($p!=$this->Page)
- {
- ${$v}[$this->PageEnvarIndex]=$p;
- $href = $page."?env=".BuildEnv().$EnvSuffix;
- $o .= " $p ";
- }
- else
- {
- $o .= " $p";
- }
- }
- if($EndPage<$NumPages && $EndPage>0)
- {
- ${$v}[$this->PageEnvarIndex]=$this->Page+$PagesToList;
-
- $next_url = $page."?env=".BuildEnv().$EnvSuffix;
- $o .= " >>";
- }
- unset(${$v}[$this->PageEnvarIndex],$var_list_update["t"] );
- return $o;
- }
-
- function GetAdminPageLinkList($url)
- {
- global $objConfig;
-
- $update =& $GLOBALS[$this->PageEnvar]; // env_var_update
-
- // insteresting stuff :)
- if(!$this->PerPageVar) $this->PerPageVar = "Perpage_Links";
-
- $PerPage = $objConfig->Get($this->PerPageVar);
- if($PerPage < 1) $PerPage = 20;
-
- $NumPages = ceil($this->GetNumPages($PerPage));
-
- //echo $this->CurrentPage." of ".$NumPages." Pages";
-
- if($this->Page > $NumPages) $this->Page = $NumPages;
-
- $StartPage = $this->Page - 5;
- if($StartPage < 1) $StartPage = 1;
- $EndPage = $StartPage + 9;
- if($EndPage > $NumPages)
- {
- $EndPage = $NumPages;
- $StartPage = $EndPage-9;
- if($StartPage < 1) $StartPage = 1;
- }
-
- $o = '';
-
- if($StartPage > 1)
- {
- $update[$this->PageEnvarIndex]= $this->Page - 10;
- $prev_url = $url.'?env='.BuildEnv();
- $o .= '<<';
- }
-
-
- for($p = $StartPage; $p <= $EndPage; $p++)
- {
- if($p != $this->Page)
- {
- $update[$this->PageEnvarIndex] = $p;
- $href = $url.'?env='.BuildEnv();
- $o .= ' '.$p.' ';
- }
- else
- {
- $o .= ''.$p.'';
- }
- }
- if($EndPage < $NumPages)
- {
- $update[$this->PageEnvarIndex] = $this->Page + 10;
- $next_url = $url.'?env='.BuildEnv();
- $o .= ' >>';
- }
- unset( $update[$this->PageEnvarIndex] );
- return $o;
- }
-}
-
-function ParseClipboard($clip)
-{
- $ret = array();
-
- $parts = explode(".",$clip,3);
- $command = $parts[0];
- $table = $parts[1];
- $prefix = GetTablePrefix();
- if(substr($table,0,strlen($prefix))==$prefix)
- $table = substr($table,strlen($prefix));
-
- $subparts = explode("=",$parts[2],2);
- $idfield = $subparts[0];
- $idlist = $subparts[1];
- $cmd = explode("-",$command);
- $ret["command"] = $cmd[0];
- $ret["source"] = $cmd[1];
- $ret["table"] = $table;
- $ret["idfield"] = $idfield;
- $ret["ids"] = $idlist;
- //print_pre($ret);
- return $ret;
-}
-
-function UpdateCategoryItems($item,$NewCatList,$PrimaryCatId = false)
-{
- global $objCatList;
-
- $CurrentList = explode(",",$item->CategoryMemberList());
- $del_list = array();
- $ins_list = array();
-
-
- if(!is_array($NewCatList))
- {
- if(strlen(trim($NewCatList))==0)
- $NewCatList = $objCatList->CurrentCategoryID();
-
- $NewCatList = explode(",",$NewCatList);
- }
- //print_r($NewCatList);
-
- for($i=0;$iAddToCategory($cat);
- }
- for($i=0;$iRemoveFromCategory($cat);
- }
- if($PrimaryCatId !== false) $item->SetPrimaryCategory($PrimaryCatId);
-}
-
-class clsCatItemList extends clsItemList
-{
- var $PerPageVarLong;
- var $PerPageShortVar;
- var $Query_SortField;
- var $Query_SortOrder;
- var $ItemType;
-
- function clsCatItemList()
- {
- $this->ClsItemList();
- $this->Query_SortField = array();
- $this->Query_SortOrder = array();
- }
-
- function QueryOrderByClause($EditorsPick=FALSE,$Priority=FALSE,$UseTableName=FALSE)
- {
- global $objSession;
-
- if($UseTableName)
- {
- $TableName = $this->SourceTable.".";
- }
- else {
- $TableName = "";
- }
-
- $Orders = array();
-
- if($EditorsPick)
- {
- $Orders[] = $TableName."EditorsPick DESC";
- }
- if($Priority)
- {
- $Orders[] = $TableName."Priority DESC";
- }
-
- if(count($this->Query_SortField)>0)
- {
- for($x=0; $xQuery_SortField); $x++)
- {
- $FieldVar = $this->Query_SortField[$x];
- $OrderVar = $this->Query_SortOrder[$x];
-
- if(is_object($objSession))
- {
- $FieldVarData = $objSession->GetPersistantVariable($FieldVar);
- if(strlen($FieldVarData)>0)
- {
- $Orders[] = trim($TableName.$objSession->GetPersistantVariable($FieldVar) . " ".
- $objSession->GetPersistantVariable($OrderVar));
- }
- }
- }
- }
-
- if(count($Orders)>0)
- {
- $OrderBy = "ORDER BY ".implode(", ",$Orders);
- }
- else
- $OrderBy="";
-
- return $OrderBy;
- }
-
- function AddSortField($SortField, $SortOrder)
- {
- if(strlen($SortField))
- {
- $this->Query_SortField[] = $SortField;
- $this->Query_SortOrder[] = $SortOrder;
- }
- }
-
- function ClearSortFields()
- {
- $this->Query_SortField = array();
- $this->Query_SortOrder = array();
- }
-
- /* skeletons in this closet */
-
- function GetNewValue($CatId=NULL)
- {
- return 0;
- }
-
- function GetPopValue($CategoryId=NULL)
- {
- return 0;
- }
-
- /* end of skeletons */
-
- function GetCountSQL($PermName,$CatId=NULL, $GroupId=NULL, $AdditonalWhere="")
- {
- global $objSession, $objPermissions, $objCatList;
-
- $ltable = $this->SourceTable;
- $acl = $objSession->GetACLClause();
- $cattable = GetTablePrefix()."CategoryItems";
- $CategoryTable = GetTablePrefix()."Category";
- $ptable = GetTablePrefix()."PermCache";
- $VIEW = $objPermissions->GetPermId($PermName);
-
- $sql = "SELECT count(*) as CacheVal FROM $ltable ";
- $sql .="INNER JOIN $cattable ON ($cattable.ItemResourceId=$ltable.ResourceId) ";
- $sql .="INNER JOIN $CategoryTable ON ($CategoryTable.CategoryId=$cattable.CategoryId) ";
- $sql .="INNER JOIN $ptable ON ($cattable.CategoryId=$ptable.CategoryId) ";
- $sql .="WHERE ($acl AND PermId=$VIEW AND $cattable.PrimaryCat=1 AND $CategoryTable.Status=1) ";
-
- if(strlen($AdditonalWhere)>0)
- {
- $sql .= "AND (".$AdditonalWhere.")";
- }
-
- return $sql;
- }
-
- function SqlCategoryList($attribs = array())
- {
- $CatTable = GetTablePrefix()."CategoryItems";
- $t = $this->SourceTable;
-
- $sql = "SELECT *,$CatTable.CategoryId FROM $t INNER JOIN $CatTable ON $CatTable.ItemResourceId=$t.ResourceId ";
- $sql .="WHERE ($CatTable.CategoryId=".$catid." AND $t.Status=1)";
-
- return $sql;
- }
-
-
- function CategoryCount($attribs=array())
- {
- global $objCatList, $objCountCache;
-
- $cat = $attribs["_catid"];
- if(!is_numeric($cat))
- {
- $cat = $objCatList->CurrentCategoryID();
- }
- if((int)$cat>0)
- $c = $objCatList->GetCategory($cat);
-
- $CatTable = GetTablePrefix()."CategoryItems";
- $t = $this->SourceTable;
-
- $sql = "SELECT count(*) as MyCount FROM $t INNER JOIN $CatTable ON ($CatTable.ItemResourceId=$t.ResourceId) ";
- if($attribs["_subcats"])
- {
- $ctable = $objCatList->SourceTable;
- $sql .= "INNER JOIN $ctable ON ($CatTable.CategoryId=$ctable.CategoryId) ";
- $sql .= "WHERE (ParentPath LIKE '".$c->Get("ParentPath")."%' ";
- if(!$attribs["_countcurrent"])
- {
- $sql .=" AND $ctable.CategoryId != $cat) ";
- }
- else
- $sql .=") ";
- }
- else
- $sql .="WHERE ($CatTable.CategoryId=".$cat." AND $t.Status=1) ";
-
- if($attribs["_today"])
- {
- $today = mktime(0,0,0,date("m"),date("d"),date("Y"));
- $sql .= "AND ($t.CreatedOn>=$today) ";
- }
- //echo $sql."
\n";
- $rs = $this->adodbConnection->Execute($sql);
- $ret = "";
- if($rs && !$rs->EOF)
- $ret = (int)$rs->fields["MyCount"];
- return $ret;
- }
-
- function SqlGlobalCount($attribs=array())
- {
- global $objSession;
-
- $p = $this->BasePermission.".VIEW";
- $t = $this->SourceTable;
- if($attribs["_today"])
- {
- $today = mktime(0,0,0,date("m"),date("d"),date("Y"));
- $where = "($t.CreatedOn>=$today)";
- }
-
- if($attribs["_grouponly"])
- {
- $GroupList = $objSession->Get("GroupList");
- }
- else
- $GroupList = NULL;
-
- $sql = $this->GetCountSQL($p,NULL,$GroupList,$where);
- return $sql;
- }
-
- function DoGlobalCount($attribs)
- {
- global $objCountCache;
-
- $cc = $objCountCache->GetValue($this->CacheListType("_"),$this->ItemType,$this->CacheListExtraId("_"),(int)$attribs["_today"], 3600);
- if(!is_numeric($cc))
- {
- $sql = $this->SqlGlobalCount($attribs);
- $ret = QueryCount($sql);
- $objCountCache->SetValue($this->CacheListType("_"),$this->ItemType,$this->CacheListExtraId("_"),(int)$attribs["_today"],$ret);
- }
- else
- $ret = $cc;
- return $ret;
- }
-
-
- function CacheListExtraId($ListType)
- {
- global $objSession;
-
- if(!strlen($ListType))
- $ListType="_";
- switch($ListType)
- {
- case "_":
- $ExtraId = $objSession->Get("GroupList");
- break;
- case "category":
- $ExtraId = $objSession->Get("GroupList");
- break;
- case "myitems":
- $ExtraId = $objSession->Get("PortalUserId");
- break;
- case "hot":
- $ExtraId = $objSession->Get("GroupList");
- break;
- case "pop":
- $ExtraId = $objSession->Get("GroupList");
- break;
- case "pick":
- $ExtraId = $objSession->Get("GroupList");
- break;
- case "favorites":
- $ExtraId = $objSession->Get("PortalUserId");
- break;
- case "new":
- $ExtraId = $objSession->Get("GroupList");
- break;
- }
- return $ExtraId;
- }
-
- function CacheListType($ListType)
- {
- if(!strlen($ListType))
- $ListType="_";
- switch($ListType)
- {
- case "_":
- $ListTypeId = 0;
- break;
- case "category":
- $ListTypeId = 1;
- break;
- case "myitems":
- $ListTypeId = 2;
- break;
- case "hot":
- $ListTypeId = 3;
- break;
- case "pop":
- $ListTypeId = 4;
- break;
- case "pick":
- $ListTypeId = 5;
- break;
- case "favorites":
- $ListTypeId = 6;
- break;
- case "new":
- $ListTypeId = 8;
- break;
- }
- return $ListTypeId;
- }
-
- function PerformItemCount($attribs=array())
- {
- global $objCountCache, $objSession;
-
- $ret = "";
- $ListType = $attribs["_listtype"];
- if(!strlen($ListType))
- $ListType="_";
-
- $ListTypeId = $this->CacheListType($ListType);
- //echo "ListType: $ListType ($ListTypeId)
\n";
- $ExtraId = $this->CacheListExtraId($ListType);
- switch($ListType)
- {
- case "_":
- $ret = $this->DoGlobalCount($attribs);
- break;
- case "category":
- $ret = $this->CategoryCount($attribs);
- break;
- case "myitems":
- $sql = $this->SqlMyItems($attribs);
- break;
- case "hot":
- $sql = $this->SqlHotItems($attribs);
- break;
- case "pop":
- $sql = $this->SqlPopItems($attribs);
- break;
- case "pick":
- $sql = $this->SqlPickItems($attribs);
- break;
- case "favorites":
- $sql = $this->SqlFavorites($attribs);
- break;
- case "search":
- $sql = $this->SqlSearchItems($attribs);
- break;
- case "new":
- $sql = $this->SqlNewItems($attribs);
- break;
- }
- //echo "SQL: $sql
";
- if(strlen($sql))
- {
- if(is_numeric($ListTypeId))
- {
- $cc = $objCountCache->GetValue($ListTypeId,$this->ItemType,$ExtraId,(int)$attribs["_today"], 3600);
-
- if(!is_numeric($cc) || $attribs['_nocache'] == 1)
- {
- $ret = QueryCount($sql);
- $objCountCache->SetValue($ListTypeId,$this->ItemType,$ExtraId,(int)$attribs["_today"],$ret);
- }
- else
- $ret = $cc;
- }
- else
- $ret = QueryCount($sql);
- }
-
- return $ret;
- }
-
- function GetJoinedSQL($PermName, $CatId=NULL, $AdditionalWhere="")
- {
- global $objSession, $objPermissions;
-
- $ltable = $this->SourceTable;
- $acl = $objSession->GetACLClause();
- $cattable = GetTablePrefix()."CategoryItems";
- $CategoryTable = GetTablePrefix()."Category";
- $ptable = GetTablePrefix()."PermCache";
- $VIEW = $objPermissions->GetPermId($PermName);
- $sql ="INNER JOIN $cattable ON ($cattable.ItemResourceId=$ltable.ResourceId) ";
- $sql .="INNER JOIN $CategoryTable ON ($CategoryTable.CategoryId=$cattable.CategoryId) ";
- $sql .= "INNER JOIN $ptable ON ($cattable.CategoryId=$ptable.CategoryId) ";
- $sql .="WHERE ($acl AND PermId=$VIEW AND PrimaryCat=1 AND $CategoryTable.Status=1) ";
-
- if(is_numeric($CatId))
- {
- $sql .= " AND ($CategoryTable.CategoryId=$CatId) ";
- }
- if(strlen($AdditionalWhere)>0)
- {
- $sql .= "AND (".$AdditionalWhere.")";
- }
- return $sql;
- }
-
- function CountFavorites($attribs)
- {
- if($attribs["_today"])
- {
- global $objSession, $objConfig, $objPermissions;
-
- $acl = $objSession->GetACLClause();
- $favtable = GetTablePrefix()."Favorites";
- $ltable = $this->SourceTable;
- $cattable = GetTablePrefix()."CategoryItems";
- $CategoryTable = GetTablePrefix()."Category";
- $ptable = GetTablePrefix()."PermCache";
- $today = mktime(0,0,0,date("m"),date("d"),date("Y"));
-
- $where = "PortalUserId=".$objSession->Get("PortalUserId")." AND $ltable.Status=1";
- $where .= " AND $favtable.Modified >= $today AND ItemTypeId=".$this->ItemType;
- $p = $this->BasePermission.".VIEW";
-
- $sql = "SELECT $ltable.*,$CategoryTable.CategoryId,$CategoryTable.CachedNavBar FROM $favtable INNER JOIN $ltable ON ($favtable.ResourceId=$ltable.ResourceId) ";
- $sql .= $this->GetJoinedSQL($p,NULL,$where);
- $ret = QueryCount($sql);
- }
- else
- {
- if (!$this->ListType == "favorites")
- {
- $this->ListType = "favorites";
- $this->LoadFavorites($attribs);
- $ret = $this->QueryItemCount;
- }
- else
- $ret = $this->QueryItemCount;
- }
- return $ret;
- }
-
-
-
- function CountPickItems($attribs)
- {
- if (!$this->ListType == "pick")
- {
- $this->ListType = "pick";
- $this->LoadPickItems($attribs);
- $ret = $this->QueryItemCount;
- }
- else
- $ret = $this->QueryItemCount;
-
- return $ret;
- }
-
- function CountMyItems($attribs)
- {
- if (!$this->ListType == "myitems")
- {
- $this->ListType = "myitems";
- $this->LoadMyItems($attribs);
- $ret = $this->QueryItemCount;
- }
- else
- $ret = $this->QueryItemCount;
-
- return $ret;
- }
-
- function CountHotItems($attribs)
- {
- if (!$this->ListType == "hotitems")
- {
- $this->ListType = "hotitems";
- $this->LoadHotItems($attribs);
- $ret = $this->QueryItemCount;
- }
- else
- $ret = $this->QueryItemCount;
-
- return $ret;
- }
-
- function CountNewItems($attribs)
- {
- if (!$this->ListType == "newitems")
- {
- $this->ListType = "newitems";
- $this->LoadNewItems($attribs);
- $ret = $this->QueryItemCount;
- }
- else
- $ret = $this->QueryItemCount;
-
- return $ret;
- }
-
- function CountPopItems($attribs)
- {
- if (!$this->ListType == "popitems")
- {
- $this->ListType = "popitems";
- $this->LoadPopItems($attribs);
- $ret = $this->QueryItemCount;
- }
- else
- $ret = $this->QueryItemCount;
-
- return $ret;
- }
-
-
- function CountSearchItems($attribs)
- {
- if (!$this->ListType == "search")
- {
- $this->ListType = "search";
- $this->LoadSearchItems($attribs);
- $ret = $this->QueryItemCount;
- }
- else
- $ret = $this->QueryItemCount;
-
- return $ret;
- }
-
- function SqlFavorites($attribs)
- {
- global $objSession, $objConfig, $objPermissions;
-
- $acl = $objSession->GetACLClause();
- $favtable = GetTablePrefix()."Favorites";
- $ltable = $this->SourceTable;
- $cattable = GetTablePrefix()."CategoryItems";
- $CategoryTable = GetTablePrefix()."Category";
- $ptable = GetTablePrefix()."PermCache";
-
- $where = "PortalUserId=".$objSession->Get("PortalUserId")." AND $ltable.Status=1";
- if($attribs["_today"])
- {
- $today = mktime(0,0,0,date("m"),date("d"),date("Y"));
- $where .= " AND $favtable.Modified >= $today AND ItemTypeId=".$this->ItemType;
- }
- $p = $this->BasePermission.".VIEW";
-
- $sql = "SELECT $ltable.*,$CategoryTable.CategoryId,$CategoryTable.CachedNavBar FROM $favtable INNER JOIN $ltable ON ($favtable.ResourceId=$ltable.ResourceId) ";
- $sql .= $this->GetJoinedSQL($p,NULL,$where);
-
-
- $OrderBy = $this->QueryOrderByClause(TRUE,TRUE,TRUE);
- $sql .= " ".$OrderBy;
- return $sql;
- }
-
- function LoadFavorites($attribs)
- {
- global $objSession, $objCountCache;
-
- $sql = $this->SqlFavorites($attribs);
-
- if($objSession->HasSystemPermission("DEBUG.LIST"))
- echo htmlentities($sql,ENT_NOQUOTES)."
\n";
- if($attribs["_shortlist"])
- {
- $this->PerPageVar = $this->PerPageShortVar;
- }
- else
- $this->PerPageVar = $this->PerPageVarLong;
-
- $CachedCount = $objCountCache->GetValue($this->CacheListType("favorites"),$this->ItemType,$this->CacheListExtraId("favorites"),(int)$attribs["_today"],3600);
- if(!is_numeric($CachedCount))
- {
- $this->QueryItemCount = QueryCount($sql);
- $objCountCache->SetValue($this->CacheListType("favorites"),$this->ItemType,$this->CacheListExtraId("favorites"),(int)$attribs["_today"],$this->QueryItemCount);
- }
- else
- $this->QueryItemCount = (int)$CachedCount;
-
- return $this->Query_Item($sql);
- }
-
- function SqlPickItems($attribs)
- {
- global $objSession, $objCatList;
-
- $catid = (int)$attribs["_catid"];
- $scope = (int)$attribs["_scope"];
- //$JoinCats = (int)$attribs["_catinfo"] || $scope;
-
- $TableName = $this->SourceTable;
- if($scope)
- {
- if (!$catid)
- {
- $catid = $objCatList->CurrentCategoryID();
- }
- $where = "CategoryId =".$catid." AND ".$TableName.".EditorsPick=1 AND ".$TableName.".Status=1";
- }
- else
- {
- $where = $TableName.".EditorsPick=1 AND ".$TableName.".Status=1 ";
- $catid=NULL;
- }
- if($attribs["_today"])
- {
- $today = mktime(0,0,0,date("m"),date("d"),date("Y"));
- $where .= " AND ($TableName.CreatedOn>=$today)";
- }
- $CategoryTable = GetTablePrefix()."Category";
- $sql = "SELECT $TableName.*,$CategoryTable.CategoryId,$CategoryTable.CachedNavBar FROM $TableName ";
- $p = $this->BasePermission.".VIEW";
- $sql .= $this->GetJoinedSQL($p,$CatUd,$where);
-
- $OrderBy = $this->QueryOrderByClause(TRUE,TRUE,TRUE);
- $sql .= " ".$OrderBy;
- return $sql;
- }
-
- function LoadPickItems($attribs)
- {
- global $objSession, $objCountCache;
-
- $sql = $this->SqlPickItems($attribs);
- if($objSession->HasSystemPermission("DEBUG.LIST"))
- echo htmlentities($sql,ENT_NOQUOTES)."
\n";
-
- if($attribs["_shortlist"])
- {
- $this->PerPageVar = $this->PerPageShortVar;
- }
- else
- $this->PerPageVar = $this->PerPageVarLong;
-
- $CachedCount = $objCountCache->GetValue($this->CacheListType("pick"),$this->ItemType,$this->CacheListExtraId("pick"),(int)$attribs["_today"],3600);
- if(!is_numeric($CachedCount))
- {
- $this->QueryItemCount= QueryCount($sql);
- $objCountCache->SetValue($this->CacheListType("pick"),$this->ItemType,$this->CacheListExtraId("pick"),(int)$attribs["_today"],$this->QueryItemCount);
- }
- else
- $this->QueryItemCount=$CachedCount;
-
- return $this->Query_Item($sql);
- }
-
- function SqlMyItems($attribs= array())
- {
- global $objSession;
-
- $TableName = $this->SourceTable;
- $where = " ".$TableName.".Status>-1 AND ".$TableName.".CreatedById=".$objSession->Get("PortalUserId");
- if($attribs["_today"])
- {
- $today = mktime(0,0,0,date("m"),date("d"),date("Y"));
- $where .= " AND ($TableName.CreatedOn>=$today)";
- }
- $CategoryTable = GetTablePrefix()."Category";
- $sql = "SELECT $TableName.*,$CategoryTable.CategoryId,$CategoryTable.CachedNavBar FROM $TableName ";
- $p = $this->BasePermission.".VIEW";
- $sql .= $this->GetJoinedSQL($p,$CatUd,$where);
-
- $OrderBy = $this->QueryOrderByClause(TRUE,TRUE,TRUE);
- $sql .= " ".$OrderBy;
-
- return $sql;
- }
-
- function LoadMyItems($attribs=array())
- {
- global $objSession,$objCountCache;
- $sql = $this->SqlMyItems($attribs);
- if($objSession->HasSystemPermission("DEBUG.LIST"))
- echo htmlentities($sql,ENT_NOQUOTES)."
\n";
- if($attribs["_shortlist"])
- {
- $this->PerPageVar = $this->PerPageShortVar;
- }
- else
- $this->PerPageVar = $this->PerPageVarLong;
-
- $CachedCount = $objCountCache->GetValue($this->CacheListType("myitems"),$this->ItemType,$this->CacheListExtraId("myitems"),(int)$attribs["_today"],3600);
- if(!is_numeric($CachedCount))
- {
- $this->QueryItemCount= QueryCount($sql);
- $objCountCache->SetValue($this->CacheListType("myitems"),$this->ItemType,$this->CacheListExtraId("myitems"),(int)$attribs["_today"],$this->QueryItemCount);
- }
- else
- $this->QueryItemCount=$CachedCount;
-
- return $this->Query_Item($sql);
- }
-
- function SqlNewItems($attribs = array())
- {
- global $objSession, $objCatList;
-
- $catid = (int)$attribs["_catid"];
- $scope = (int)$attribs["_scope"];
- //$JoinCats = (int)$attribs["_catinfo"] || $scope;
-
- $TableName = $this->SourceTable;
- if($attribs["_today"])
- {
- $cutoff = mktime(0,0,0,date("m"),date("d"),date("Y"));
- }
- else
- {
- if($scope)
- {
- if (!$catid)
- {
- $catid = $objCatList->CurrentCategoryID();
- }
- $cutoff = $this->GetNewValue($catid);
- }
- else
- $cutoff = $this->GetNewValue();
- }
- if($scope)
- {
- if (!$catid)
- {
- $catid = $objCatList->CurrentCategoryID();
- }
-
- $where = "CategoryId =".$catid." AND ((".$TableName.".CreatedOn >=".$cutoff." AND ".$TableName.".NewItem != 0) OR ".$TableName.".NewItem=1 ) AND ".$TableName.".Status=1 ";
- }
- else
- {
- $where = "((".$TableName.".CreatedOn >=".$this->GetNewValue()." AND ".$TableName.".NewItem != 0) OR ".$TableName.".NewItem=1 ) AND ".$TableName.".Status=1 ";
- }
-
- $CategoryTable = GetTablePrefix()."Category";
- $sql = "SELECT $TableName.*,$CategoryTable.CategoryId,$CategoryTable.CachedNavBar FROM $TableName ";
- $p = $this->BasePermission.".VIEW";
- $sql .= $this->GetJoinedSQL($p,$CatUd,$where);
-
- $OrderBy = $this->QueryOrderByClause(TRUE,TRUE,TRUE);
- $sql .= " ".$OrderBy;
- return $sql;
- }
-
- function LoadNewItems($attribs)
- {
- global $objSession,$objCountCache;
-
- $sql = $this->SqlNewItems($attribs);
-
- if($objSession->HasSystemPermission("DEBUG.LIST"))
- echo htmlentities($sql,ENT_NOQUOTES)."
\n";
- if($attribs["_shortlist"])
- {
- $this->PerPageVar = $this->PerPageShortVar;
- }
- else
- $this->PerPageVar = $this->PerPageVarLong;
-
- $CachedCount = $objCountCache->GetValue($this->CacheListType("new"),$this->ItemType,$this->CacheListExtraId("new"),(int)$attribs["_today"],3600);
- if(!is_numeric($CachedCount))
- {
- $this->QueryItemCount= QueryCount($sql);
- $objCountCache->SetValue($this->CacheListType("new"),$this->ItemType,$this->CacheListExtraId("new"),(int)$attribs["_today"],$this->QueryItemCount);
- }
- else
- $this->QueryItemCount=$CachedCount;
-
-
- return $this->Query_Item($sql);
- }
-
- function SqlPopItems($attribs)
- {
- global $objSession, $objCatList;
-
- $catid = (int)$attribs["_catid"];
- $scope = (int)$attribs["_scope"];
- //$JoinCats = (int)$attribs["_catinfo"] || $scope;
-
- $TableName = $this->SourceTable;
-
- if($scope)
- {
- if (!$catid)
- {
- $catid = $objCatList->CurrentCategoryID();
- }
- $where = "CategoryId =".$catid." AND ((".$TableName.".Hits >=".$this->GetLinkPopValue()." AND ".$TableName.".PopItem !=0) OR ".$TableName.".PopItem=1) AND ".$TableName.".Status=1";
- }
- else
- {
- $where = "((".$TableName.".CachedRating >=".$this->GetPopValue()." AND ".$TableName.".PopItem !=0 ) OR ".$TableName.".PopItem=1) AND ".$TableName.".Status=1 ";
-
- $where = "((".$TableName.".Hits >=".$this->GetPopValue()." AND ".$TableName.".PopItem !=0) OR ".$TableName.".PopItem=1) AND ".$TableName.".Status=1 ";
- }
- if($attribs["_today"])
- {
- $today = mktime(0,0,0,date("m"),date("d"),date("Y"));
- $where .= " AND ($TableName.CreatedOn>=$today)";
- }
- $CategoryTable = GetTablePrefix()."Category";
- $sql = "SELECT $TableName.*,$CategoryTable.CategoryId,$CategoryTable.CachedNavBar FROM $TableName ";
- $p = $this->BasePermission.".VIEW";
- $sql .= $this->GetJoinedSQL($p,$catid,$where);
-
- $OrderBy = $this->QueryOrderByClause(TRUE,TRUE,TRUE);
- $sql .= " ".$OrderBy;
-
- return $sql;
- }
-
- function LoadPopItems($attribs)
- {
- global $objSession,$objCountCache;
- $sql = $this->SqlPopItems($attribs);
-
- if($objSession->HasSystemPermission("DEBUG.LIST"))
- echo htmlentities($sql,ENT_NOQUOTES)."
\n";
- if($attribs["_shortlist"])
- {
- $this->PerPageVar = $this->PerPageShortVar;
- }
- else
- $this->PerPageVar = $this->PerPageVarLong;
-
- $CachedCount = $objCountCache->GetValue($this->CacheListType("pop"),$this->ItemType,$this->CacheListExtraId("pop"),(int)$attribs["_today"],3600);
- if(!is_numeric($CachedCount))
- {
- $this->QueryItemCount= QueryCount($sql);
- $objCountCache->SetValue($this->CacheListType("pop"),$this->ItemType,$this->CacheListExtraId("pop"),(int)$attribs["_today"],$this->QueryItemCount);
- }
- else
- $this->QueryItemCount=$CachedCount;
-
- return $this->Query_Item($sql);
- }
-
- function SqlHotItems($attribs)
- {
- global $objSession, $objCatList;
-
- $catid = (int)$attribs["_catid"];
- $scope = (int)$attribs["_scope"];
-
-// $JoinCats = (int)$attribs["_catinfo"] || $scope;
-
- $TableName = $this->SourceTable;
-
- $OrderBy = $TableName.".CachedRating DESC";
-
- if($scope)
- {
- if (!$catid)
- {
- $catid = $objCatList->CurrentCategoryID();
- }
- $where = "CategoryId =".$catid." AND ((".$TableName.".CachedRating >=".$this->GetHotValue()." AND ".$TableName.".PopItem !=0) OR ".$TableName.".PopItem=1) AND ".$TableName.".Status=1";
- }
- else
- {
- $where = "((".$TableName.".CachedRating >=".$this->GetPopValue()." AND ".$TableName.".PopItem !=0 ) OR ".$TableName.".PopItem=1) AND ".$TableName.".Status=1 ";
- }
-
- if($attribs["_today"])
- {
- $today = mktime(0,0,0,date("m"),date("d"),date("Y"));
- $where .= " AND ($TableName.CreatedOn>=$today)";
- }
- $CategoryTable = GetTablePrefix()."Category";
- $sql = "SELECT $TableName.*,$CategoryTable.CategoryId,$CategoryTable.CachedNavBar FROM $TableName ";
- $p = $this->BasePermission.".VIEW";
- $CatId = !$scope? NULL : $catid;
- $sql .= $this->GetJoinedSQL($p,$CatId,$where);
-
- if(strlen($OrderBy))
- $sql .= " ORDER BY $OrderBy ";
-
- return $sql;
- }
-
- function LoadHotItems($attribs)
- {
- global $objSession,$objCountCache;
-
- $sql = $this->SqlHotItems($attribs);
- if($objSession->HasSystemPermission("DEBUG.LIST"))
- echo htmlentities($sql,ENT_NOQUOTES)."
\n";
-
- if($attribs["_shortlist"])
- {
- $this->PerPageVar = $this->PerPageShortVar;
- }
- else
- $this->PerPageVar = $this->PerPageVarLong;
-
- $CachedCount = $objCountCache->GetValue($this->CacheListType("hot"),$this->ItemType,$this->CacheListExtraId("hot"),(int)$attribs["_today"], 0);
- if(!is_numeric($CachedCount))
- {
- $this->QueryItemCount= QueryCount($sql);
- $objCountCache->SetValue($this->CacheListType("hot"),$this->ItemType,$this->CacheListExtraId("hot"),(int)$attribs["_today"],$this->QueryItemCount);
- }
- else
- $this->QueryItemCount=$CachedCount;
-
- return $this->Query_Item($sql);
- }
-
- function SqlSearchItems($attribs = array())
- {
- global $objConfig, $objItemTypes, $objSession, $objPermissions, $CountVal;
-
- $acl = $objSession->GetACLClause();
- $this->Clear();
- //$stable = "ses_".$objSession->GetSessionKey()."_Search";
- $stable = $objSession->GetSearchTable();
- $ltable = $this->SourceTable;
- $catitems = GetTablePrefix()."CategoryItems";
- $cattable = GetTablePrefix()."Category";
- $ptable = GetTablePrefix()."PermCache";
- $p = $this->BasePermission.".VIEW";
- $i = new $this->classname();
-
- $sql = "SELECT $cattable.CategoryId,$cattable.CachedNavbar,$ltable.*, Relevance FROM $stable ";
- $sql .= "INNER JOIN $ltable ON ($stable.ItemId=$ltable.".$i->id_field.") ";
-
- $where = "ItemType=".$this->ItemType." AND $ltable.Status=1";
-
- $sql .= $this->GetJoinedSQL($p,NULL,$where);
- $sql .= " ORDER BY EdPick DESC,Relevance DESC ";
-
- $tmp = $this->QueryOrderByClause(FALSE,TRUE,TRUE);
- $tmp = substr($tmp,9);
- if(strlen($tmp))
- {
- $sql .= ", ".$tmp." ";
- }
- return $sql;
- }
-
- function LoadSearchItems($attribs = array())
- {
- global $CountVal, $objSession;
- //echo "Loading ".get_class($this)." Search Items
";
- $sql = $this->SqlSearchItems($attribs);
- //echo "$sql
";
- $this->Query_Item($sql);
- $Keywords = GetKeywords($objSession->GetVariable("Search_Keywords"));
- //echo "SQL Loaded ItemCount (".get_class($this).'): '.$this->NumItems().'
';
- for($i = 0; $i < $this->NumItems(); $i++)
- {
- $this->Items[$i]->Keywords = $Keywords;
- }
- if(is_numeric($CountVal[$this->ItemType]))
- {
- $this->QueryItemCount = $CountVal[$this->ItemType];
- //echo "CACHE: "; print_r($CountVal); echo "
";
- }
- else
- {
- $this->QueryItemCount = QueryCount($sql);
- //echo "SQL: ".$sql."
";
- $CountVal[$this->ItemType] = $this->QueryItemCount;
- }
-
- }
-
- function PasteFromClipboard($TargetCat,$NameField="")
- {
- global $objSession,$objCatList;
-
- $clip = $objSession->GetVariable("ClipBoard");
- if(strlen($clip))
- {
- $ClipBoard = ParseClipboard($clip);
- $IsCopy = (substr($ClipBoard["command"],0,4)=="COPY") || ($ClipBoard["source"] == $TargetCat);
-
- $item_ids = explode(",",$ClipBoard["ids"]);
- for($i=0;$iGetItem($item_ids[$i]);
- if(!$IsCopy) // paste to other category then current
- {
- $item->MoveToCategory($ClipBoard["source"],$TargetCat);
- $clip = str_replace("CUT","COPY",$clip);
- $objSession->SetVariable("ClipBoard",$clip);
- }
- else
- {
- $item->CopyToNewResource($TargetCat,$NameField); // create item copy, but with new ResourceId
- $item->AddToCategory($TargetCat);
- UpdateCategoryCount($item->type,$TargetCat);
-
- }
- }
- }
- }
-
- function AdminPrintItems($template)
- {
- // prints item listing for admin (browse/advanced view) tabs
- $o = '';
-
- $i = 1;
-
- $topleft = 0;
- $topright = 0;
- $rightcount = 0;
- $total_items = $this->NumItems();
- $topleft = ceil($total_items / 2);
- $topright = $total_items - $topleft;
-
- for($x = 0; $x < $topleft; $x++)
- {
- //printingleft
- $item = $this->Items[$x];
- if ($i > 2)
- {
- $o .= "
\n";
- $i = 1;
- }
- $o .= $item->AdminParseTemplate($template);
- $i++;
-
- //printingright
- if ($rightcount < $topright && ( ($x + $topleft) < $total_items) )
- {
- $item = $this->Items[ $x + $topleft ];
- if ($i > 2)
- {
- $o.="
\n";
- $i = 1;
- }
- $o .= $item->AdminParseTemplate($template);
- $i++;
- $rightcount++;
- }
- }
- $o .= "\n
\n";
-
- return $o;
- }
-
-}
-
-// -------------- NEW CLASSES -----------------------
-
-class DBList {
-
- // table related attributes
- var $db = null;
- var $table_name = '';
- var $LiveTable = '';
- var $EditTable = '';
-
-
- // record related attributes
- var $records = Array();
- var $record_count = 0;
- var $cur_rec = -1; // "-1" means no records, or record index otherwise
-
- // query related attributes
- var $SelectSQL = "SELECT * FROM %s";
-
- function DBList()
- {
- // use $this->SetTable('live', 'table name');
- // in inherited constructors to set table for list
- $this->db =&GetADODBConnection();
- }
-
- function SetTable($action, $table_name = null)
- {
- // $action = {'live', 'restore','edit'}
- switch($action)
- {
- case 'live':
- $this->LiveTable = $table_name;
- $this->table_name = $this->LiveTable;
- break;
- case 'restore':
- $this->table_name = $this->LiveTable;
- break;
- case 'edit':
- global $objSession;
- $this->table_name = $objSession->GetEditTable($this->LiveTable);
- break;
- }
- }
-
- function Clear()
- {
- // no use of this method at a time :)
- $this->records = Array();
- $this->record_count = 0;
- $this->cur_rec = -1;
- }
-
- function Query()
- {
- // query list
- $sql = sprintf($this->SelectSQL, $this->table_name);
- echo "SQL: $sql
";
- $rs =& $this->db->Execute($sql);
-
- if( $this->db->ErrorNo() == 0 )
- {
- $this->records = $rs->GetRows();
- $this->record_count = count($this->records);
- //$this->cur_rec = $this->record_count ? 0 : -1;
- }
- else
- return false;
- }
-
- function ProcessList($callback_method)
- {
- // process list using user-defined method called
- // with one parameter - current record fields
- // (associative array)
- if($this->record_count > 0)
- {
- $this->cur_rec = 0;
- while($this->cur_rec < $this->record_count)
- {
- if( method_exists($this, $callback_method) )
- $this->$callback_method( $this->GetCurrent() );
- $this->cur_rec++;
- }
- }
- }
-
- function &GetCurrent()
- {
- // return currently processed record (with change ability)
- return ($this->cur_rec != -1) ? $this->records[$this->cur_rec] : false;
- }
-
- function GetDBField($field_name)
- {
- $rec =& $this->GetCurrent();
- return is_array($rec) && isset($rec[$field_name]) ? $rec[$field_name] : false;
- }
-}
-
-
-?>
+clsItemDB();
+
+ $this->Parser = new clsTemplateList($TemplateRoot);
+
+ $this->AdminParser = new clsAdminTemplateList();
+
+ }
+
+
+
+/* function ParseObject($element)
+
+ {
+
+ $extra_attribs = ExtraAttributes($element->attributes);
+
+ if(strtolower($element->name)==$this->TagPrefix)
+
+ {
+
+ $field = strtolower($element->attributes["_field"]);
+
+ $tag = $this->TagPrefix."_".$field;
+
+ $ret = $this->parsetag($tag);
+
+ }
+
+ return $ret;
+
+ }
+
+*/
+
+ function ParseTimeStamp($d,$attribs=array())
+
+ {
+
+ if( isset($attribs["_tz"]) )
+
+ {
+
+ $d = GetLocalTime($d,$objSession->Get("tz"));
+
+ }
+
+ $part = isset($attribs["_part"]) ? strtolower($attribs["_part"]) : '';
+
+ if(strlen($part))
+
+ {
+
+ $ret = ExtractDatePart($part,$d);
+
+ }
+
+ else
+
+ {
+
+ if($d<=0)
+
+ {
+
+ $ret = "";
+
+ }
+
+ else
+
+ $ret = LangDate($d);
+
+ }
+
+ return $ret;
+
+ }
+
+
+
+ function ParseObject($element)
+
+ {
+
+ global $objConfig, $objCatList, $var_list_update, $var_list, $n_var_list_update, $m_var_list_update;
+
+
+
+ $extra_attribs = ExtraAttributes($element->attributes);
+
+ $ret = "";
+
+
+
+ if ($this->TagPrefix == "email" && strtolower($element->name) == "touser") {
+
+ $this->TagPrefix = "touser";
+
+ }
+
+
+
+ if(strtolower($element->name)==$this->TagPrefix)
+
+ {
+
+ $field = strtolower($element->attributes["_field"]);
+
+ switch($field)
+
+ {
+
+ case "id":
+
+ $ret = $this->Get($this->id_field);
+
+ break;
+
+ case "resourceid":
+
+ if(!$this->NoResourceId)
+
+ $ret = $this->Get("ResourceId");
+
+ break;
+
+ case "category":
+
+ $c = $objCatList->GetItem($this->Get("CategoryId"));
+
+ if(is_object($c))
+
+ {
+
+ $ret = $c->parsetag($element->attributes["_cattag"]);
+
+ }
+
+ break;
+
+ case "priority":
+
+ if($this->Get("Priority")!=0)
+
+ {
+
+ $ret = (int)$this->Get("Priority");
+
+ }
+
+ else
+
+ $ret = "";
+
+ break;
+
+ case "link":
+
+ if(method_exists($this,"ItemURL"))
+
+ {
+
+ $ret = $this->ItemURL($element->attributes["_template"],FALSE,"");
+
+ }
+
+ break;
+
+ case "cat_link":
+
+ if(method_exists($this,"ItemURL"))
+
+ {
+
+ $ret = $this->ItemURL($element->attributes["_template"],TRUE,"");
+
+ }
+
+ break;
+
+ case "fullpath":
+
+ $ret = $this->Get("CachedNavbar");
+
+ if(!strlen($ret))
+
+ {
+
+ if(is_numeric($this->Get("CategoryId")))
+
+ {
+
+ $c = $objCatList->GetItem($this->Get("CategoryId"));
+
+ if(is_object($c))
+
+ $ret = $c->Get("CachedNavbar");
+
+ }
+
+ else
+
+ {
+
+ if(method_exists($this,"GetPrimaryCategory"))
+
+ {
+
+ $cat = $this->GetPrimaryCategory();
+
+ $c = $objCatList->GetItem($cat);
+
+ if(is_object($c))
+
+ $ret = $c->Get("CachedNavbar");
+
+ }
+
+ }
+
+ }
+
+ // $ret = $this->HighlightText($ret);
+
+ break;
+
+
+
+ case "relevance":
+
+ $style = $element->attributes["_displaymode"];
+
+ if(!strlen($style))
+
+ $style = "numerical";
+
+ switch ($style)
+
+ {
+
+ case "numerical":
+
+ $ret = (100 * LangNumber($this->Get("Relevance"),1))."%";
+
+ break;
+
+ case "bar":
+
+ $OffColor = $element->attributes["_offbackgroundcolor"];
+
+ $OnColor = $element->attributes["_onbackgroundcolor"];
+
+ $percentsOff = (int)(100 - (100 * $this->Get("Relevance"))); if ($percentsOff)
+
+ {
+
+ $percentsOn = 100 - $percentsOff;
+
+ $ret = " |  | ";
+
+ }
+
+ else
+
+ $ret = " | ";
+
+ break;
+
+ case "graphical":
+
+ $OnImage = $element->attributes["_onimage"];
+
+ if (!strlen($OnImage))
+
+ break;
+
+ // Get image extension
+
+ $image_data = explode(".", $OnImage);
+
+ $image_ext = $image_data[count($image_data)-1];
+
+ unset($image_data[count($image_data)-1]);
+
+ $rel = (10 * LangNumber($this->Get("Relevance"),1));
+
+ $OnImage1 = join(".", $image_data);
+
+
+
+ if ($rel)
+
+ $img_src = $OnImage1."_".$rel.".".$image_ext;
+
+ else
+
+ $img_src = $OnImage;
+
+
+
+ $ret = "
";
+
+ 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