Index: trunk/kernel/include/parseditem.php
===================================================================
diff -u -N
--- trunk/kernel/include/parseditem.php (revision 8104)
+++ trunk/kernel/include/parseditem.php (revision 0)
@@ -1,3144 +0,0 @@
-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())
- {
- global $objSession;
-
- if (isset($attribs['_tz'])) {
- $timezone = $attribs['_tz'] == 'auto' ? null : $objSession->Get('tz');
- $d = GetLocalTime($d, $timezone);
- }
-
- $part = isset($attribs['_part']) ? strtolower($attribs['_part']) : '';
- if ($part) {
- $ret = ExtractDatePart($part,$d);
- }
- else {
- $ret = $d <= 0 ? '' : 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 'primarycategorylink':
- $m_var_list_update['cat'] = (int)$this->GetPrimaryCategory();
- $m_var_list_update['p'] = 1;
- $ret = str_replace('advanced_view.php','browse.php',$_SERVER['PHP_SELF']).'?env='.BuildEnv();
- unset($m_var_list_update['cat']);
- unset($m_var_list_update['p']);
- return $ret;
- break;
-
- case 'primarycategory':
- $db =& GetADODBConnection();
- $ml_formatter =& $this->Application->recallObject('kMultiLanguage');
-
- $sql = 'SELECT '.$ml_formatter->LangFieldName('CachedNavbar').' FROM '.$objCatList->SourceTable.' WHERE CategoryId = '.(int)$this->GetPrimaryCategory();
- $ret = prompt_language($objConfig->Get("Root_Name"));
- if ($this->GetPrimaryCategory()) {
- $ret .= ' > '.str_replace('&|&', ' > ', $db->GetOne($sql));
- }
- break;
-
- 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 = str_replace('&|&', ' > ', $this->Get("CachedNavbar"));
- if(!strlen($ret))
- {
- if(is_numeric($this->Get("CategoryId")))
- {
- $c = $objCatList->GetItem($this->Get("CategoryId"));
- if(is_object($c))
- $ret = $c->GetNavBar();
- }
- else
- {
- if(method_exists($this,"GetPrimaryCategory"))
- {
- $cat = $this->GetPrimaryCategory();
- $c = $objCatList->GetItem($cat);
- if(is_object($c))
- $ret = $c->GetNavBar();
- }
- }
- }
- // $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->GetAttributeByName('_separator');
- }
- }
- break;
- }
- break;
- case "reviews":
- $today = FALSE;
-
- if(method_exists($this,"ReviewCount"))
- {
- if($element->GetAttributeByName("_today"))
- $today = TRUE;
- $ret = $this->ReviewCount($today);
- $ret = ($element->GetAttributeByName("_dataexists") && empty($ret))? "" : $ret;
- }
- 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->GetAttributeByName('_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"];
- $listvalue = $element->attributes["_listvalue"];
- $default = $element->attributes["_default"];
- if (strlen($field))
- $ret = $this->GetCustomFieldValue($field, $default, $listvalue);
- }
- 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;
- case 'perm':
- $cat_id = $this->GetPrimaryCategory();
- $element->attributes['_category'] = $cat_id;
- $ret = m_perm_text($element->attributes);
- 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;
- }
-
- /**
- * Sends EmailEvent to user
- *
- * @param string $EventName email event name
- * @param mixed $ToUserId recipient's user_id or email address
- * @param int $LangId language_id (not in use)
- * @param string $RecptName recipient's name (only when ID not passed)
- * @return kEvent
- */
- function SendUserEventMail($EventName,$ToUserId,$LangId=NULL,$RecptName=NULL)
- {
- $send_params = is_numeric($ToUserId) ? Array() : Array ('to_email' => $ToUserId, 'to_name' => $RecptName);
- return $this->Application->EmailEventUser($EventName, $ToUserId, $send_params);
- }
-
- function SendAdminEventMail($EventName,$LangId=NULL)
- {
- return $this->Application->EmailEventAdmin($EventName);
- }
-
- 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 = '';
-
- var $Prefix = '';
- var $Special = '';
-
- /**
- * Application object
- *
- * @var kApplication
- */
- var $Application = null;
-
- /**
- * Connection to database
- *
- * @var kDBConnection
- */
- var $Conn = null;
-
- function isLiveTable()
- {
- global $objSession;
- return !preg_match('/'.GetTablePrefix().'ses_'.$objSession->GetSessionKey().'_edit_(.*)/', $this->SourceTable);
- }
-
- 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()
- {
- if (class_exists('kApplication')) {
- // just in case when aplication is not found
- $this->Application =& kApplication::Instance();
- $this->Conn =& $this->Application->GetADODBConnection();
- }
-
- $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, $main_prefix)
- {
- $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);
- $n->Set( $n->IdField(), $ID ); // in case if no loaded set ID anyway
- $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)
- {
- if( !is_array($Field) ) $Field = Array($Field);
- if( !is_array($Value) ) $Value = Array($Value);
-
- $found = false;
- if( is_array($this->Items) )
- {
- foreach($this->Items as $i)
- {
- $sub_found = true;
- foreach($Field as $key_index => $field_name)
- {
- $sub_found = $sub_found && ( $i->Get($field_name) == $Value[$key_index] );
- }
-
- if($sub_found)
- {
- $found = true;
- break;
- }
- }
- }
-
- if( !$found && $LoadFromDB == true )
- {
- $sql = 'SELECT * FROM '.$this->SourceTable.' WHERE ';
- foreach($Field as $key_index => $field_name)
- {
- $sql .= '(`'.$field_name.'` = '.$this->adodbConnection->qstr($Value[$key_index]).') AND ';
- }
- $sql = preg_replace('/(.*) AND $/', '\\1', $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, $objConfig;
- //echo "Method QItem [".get_class($this).'], sql: ['.$sql.']
';
- $dummy =& $this->GetDummy();
- if( !$dummy->TableExists() )
- {
- if($this->debuglevel) echo "ERROR: table ".$dummy->tablename." missing.
";
- $this->Clear();
- return false;
- }
- //echo "".get_class($this)."
";
- //echo "Rows = $rows && Offset = $offset
";
- 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;
- $GLOBALS['_CopyFromEditTable']=1;
-
- $dropRelTableFlag = false;
- if($idfield == null) $idfield = $this->GetIDField();
- $edit_table = $objSession->GetEditTable($this->SourceTable);
- $sql = "SELECT * FROM $edit_table";
- $rs = $this->adodbConnection->Execute($sql);
-
- $item_ids = Array();
- 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();
- }
- $item_ids[] = $c->UniqueId(); // save item id for future use
- 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"),true);
- }
- }
- 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);
- }
- }
-
- $GLOBALS['_CopyFromEditTable']=1;
- 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();
- }
-
- $objReviews = new clsItemReviewList();
- $objReviews->PurgeEditTable();
-
- 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"));
- unset($GLOBALS['_CopyFromEditTable']);
-
- return $item_ids;
- }
-
- 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 RefreshPage($page_var, $total_items)
- {
- global $objConfig, $objSession;
-
- $this->QueryItemCount = $total_items;
-
- if ( (int)GetVar('lpn') > 0)
- {
- $this->Page = $_GET['lpn'];
- }
- elseif ($objConfig->Get($page_var))
- {
- $this->Page = $objConfig->Get($page_var);
- }
-
- if ( ($this->Page > $this->GetNumPages($this->PerPage) || $this->Page == 0) && ($this->PerPage != -1) )
- {
- $this->Page = 1;
- }
-
- $objSession->SetVariable($page_var, $this->Page);
- }
-
- 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, $DetectCategories = false)
- {
- global $objCatList;
-
- $l =& $this->GetItem($Id);
- $l->BasePermission=$this->BasePermission;
-
- if (!$DetectCategories) {
- $l->DeleteCategoryItems($objCatList->CurrentCategoryID());
- }
- else {
- $l->RemoveFromAllCategories();
- $l->Delete();
- }
- }
-
- 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 setPageFromENV()
- {
- $this->Page=$GLOBALS[$this->PageEnvar][$this->PageEnvarIndex];
- }
-
- 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, '.$this->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;
- //echo "Got PerPage: ".$this->GetPerPage()."
";
- 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()
- {
- //echo "Getting Per Page ".get_class($this)."
";
- // return category perpage
- global $objConfig;
- $PerPage = $objConfig->Get( $this->PerPageVar );
- if( !is_numeric($PerPage) ) $PerPage = $this->DefaultPerPage ? $this->DefaultPerPage : 10;
- //print_pre(debug_backtrace());
- //echo "Returning: $PerPage
";
- return $PerPage;
- }
-
- /**
- * Returns current page from env var
- *
- * @return int
- */
- function getEnvPage()
- {
- $var_name = preg_replace('/(.*)_update$/', '\\1', $this->PageEnvar);
- return $GLOBALS[$var_name]['p'];
- }
-
- 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->getEnvPage() ) $fix_method = 'set_current';
-
- if( ($this->Page > $NumPages || $this->Page == 0) && $PerPage != -1)
- {
- 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;
- case 'set_current':
- $this->Page = $this->getEnvPage();
- //echo "Move 2 Page reflected in env (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 = '', $extra_attributes = '')
- {
- global $objConfig, $var_list_update, $var_list;
-
- $url_params = $EnvSuffix ? ExtractParams($EnvSuffix) : Array();
-
- $v= $this->PageEnvar;
-
- global ${$v};
-
-// if(!strlen($page)) $page = GetIndexURL(2);
-
- $PerPage = $objConfig->Get($this->PerPageVar);
- if($PerPage < 1) $PerPage = 20;
- $NumPages = ceil( $this->GetNumPages($PerPage) );
- if($NumPages == 1 && $HideEmpty) return '';
-
- $var_list_update['t'] = isset($dest_template) && $dest_template ? $dest_template : $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 = HREF_Wrapper('', $url_params);
- $o .= '<<';
- }
-
- for($p = $StartPage; $p <= $EndPage; $p++)
- {
- if($p != $this->Page)
- {
- ${$v}[$this->PageEnvarIndex] = $p;
- $href = HREF_Wrapper('', $url_params);
- $o .= ' '.$p.' ';
- }
- else
- {
- $o .= ' '.$p.'';
- }
- }
- if($EndPage < $NumPages && $EndPage > 0)
- {
- ${$v}[$this->PageEnvarIndex] = $this->Page + $PagesToList;
-
- $next_url = HREF_Wrapper('', $url_params);
- $o .= ' >>';
- }
- unset(${$v}[$this->PageEnvarIndex],$var_list_update["t"] );
- return $o;
- }
-
- function GetAdminPageLinkList($url)
- {
- global $objConfig;
-
- $update =& $GLOBALS[$this->PageEnvar]; // env_var_update
-
- $page_backup = $update[$this->PageEnvarIndex];
-
- // 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 .= ' >>';
- }
- $update[$this->PageEnvarIndex] = $page_backup;
- 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; $x < count($this->Query_SortField); $x++)
- {
- $FieldVar = $this->Query_SortField[$x];
- $OrderVar = $this->Query_SortOrder[$x];
-
- if(is_object($objSession))
- {
- $FieldVarData = $objSession->GetPersistantVariable($FieldVar);
- //echo "FieldVar: $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="";
- //echo "ORDER BY: $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) AND ($t.Status=1)";
- }
- else
- $sql .=") AND ($t.Status=1)";
- }
- else
- $sql .="WHERE ($CatTable.CategoryId=".$cat." AND $t.Status=1) ";
-
- if($attribs["_today"])
- {
- $today = adodb_mktime(0,0,0,adodb_date("m"),adodb_date("d"),adodb_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;
-
- $where = '';
- $p = $this->BasePermission.'.VIEW';
- $t = $this->SourceTable;
- if( getArrayValue($attribs,'_today') )
- {
- $today = adodb_mktime(0,0,0,adodb_date("m"),adodb_date("d"),adodb_date("Y"));
- $where = "($t.CreatedOn>=$today)";
- }
-
- $GroupList = getArrayValue($attribs,'_grouponly') ? $objSession->Get('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)getArrayValue($attribs,'_today'), 3600);
- if(!is_numeric($cc))
- {
- $sql = $this->SqlGlobalCount($attribs);
- $ret = QueryCount($sql);
- $objCountCache->SetValue($this->CacheListType("_"),$this->ItemType,$this->CacheListExtraId("_"),(int)getArrayValue($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;
- }
-
-
- /**
- * Return all listype (from tags) to id mappings
- *
- * @return Array
- * @access private
- */
- function GetListTypes()
- {
- return Array('_' => 0, 'category' => 1, 'myitems' => 2, 'hot' => 3, 'pop' => 4, 'pick' => 5, 'favorites' => 6, 'new' => 8);
- }
-
- function CacheListType($ListType)
- {
- if(empty($ListType))
- $ListType='_';
-
- $mapping = $this->GetListTypes();
-
- return $mapping[$ListType];
- }
-
- function PerformItemCount($attribs=array())
- {
- global $objCountCache, $objSession;
-
- $ret = "";
- $sql = "";
- $ListType = getArrayValue($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(!empty($sql) && $ListType != "_")
- {
- if(is_numeric($ListTypeId) && $ListTypeId)
- {
- $cc = $objCountCache->GetValue($ListTypeId,$this->ItemType,$ExtraId,(int)getArrayValue($attribs,'_today'), 3600);
-
- if(!is_numeric($cc) || $attribs['_nocache'] == 1)
- {
- $ret = QueryCount($sql);
- $objCountCache->SetValue($ListTypeId,$this->ItemType,$ExtraId,(int)getArrayValue($attribs,'_today'),$ret);
- }
- else
- $ret = $cc;
- }
- else
- $ret = QueryCount($sql);
- }
-
- return $ret;
- }
-
- function GetJoinedSQL($PermName, $CatId=NULL, $AdditionalWhere="", $LoadOnlyPrimary = true)
- {
- 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) ";
-
- // here will come checking for PrimaryCat on search
- if ($LoadOnlyPrimary) {
- $sql .="WHERE ($acl AND PermId=$VIEW AND PrimaryCat=1 AND $CategoryTable.Status=1) ";
- }
- else {
- $sql .="WHERE ($acl AND PermId=$VIEW AND $CategoryTable.Status=1) ";
- }
-
- if(is_numeric($CatId) && $CatId > 0)
- {
- $sql .= " AND ($CategoryTable.CategoryId=$CatId) ";
- }
- if(strlen($AdditionalWhere)>0)
- {
- $sql .= "AND (".$AdditionalWhere.")";
- }
- return $sql;
- }
-
- /**
- * Not used in php files directly [comment by Alex]
- *
- * @param unknown_type $attribs
- * @return unknown
- *
- */
- 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 = adodb_mktime(0,0,0,adodb_date("m"),adodb_date("d"),adodb_date("Y"));
-
- $where = "PortalUserId=".$objSession->Get("PortalUserId")." AND $ltable.Status=1";
- $where .= " AND $favtable.Modified >= $today AND ItemTypeId=".$this->ItemType;
- $p = $this->BasePermission.".VIEW";
-
- $ml_formatter =& $this->Application->recallObject('kMultiLanguage');
- $sql = "SELECT $ltable.*,$CategoryTable.CategoryId,$CategoryTable.".$ml_formatter->LangFieldName('CachedNavBar')." AS 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 = adodb_mktime(0,0,0,adodb_date("m"),adodb_date("d"),adodb_date("Y"));
- $where .= " AND $favtable.Modified >= $today AND ItemTypeId=".$this->ItemType;
- }
- $p = $this->BasePermission.".VIEW";
-
- $ml_formatter =& $this->Application->recallObject('kMultiLanguage');
- $sql = "SELECT $ltable.*,$CategoryTable.CategoryId,$CategoryTable.".$ml_formatter->LangFieldName('CachedNavBar')." AS 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, $objConfig;
-
- $sql = $this->SqlFavorites($attribs);
-
- if($objSession->HasSystemPermission("DEBUG.LIST"))
- echo htmlentities($sql,ENT_NOQUOTES)."
\n";
- if($attribs["_shortlist"])
- {
- if ($objConfig->Get($this->PerPageShortVar) > 0) {
- $this->PerPageVar = $this->PerPageShortVar;
- }
- else {
- $this->PerPageVar = $this->PerPageVarLong;
- }
- }
- 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)getArrayValue($attribs,'_catid');
- $scope = (int)getArrayValue($attribs,'_scope');
- //$JoinCats = (int)$attribs["_catinfo"] || $scope;
-
- $TableName = $this->SourceTable;
- if($scope)
- {
- if (!$catid)
- {
- $catid = $objCatList->CurrentCategoryID();
- }
- $where = GetTablePrefix()."CategoryItems.CategoryId =".$catid." AND ".$TableName.".EditorsPick=1 AND ".$TableName.".Status=1";
- }
- else
- {
- $where = $TableName.".EditorsPick=1 AND ".$TableName.".Status=1 ";
- $catid=NULL;
- }
- if(getArrayValue($attribs,'_today'))
- {
- $today = adodb_mktime(0,0,0,adodb_date("m"),adodb_date("d"),adodb_date("Y"));
- $where .= " AND ($TableName.CreatedOn>=$today)";
- }
- $CategoryTable = GetTablePrefix()."Category";
- $ml_formatter =& $this->Application->recallObject('kMultiLanguage');
- $sql = "SELECT $TableName.*,$CategoryTable.CategoryId,$CategoryTable.".$ml_formatter->LangFieldName('CachedNavbar')." AS CachedNavBar FROM $TableName ";
- $p = $this->BasePermission.".VIEW";
- $sql .= $this->GetJoinedSQL($p,$catid,$where);
-
- $OrderBy = $this->QueryOrderByClause(TRUE,TRUE,TRUE);
- $sql .= " ".$OrderBy;
-
- //echo "SQL: $sql
";
-
- return $sql;
- }
-
- function LoadPickItems($attribs)
- {
- global $objSession, $objCountCache, $objConfig;
-
- $sql = $this->SqlPickItems($attribs);
- if($objSession->HasSystemPermission("DEBUG.LIST"))
- echo htmlentities($sql,ENT_NOQUOTES)."
\n";
-
- if($attribs["_shortlist"])
- {
- if ($objConfig->Get($this->PerPageShortVar) > 0) {
- $this->PerPageVar = $this->PerPageShortVar;
- }
- else {
- $this->PerPageVar = $this->PerPageVarLong;
- }
- }
- else
- $this->PerPageVar = $this->PerPageVarLong;
-
- $CachedCount = $objCountCache->GetValue($this->CacheListType("pick"),$this->ItemType,$this->CacheListExtraId("pick"),(int)getArrayValue($attribs,'_today'),3600);
- if(!is_numeric($CachedCount))
- {
- $this->QueryItemCount= QueryCount($sql);
- $objCountCache->SetValue($this->CacheListType("pick"),$this->ItemType,$this->CacheListExtraId("pick"),(int)getArrayValue($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(getArrayValue($attribs,'_today'))
- {
- $today = adodb_mktime(0,0,0,adodb_date("m"),adodb_date("d"),adodb_date("Y"));
- $where .= " AND ($TableName.CreatedOn>=$today)";
- }
- $CategoryTable = GetTablePrefix()."Category";
- $ml_formatter =& $this->Application->recallObject('kMultiLanguage');
- $sql = "SELECT $TableName.*,$CategoryTable.CategoryId,$CategoryTable.".$ml_formatter->LangFieldName('CachedNavbar')." AS CachedNavBar FROM $TableName ";
- $p = $this->BasePermission.".VIEW";
- $sql .= $this->GetJoinedSQL($p,null,$where); // maybe null should be replaced by some CategoryId
-
- $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"])
- {
- if ($objConfig->Get($this->PerPageShortVar) > 0) {
- $this->PerPageVar = $this->PerPageShortVar;
- }
- else {
- $this->PerPageVar = $this->PerPageVarLong;
- }
- }
- 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)getArrayValue($attribs,'_catid');
- $scope = (int)getArrayValue($attribs,'_scope');
- $show_since_last = (int)getArrayValue($attribs,'_show_since_last');
- //$JoinCats = (int)$attribs["_catinfo"] || $scope;
- //echo "Last: $scope
";
- $TableName = $this->SourceTable;
- if(getArrayValue($attribs,'_today'))
- {
- $cutoff = adodb_mktime(0,0,0,adodb_date("m"),adodb_date("d"),adodb_date("Y"));
- }
- else
- {
- if($scope)
- {
- if (!$catid)
- {
- $catid = $objCatList->CurrentCategoryID();
- }
- if (!$show_since_last) {
- $cutoff = $this->GetNewValue($catid);
- }
- else {
- $cutoff = $scope;
- }
- }
- else
- $cutoff = $this->GetNewValue();
- }
- if($scope)
- {
- if (!$catid)
- {
- $catid = $objCatList->CurrentCategoryID();
- }
-
- if (!$show_since_last) {
- $where = "CategoryId =".$catid." AND ((".$TableName.".CreatedOn >=".$cutoff." AND ".$TableName.".NewItem != 0) OR ".$TableName.".NewItem=1 ) AND ".$TableName.".Status=1 ";
- }
- else {
- $where = $TableName.".CreatedOn >=".$cutoff." 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";
- $ml_formatter =& $this->Application->recallObject('kMultiLanguage');
- $sql = "SELECT $TableName.*,$CategoryTable.CategoryId,$CategoryTable.".$ml_formatter->LangFieldName('CachedNavbar')." AS CachedNavBar FROM $TableName ";
- $p = $this->BasePermission.".VIEW";
- $sql .= $this->GetJoinedSQL($p,$catid,$where);
-
- $OrderBy = $this->QueryOrderByClause(TRUE,TRUE,TRUE);
- $sql .= " ".$OrderBy;
- //echo "SQL: $sql
";
- return $sql;
- }
-
- function LoadNewItems($attribs)
- {
- global $objSession,$objCountCache,$objConfig;
-
- $sql = $this->SqlNewItems($attribs);
-
- if($objSession->HasSystemPermission("DEBUG.LIST"))
- echo htmlentities($sql,ENT_NOQUOTES)."
\n";
- if( getArrayValue($attribs,'_shortlist') )
- {
- if ($objConfig->Get($this->PerPageShortVar) > 0) {
- $this->PerPageVar = $this->PerPageShortVar;
- }
- else {
- $this->PerPageVar = $this->PerPageVarLong;
- }
- }
- else
- $this->PerPageVar = $this->PerPageVarLong;
-
- $CachedCount = $objCountCache->GetValue($this->CacheListType("new"),$this->ItemType,$this->CacheListExtraId("new"),(int)getArrayValue($attribs,'_today'),3600);
- if(!is_numeric($CachedCount))
- {
- $this->QueryItemCount= QueryCount($sql);
- $objCountCache->SetValue($this->CacheListType("new"),$this->ItemType,$this->CacheListExtraId("new"),(int)getArrayValue($attribs,'_today'),$this->QueryItemCount);
- }
- else
- $this->QueryItemCount=$CachedCount;
-
- $ret = $this->Query_Item($sql);
- return $ret;
- }
-
- 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 = adodb_mktime(0,0,0,adodb_date("m"),adodb_date("d"),adodb_date("Y"));
- $where .= " AND ($TableName.CreatedOn>=$today)";
- }
- $CategoryTable = GetTablePrefix()."Category";
- $ml_formatter =& $this->Application->recallObject('kMultiLanguage');
- $sql = "SELECT $TableName.*,$CategoryTable.CategoryId,$CategoryTable.".$ml_formatter->LangFieldName('CachedNavbar')." AS 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"])
- {
- if ($objConfig->Get($this->PerPageShortVar) > 0) {
- $this->PerPageVar = $this->PerPageShortVar;
- }
- else {
- $this->PerPageVar = $this->PerPageVarLong;
- }
- }
- 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 = adodb_mktime(0,0,0,adodb_date("m"),adodb_date("d"),adodb_date("Y"));
- $where .= " AND ($TableName.CreatedOn>=$today)";
- }
- $CategoryTable = GetTablePrefix()."Category";
- $ml_formatter =& $this->Application->recallObject('kMultiLanguage');
- $sql = "SELECT $TableName.*,$CategoryTable.CategoryId,$CategoryTable.".$ml_formatter->LangFieldName('CachedNavbar')." AS 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"])
- {
- if ($objConfig->Get($this->PerPageShortVar) > 0) {
- $this->PerPageVar = $this->PerPageShortVar;
- }
- else {
- $this->PerPageVar = $this->PerPageVarLong;
- }
- }
- 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();
-
- $ml_formatter =& $this->Application->recallObject('kMultiLanguage');
- $sql = "SELECT $cattable.CategoryId,$cattable.".$ml_formatter->LangFieldName('CachedNavbar')." AS CachedNavbar,$ltable.*, Relevance FROM $stable ";
- $sql .= "INNER JOIN $ltable ON ($stable.ItemId=$ltable.".$i->id_field.") ";
-
- $where = "ItemType=".$this->ItemType." AND $ltable.Status=1";
-
- $load_multiple = $objConfig->Get("Search_ShowMultiple_".$attribs['multiple']);
- $LoadOnlyPrimary = true;
-
- if ($load_multiple == 1) {
- $LoadOnlyPrimary = false;
- }
-
- $sql .= $this->GetJoinedSQL($p,NULL,$where, $LoadOnlyPrimary);
- $tmp = $this->QueryOrderByClause(FALSE,TRUE,TRUE);
- //echo "TMP: $tmp
";
- //$tmp = substr($tmp,9);
- if(strlen($tmp))
- {
- $sql .= $tmp.", ";
- }
-
- $sql .= " EdPick DESC,Relevance DESC ";
- //echo "SQL Search Items: $sql
";
- 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;
- }
-
- }
-
- /**
- * Updates count cache for selected ids in list
- *
- * @param Array $item_ids
- * @access protected
- */
- function FlushCache($item_ids)
- {
- $db =& GetADODBConnection();
- if(is_array($item_ids)) $item_ids=implode(',',$item_ids);
-
- $sql = 'SELECT ResourceId FROM '.$this->SourceTable.' WHERE '.$this->GetIDField().' IN ('.$item_ids.')';
- $resource_ids=$db->GetCol($sql);
- $sql='SELECT CategoryId FROM '.GetTablePrefix().'CategoryItems WHERE ItemResourceId IN ('.implode(',',$resource_ids).')';
- $cat_ids=$db->GetCol($sql);
- UpdateCategoryCount($this->ItemType, $cat_ids, $this->GetListTypes());
- }
-
- 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, $this->GetListTypes() );
-
- }
- }
- }
- }
-
- 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