This project does not seem to handle request data directly as such no vulnerable execution paths were found.
include
, or for example
via PHP's auto-loading mechanism.
These results are based on our legacy PHP analysis, consider migrating to our new PHP analysis engine instead. Learn more
1 | <?php |
||
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. |
||
6 | * |
||
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. |
||
13 | * |
||
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 |
||
17 | * details. |
||
18 | * |
||
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 |
||
22 | * 02110-1301 USA. |
||
23 | * |
||
24 | * You can contact SugarCRM, Inc. headquarters at 10050 North Wolfe Road, |
||
25 | * SW2-130, Cupertino, CA 95014, USA. or at email address [email protected]. |
||
26 | * |
||
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. |
||
30 | * |
||
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 | ********************************************************************************/ |
||
37 | |||
38 | |||
39 | /** |
||
40 | * DetailView - display single record |
||
41 | * @api |
||
42 | */ |
||
43 | class DetailView extends ListView { |
||
44 | |||
45 | var $list_row_count = null; |
||
46 | var $return_to_list_only=false; |
||
47 | var $offset_key_mismatch=false; |
||
48 | var $no_record_found=false; |
||
49 | |||
50 | function __construct(){ |
||
51 | parent::__construct(); |
||
52 | |||
53 | global $theme, $app_strings, $currentModule; |
||
54 | $this->local_theme = $theme; |
||
55 | $this->local_app_strings =$app_strings; |
||
56 | } |
||
57 | |||
58 | /** |
||
59 | * @deprecated deprecated since version 7.6, PHP4 Style Constructors are deprecated and will be remove in 7.8, please update your code, use __construct instead |
||
60 | */ |
||
61 | function DetailView(){ |
||
62 | $deprecatedMessage = 'PHP4 Style Constructors are deprecated and will be remove in 7.8, please update your code'; |
||
63 | if(isset($GLOBALS['log'])) { |
||
64 | $GLOBALS['log']->deprecated($deprecatedMessage); |
||
65 | } |
||
66 | else { |
||
67 | trigger_error($deprecatedMessage, E_USER_DEPRECATED); |
||
68 | } |
||
69 | self::__construct(); |
||
70 | } |
||
71 | |||
72 | |||
73 | function processSugarBean($html_varName, $seed, $offset/*, $isfirstview=0*/) { |
||
74 | global $row_count, $sugar_config; |
||
75 | |||
76 | global $next_offset; |
||
77 | global $previous_offset; |
||
78 | global $list_view_row_count; |
||
79 | global $current_offset; |
||
80 | if (!empty($sugar_config['disable_vcr']) ) { |
||
81 | $seed->retrieve($_REQUEST['record']); |
||
82 | return $seed; |
||
83 | } |
||
84 | $isfirstview = 0; |
||
85 | |||
86 | $nav_history_set=false; |
||
87 | $nav_history_array=array(); |
||
88 | $nav_offset=''; |
||
89 | $nav_ids_visited=array(); |
||
90 | $nav_stamp=''; |
||
91 | |||
92 | //get the session variable DETAIL_NAV_HISTORY, |
||
93 | //the format of the variable stamp,offset, array of IDs visited. |
||
94 | $nav_history=$this->getLocalSessionVariable($html_varName, "DETAIL_NAV_HISTORY"); |
||
95 | if (!empty($nav_history)) { |
||
96 | $nav_history_set=true; |
||
97 | $nav_history_array=explode(":",$nav_history); |
||
98 | $nav_stamp=$nav_history_array[0]; |
||
99 | $nav_offset=$nav_history_array[1]; |
||
100 | eval("\$nav_ids_visited= ".$nav_history_array[2].";"); |
||
0 ignored issues
–
show
|
|||
101 | } |
||
102 | |||
103 | //from list offset is there but $bNavHistorySet is false. |
||
104 | //from next,previous,start and end buttons offset and $bNavHistorySet is true. |
||
105 | //from tracker offset is not there but $bNavHistorySet may or may not exist. |
||
106 | if (isset($_REQUEST['offset']) && !empty($_REQUEST['offset'])) { |
||
107 | //get offset values. |
||
108 | $offset = $_REQUEST['offset']; |
||
109 | if($offset < 0){ |
||
110 | $offset = 0; |
||
111 | } |
||
112 | //if the stamp has changed, ignore the offset and navigate to the record. |
||
113 | //use case, search, navigate to detail, copy URL, search again, paste URL. |
||
114 | if (!$this->isRequestFromListView($html_varName)) { |
||
115 | $result = $seed->retrieve($_REQUEST['record']); |
||
116 | return $result; |
||
117 | } |
||
118 | |||
119 | if ($nav_history_set) { |
||
120 | if (isset($nav_ids_visited[$offset])) { |
||
121 | unset($nav_ids_visited[$offset]); |
||
122 | } |
||
123 | } |
||
124 | |||
125 | } else { |
||
126 | if ($nav_history_set) { |
||
127 | //try to locate the ID in the nav_history array. |
||
128 | |||
129 | $key = array_search($_REQUEST['record'], $nav_ids_visited); |
||
130 | if ($key === false) { |
||
131 | //do not show the VCR buttons. |
||
132 | |||
133 | $result = $seed->retrieve($_REQUEST['record']); |
||
134 | return $result; |
||
135 | } |
||
136 | $offset=$key; |
||
137 | $_REQUEST['offset'] = $offset; |
||
138 | $_GET['offset'] = $offset; |
||
139 | $_POST['offset'] = $offset; |
||
140 | |||
141 | $_REQUEST['stamp'] = $nav_stamp; |
||
142 | $_GET['stamp'] = $nav_stamp; |
||
143 | $_POST['stamp'] = $nav_stamp; |
||
144 | if (isset($nav_ids_visited[$offset])) { |
||
145 | unset($nav_ids_visited[$offset]); |
||
146 | } |
||
147 | |||
148 | } else { |
||
149 | if(!empty($seed->id))return $seed; |
||
150 | |||
151 | $result = $seed->retrieve($_REQUEST['record']); |
||
152 | return $result; |
||
153 | } |
||
154 | } |
||
155 | |||
156 | //Check if this is the first time we have viewed this record |
||
157 | $var = $this->getLocalSessionVariable($html_varName, "IS_FIRST_VIEW"); |
||
158 | if(!isset($var) || !$var){ |
||
159 | $isFirstView = true; |
||
160 | } |
||
161 | else{ |
||
162 | $isFirstView = false; |
||
163 | } |
||
164 | //indicate that this is not the first time anymore |
||
165 | $this->setLocalSessionVariable($html_varName, "IS_FIRST_VIEW", false); |
||
166 | |||
167 | // All 3 databases require this because the limit query does a > db_offset comparison. |
||
168 | $db_offset=$offset-1; |
||
169 | |||
170 | $this->populateQueryWhere($isFirstView, $html_varName); |
||
171 | if(ACLController::requireOwner($seed->module_dir, 'view')) { |
||
172 | global $current_user; |
||
173 | $seed->getOwnerWhere($current_user->id); |
||
174 | if(!empty($this->query_where)) { |
||
175 | $this->query_where .= ' AND '; |
||
176 | } |
||
177 | $this->query_where .= $seed->getOwnerWhere($current_user->id); |
||
178 | } |
||
179 | /* BEGIN - SECURITY GROUPS */ |
||
180 | if(ACLController::requireSecurityGroup($seed->module_dir, 'view') ) |
||
181 | { |
||
182 | require_once('modules/SecurityGroups/SecurityGroup.php'); |
||
183 | global $current_user; |
||
184 | $owner_where = $seed->getOwnerWhere($current_user->id); |
||
185 | $group_where = SecurityGroup::getGroupWhere($seed->table_name,$seed->module_dir,$current_user->id); |
||
186 | if(empty($this->query_where)) |
||
187 | { |
||
188 | $this->query_where = " (".$owner_where." or ".$group_where.")"; |
||
189 | } else { |
||
190 | $this->query_where .= " AND (".$owner_where." or ".$group_where.")"; |
||
191 | } |
||
192 | } |
||
193 | /* END - SECURITY GROUPS */ |
||
194 | |||
195 | $order = $this->getLocalSessionVariable($seed->module_dir.'2_'.$html_varName, "ORDER_BY"); |
||
196 | $orderBy = ''; |
||
197 | if(!empty($order['orderBy'])) |
||
198 | $orderBy = $order['orderBy']; |
||
199 | if(!empty($orderBy) && !empty($order['direction'])) |
||
200 | $orderBy .= ' ' . $order['direction']; |
||
201 | |||
202 | $this->query_orderby = $seed->process_order_by($orderBy,null); |
||
203 | $current_offset = $_REQUEST['offset'] -1; |
||
204 | $response = $seed->process_detail_query(SugarVCR::retrieve($seed->module_dir), 0, -1, -1, '', $current_offset); |
||
205 | //$response = $seed->get_detail(, $this->query_where, $db_offset); |
||
206 | $object = $response['bean']; |
||
207 | $row_count = $response['row_count']; |
||
208 | $next_offset = $response['next_offset']; |
||
209 | $previous_offset = $response['previous_offset']; |
||
210 | $list_view_row_count = $row_count; |
||
211 | $this->setListViewRowCount($row_count); |
||
212 | |||
213 | //if the retrieved id is not same as the request ID then hide the VCR buttons. |
||
214 | if (empty($object->id)) { |
||
215 | $this->no_record_found=true; |
||
216 | } |
||
217 | if (empty($_REQUEST['InDetailNav']) and strcmp($_REQUEST['record'],$object->id)!=0) { |
||
218 | $this->offset_key_mismatch=true; |
||
219 | } |
||
220 | if ($this->no_record_found or $this->offset_key_mismatch ) { |
||
221 | if ($nav_history_set) { |
||
222 | $this->return_to_list_only=true; |
||
223 | } |
||
224 | $result = $seed->retrieve($_REQUEST['record']); |
||
225 | return $result; |
||
226 | } |
||
227 | |||
228 | //update the request with correct value for the record attribute. |
||
229 | //need only when using the VCR buttons. This is a workaround need to fix the values |
||
230 | //set in the VCR links. |
||
231 | $_REQUEST['record'] = $object->id; |
||
232 | $_GET['record'] = $object->id; |
||
233 | $_POST['record'] = $object->id; |
||
234 | |||
235 | //set nav_history. |
||
236 | if (empty($nav_stamp)) { |
||
237 | $nav_stamp=$_GET['stamp']; |
||
238 | } |
||
239 | if (empty($nav_offset)) { |
||
240 | $nav_offset=$offset; |
||
241 | } |
||
242 | //store a maximum of 20 entries in the nav_ids_visited array. |
||
243 | //remove the oldest entry when this limit is reached. |
||
244 | if (count($nav_ids_visited) >= 20) { |
||
245 | reset($nav_ids_visited); |
||
246 | unset($nav_ids_visited[key($nav_ids_visited)]); |
||
247 | } |
||
248 | $nav_ids_visited[$offset]=$object->id; |
||
249 | $nav_history=sprintf("%s:%s:%s",$nav_stamp,$nav_offset,var_export($nav_ids_visited,true)); |
||
250 | $this->setLocalSessionVariable($html_varName, "DETAIL_NAV_HISTORY",$nav_history); |
||
251 | |||
252 | return $object; |
||
253 | } |
||
254 | |||
255 | function populateQueryWhere($isfirstview, $html_varName){ |
||
256 | if($isfirstview){ |
||
257 | $this->query_where = $this->getVariableFromSession($_REQUEST['module'], 'QUERY_WHERE'); |
||
258 | |||
259 | //this is a fail safe, in case the old ListView is still in use |
||
260 | if(empty($this->query_where)){ |
||
261 | $this->query_where = $this->getLocalSessionVariable($html_varName, "QUERY_WHERE"); |
||
262 | } |
||
263 | //SETTING QUERY FOR LATER USE |
||
264 | $this->setSessionVariable("QUERY_DETAIL", "where", $this->query_where); |
||
265 | } |
||
266 | else{ |
||
267 | $this->query_where = $this->getSessionVariable("QUERY_DETAIL", "where"); |
||
268 | } |
||
269 | } |
||
270 | |||
271 | function processListNavigation( $xtpl, $html_varName, $current_offset, $display_audit_link = false , $next_offset = null, $previous_offset = null, $row_count = null, $sugarbean = NULL, $subpanel_def = NULL, $col_count = 20){ |
||
272 | global $export_module, $sugar_config, $current_user; |
||
273 | //intialize audit_link |
||
274 | $audit_link = ''; |
||
275 | |||
276 | $row_count = $this->getListViewRowCount(); |
||
277 | |||
278 | if($display_audit_link && (!isset($sugar_config['disc_client']) || $sugar_config['disc_client'] == false)) |
||
279 | { |
||
280 | //Audit link |
||
281 | $popup_request_data = array( |
||
282 | 'call_back_function' => 'set_return', |
||
283 | 'form_name' => 'EditView', |
||
284 | 'field_to_name_array' => array(), |
||
285 | ); |
||
286 | $json = getJSONobj(); |
||
287 | $encoded_popup_request_data = $json->encode($popup_request_data); |
||
288 | $audit_link = "<a href='javascript:void(0)' onclick='open_popup(\"Audit\", \"600\", \"400\", \"&record=".$_REQUEST['record']."&module_name=".$_REQUEST['module']."\", true, false, $encoded_popup_request_data);'>".$this->local_app_strings['LNK_VIEW_CHANGE_LOG']."</a>"; |
||
289 | } |
||
290 | |||
291 | $html_text = ""; |
||
292 | $pre_html_text = ""; |
||
293 | $pre_html_text .= "<tr class='pagination'>\n"; |
||
294 | $pre_html_text .= "<td COLSPAN=\"20\">\n"; |
||
295 | $pre_html_text .= "<table border=\"0\" cellpadding=\"0\" cellspacing=\"0\" width=\"100%\"><tr><td style=\"text-align: left\" > ".$audit_link."</td>\n"; |
||
296 | |||
297 | |||
298 | |||
299 | if ($this->return_to_list_only == true) { |
||
0 ignored issues
–
show
|
|||
300 | if($current_offset != 0 && $this->isRequestFromListView($html_varName)) |
||
301 | { |
||
302 | if($current_offset < 0){ |
||
303 | $current_offset = 1; |
||
304 | } |
||
305 | else if($current_offset > $row_count){ |
||
306 | $current_offset = $row_count; |
||
307 | } |
||
308 | |||
309 | $this->set_base_URL($html_varName); |
||
310 | $list_URL = $this->base_URL.'&action=index&module='.$_REQUEST['module']; |
||
311 | $current_page = floor($current_offset / $this->records_per_page) * $this->records_per_page; |
||
312 | |||
313 | $list_URL .= '&'.$this->getSessionVariableName($html_varName,"offset").'='.$current_page; |
||
314 | //$list_link = "<a href=\"$list_URL\" >".$this->local_app_strings['LNK_LIST_RETURN']." </a>"; |
||
315 | $list_link = "<button type='button' class='button' title='{$GLOBALS['app_strings']['LNK_LIST_RETURN']}' onClick='location.href=\"$list_URL\";'>".$this->local_app_strings['LNK_LIST_RETURN']."</button>"; |
||
316 | |||
317 | $html_text .= "<td nowrap align='right' scope='row'>".$list_link; |
||
318 | |||
319 | if ($row_count != 0) { |
||
320 | $resume_URL = $this->base_URL.$current_offset."&InDetailNav=1"; |
||
321 | //$resume_link = "<a href=\"$resume_URL\" >".$this->local_app_strings['LNK_RESUME']." </a>"; |
||
322 | $resume_link = "<button type='button' class='button' title='$this->local_app_strings['LNK_RESUME']' onClick='location.href=\"$resume_URL\";'>".$this->local_app_strings['LNK_RESUME']."</button>"; |
||
323 | |||
324 | $html_text .= " ".$resume_link; |
||
325 | } |
||
326 | $html_text .= "</td>"; |
||
327 | } |
||
328 | } |
||
329 | else { |
||
330 | if($current_offset != 0 && $this->isRequestFromListView($html_varName)) |
||
331 | { |
||
332 | if($current_offset < 0){ |
||
333 | $current_offset = 1; |
||
334 | } |
||
335 | else if($current_offset > $row_count){ |
||
336 | $current_offset = $row_count; |
||
337 | } |
||
338 | |||
339 | $next_offset = $current_offset + 1; |
||
340 | $previous_offset = $current_offset - 1; |
||
341 | |||
342 | $this->set_base_URL($html_varName); |
||
343 | |||
344 | $start_URL = $this->base_URL."1"."&InDetailNav=1"; |
||
345 | $current_URL = $this->base_URL.$current_offset."&InDetailNav=1"; |
||
346 | $previous_URL = $this->base_URL.$previous_offset."&InDetailNav=1"; |
||
347 | $next_URL = $this->base_URL.$next_offset."&InDetailNav=1"; |
||
348 | $end_URL = $this->base_URL.$row_count."&InDetailNav=1"; |
||
349 | |||
350 | $current_page = floor($current_offset / $this->records_per_page) * $this->records_per_page; |
||
351 | |||
352 | if(1 == $current_offset){ |
||
353 | //$start_link = SugarThemeRegistry::current()->getImage("start_off","border='0' align='absmiddle'",null,null,'.gif',$this->local_app_strings['LNK_LIST_START'])." ".$this->local_app_strings['LNK_LIST_START']; |
||
354 | //$previous_link = SugarThemeRegistry::current()->getImage("previous_off","border='0' align='absmiddle'",null,null,'.gif',$this->local_app_strings['LNK_LIST_PREVIOUS'])." ".$this->local_app_strings['LNK_LIST_PREVIOUS'].""; |
||
355 | $start_link = "<button type='button' title='{$this->local_app_strings['LNK_LIST_START']}' class='button' disabled>".SugarThemeRegistry::current()->getImage("start_off","border='0' align='absmiddle'",null,null,'.gif',$this->local_app_strings['LNK_LIST_START'])."</button>"; |
||
356 | $previous_link = "<button type='button' title='{$this->local_app_strings['LNK_LIST_PREVIOUS']}' class='button' disabled>".SugarThemeRegistry::current()->getImage("previous_off","border='0' align='absmiddle'",null,null,'.gif',$this->local_app_strings['LNK_LIST_PREVIOUS'])."</button>"; |
||
357 | |||
358 | }else{ |
||
359 | //$start_link = "<a href=\"$start_URL\">".SugarThemeRegistry::current()->getImage("start","border='0' align='absmiddle'",null,null,'.gif',$this->local_app_strings['LNK_LIST_START'])."</a> <a href=\"$start_URL\">".$this->local_app_strings['LNK_LIST_START']."</a>"; |
||
360 | $start_link = "<button type='button' class='button' title='{$this->local_app_strings['LNK_LIST_START']}' onClick='location.href=\"$start_URL\";'>".SugarThemeRegistry::current()->getImage("start","border='0' align='absmiddle'",null,null,'.gif',$this->local_app_strings['LNK_LIST_START'])."</button>"; |
||
361 | |||
362 | if(0 != $current_offset){ |
||
363 | //$previous_link = "<a href=\"$previous_URL\">".SugarThemeRegistry::current()->getImage("previous","border='0' align='absmiddle'",null,null,'.gif',$this->local_app_strings['LNK_LIST_PREVIOUS'])."</a> <a href=\"$previous_URL\" >".$this->local_app_strings['LNK_LIST_PREVIOUS']."</a>"; |
||
364 | $previous_link = "<button type='button' class='button' title='{$this->local_app_strings['LNK_LIST_PREVIOUS']}' onClick='location.href=\"$previous_URL\";'>".SugarThemeRegistry::current()->getImage("previous","border='0' align='absmiddle'",null,null,'.gif',$this->local_app_strings['LNK_LIST_PREVIOUS'])."</button>"; |
||
365 | } |
||
366 | else { |
||
367 | //$previous_link = SugarThemeRegistry::current()->getImage("previous_off","border='0' align='absmiddle'",null,null,'.gif',$this->local_app_strings['LNK_LIST_PREVIOUS'])." ".$this->local_app_strings['LNK_LIST_PREVIOUS']; |
||
368 | $previous_link = "<button type='button' title='{$this->local_app_strings['LNK_LIST_PREVIOUS']}' class='button' disabled>".SugarThemeRegistry::current()->getImage("previous_off","border='0' align='absmiddle'",null,null,'.gif',$this->local_app_strings['LNK_LIST_PREVIOUS'])."</button>"; |
||
369 | |||
370 | } |
||
371 | } |
||
372 | |||
373 | |||
374 | if($row_count <= $current_offset){ |
||
375 | //$end_link = $this->local_app_strings['LNK_LIST_END']." ".SugarThemeRegistry::current()->getImage("end_off","border='0' align='absmiddle'",null,null,'.gif',$this->local_app_strings['LNK_LIST_END']); |
||
376 | //$next_link = $this->local_app_strings['LNK_LIST_NEXT']." ".SugarThemeRegistry::current()->getImage("next_off","border='0' align='absmiddle'",null,null,'.gif',$this->local_app_strings['LNK_LIST_NEXT']); |
||
377 | $end_link = "<button type='button' title='{$this->local_app_strings['LNK_LIST_END']}' class='button' disabled>".SugarThemeRegistry::current()->getImage("end_off","border='0' align='absmiddle'",null,null,'.gif',$this->local_app_strings['LNK_LIST_END'])."</button>"; |
||
378 | $next_link = "<button type='button' title='{$this->local_app_strings['LNK_LIST_NEXT']}' class='button' disabled>".SugarThemeRegistry::current()->getImage("next_off","border='0' align='absmiddle'",null,null,'.gif',$this->local_app_strings['LNK_LIST_NEXT'])."</button>"; |
||
379 | } |
||
380 | else{ |
||
381 | //$end_link = "<a href=\"$end_URL\">".$this->local_app_strings['LNK_LIST_END']."</a> <a href=\"$end_URL\">".SugarThemeRegistry::current()->getImage("end","border='0' align='absmiddle'",null,null,'.gif',$this->local_app_strings['LNK_LIST_END'])."</a>"; |
||
382 | //$next_link = "<a href=\"$next_URL\">".$this->local_app_strings['LNK_LIST_NEXT']."</a> <a href=\"$next_URL\">".SugarThemeRegistry::current()->getImage("next","border='0' align='absmiddle'",,null,null,'.gif',$this->local_app_strings['LNK_LIST_NEXT'])."</a>"; |
||
383 | $end_link = "<button type='button' class='button' title='{$this->local_app_strings['LNK_LIST_END']}' onClick='location.href=\"$end_URL\";'>".SugarThemeRegistry::current()->getImage("end","border='0' align='absmiddle'",null,null,'.gif',$this->local_app_strings['LNK_LIST_END'])."</button>"; |
||
384 | $next_link = "<button type='button' class='button' title='{$this->local_app_strings['LNK_LIST_NEXT']}' onClick='location.href=\"$next_URL\";'>".SugarThemeRegistry::current()->getImage("next","border='0' align='absmiddle'",null,null,'.gif',$this->local_app_strings['LNK_LIST_NEXT'])."</button>"; |
||
385 | |||
386 | } |
||
387 | |||
388 | $html_text .= "<td nowrap align='right' >".$start_link." ".$previous_link." (".$current_offset." ".$this->local_app_strings['LBL_LIST_OF']." ".$row_count.") ".$next_link." ".$end_link."</td>"; |
||
389 | |||
390 | } |
||
391 | } |
||
392 | $post_html_text = "</tr></table>\n"; |
||
393 | $post_html_text .= "</td>\n"; |
||
394 | $post_html_text .= "</tr>\n"; |
||
395 | $showVCRControl = true; |
||
396 | if(isset($sugar_config['disable_vcr'])) { |
||
397 | $showVCRControl = !$sugar_config['disable_vcr']; |
||
398 | } |
||
399 | if ( $showVCRControl && $html_text != "" ) |
||
400 | $xtpl->assign("PAGINATION",$pre_html_text.$html_text.$post_html_text); |
||
401 | } |
||
402 | |||
403 | |||
404 | function set_base_URL($html_varName) { |
||
405 | |||
406 | if(!isset($this->base_URL)){ |
||
407 | |||
408 | $this->base_URL = $_SERVER['PHP_SELF']; |
||
409 | if(empty($this->base_URL)){ |
||
410 | $this->base_URL = 'index.php'; |
||
411 | } |
||
412 | |||
413 | /*fixes an issue with |
||
414 | deletes when doing a search*/ |
||
415 | foreach($_GET as $name=>$value){ |
||
416 | if(!empty($value)){ |
||
417 | if($name != $this->getSessionVariableName($html_varName,"ORDER_BY") && $name != "offset" && substr_count($name, "ORDER_BY")==0 && $name!="isfirstview"){ |
||
418 | if (is_array($value)) { |
||
419 | foreach($value as $valuename=>$valuevalue){ |
||
420 | $this->base_URL .= "&{$name}[]=".$valuevalue; |
||
421 | } |
||
422 | } else { |
||
423 | if(substr_count( $this->base_URL, '?') > 0){ |
||
424 | $this->base_URL .= "&$name=$value"; |
||
425 | }else{ |
||
426 | $this->base_URL .= "?$name=$value"; |
||
427 | } |
||
428 | } |
||
429 | } |
||
430 | } |
||
431 | } |
||
432 | |||
433 | if($_SERVER['REQUEST_METHOD'] == 'POST'){ |
||
434 | $this->base_URL .= '?'; |
||
435 | if(isset($_REQUEST['action'])) $this->base_URL .= '&action='.$_REQUEST['action']; |
||
436 | if(isset($_REQUEST['record'])) $this->base_URL .= '&record='.$_REQUEST['record']; |
||
437 | if(isset($_REQUEST['module'])) $this->base_URL .= '&module='.$_REQUEST['module']; |
||
438 | } |
||
439 | $this->base_URL .= "&offset="; |
||
440 | } |
||
441 | } |
||
442 | function setListViewRowCount($count) |
||
443 | { |
||
444 | $this->list_row_count = $count; |
||
445 | } |
||
446 | |||
447 | function getListViewRowCount() |
||
448 | { |
||
449 | return $this->list_row_count; |
||
450 | } |
||
451 | |||
452 | /* This method will return in all of these cases: When selecting any of the VCR buttons (start,prev,next or last) |
||
453 | * and navigating from list to detail for the first time. |
||
454 | * if false in this case: the user changes the list query (which generates a new stamp) and pastes a URL |
||
455 | * from a previously navigated item. |
||
456 | */ |
||
457 | function isRequestFromListView($html_varName) |
||
458 | { |
||
459 | $varList = $this->getLocalSessionVariable($html_varName, "FROM_LIST_VIEW"); |
||
460 | if(isset($_GET['stamp']) && isset($varList) && $varList == $_GET['stamp']){ |
||
461 | return true; |
||
462 | } |
||
463 | else{ |
||
464 | return false; |
||
465 | } |
||
466 | } |
||
467 | |||
468 | /** |
||
469 | * Return a variable from the session. uses the new ListView session data. Hence the '2' |
||
470 | * |
||
471 | * @param unknown_type $name - the name of the variable to set in the session |
||
472 | * @param unknown_type $value - the value of the variable to set |
||
473 | */ |
||
474 | function getVariableFromSession($name, $value){ |
||
475 | if(isset($_SESSION[$name."2_".$value])){ |
||
476 | return $_SESSION[$name."2_".$value]; |
||
477 | } |
||
478 | else{ |
||
479 | return ""; |
||
480 | } |
||
481 | } |
||
482 | |||
483 | } |
||
484 | ?> |
||
485 |
On one hand,
eval
might be exploited by malicious users if they somehow manage to inject dynamic content. On the other hand, with the emergence of faster PHP runtimes like the HHVM,eval
prevents some optimization that they perform.