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

'.$sql.'

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

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

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

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

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

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

'.$sql.'

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

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

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

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

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

"; + $CountVal[$this->ItemType] = $this->QueryItemCount; + } + + } + + function PasteFromClipboard($TargetCat,$NameField="") + { + global $objSession,$objCatList; + + $clip = $objSession->GetVariable("ClipBoard"); + if(strlen($clip)) + { + $ClipBoard = ParseClipboard($clip); + $IsCopy = (substr($ClipBoard["command"],0,4)=="COPY") || ($ClipBoard["source"] == $TargetCat); + + $item_ids = explode(",",$ClipBoard["ids"]); + for($i=0;$iGetItem($item_ids[$i]); + if(!$IsCopy) // paste to other category then current + { + $item->MoveToCategory($ClipBoard["source"],$TargetCat); + $clip = str_replace("CUT","COPY",$clip); + $objSession->SetVariable("ClipBoard",$clip); + } + else + { + $item->CopyToNewResource($TargetCat,$NameField); // create item copy, but with new ResourceId + $item->AddToCategory($TargetCat); + UpdateCategoryCount($item->type,$TargetCat); + + } + } + } + } + + function AdminPrintItems($template) + { + // prints item listing for admin (browse/advanced view) tabs + $o = ''; + + $i = 1; + + $topleft = 0; + $topright = 0; + $rightcount = 0; + $total_items = $this->NumItems(); + $topleft = ceil($total_items / 2); + $topright = $total_items - $topleft; + + for($x = 0; $x < $topleft; $x++) + { + //printingleft + $item = $this->Items[$x]; + if ($i > 2) + { + $o .= "\n"; + $i = 1; + } + $o .= $item->AdminParseTemplate($template); + $i++; + + //printingright + if ($rightcount < $topright && ( ($x + $topleft) < $total_items) ) + { + $item = $this->Items[ $x + $topleft ]; + if ($i > 2) + { + $o.="\n"; + $i = 1; + } + $o .= $item->AdminParseTemplate($template); + $i++; + $rightcount++; + } + } + $o .= "\n
\n"; + + return $o; + } + +} + +// -------------- NEW CLASSES ----------------------- + +class DBList { + + // table related attributes + var $db = null; + var $table_name = ''; + var $LiveTable = ''; + var $EditTable = ''; + + + // record related attributes + var $records = Array(); + var $record_count = 0; + var $cur_rec = -1; // "-1" means no records, or record index otherwise + + // query related attributes + var $SelectSQL = "SELECT * FROM %s"; + + function DBList() + { + // use $this->SetTable('live', 'table name'); + // in inherited constructors to set table for list + $this->db =&GetADODBConnection(); + } + + function SetTable($action, $table_name = null) + { + // $action = {'live', 'restore','edit'} + switch($action) + { + case 'live': + $this->LiveTable = $table_name; + $this->table_name = $this->LiveTable; + break; + case 'restore': + $this->table_name = $this->LiveTable; + break; + case 'edit': + global $objSession; + $this->table_name = $objSession->GetEditTable($this->LiveTable); + break; + } + } + + function Clear() + { + // no use of this method at a time :) + $this->records = Array(); + $this->record_count = 0; + $this->cur_rec = -1; + } + + function Query() + { + // query list + $sql = sprintf($this->SelectSQL, $this->table_name); + echo "SQL: $sql
"; + $rs =& $this->db->Execute($sql); + + if( $this->db->ErrorNo() == 0 ) + { + $this->records = $rs->GetRows(); + $this->record_count = count($this->records); + //$this->cur_rec = $this->record_count ? 0 : -1; + } + else + return false; + } + + function ProcessList($callback_method) + { + // process list using user-defined method called + // with one parameter - current record fields + // (associative array) + if($this->record_count > 0) + { + $this->cur_rec = 0; + while($this->cur_rec < $this->record_count) + { + if( method_exists($this, $callback_method) ) + $this->$callback_method( $this->GetCurrent() ); + $this->cur_rec++; + } + } + } + + function &GetCurrent() + { + // return currently processed record (with change ability) + return ($this->cur_rec != -1) ? $this->records[$this->cur_rec] : false; + } + + function GetDBField($field_name) + { + $rec =& $this->GetCurrent(); + return is_array($rec) && isset($rec[$field_name]) ? $rec[$field_name] : false; + } +} + + +?>