2 if(!defined('sugarEntry') || !sugarEntry) die('Not A Valid Entry Point');
3 /*********************************************************************************
4 * SugarCRM Community Edition is a customer relationship management program developed by
5 * SugarCRM, Inc. Copyright (C) 2004-2012 SugarCRM Inc.
7 * This program is free software; you can redistribute it and/or modify it under
8 * the terms of the GNU Affero General Public License version 3 as published by the
9 * Free Software Foundation with the addition of the following permission added
10 * to Section 15 as permitted in Section 7(a): FOR ANY PART OF THE COVERED WORK
11 * IN WHICH THE COPYRIGHT IS OWNED BY SUGARCRM, SUGARCRM DISCLAIMS THE WARRANTY
12 * OF NON INFRINGEMENT OF THIRD PARTY RIGHTS.
14 * This program is distributed in the hope that it will be useful, but WITHOUT
15 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
16 * FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more
19 * You should have received a copy of the GNU Affero General Public License along with
20 * this program; if not, see http://www.gnu.org/licenses or write to the Free
21 * Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
24 * You can contact SugarCRM, Inc. headquarters at 10050 North Wolfe Road,
25 * SW2-130, Cupertino, CA 95014, USA. or at email address contact@sugarcrm.com.
27 * The interactive user interfaces in modified source and object code versions
28 * of this program must display Appropriate Legal Notices, as required under
29 * Section 5 of the GNU Affero General Public License version 3.
31 * In accordance with Section 7(b) of the GNU Affero General Public License version 3,
32 * these Appropriate Legal Notices must retain the display of the "Powered by
33 * SugarCRM" logo. If the display of the logo is not reasonably feasible for
34 * technical reasons, the Appropriate Legal Notices must display the words
35 * "Powered by SugarCRM".
36 ********************************************************************************/
39 require_once('include/ListView/ListViewDisplay.php');
42 require_once('include/contextMenus/contextMenu.php');
44 class ListViewSmarty extends ListViewDisplay{
47 var $ss; // the smarty object
49 var $searchColumns; // set by view.list.php
55 var $mailMerge = true;
57 var $targetList = false;
58 var $multiSelect = true;
60 var $quickViewLinks = true;
62 var $mergeduplicates = true;
63 var $contextMenus = true;
64 var $showMassupdateFields = true;
66 * Constructor, Smarty object immediately available after
69 function ListViewSmarty() {
70 parent::ListViewDisplay();
71 $this->ss = new Sugar_Smarty();
75 * Processes the request. Calls ListViewData process. Also assigns all lang strings, export links,
76 * This is called from ListViewDisplay
78 * @param file file Template file to use
79 * @param data array from ListViewData
80 * @param html_var string the corresponding html var in xtpl per row
83 function process($file, $data, $htmlVar) {
84 if(!$this->should_process)return;
85 global $odd_bg, $even_bg, $hilite_bg, $click_bg, $app_strings;
86 parent::process($file, $data, $htmlVar);
92 foreach($this->displayColumns as $name => $params) {
93 $totalWidth += $params['width'];
95 $adjustment = $totalWidth / 100;
97 $contextMenuObjectsTypes = array();
98 foreach($this->displayColumns as $name => $params) {
99 $this->displayColumns[$name]['width'] = floor($this->displayColumns[$name]['width'] / $adjustment);
100 // figure out which contextMenu objectsTypes are required
101 if(!empty($params['contextMenu']['objectType']))
102 $contextMenuObjectsTypes[$params['contextMenu']['objectType']] = true;
104 $this->ss->assign('displayColumns', $this->displayColumns);
105 $this->ss->assign('APP',$app_strings);
107 $this->ss->assign('bgHilite', $hilite_bg);
108 $this->ss->assign('colCount', count($this->displayColumns) + 10);
109 $this->ss->assign('htmlVar', strtoupper($htmlVar));
110 $this->ss->assign('moduleString', $this->moduleString);
111 $this->ss->assign('editLinkString', $app_strings['LBL_EDIT_BUTTON']);
112 $this->ss->assign('viewLinkString', $app_strings['LBL_VIEW_BUTTON']);
113 $this->ss->assign('allLinkString',$app_strings['LBL_LINK_ALL']);
114 $this->ss->assign('noneLinkString',$app_strings['LBL_LINK_NONE']);
115 $this->ss->assign('recordsLinkString',$app_strings['LBL_LINK_RECORDS']);
116 $this->ss->assign('selectLinkString',$app_strings['LBL_LINK_SELECT']);
117 if($this->overlib) $this->ss->assign('overlib', true);
119 // Bug 24677 - Correct the page total amount on the last page of listviews
120 $pageTotal = $this->data['pageData']['offsets']['next']-$this->data['pageData']['offsets']['current'];
121 if ( $this->data['pageData']['offsets']['next'] < 0 ) {
122 $pageTotal = $this->data['pageData']['offsets']['total'] - $this->data['pageData']['offsets']['current'];
125 if($this->select)$this->ss->assign('selectLink', $this->buildSelectLink('select_link', $this->data['pageData']['offsets']['total'], $pageTotal));
127 if($this->show_action_dropdown)
129 $this->ss->assign('actionsLink', $this->buildActionsLink());
132 $this->ss->assign('quickViewLinks', $this->quickViewLinks);
134 // handle save checks and stuff
135 if($this->multiSelect)
137 $this->ss->assign('selectedObjectsSpan', $this->buildSelectedObjectsSpan(true, $this->data['pageData']['offsets']['current']));
138 $this->ss->assign('multiSelectData', $this->getMultiSelectData());
140 $this->ss->assign('multiSelectData', '<textarea style="display: none" name="uid"></textarea>');
142 // include button for Adding to Target List if in one of four applicable modules
143 if ( isset ( $_REQUEST['module']) && in_array ( $_REQUEST['module'] , array ( 'Contacts','Prospects','Leads','Accounts' ))
144 && ACLController::checkAccess('ProspectLists','edit',true)) {
145 $this->ss->assign( 'targetLink', $this->buildTargetList() ) ;
147 $this->processArrows($data['pageData']['ordering']);
148 $this->ss->assign('prerow', $this->multiSelect);
149 $this->ss->assign('clearAll', $app_strings['LBL_CLEARALL']);
150 $this->ss->assign('rowColor', array('oddListRow', 'evenListRow'));
151 $this->ss->assign('bgColor', array($odd_bg, $even_bg));
152 $this->ss->assign('contextMenus', $this->contextMenus);
153 $this->ss->assign('is_admin_for_user', $GLOBALS['current_user']->isAdminForModule('Users'));
154 $this->ss->assign('is_admin', $GLOBALS['current_user']->isAdmin());
157 if($this->contextMenus && !empty($contextMenuObjectsTypes)) {
159 $cm = new contextMenu();
160 foreach($contextMenuObjectsTypes as $type => $value) {
161 $cm->loadFromFile($type);
162 $script .= $cm->getScript();
163 $cm->menuItems = array(); // clear menuItems out
165 $this->ss->assign('contextMenuScript', $script);
170 * Assigns the sort arrows in the tpl
172 * @param ordering array data that contains the ordering info
175 function processArrows($ordering)
177 $pathParts = pathinfo(SugarThemeRegistry::current()->getImageURL('arrow.gif',false));
179 list($width,$height) = getimagesize($pathParts['dirname'].'/'.$pathParts['basename']);
181 $this->ss->assign('arrowExt', $pathParts['extension']);
182 $this->ss->assign('arrowWidth', $width);
183 $this->ss->assign('arrowHeight', $height);
184 $this->ss->assign('arrowAlt', translate('LBL_SORT'));
190 * Displays the xtpl, either echo or returning the contents
192 * @param end bool display the ending of the listview data (ie MassUpdate)
195 function display($end = true) {
197 if(!$this->should_process) return $GLOBALS['app_strings']['LBL_SEARCH_POPULATE_ONLY'];
199 $this->ss->assign('data', $this->data['data']);
200 $this->data['pageData']['offsets']['lastOffsetOnPage'] = $this->data['pageData']['offsets']['current'] + count($this->data['data']);
201 $this->ss->assign('pageData', $this->data['pageData']);
203 $navStrings = array('next' => $app_strings['LNK_LIST_NEXT'],
204 'previous' => $app_strings['LNK_LIST_PREVIOUS'],
205 'end' => $app_strings['LNK_LIST_END'],
206 'start' => $app_strings['LNK_LIST_START'],
207 'of' => $app_strings['LBL_LIST_OF']);
208 $this->ss->assign('navStrings', $navStrings);
210 $str = parent::display();
211 $strend = $this->displayEnd();
213 return $str . $this->ss->fetch($this->tpl) . (($end) ? $strend : '');
215 function displayEnd() {
217 if($this->show_mass_update_form) {
218 if($this->showMassupdateFields){
219 $str .= $this->mass->getMassUpdateForm(true);
221 $str .= $this->mass->endMassUpdateForm();