<?php require($pathtoroot.$admin."/listview/columnheader.php"); require($pathtoroot.$admin."/listview/viewmenu.php"); class clsListView { var $Formatters = Array(); // formatters to apply while printing list var $ColumnHeaders; var $ToolBar; var $ListItems; var $PageLinkTemplate; var $PerPageVar; var $CurrentPageVar; var $CurrentPage; var $TotalItemCount; var $SortField; var $SortOrder; var $IdField; var $PrintToolBar=TRUE; var $ShowColumnHeaders=TRUE; var $checkboxes=TRUE; var $SelectorType; var $CheckboxName; var $CheckArray; var $RowIcons; var $SearchBar=FALSE; var $SearchKeywords; var $SearchAction; var $SearchDropdownId=""; var $PageLinks; var $extra_env; var $PriorityField; var $PageURL; var $ViewMenu; var $JSCheckboxName; function clsListView($ToolBar=NULL,$ListItems=NULL) { $this->SetToolBar($ToolBar); $this->SetListItems($ListItems); $this->ColumnHeaders = new clsColumnHeaderList(); $this->CurrentPage=1; $this->CheckboxName = "itemlist[]"; $this->SelectorType="checkbox"; $this->RowIcons = array(); $this->PageLinks = ""; $this->SearchAction = ""; $this->extra_env=""; $this->PriorityField="Priority"; $this->TotalItemCount = 0; if (!is_null($ToolBar)) $this->JSCheckboxName = $ToolBar->Get("CheckClass"); $this->SetFormatters(); // for setting custom formatters } function SetToolbar($ToolBar) { $this->ToolBar=$ToolBar; if(is_object($this->ToolBar)) $this->CheckArray=$this->ToolBar->Get("CheckClass"); } function GetPage() { // get current page $this->RefreshPageVar(); return $this->CurrentPage; } function GetLimitSQL() { return GetLimitSQL($this->GetPage(), $this->GetPerPage() ); } function SetListItems($ListItems) { $this->ListItems = $ListItems; } function SetIDfield($field) { $this->IdField = $field; } function SetSort($SortField,$SortOrderVariable) { $this->ColumnHeaders->SetSort($SortField,$SortOrder); } function SetRowIcon($index,$url) { $this->RowIcons[$index] = $url; } function ConfigureViewMenu($SortFieldVar,$SortOrderVar,$DefaultSort,$FilterVar,$FilterValue,$FilterMax) { global $objConfig; //$FilterVal = $this->CurrentFilter; //$fMax = $this->Filtermax; //$sOrder = $this->CurrentSortOrder; //$sOrderVar = $this->OrderVar; //$sField = $this->CurrentSortField; //$sDefault = $this->DefaultSortField; $this->ViewMenu = new clsViewMenu(); $this->ViewMenu->PerPageVar = $this->PerPageVar; $this->ViewMenu->PerPageValue = (int)$objConfig->Get($this->PerPageVar); if($this->ViewMenu->PerPageValue==0) $this->ViewMenu->PerPageValue = 20; $this->ViewMenu->CurrentSortField = $objConfig->Get($SortFieldVar); $this->ViewMenu->CurrentSortOrder = $objConfig->get($SortOrderVar); $this->ViewMenu->SortVar = $SortFieldVar; $this->ViewMenu->OrderVar = $SortOrderVar; $this->ViewMenu->CurrentFilter= $FilterValue; $this->ViewMenu->FilterVar = $FilterVar; $this->ViewMenu->FilterMax = $FilterMax; foreach($this->ColumnHeaders->Columns as $col) { $this->ViewMenu->AddSortField($col->field,$col->label,$DefaultSort==$col->field); } } function AddViewMenuFilter($Label,$Bit) { if(is_object($this->ViewMenu)) $this->ViewMenu->AddFilterField($Label,$Bit); } function GetViewMenu($imagesURL) { if(is_object($this->ViewMenu)) { $this->ViewMenu->CheckboxName = $this->JSCheckboxName; return $this->ViewMenu->GetViewMenuJS($imagesURL); } else return ""; } function SetFormatters() { // for setting custom formatters // abstract } function SetFormatter($field, $type, $params) { // by Alex // all params after 2nd are formmater type specific $this->Formatters[$field]['type'] = $type; switch($type) { case FT_OPTION: $this->Formatters[$field]['options'] = $params; break; } } function PrintItem($index) { if( !isset($this->ListItems->Items[$index]) ) return ''; $li = $this->ListItems->Items[$index]; $o = ""; $first=1; if(is_object($li)) { // ==== new by Alex: begin ==== $li->Formatters =& $this->Formatters; // ==== new by Alex: end ==== $id_field = $this->IdField; $row_id = $li->Get($id_field); if(is_numeric($li->Get($this->PriorityField))) { $Priority = (int)$li->Get($this->PriorityField); } else $Priority=0; $o = "<TR ".int_table_color_ret()." ID=\"$row_id\">\n"; foreach($this->ColumnHeaders->Columns as $col) { $width=""; $ColId = $row_id."_col_".$col->field; if($first==1) { if(strlen($col->width)) { $width = $col->width; } $o .= "<TD $width valign=\"top\" class=\"text\">"; if($this->checkboxes) { $onclick = "onclick=\"if (this.checked) {".$this->CheckArray.".addCheck('$row_id');} else {".$this->CheckArray.".removeCheck('$row_id');}\""; $onclicksrc = "onclicksrc=\"if (this.checked) {".$this->CheckArray.".addCheck('$row_id');} else {".$this->CheckArray.".removeCheck('$row_id');}\""; $o .= "<input rowId='".$row_id."' checkArrayName='".$this->CheckArray."' isSelector=\"true\" type=\"".$this->SelectorType."\" name=\"".$this->CheckboxName."\" value=\"$row_id\" $onclick $onclicksrc>"; } if(isset($this->RowIcons[$index])) { $url = $this->RowIcons[$index]; if(strlen($url)) $o .= "<img src=\"".$url."\"> "; } $first=0; } else { if(strlen($col->width)) { $o .= "<TD ".$col->width.">"; } else $o .= "<TD>"; } if($Priority!=0) { $o .= "<span class=\"priority\"><sup>$Priority</sup></span>"; $Priority=0; } $o .= "<SPAN ID=\"$ColId\">".stripslashes($li->GetFormatted($col->field))."</SPAN></TD>\n"; } $o .= "</TR>\n"; } return $o; } function PrintItems() { $o = ''; $numitems = $this->ListItems->NumItems(); for($index=0;$index<=$numitems;$index++) { $o .= $this->PrintItem($index); } return $o; } function TotalPageNumbers() { if($this->PerPage>0) { $ret = $this->ListItems->NumItems() / $this->PerPage; $ret = (int)$ret; } else $ret = 1; return $ret; } function GetPerPage() { global $objConfig; $PerPage = $objConfig->Get($this->PerPageVar); if($PerPage < 1) { if( defined('DEBUG_MODE') ) echo 'PerPage Variable [<b>'.$this->PerPageVar.'</b>] not defined in Config<br>'; $PerPage = 20; //$objConfig->Set($this->PerPageVar,20); //$objConfig->Save(); } return $PerPage; } function GetAdminPageLinkList($url) { global $objConfig; $PerPage = $this->GetPerPage(); if($this->TotalItemCount>0) { $NumPages = ceil($this->TotalItemCount / $PerPage); } else $NumPages = ceil($this->ListItems->NumItems() / $PerPage); if($NumPages<1) $NumPages =1; //echo $this->CurrentPage." of ".$NumPages." Pages"; $o = ""; if($this->CurrentPage>$NumPages) $this->CurrentPage=$NumPages; $StartPage = $this->CurrentPage - 5; if($StartPage<1) $StartPage=1; $EndPage = $StartPage+9; if($EndPage>$NumPages) { $EndPage = $NumPages; $StartPage = $EndPage-10; if($StartPage<1) $StartPage=1; } $o .= "<b class=\"text\">".admin_language("la_Page")."</b> "; if($StartPage>1) { $target = $this->CurrentPage-10; $prev_url = str_replace("{TargetPage}",$target,$url); $o .= "<A HREF=\"$prev_url\" class=\"NAV_URL\"><<</A>"; } for($p=$StartPage;$p<=$EndPage;$p++) { if($p!=$this->CurrentPage) { $href = str_replace("{TargetPage}",$p,$url); $o .= " <A HREF=\"$href\" class=\"NAV_URL\">$p</A> "; } else { $o .= " <SPAN class=\"CURRENT_PAGE\">$p</SPAN> "; } } if($EndPage<$NumPages-1) { $target = $this->CurrentPage+10; $next_url = str_replace("{TargetPage}",$target,$url); $o .= "<A HREF=\"$next_url\" class=\"NAV_URL\"> >></A>"; } return $o; } function SliceItems() { global $objConfig; $PerPage = (int)$objConfig->Get($this->PerPageVar); if($PerPage<1) $PerPage=20; $NumPages = ceil($this->ListItems->NumItems() / $PerPage); if($NumPages>1) { $Start = ($this->CurrentPage-1)*$PerPage; $this->ListItems->Items = array_slice($this->ListItems->Items,$Start,$PerPage); } } function RefreshPageVar() { global $objSession; if( (int)GetVar('lpn') > 0) { $this->CurrentPage = $_GET["lpn"]; $objSession->SetVariable($this->CurrentPageVar,$this->CurrentPage); } else $this->CurrentPage = $objSession->GetVariable($this->CurrentPageVar); $this->ListItems->Page = $this->CurrentPage; } function PrintPageLinks() { global $imagesURL, $objSession, $lvErrorString; if(strlen($this->PageLinks)>0) { return $this->PageLinks; } $this->RefreshPageVar(); if($this->CurrentPage<1) $this->CurrentPage = 1; if(!strlen($this->PageURL)) { $this->PageURL = $_SERVER["PHP_SELF"]."?env=".BuildEnv(); if(strlen($this->extra_env)) $this->PageURL .= "&".$this->extra_env; $this->PageURL .= "&lpn={TargetPage}"; } $cols = $this->ColumnHeaders->Count(); $o = "<TABLE cellSpacing=0 cellPadding=2 width=\"100%\" class=\"pagenav\"><tbody><TR >\n"; if(strlen($lvErrorString)) { $o .= "<TD STYLE=\"border-bottom: 1px solid #000000;\" colspan=2><span class=\"validation_error\">$lvErrorString</SPAN></TD></TR><TR>"; } if($this->SearchBar==FALSE) { $o .= "<TD colspan=2>"; $o .= $this->GetAdminPageLinkList($this->PageURL); $o .= "</TD>\n"; } else { $val = str_replace(","," ", $this->SearchKeywords); $o .= "<TD>"; $o .= $this->GetAdminPageLinkList($this->PageURL)."</TD>"; $o .= "<TD align=\"right\" valign=\"top\">".admin_language("la_prompt_Search"); $o .= " <INPUT TYPE=\"TEXT\" ID=\"ListSearchWord\" NAME=\"ListSearchWord\" VALUE=\"$val\">"; $o .= " <IMG align=\"middle\" height=24 width=24 name=\"imgSearch\" ID=\"imgSearch\" src=\"$imagesURL/itemicons/icon16_search.gif\" "; $o .= " onMouseOut=\"swap('imgSearch', '$imagesURL/itemicons/icon16_search.gif');\" "; $o .= " onMouseOver=\"swap('imgSearch','$imagesURL/itemicons/icon16_search_f2.gif');\" "; $o .= " onClick=\"Submit_ListSearch('".$this->SearchAction."');\">"; $o .= " <IMG align=\"middle\" height=24 width=24 name=\"imgResetSearch\" ID=\"imgResetSearch\" src=\"$imagesURL/itemicons/icon16_search_reset.gif\" "; $o .= " onMouseOut=\"swap('imgResetSearch', '$imagesURL/itemicons/icon16_search_reset.gif');\" "; $o .= " onMouseOver=\"swap('imgResetSearch','$imagesURL/itemicons/icon16_search_reset_f2.gif');\" "; $o .= " onClick=\"Submit_ListSearch('".$this->SearchAction."_reset');\">"; if(strlen($this->SearchDropdownId)>0) { $o .= " <IMG height=16 width=16 name=\"imgSearchDropDown\" src=\"$imagesURL/itemicons/icon16_search_dropdown.gif\" "; $o .= " onMouseOut=\"swap('imgResetDropDown', '$imagesURL/itemicons/icon16_search_dropdown.gif');\" "; $o .= " onMouseOver=\"swap('imgResetDropDown','$imagesURL/itemicons/icon16_search_dropdown.gif');\" "; $o .= " onClick=\"ListSearch_PopUp('".$this->SearchDropdownId."');\">"; } $o .= "</TD>"; } $o .= "</TR></TABLE>"; return $o; } function PrintJavaScriptInit() { $o = ''; if($this->checkboxes) { $o = "<script language=\"javascript\">\n"; $o .="<!--\n"; foreach($this->ListItems->Items as $li) { $o .= $this->CheckArray.".CheckList[".$this->CheckArray.".CheckList.length] = '".$li->Get($this->IdField)."';\n"; } $o .= $this->CheckArray.".setImages();\n"; $o .="//-->\n"; $o .="</script>"; } return $o; } function PrintList($footer = '') { global $objSession; if((int)$this->CurrentPage<1) $this->CurrentPage=1; $o = "\n"; if(is_object($this->ToolBar)) { if($this->PrintToolBar) $o .= $this->ToolBar->Build(); } $o .= $this->PrintPageLinks(); $o .= "<table width=\"100%\" border=\"0\" cellspacing=\"0\" cellpadding=\"4\" class=\"tableborder\">\n"; if($this->ShowColumnHeaders) { $o .= $this->ColumnHeaders->PrintColumns(); } if($this->ListItems->NumItems()>0) { $o .= $this->PrintItems(); } $o .= "$footer</TABLE>"; if($this->ListItems->NumItems()>0) $o .= $this->PrintJavaScriptInit(); return $o; } }