display_header_and_footer = $bool; } /**initializes ListView * Portions created by SugarCRM are Copyright (C) SugarCRM, Inc. * All Rights Reserved. * Contributor(s): ______________________________________. */ function ListView(){ if(!$this->initialized){ global $list_max_entries_per_page; $this->records_per_page = $list_max_entries_per_page + 0; $this->initialized = true; global $theme, $app_strings, $image_path, $currentModule; $this->local_theme = $theme; $this->local_app_strings = &$app_strings; $this->local_image_path = $image_path; $this->local_current_module = $currentModule; if(empty($this->local_image_path)){ $this->local_image_path = 'themes/'.$theme.'/images'; } $this->log = LoggerManager::getLogger('listView_'.$this->local_current_module); } } /**sets how many records should be displayed per page in the list view * Portions created by SugarCRM are Copyright (C) SugarCRM, Inc. * All Rights Reserved. * Contributor(s): ______________________________________. */ function setRecordsPerPage($count){ $this->records_per_page = $count; } /**sets the header title */ function setHeaderTitle($value){ $this->header_title = $value; } /**sets the header text this is text thats appended to the header table and is usually used for the creation of buttons * Portions created by SugarCRM are Copyright (C) SugarCRM, Inc. * All Rights Reserved. * Contributor(s): ______________________________________. */ function setHeaderText($value){ $this->header_text = $value; } /**sets the path for the XTemplate HTML file to be used this is only needed to be set if you are allowing ListView to create the XTemplate * Portions created by SugarCRM are Copyright (C) SugarCRM, Inc. * All Rights Reserved. * Contributor(s): ______________________________________. */ function setXTemplatePath($value){ $this->xTemplatePath= $value; } /**this is a helper function for allowing ListView to create a new XTemplate it groups parameters that should be set into a single function * Portions created by SugarCRM are Copyright (C) SugarCRM, Inc. * All Rights Reserved. * Contributor(s): ______________________________________. */ function initNewXTemplate($XTemplatePath, &$modString, $imagePath = null){ $this->setXTemplatePath($XTemplatePath); if(isset($modString)) $this->setModStrings($modString); if(isset($imagePath)) $this->setImagePath($imagePath); } /**sets the parameters dealing with the db * Portions created by SugarCRM are Copyright (C) SugarCRM, Inc. * All Rights Reserved. * Contributor(s): ______________________________________. */ function setQuery($where, $limit, $orderBy, $varName, $allowOrderByOveride= true){ $this->query_where = $where; if($this->getSessionVariable("query", "where") != $where){ $this->querey_where_has_changed = true; $this->setSessionVariable("query", "where", $where); } $this->query_limit = $limit; if(!$allowOrderByOveride){ $this->query_orderby = $orderBy; return; } $sortBy = $this->getSessionVariable($varName, "ORDER_BY") ; if(empty($sortBy)){ $this->setUserVariable($varName, "ORDER_BY", $orderBy); $sortBy = $orderBy; }else{ $this->setUserVariable($varName, "ORDER_BY", $sortBy); } if($sortBy == 'amount'){ $sortBy = 'amount*1'; } $desc = false; $desc = $this->getSessionVariable($varName, $sortBy."_desc"); if(empty($desc)) $desc = false; if(isset($_REQUEST[$this->getSessionVariableName($varName, "ORDER_BY")])) $last = $this->getSessionVariable($varName, "ORDER_BY_LAST"); if(!empty($last) && $last == $sortBy){ $desc = !$desc; }else { $this->setSessionVariable($varName, "ORDER_BY_LAST", $sortBy); } $this->setSessionVariable($varName, $sortBy."_desc", $desc); if(!empty($sortBy)){ if(substr_count(strtolower($sortBy), ' desc') == 0 && substr_count(strtolower($sortBy), ' asc') == 0){ if($desc){ $this->query_orderby = $sortBy.' desc'; }else{ $this->query_orderby = $sortBy.' asc'; } } else{ $this->query_orderby = $sortBy; } }else { $this->query_orderby = ""; } } function displayArrow(){ } /**sets the theme used only use if it is different from the global * Portions created by SugarCRM are Copyright (C) SugarCRM, Inc. * All Rights Reserved. * Contributor(s): ______________________________________. */ function setTheme($theme){ $this->local_theme = $theme; if(isset($this->xTemplate))$this->xTemplate->assign("THEME", $this->local_theme ); } /**sets the AppStrings used only use if it is different from the global * Portions created by SugarCRM are Copyright (C) SugarCRM, Inc. * All Rights Reserved. * Contributor(s): ______________________________________. */ function setAppStrings(&$app_strings){ unset($this->local_app_strings); $this->local_app_strings = $app_strings; if(isset($this->xTemplate))$this->xTemplate->assign("APP", $this->local_app_strings ); } /**sets the ModStrings used * Portions created by SugarCRM are Copyright (C) SugarCRM, Inc. * All Rights Reserved. * Contributor(s): ______________________________________. */ function setModStrings(&$mod_strings){ unset($this->local_module_strings); $this->local_mod_strings = $mod_strings; if(isset($this->xTemplate))$this->xTemplate->assign("MOD", $this->local_mod_strings ); } /**sets the ImagePath used * Portions created by SugarCRM are Copyright (C) SugarCRM, Inc. * All Rights Reserved. * Contributor(s): ______________________________________. */ function setImagePath($image_path){ $this->local_image_path = $image_path; if(empty($this->local_image_path)){ $this->local_image_path = 'themes/'.$this->local_theme.'/images'; } if(isset($this->xTemplate))$this->xTemplate->assign("IMAGE_PATH", $this->local_image_path ); } /**sets the currentModule only use if this is different from the global * Portions created by SugarCRM are Copyright (C) SugarCRM, Inc. * All Rights Reserved. * Contributor(s): ______________________________________. */ function setCurrentModule($currentModule){ unset($this->local_current_module); $this->local_current_module = $currentModule; $this->log = LoggerManager::getLogger('listView_'.$this->local_current_module); if(isset($this->xTemplate))$this->xTemplate->assign("MODULE_NAME", $this->local_current_module ); } /**INTERNAL FUNCTION creates an XTemplate DO NOT CALL THIS THIS IS AN INTERNAL FUNCTION * Portions created by SugarCRM are Copyright (C) SugarCRM, Inc. * All Rights Reserved. * Contributor(s): ______________________________________. */ function createXTemplate(){ if(!isset($this->xTemplate)){ if(isset($this->xTemplatePath)){ $this->xTemplate = new XTemplate ($this->xTemplatePath); $this->xTemplate->assign("APP", $this->local_app_strings); if(isset($this->local_mod_strings))$this->xTemplate->assign("MOD", $this->local_mod_strings); $this->xTemplate->assign("THEME", $this->local_theme); $this->xTemplate->assign("IMAGE_PATH", $this->local_image_path); $this->xTemplate->assign("MODULE_NAME", $this->local_current_module); }else{ $log->error("NO XTEMPLATEPATH DEFINED CANNOT CREATE XTEMPLATE"); } } } /**sets the XTemplate telling ListView to use newXTemplate as its current XTemplate * Portions created by SugarCRM are Copyright (C) SugarCRM, Inc. * All Rights Reserved. * Contributor(s): ______________________________________. */ function setXTemplate(&$newXTemplate){ $this->xTemplate = $newXTemplate; } /**returns the XTemplate * Portions created by SugarCRM are Copyright (C) SugarCRM, Inc. * All Rights Reserved. * Contributor(s): ______________________________________. */ function getXTemplate(){ return $this->xTemplate; } /**assigns a name value pair to the XTemplate * Portions created by SugarCRM are Copyright (C) SugarCRM, Inc. * All Rights Reserved. * Contributor(s): ______________________________________. */ function xTemplateAssign($name, $value){ if(!isset($this->xTemplate)){ $this->createXTemplate(); } $this->xTemplate->assign($name, $value); } /**INTERNAL FUNCTION returns the offset first checking the querey then checking the session if the where clause has changed from the last time it returns 0 * Portions created by SugarCRM are Copyright (C) SugarCRM, Inc. * All Rights Reserved. * Contributor(s): ______________________________________. */ function getOffset($localVarName){ if($this->querey_where_has_changed){ $this->setSessionVariable($localVarName,"offset", 0); } $offset = $this->getSessionVariable($localVarName,"offset"); if(isset($offset)){ return $offset; } return 0; } /**INTERNAL FUNCTION sets the offset in the session * Portions created by SugarCRM are Copyright (C) SugarCRM, Inc. * All Rights Reserved. * Contributor(s): ______________________________________. */ function setOffset($localVarName, $value){ $this->setSessionVariable($localVarName, "offset", $value); } /**INTERNAL FUNCTION sets a session variable * Portions created by SugarCRM are Copyright (C) SugarCRM, Inc. * All Rights Reserved. * Contributor(s): ______________________________________. */ function setSessionVariable($localVarName,$varName, $value){ $_SESSION[$this->local_current_module."_".$localVarName."_".$varName] = $value; } function setUserVariable($localVarName,$varName, $value){ global $current_user; $current_user->setPreference($this->local_current_module."_".$localVarName."_".$varName, $value); } /**INTERNAL FUNCTION returns a session variable first checking the querey for it then checking the session * Portions created by SugarCRM are Copyright (C) SugarCRM, Inc. * All Rights Reserved. * Contributor(s): ______________________________________. */ function getSessionVariable($localVarName,$varName){ if(isset($_REQUEST[$this->getSessionVariableName($localVarName, $varName)])){ $this->setSessionVariable($localVarName,$varName,$_REQUEST[$this->getSessionVariableName($localVarName, $varName)]); } if(isset($_SESSION[$this->getSessionVariableName($localVarName, $varName)])){ return $_SESSION[$this->getSessionVariableName($localVarName, $varName)]; } return ""; } /** * @return void * @param unknown $localVarName * @param unknown $varName * @desc INTERNAL FUNCTION returns the session/query variable name * Portions created by SugarCRM are Copyright (C) SugarCRM, Inc. * All Rights Reserved. * Contributor(s): ______________________________________.. */ function getSessionVariableName($localVarName,$varName){ return $this->local_current_module."_".$localVarName."_".$varName; } /** * @return void * @param unknown $seed * @param unknown $xTemplateSection * @param unknown $html_varName * @desc INTERNAL FUNCTION Handles List Views using seeds that extend SugarBean $XTemplateSection is the section in the XTemplate file that should be parsed usually main $html_VarName is the variable name used in the XTemplateFile e.g. TASK $seed is a seed that extends SugarBean * Portions created by SugarCRM are Copyright (C) SugarCRM, Inc.. * All Rights Reserved.. * Contributor(s): ______________________________________.. */ function processSugarBean($xtemplateSection, $html_varName, $seed){ $current_offset = $this->getOffset($html_varName); $response = $seed->get_list($this->query_orderby, $this->query_where, $current_offset, $this->query_limit); $list = $response['list']; $row_count = $response['row_count']; $next_offset = $response['next_offset']; $previous_offset = $response['previous_offset']; $this->processListNavigation( $xtemplateSection,$html_varName, $current_offset, $next_offset, $previous_offset, $row_count); return $list; } /** * @return void * @param unknown $data * @param unknown $xTemplateSection * @param unknown $html_varName * @desc INTERNAL FUNCTION process the List Navigation * Portions created by SugarCRM are Copyright (C) SugarCRM, Inc. * All Rights Reserved. * Contributor(s): ______________________________________.. */ function processListNavigation( $xtemplateSection, $html_varName, $current_offset, $next_offset, $previous_offset, $row_count ){ global $current_user; global $allow_exports; $start_record = $current_offset + 1; if($row_count == 0) $start_record = 0; $end_record = $start_record + $this->records_per_page; // back up the the last page. if($end_record > $row_count+1) { $end_record = $row_count+1; } // Deterime the start location of the last page if($row_count == 0) $number_pages = 0; else $number_pages = floor(($row_count - 1) / $this->records_per_page); $last_offset = $number_pages * $this->records_per_page; if(empty($this->query_limit) || $this->query_limit > $this->records_per_page){ $base_URL = $_SERVER['PHP_SELF']; if(isset($_SERVER['QUERY_STRING'])){ $base_URL = ereg_replace("\&".$this->getSessionVariableName($html_varName,"ORDER_BY")."=[0-9a-zA-Z\_]*","",$base_URL .'?'.$_SERVER['QUERY_STRING']); $base_URL = ereg_replace("\&".$this->getSessionVariableName($html_varName,"offset")."=[0-9]*","",$base_URL); } if($_SERVER['REQUEST_METHOD'] == 'POST'){ $base_URL .= '?'; if(isset($_REQUEST['action'])) $base_URL .= '&action='.$_REQUEST['action']; if(isset($_REQUEST['record'])) $base_URL .= '&record='.$_REQUEST['record']; if(isset($_REQUEST['module'])) $base_URL .= '&module='.$_REQUEST['module']; } $base_URL .= "&".$this->getSessionVariableName($html_varName,"offset")."="; $current_URL = $base_URL.$current_offset; $start_URL = $base_URL."0"; $previous_URL = $base_URL.$previous_offset; $next_URL = $base_URL.$next_offset; $end_URL = $base_URL.$last_offset; $sort_URL_base = $base_URL. "&".$this->getSessionVariableName($html_varName,"ORDER_BY")."="; $this->log->debug("Offsets: (start, previous, next, last)(0, $previous_offset, $next_offset, $last_offset)"); if(0 == $current_offset){ $start_link = $this->local_app_strings['LNK_LIST_START']; $previous_link = $this->local_app_strings['LNK_LIST_PREVIOUS']; }else{ $start_link = "".$this->local_app_strings['LNK_LIST_START'].""; $previous_link = "".$this->local_app_strings['LNK_LIST_PREVIOUS'].""; } if($last_offset <= $current_offset){ $end_link = $this->local_app_strings['LNK_LIST_END']; $next_link = $this->local_app_strings['LNK_LIST_NEXT']; } else{ $end_link = "".$this->local_app_strings['LNK_LIST_END'].""; $next_link = "".$this->local_app_strings['LNK_LIST_NEXT'].""; } global $current_module; $this->log->info("Offset (next, current, prev)($next_offset, $current_offset, $previous_offset)"); $this->log->info("Start/end records ($start_record, $end_record)"); if($sort_URL_base !== "") $this->xTemplate->assign("ORDER_BY", $sort_URL_base); $this->xTemplate->assign("START_RECORD", $start_record); $this->xTemplate->assign("END_RECORD", $end_record-1); $this->xTemplate->assign("ROW_COUNT", $row_count); if ($start_link !== "") $this->xTemplate->assign("START_LINK", "[ ".$start_link." ]"); if ($end_link !== "")$this->xTemplate->assign("END_LINK", "[ ".$end_link." ]"); if ($next_link !== "") $this->xTemplate->assign("NEXT_LINK", "[ ".$next_link." ]"); if ($previous_link !== "") $this->xTemplate->assign("PREVIOUS_LINK", "[ ".$previous_link." ]"); $_SESSION['export_where'] = $this->query_where; $export_link = "local_current_module."\" class=\"listFormHeaderLinks\">".$this->local_app_strings['LBL_EXPORT'].""; if ($_REQUEST['module']== 'Home' || $this->local_current_module == 'Import' || ($allow_exports=='none' || ( $allow_exports=='admin' && ! is_admin($current_user) ) ) ) { $this->xTemplate->assign("EXPORT_LINK", ""); } else { $this->xTemplate->assign("EXPORT_LINK", " [ ".$export_link." ]"); } $this->xTemplate->parse($xtemplateSection.".list_nav_row"); } } /** * @return void * @param unknown $data * @param unknown $xTemplateSection * @param unknown $html_varName * @desc INTERNAL FUNCTION handles the rows * Portions created by SugarCRM are Copyright (C) SugarCRM, Inc. * All Rights Reserved. * Contributor(s): ______________________________________.. */ function processListRows(&$data,$xtemplateSection, $html_varName){ $oddRow = true; foreach($data as $aItem) { $fields = $aItem->get_list_view_data(); $this->xTemplate->assign($html_varName, $fields); if($oddRow) { $this->xTemplate->assign("ROW_COLOR", 'oddListRow'); } else { $this->xTemplate->assign("ROW_COLOR", 'evenListRow'); } $oddRow = !$oddRow; $aItem->list_view_parse_additional_sections($this->xTemplate, $xtemplateSection); $this->xTemplate->parse($xtemplateSection.".row"); } $this->xTemplate->parse($xtemplateSection); } /** * @return void * @param unknown $seed * @param unknown $xTemplateSection * @param unknown $html_varName * @desc PUBLIC FUNCTION Handles List Views using seeds that extend SugarBean $XTemplateSection is the section in the XTemplate file that should be parsed usually main $html_VarName is the variable name used in the XTemplateFile e.g. TASK $seed is a seed there are two types of seeds one is a subclass of SugarBean, the other is a list usually created from a sugar bean using get_list if no XTemplate is set it will create a new XTemplate * Portions created by SugarCRM are Copyright (C) SugarCRM, Inc.. * All Rights Reserved.. * Contributor(s): ______________________________________.. */ function processListView($seed, $xTemplateSection, $html_varName){ if(!isset($this->xTemplate)) $this->createXTemplate(); $isSugarBean = is_subclass_of($seed, "SugarBean"); $list = null; if($isSugarBean){ $list = $this->processSugarBean($xTemplateSection, $html_varName, $seed); }else{ $list = &$seed; } $this->processSortArrows($html_varName); $this->processListRows($list,$xTemplateSection, $html_varName); if($this->display_header_and_footer) echo get_form_header( $this->header_title, $this->header_text, false); $this->xTemplate->out($xTemplateSection); if($this->display_header_and_footer) echo get_form_footer(); if($isSugarBean ) echo "\n\n"; //if(isset($_SESSION['validation'])){ // print base64_decode('PGEgaHJlZj0naHR0cDovL3d3dy5zdWdhcmNybS5jb20nPlBPV0VSRUQmbmJzcDtCWSZuYnNwO1NVR0FSQ1JNPC9hPg=='); //} } function processSortArrows($html_varName){ $orderBy = $this->getSessionVariable($html_varName, "ORDER_BY_LAST"); $desc = $this->getSessionVariable($html_varName, $orderBy.'_desc'); $imgArrow = " "; if($desc){ $imgArrow = " "; } if($orderBy == 'amount*1') $this->xTemplateAssign('amount_arrow', $imgArrow); else{ $this->xTemplateAssign($orderBy.'_arrow', $imgArrow); } } } ?>