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

'.$sql.'

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

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

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

\n"; - $rs = $this->adodbConnection->Execute($sql); - $ret = ""; - if($rs && !$rs->EOF) - $ret = (int)$rs->fields["MyCount"]; - return $ret; - } - - function SqlGlobalCount($attribs=array()) - { - global $objSession; - - $where = ''; - $p = $this->BasePermission.'.VIEW'; - $t = $this->SourceTable; - if( getArrayValue($attribs,'_today') ) - { - $today = adodb_mktime(0,0,0,adodb_date("m"),adodb_date("d"),adodb_date("Y")); - $where = "($t.CreatedOn>=$today)"; - } - - $GroupList = getArrayValue($attribs,'_grouponly') ? $objSession->Get('GroupList') : null; - $sql = $this->GetCountSQL($p,NULL,$GroupList,$where); - return $sql; - } - - function DoGlobalCount($attribs) - { - global $objCountCache; - - $cc = $objCountCache->GetValue($this->CacheListType("_"),$this->ItemType,$this->CacheListExtraId("_"),(int)getArrayValue($attribs,'_today'), 3600); - if(!is_numeric($cc)) - { - $sql = $this->SqlGlobalCount($attribs); - $ret = QueryCount($sql); - $objCountCache->SetValue($this->CacheListType("_"),$this->ItemType,$this->CacheListExtraId("_"),(int)getArrayValue($attribs,'_today'),$ret); - } - else - $ret = $cc; - return $ret; - } - - - function CacheListExtraId($ListType) - { - global $objSession; - - if(!strlen($ListType)) - $ListType="_"; - switch($ListType) - { - case "_": - $ExtraId = $objSession->Get("GroupList"); - break; - case "category": - $ExtraId = $objSession->Get("GroupList"); - break; - case "myitems": - $ExtraId = $objSession->Get("PortalUserId"); - break; - case "hot": - $ExtraId = $objSession->Get("GroupList"); - break; - case "pop": - $ExtraId = $objSession->Get("GroupList"); - break; - case "pick": - $ExtraId = $objSession->Get("GroupList"); - break; - case "favorites": - $ExtraId = $objSession->Get("PortalUserId"); - break; - case "new": - $ExtraId = $objSession->Get("GroupList"); - break; - } - return $ExtraId; - } - - - /** - * Return all listype (from tags) to id mappings - * - * @return Array - * @access private - */ - function GetListTypes() - { - return Array('_' => 0, 'category' => 1, 'myitems' => 2, 'hot' => 3, 'pop' => 4, 'pick' => 5, 'favorites' => 6, 'new' => 8); - } - - function CacheListType($ListType) - { - if(empty($ListType)) - $ListType='_'; - - $mapping = $this->GetListTypes(); - - return $mapping[$ListType]; - } - - function PerformItemCount($attribs=array()) - { - global $objCountCache, $objSession; - - $ret = ""; - $sql = ""; - $ListType = getArrayValue($attribs,'_listtype'); - if(!strlen($ListType)) - $ListType="_"; - - $ListTypeId = $this->CacheListType($ListType); - //echo "ListType: $ListType ($ListTypeId)
\n"; - $ExtraId = $this->CacheListExtraId($ListType); - switch($ListType) - { - case "_": - $ret = $this->DoGlobalCount($attribs); - break; - case "category": - $ret = $this->CategoryCount($attribs); - break; - case "myitems": - $sql = $this->SqlMyItems($attribs); - break; - case "hot": - $sql = $this->SqlHotItems($attribs); - break; - case "pop": - $sql = $this->SqlPopItems($attribs); - break; - case "pick": - $sql = $this->SqlPickItems($attribs); - break; - case "favorites": - $sql = $this->SqlFavorites($attribs); - break; - case "search": - $sql = $this->SqlSearchItems($attribs); - break; - case "new": - $sql = $this->SqlNewItems($attribs); - break; - } - //echo "SQL: $sql
"; - if(!empty($sql) && $ListType != "_") - { - if(is_numeric($ListTypeId) && $ListTypeId) - { - $cc = $objCountCache->GetValue($ListTypeId,$this->ItemType,$ExtraId,(int)getArrayValue($attribs,'_today'), 3600); - - if(!is_numeric($cc) || $attribs['_nocache'] == 1) - { - $ret = QueryCount($sql); - $objCountCache->SetValue($ListTypeId,$this->ItemType,$ExtraId,(int)getArrayValue($attribs,'_today'),$ret); - } - else - $ret = $cc; - } - else - $ret = QueryCount($sql); - } - - return $ret; - } - - function GetJoinedSQL($PermName, $CatId=NULL, $AdditionalWhere="", $LoadOnlyPrimary = true) - { - global $objSession, $objPermissions; - - $ltable = $this->SourceTable; - $acl = $objSession->GetACLClause(); - $cattable = GetTablePrefix()."CategoryItems"; - $CategoryTable = GetTablePrefix()."Category"; - $ptable = GetTablePrefix()."PermCache"; - $VIEW = $objPermissions->GetPermId($PermName); - $sql ="INNER JOIN $cattable ON ($cattable.ItemResourceId=$ltable.ResourceId) "; - $sql .="INNER JOIN $CategoryTable ON ($CategoryTable.CategoryId=$cattable.CategoryId) "; - $sql .= "INNER JOIN $ptable ON ($cattable.CategoryId=$ptable.CategoryId) "; - - // here will come checking for PrimaryCat on search - if ($LoadOnlyPrimary) { - $sql .="WHERE ($acl AND PermId=$VIEW AND PrimaryCat=1 AND $CategoryTable.Status=1) "; - } - else { - $sql .="WHERE ($acl AND PermId=$VIEW AND $CategoryTable.Status=1) "; - } - - if(is_numeric($CatId) && $CatId > 0) - { - $sql .= " AND ($CategoryTable.CategoryId=$CatId) "; - } - if(strlen($AdditionalWhere)>0) - { - $sql .= "AND (".$AdditionalWhere.")"; - } - return $sql; - } - - /** - * Not used in php files directly [comment by Alex] - * - * @param unknown_type $attribs - * @return unknown - * - */ - function CountFavorites($attribs) - { - if($attribs["_today"]) - { - global $objSession, $objConfig, $objPermissions; - - $acl = $objSession->GetACLClause(); - $favtable = GetTablePrefix()."Favorites"; - $ltable = $this->SourceTable; - $cattable = GetTablePrefix()."CategoryItems"; - $CategoryTable = GetTablePrefix()."Category"; - $ptable = GetTablePrefix()."PermCache"; - $today = adodb_mktime(0,0,0,adodb_date("m"),adodb_date("d"),adodb_date("Y")); - - $where = "PortalUserId=".$objSession->Get("PortalUserId")." AND $ltable.Status=1"; - $where .= " AND $favtable.Modified >= $today AND ItemTypeId=".$this->ItemType; - $p = $this->BasePermission.".VIEW"; - - $ml_formatter =& $this->Application->recallObject('kMultiLanguage'); - $sql = "SELECT $ltable.*,$CategoryTable.CategoryId,$CategoryTable.".$ml_formatter->LangFieldName('CachedNavBar')." AS CachedNavBar FROM $favtable INNER JOIN $ltable ON ($favtable.ResourceId=$ltable.ResourceId) "; - $sql .= $this->GetJoinedSQL($p,NULL,$where); - $ret = QueryCount($sql); - } - else - { - if (!$this->ListType == "favorites") - { - $this->ListType = "favorites"; - $this->LoadFavorites($attribs); - $ret = $this->QueryItemCount; - } - else - $ret = $this->QueryItemCount; - } - return $ret; - } - - - - function CountPickItems($attribs) - { - if (!$this->ListType == "pick") - { - $this->ListType = "pick"; - $this->LoadPickItems($attribs); - $ret = $this->QueryItemCount; - } - else - $ret = $this->QueryItemCount; - - return $ret; - } - - function CountMyItems($attribs) - { - if (!$this->ListType == "myitems") - { - $this->ListType = "myitems"; - $this->LoadMyItems($attribs); - $ret = $this->QueryItemCount; - } - else - $ret = $this->QueryItemCount; - - return $ret; - } - - function CountHotItems($attribs) - { - if (!$this->ListType == "hotitems") - { - $this->ListType = "hotitems"; - $this->LoadHotItems($attribs); - $ret = $this->QueryItemCount; - } - else - $ret = $this->QueryItemCount; - - return $ret; - } - - function CountNewItems($attribs) - { - if (!$this->ListType == "newitems") - { - $this->ListType = "newitems"; - $this->LoadNewItems($attribs); - $ret = $this->QueryItemCount; - } - else - $ret = $this->QueryItemCount; - - return $ret; - } - - function CountPopItems($attribs) - { - if (!$this->ListType == "popitems") - { - $this->ListType = "popitems"; - $this->LoadPopItems($attribs); - $ret = $this->QueryItemCount; - } - else - $ret = $this->QueryItemCount; - - return $ret; - } - - - function CountSearchItems($attribs) - { - if (!$this->ListType == "search") - { - $this->ListType = "search"; - $this->LoadSearchItems($attribs); - $ret = $this->QueryItemCount; - } - else - $ret = $this->QueryItemCount; - - return $ret; - } - - function SqlFavorites($attribs) - { - global $objSession, $objConfig, $objPermissions; - - $acl = $objSession->GetACLClause(); - $favtable = GetTablePrefix()."Favorites"; - $ltable = $this->SourceTable; - $cattable = GetTablePrefix()."CategoryItems"; - $CategoryTable = GetTablePrefix()."Category"; - $ptable = GetTablePrefix()."PermCache"; - - $where = "PortalUserId=".$objSession->Get("PortalUserId")." AND $ltable.Status=1"; - if($attribs["_today"]) - { - $today = adodb_mktime(0,0,0,adodb_date("m"),adodb_date("d"),adodb_date("Y")); - $where .= " AND $favtable.Modified >= $today AND ItemTypeId=".$this->ItemType; - } - $p = $this->BasePermission.".VIEW"; - - $ml_formatter =& $this->Application->recallObject('kMultiLanguage'); - $sql = "SELECT $ltable.*,$CategoryTable.CategoryId,$CategoryTable.".$ml_formatter->LangFieldName('CachedNavBar')." AS CachedNavBar FROM $favtable INNER JOIN $ltable ON ($favtable.ResourceId=$ltable.ResourceId) "; - $sql .= $this->GetJoinedSQL($p,NULL,$where); - - - $OrderBy = $this->QueryOrderByClause(TRUE,TRUE,TRUE); - $sql .= " ".$OrderBy; - return $sql; - } - - function LoadFavorites($attribs) - { - global $objSession, $objCountCache, $objConfig; - - $sql = $this->SqlFavorites($attribs); - - if($objSession->HasSystemPermission("DEBUG.LIST")) - echo htmlentities($sql,ENT_NOQUOTES)."
\n"; - if($attribs["_shortlist"]) - { - if ($objConfig->Get($this->PerPageShortVar) > 0) { - $this->PerPageVar = $this->PerPageShortVar; - } - else { - $this->PerPageVar = $this->PerPageVarLong; - } - } - else - $this->PerPageVar = $this->PerPageVarLong; - - $CachedCount = $objCountCache->GetValue($this->CacheListType("favorites"),$this->ItemType,$this->CacheListExtraId("favorites"),(int)$attribs["_today"],3600); - if(!is_numeric($CachedCount)) - { - $this->QueryItemCount = QueryCount($sql); - $objCountCache->SetValue($this->CacheListType("favorites"),$this->ItemType,$this->CacheListExtraId("favorites"),(int)$attribs["_today"],$this->QueryItemCount); - } - else - $this->QueryItemCount = (int)$CachedCount; - - return $this->Query_Item($sql); - } - - function SqlPickItems($attribs) - { - global $objSession, $objCatList; - - $catid = (int)getArrayValue($attribs,'_catid'); - $scope = (int)getArrayValue($attribs,'_scope'); - //$JoinCats = (int)$attribs["_catinfo"] || $scope; - - $TableName = $this->SourceTable; - if($scope) - { - if (!$catid) - { - $catid = $objCatList->CurrentCategoryID(); - } - $where = GetTablePrefix()."CategoryItems.CategoryId =".$catid." AND ".$TableName.".EditorsPick=1 AND ".$TableName.".Status=1"; - } - else - { - $where = $TableName.".EditorsPick=1 AND ".$TableName.".Status=1 "; - $catid=NULL; - } - if(getArrayValue($attribs,'_today')) - { - $today = adodb_mktime(0,0,0,adodb_date("m"),adodb_date("d"),adodb_date("Y")); - $where .= " AND ($TableName.CreatedOn>=$today)"; - } - $CategoryTable = GetTablePrefix()."Category"; - $ml_formatter =& $this->Application->recallObject('kMultiLanguage'); - $sql = "SELECT $TableName.*,$CategoryTable.CategoryId,$CategoryTable.".$ml_formatter->LangFieldName('CachedNavbar')." AS CachedNavBar FROM $TableName "; - $p = $this->BasePermission.".VIEW"; - $sql .= $this->GetJoinedSQL($p,$catid,$where); - - $OrderBy = $this->QueryOrderByClause(TRUE,TRUE,TRUE); - $sql .= " ".$OrderBy; - - //echo "SQL: $sql
"; - - return $sql; - } - - function LoadPickItems($attribs) - { - global $objSession, $objCountCache, $objConfig; - - $sql = $this->SqlPickItems($attribs); - if($objSession->HasSystemPermission("DEBUG.LIST")) - echo htmlentities($sql,ENT_NOQUOTES)."
\n"; - - if($attribs["_shortlist"]) - { - if ($objConfig->Get($this->PerPageShortVar) > 0) { - $this->PerPageVar = $this->PerPageShortVar; - } - else { - $this->PerPageVar = $this->PerPageVarLong; - } - } - else - $this->PerPageVar = $this->PerPageVarLong; - - $CachedCount = $objCountCache->GetValue($this->CacheListType("pick"),$this->ItemType,$this->CacheListExtraId("pick"),(int)getArrayValue($attribs,'_today'),3600); - if(!is_numeric($CachedCount)) - { - $this->QueryItemCount= QueryCount($sql); - $objCountCache->SetValue($this->CacheListType("pick"),$this->ItemType,$this->CacheListExtraId("pick"),(int)getArrayValue($attribs,'_today'),$this->QueryItemCount); - } - else - $this->QueryItemCount=$CachedCount; - - return $this->Query_Item($sql); - } - - function SqlMyItems($attribs= array()) - { - global $objSession; - - $TableName = $this->SourceTable; - $where = " ".$TableName.".Status>-1 AND ".$TableName.".CreatedById=".$objSession->Get("PortalUserId"); - if(getArrayValue($attribs,'_today')) - { - $today = adodb_mktime(0,0,0,adodb_date("m"),adodb_date("d"),adodb_date("Y")); - $where .= " AND ($TableName.CreatedOn>=$today)"; - } - $CategoryTable = GetTablePrefix()."Category"; - $ml_formatter =& $this->Application->recallObject('kMultiLanguage'); - $sql = "SELECT $TableName.*,$CategoryTable.CategoryId,$CategoryTable.".$ml_formatter->LangFieldName('CachedNavbar')." AS CachedNavBar FROM $TableName "; - $p = $this->BasePermission.".VIEW"; - $sql .= $this->GetJoinedSQL($p,null,$where); // maybe null should be replaced by some CategoryId - - $OrderBy = $this->QueryOrderByClause(TRUE,TRUE,TRUE); - $sql .= " ".$OrderBy; - - return $sql; - } - - function LoadMyItems($attribs=array()) - { - global $objSession,$objCountCache; - $sql = $this->SqlMyItems($attribs); - if($objSession->HasSystemPermission("DEBUG.LIST")) - echo htmlentities($sql,ENT_NOQUOTES)."
\n"; - if($attribs["_shortlist"]) - { - if ($objConfig->Get($this->PerPageShortVar) > 0) { - $this->PerPageVar = $this->PerPageShortVar; - } - else { - $this->PerPageVar = $this->PerPageVarLong; - } - } - else - $this->PerPageVar = $this->PerPageVarLong; - - $CachedCount = $objCountCache->GetValue($this->CacheListType("myitems"),$this->ItemType,$this->CacheListExtraId("myitems"),(int)$attribs["_today"],3600); - if(!is_numeric($CachedCount)) - { - $this->QueryItemCount= QueryCount($sql); - $objCountCache->SetValue($this->CacheListType("myitems"),$this->ItemType,$this->CacheListExtraId("myitems"),(int)$attribs["_today"],$this->QueryItemCount); - } - else - $this->QueryItemCount=$CachedCount; - - return $this->Query_Item($sql); - } - - function SqlNewItems($attribs = array()) - { - global $objSession, $objCatList; - - $catid = (int)getArrayValue($attribs,'_catid'); - $scope = (int)getArrayValue($attribs,'_scope'); - $show_since_last = (int)getArrayValue($attribs,'_show_since_last'); - //$JoinCats = (int)$attribs["_catinfo"] || $scope; - //echo "Last: $scope

"; - $TableName = $this->SourceTable; - if(getArrayValue($attribs,'_today')) - { - $cutoff = adodb_mktime(0,0,0,adodb_date("m"),adodb_date("d"),adodb_date("Y")); - } - else - { - if($scope) - { - if (!$catid) - { - $catid = $objCatList->CurrentCategoryID(); - } - if (!$show_since_last) { - $cutoff = $this->GetNewValue($catid); - } - else { - $cutoff = $scope; - } - } - else - $cutoff = $this->GetNewValue(); - } - if($scope) - { - if (!$catid) - { - $catid = $objCatList->CurrentCategoryID(); - } - - if (!$show_since_last) { - $where = "CategoryId =".$catid." AND ((".$TableName.".CreatedOn >=".$cutoff." AND ".$TableName.".NewItem != 0) OR ".$TableName.".NewItem=1 ) AND ".$TableName.".Status=1 "; - } - else { - $where = $TableName.".CreatedOn >=".$cutoff." AND ".$TableName.".Status=1 "; - } - } - else - { - $where = "((".$TableName.".CreatedOn >=".$this->GetNewValue()." AND ".$TableName.".NewItem != 0) OR ".$TableName.".NewItem=1 ) AND ".$TableName.".Status=1 "; - } - - $CategoryTable = GetTablePrefix()."Category"; - $ml_formatter =& $this->Application->recallObject('kMultiLanguage'); - $sql = "SELECT $TableName.*,$CategoryTable.CategoryId,$CategoryTable.".$ml_formatter->LangFieldName('CachedNavbar')." AS CachedNavBar FROM $TableName "; - $p = $this->BasePermission.".VIEW"; - $sql .= $this->GetJoinedSQL($p,$catid,$where); - - $OrderBy = $this->QueryOrderByClause(TRUE,TRUE,TRUE); - $sql .= " ".$OrderBy; - //echo "SQL: $sql

"; - return $sql; - } - - function LoadNewItems($attribs) - { - global $objSession,$objCountCache,$objConfig; - - $sql = $this->SqlNewItems($attribs); - - if($objSession->HasSystemPermission("DEBUG.LIST")) - echo htmlentities($sql,ENT_NOQUOTES)."
\n"; - if( getArrayValue($attribs,'_shortlist') ) - { - if ($objConfig->Get($this->PerPageShortVar) > 0) { - $this->PerPageVar = $this->PerPageShortVar; - } - else { - $this->PerPageVar = $this->PerPageVarLong; - } - } - else - $this->PerPageVar = $this->PerPageVarLong; - - $CachedCount = $objCountCache->GetValue($this->CacheListType("new"),$this->ItemType,$this->CacheListExtraId("new"),(int)getArrayValue($attribs,'_today'),3600); - if(!is_numeric($CachedCount)) - { - $this->QueryItemCount= QueryCount($sql); - $objCountCache->SetValue($this->CacheListType("new"),$this->ItemType,$this->CacheListExtraId("new"),(int)getArrayValue($attribs,'_today'),$this->QueryItemCount); - } - else - $this->QueryItemCount=$CachedCount; - - $ret = $this->Query_Item($sql); - return $ret; - } - - function SqlPopItems($attribs) - { - global $objSession, $objCatList; - - $catid = (int)$attribs["_catid"]; - $scope = (int)$attribs["_scope"]; - //$JoinCats = (int)$attribs["_catinfo"] || $scope; - - $TableName = $this->SourceTable; - - if($scope) - { - if (!$catid) - { - $catid = $objCatList->CurrentCategoryID(); - } - $where = "CategoryId =".$catid." AND ((".$TableName.".Hits >=".$this->GetLinkPopValue()." AND ".$TableName.".PopItem !=0) OR ".$TableName.".PopItem=1) AND ".$TableName.".Status=1"; - } - else - { - $where = "((".$TableName.".CachedRating >=".$this->GetPopValue()." AND ".$TableName.".PopItem !=0 ) OR ".$TableName.".PopItem=1) AND ".$TableName.".Status=1 "; - - $where = "((".$TableName.".Hits >=".$this->GetPopValue()." AND ".$TableName.".PopItem !=0) OR ".$TableName.".PopItem=1) AND ".$TableName.".Status=1 "; - } - if($attribs["_today"]) - { - $today = adodb_mktime(0,0,0,adodb_date("m"),adodb_date("d"),adodb_date("Y")); - $where .= " AND ($TableName.CreatedOn>=$today)"; - } - $CategoryTable = GetTablePrefix()."Category"; - $ml_formatter =& $this->Application->recallObject('kMultiLanguage'); - $sql = "SELECT $TableName.*,$CategoryTable.CategoryId,$CategoryTable.".$ml_formatter->LangFieldName('CachedNavbar')." AS CachedNavBar FROM $TableName "; - $p = $this->BasePermission.".VIEW"; - $sql .= $this->GetJoinedSQL($p,$catid,$where); - - $OrderBy = $this->QueryOrderByClause(TRUE,TRUE,TRUE); - $sql .= " ".$OrderBy; - - return $sql; - } - - function LoadPopItems($attribs) - { - global $objSession,$objCountCache; - $sql = $this->SqlPopItems($attribs); - - if($objSession->HasSystemPermission("DEBUG.LIST")) - echo htmlentities($sql,ENT_NOQUOTES)."
\n"; - if($attribs["_shortlist"]) - { - if ($objConfig->Get($this->PerPageShortVar) > 0) { - $this->PerPageVar = $this->PerPageShortVar; - } - else { - $this->PerPageVar = $this->PerPageVarLong; - } - } - else - $this->PerPageVar = $this->PerPageVarLong; - - $CachedCount = $objCountCache->GetValue($this->CacheListType("pop"),$this->ItemType,$this->CacheListExtraId("pop"),(int)$attribs["_today"],3600); - if(!is_numeric($CachedCount)) - { - $this->QueryItemCount= QueryCount($sql); - $objCountCache->SetValue($this->CacheListType("pop"),$this->ItemType,$this->CacheListExtraId("pop"),(int)$attribs["_today"],$this->QueryItemCount); - } - else - $this->QueryItemCount=$CachedCount; - - return $this->Query_Item($sql); - } - - function SqlHotItems($attribs) - { - global $objSession, $objCatList; - - $catid = (int)$attribs["_catid"]; - $scope = (int)$attribs["_scope"]; - -// $JoinCats = (int)$attribs["_catinfo"] || $scope; - - $TableName = $this->SourceTable; - - $OrderBy = $TableName.".CachedRating DESC"; - - if($scope) - { - if (!$catid) - { - $catid = $objCatList->CurrentCategoryID(); - } - $where = "CategoryId =".$catid." AND ((".$TableName.".CachedRating >=".$this->GetHotValue()." AND ".$TableName.".PopItem !=0) OR ".$TableName.".PopItem=1) AND ".$TableName.".Status=1"; - } - else - { - $where = "((".$TableName.".CachedRating >=".$this->GetPopValue()." AND ".$TableName.".PopItem !=0 ) OR ".$TableName.".PopItem=1) AND ".$TableName.".Status=1 "; - } - - if($attribs["_today"]) - { - $today = adodb_mktime(0,0,0,adodb_date("m"),adodb_date("d"),adodb_date("Y")); - $where .= " AND ($TableName.CreatedOn>=$today)"; - } - $CategoryTable = GetTablePrefix()."Category"; - $ml_formatter =& $this->Application->recallObject('kMultiLanguage'); - $sql = "SELECT $TableName.*,$CategoryTable.CategoryId,$CategoryTable.".$ml_formatter->LangFieldName('CachedNavbar')." AS CachedNavBar FROM $TableName "; - $p = $this->BasePermission.".VIEW"; - $CatId = !$scope? NULL : $catid; - $sql .= $this->GetJoinedSQL($p,$CatId,$where); - - if(strlen($OrderBy)) - $sql .= " ORDER BY $OrderBy "; - - return $sql; - } - - function LoadHotItems($attribs) - { - global $objSession,$objCountCache; - - $sql = $this->SqlHotItems($attribs); - if($objSession->HasSystemPermission("DEBUG.LIST")) - echo htmlentities($sql,ENT_NOQUOTES)."
\n"; - - if($attribs["_shortlist"]) - { - if ($objConfig->Get($this->PerPageShortVar) > 0) { - $this->PerPageVar = $this->PerPageShortVar; - } - else { - $this->PerPageVar = $this->PerPageVarLong; - } - } - else - $this->PerPageVar = $this->PerPageVarLong; - - $CachedCount = $objCountCache->GetValue($this->CacheListType("hot"),$this->ItemType,$this->CacheListExtraId("hot"),(int)$attribs["_today"], 0); - if(!is_numeric($CachedCount)) - { - $this->QueryItemCount= QueryCount($sql); - $objCountCache->SetValue($this->CacheListType("hot"),$this->ItemType,$this->CacheListExtraId("hot"),(int)$attribs["_today"],$this->QueryItemCount); - } - else - $this->QueryItemCount=$CachedCount; - - return $this->Query_Item($sql); - } - - function SqlSearchItems($attribs = array()) - { - global $objConfig, $objItemTypes, $objSession, $objPermissions, $CountVal; - - $acl = $objSession->GetACLClause(); - $this->Clear(); - //$stable = "ses_".$objSession->GetSessionKey()."_Search"; - $stable = $objSession->GetSearchTable(); - $ltable = $this->SourceTable; - $catitems = GetTablePrefix()."CategoryItems"; - $cattable = GetTablePrefix()."Category"; - $ptable = GetTablePrefix()."PermCache"; - $p = $this->BasePermission.".VIEW"; - $i = new $this->classname(); - - $ml_formatter =& $this->Application->recallObject('kMultiLanguage'); - $sql = "SELECT $cattable.CategoryId,$cattable.".$ml_formatter->LangFieldName('CachedNavbar')." AS CachedNavbar,$ltable.*, Relevance FROM $stable "; - $sql .= "INNER JOIN $ltable ON ($stable.ItemId=$ltable.".$i->id_field.") "; - - $where = "ItemType=".$this->ItemType." AND $ltable.Status=1"; - - $load_multiple = $objConfig->Get("Search_ShowMultiple_".$attribs['multiple']); - $LoadOnlyPrimary = true; - - if ($load_multiple == 1) { - $LoadOnlyPrimary = false; - } - - $sql .= $this->GetJoinedSQL($p,NULL,$where, $LoadOnlyPrimary); - $tmp = $this->QueryOrderByClause(FALSE,TRUE,TRUE); - //echo "TMP: $tmp
"; - //$tmp = substr($tmp,9); - if(strlen($tmp)) - { - $sql .= $tmp.", "; - } - - $sql .= " EdPick DESC,Relevance DESC "; - //echo "SQL Search Items: $sql

"; - return $sql; - } - - function LoadSearchItems($attribs = array()) - { - global $CountVal, $objSession; - //echo "Loading ".get_class($this)." Search Items
"; - $sql = $this->SqlSearchItems($attribs); - //echo "$sql
"; - $this->Query_Item($sql); - $Keywords = GetKeywords($objSession->GetVariable("Search_Keywords")); - //echo "SQL Loaded ItemCount (".get_class($this).'): '.$this->NumItems().'
'; - for($i = 0; $i < $this->NumItems(); $i++) - { - $this->Items[$i]->Keywords = $Keywords; - } - if(is_numeric($CountVal[$this->ItemType])) - { - $this->QueryItemCount = $CountVal[$this->ItemType]; - //echo "CACHE:
"; print_r($CountVal); echo "

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

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