]> CyberLeo.Net >> Repos - Github/sugarcrm.git/blob - include/generic/SugarWidgets/SugarWidgetReportField.php
Release 6.2.3
[Github/sugarcrm.git] / include / generic / SugarWidgets / SugarWidgetReportField.php
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-2011 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 contact@sugarcrm.com.
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
41 require_once('include/generic/SugarWidgets/SugarWidgetField.php');
42
43 $used_aliases = array();
44 $alias_map = array();
45
46 class SugarWidgetReportField extends SugarWidgetField
47 {
48         function SugarWidgetReportField(&$layout_manager) {
49         parent::SugarWidgetField($layout_manager);
50     }
51
52         function  getSubClass($layout_def)
53         {
54                 if (! empty($layout_def['type']))
55                 {
56
57                         if ($layout_def['type'] == 'time') {
58                                 $layout_def['widget_class'] = 'Fielddate';
59                         } else {
60                                 $layout_def['widget_class'] = 'Field'.$layout_def['type'];
61                         }
62                         return $this->layout_manager->getClassFromWidgetDef($layout_def);
63                 } else {
64                         return $this;
65                 }
66         }
67
68
69  function display($layout_def)
70  {
71         $obj = $this->getSubClass($layout_def);
72
73         $context = $this->layout_manager->getAttribute('context');//_ppd($context);
74         $func_name = 'display'.$context;
75
76
77         if ( ! empty($context) && method_exists($obj,$func_name))
78         {
79                 return  $obj->$func_name($layout_def);
80         } else {
81                 return 'display not found:'.$func_name;
82         }
83  }
84
85
86
87  function _get_column_select_special($layout_def)
88  {
89                 $alias = '';
90                  if ( ! empty($layout_def['table_alias']))
91                  {
92                         $alias = $layout_def['table_alias'];
93                  }
94
95                 $reporter = $this->layout_manager->getAttribute("reporter");
96
97     if ($layout_def['name'] == 'weighted_sum' )
98     {
99                                 return "SUM( ".$alias.".probability * ".$alias.".amount_usdollar * 0.01) ";
100                 }
101     if ($layout_def['name'] == 'weighted_amount' )
102     {
103                                 return "AVG(".$alias.".probability * ".$alias.".amount_usdollar * 0.01) ";
104                 }
105  }
106
107  function _get_column_select($layout_def)
108  {
109         global $reportAlias;
110         if (!isset($reportAlias)) {
111                 $reportAlias = array();
112         }
113                 $alias = '';
114                 $endalias = '';
115
116         if ( ! empty($layout_def['group_function']) )
117         {
118         if ($layout_def['name'] == 'weighted_sum' || $layout_def['name'] == 'weighted_amount')
119         {
120                         $alias = $this->_get_column_select_special($layout_def);
121                         $reportAlias[$alias] = $layout_def;
122                                 return $alias;
123         }
124
125                         $reporter = $this->layout_manager->getAttribute('reporter');
126                                 $alias .= $layout_def['group_function']."(";
127                                 $endalias = ')';
128         }
129         if ( ! empty($layout_def['table_alias']))
130         {
131                 $alias .= $layout_def['table_alias'].".".$layout_def['name'];
132
133         }else if (! empty($layout_def['name'])) {
134                 $alias = $layout_def['name'];
135         } else {
136                 $alias .= "*";
137         }
138         $alias .= $endalias;
139
140         $reportAlias[$alias] = $layout_def;
141         return $alias;
142  }
143
144  function querySelect(&$layout_def)
145  {
146                         return $this->_get_column_select($layout_def)." ".$this->_get_column_alias($layout_def)."\n";
147  }
148
149  function queryGroupBy($layout_def)
150  {
151         return $this->_get_column_select($layout_def)." \n";
152  }
153
154
155  function queryOrderBy($layout_def)
156  {
157         $reporter = $this->layout_manager->getAttribute('reporter');
158         if(!empty($reporter->all_fields[$layout_def['column_key']])) $field_def = $reporter->all_fields[$layout_def['column_key']];
159
160         if ( ! empty( $field_def['sort_on']))
161         {
162                         $order_by = $layout_def['table_alias'].".".$field_def['sort_on'];
163             if(!empty($field_def['sort_on2']))
164                 $order_by .= ', ' . $layout_def['table_alias'].".".$field_def['sort_on2'];
165     }
166         else {
167                 $order_by = $this->_get_column_alias($layout_def)." \n";
168         }
169
170                         if ( empty($layout_def['sort_dir']) || $layout_def['sort_dir'] == 'a')
171                         {
172                                 return $order_by." ASC";
173                         } else {
174                                 return $order_by." DESC";
175                         }
176  }
177
178
179  function queryFilter($layout_def)
180  {
181         $method_name = "queryFilter".$layout_def['qualifier_name'];
182         return $this->$method_name($layout_def);
183  }
184
185         function displayHeaderCell($layout_def)
186         {
187                                 global $start_link_wrapper,$end_link_wrapper;
188
189
190                 // don't show sort links if name isn't defined
191                 $no_sort = $this->layout_manager->getAttribute('no_sort');
192                 if(empty($layout_def['name']) || ! empty($no_sort) || ! empty($layout_def['no_sort']))
193                 {
194                         return $layout_def['label'];
195                 }
196
197
198
199                 $sort_by ='';
200                 if ( ! empty($layout_def['table_key']) && ! empty($layout_def['name']) )
201                 {
202                   if (! empty($layout_def['group_function']) && $layout_def['group_function'] == 'count')
203                   {
204                     $sort_by = 'count';
205                   } else {
206                                 $sort_by = $layout_def['table_key'].":".$layout_def['name'];
207                           if ( ! empty($layout_def['column_function']))
208                           {
209                             $sort_by .= ':'.$layout_def['column_function'];
210                           } else if ( ! empty($layout_def['group_function']) )
211                                 {
212                              $sort_by .= ':'.$layout_def['group_function'];
213                                 }
214                   }
215                 }
216                 else
217                 {
218                         return $this->displayHeaderCellPlain($layout_def);
219                 }
220
221                 $start = $start_link_wrapper;
222                 $end = $end_link_wrapper;
223
224                 $start = empty($start) ? '': $start;
225                 $end = empty($end) ? '': $end;
226
227                 // unable to retrieve the vardef here, exclude columns of type clob/text from being sortable
228
229                 if(!in_array($layout_def['name'], array('description', 'account_description', 'lead_source_description', 'status_description', 'to_addrs', 'cc_addrs', 'bcc_addrs', 'work_log', 'objective', 'resolution'))) {
230                     $header_cell = "<a class=\"listViewThLinkS1\" href=\"".$start.$sort_by.$end."\">";
231                     $header_cell .= $this->displayHeaderCellPlain($layout_def);
232                     $imgArrow = '';
233
234                     if (isset($layout_def['sort']))
235                     {
236                             $imgArrow = $layout_def['sort'];
237                     }
238                     $arrow_start = ListView::getArrowUpDownStart($imgArrow);
239                     $arrow_end = ListView::getArrowEnd();
240                     $header_cell .= ' ' . $arrow_start.$arrow_end."</a>";
241                 }
242                 else {
243                     $header_cell = $this->displayHeaderCellPlain($layout_def);
244                 }
245
246                 return $header_cell;
247         }
248
249         function query($layout_def)
250         {
251                  $obj = $this->getSubClass($layout_def);
252
253                 $context = $this->layout_manager->getAttribute('context');
254                 $func_name = 'query'.$context;
255
256                 if ( ! empty($context) && method_exists($obj,$func_name))
257                  {
258                          return  $obj->$func_name($layout_def);
259                 } else
260                 {
261                         return '';
262                 }
263         }
264
265  function _get_column_alias($layout_def)
266  {
267         $alias_arr = array();
268
269                                 if ($layout_def['table_key'] == 'self' && !empty($layout_def['name']) && $layout_def['name'] == 'id')
270                                 {
271                                         return 'primaryid';
272                                 }
273
274         if ( ! empty($layout_def['group_function']) && $layout_def['group_function']=='count')
275         {
276                 return 'count';
277         }
278
279         if ( ! empty($layout_def['table_alias']))
280         {
281                 array_push($alias_arr,$layout_def['table_alias']);
282         }
283
284         if ( ! empty($layout_def['group_function']) && $layout_def['group_function'] != 'weighted_amount' && $layout_def['group_function'] != 'weighted_sum')
285         {
286                 array_push($alias_arr,$layout_def['group_function']);
287         } else if ( ! empty($layout_def['column_function']))
288         {
289                 array_push($alias_arr,$layout_def['column_function']);
290         } else if ( ! empty($layout_def['qualifier']))
291         {
292                 array_push($alias_arr,$layout_def['qualifier']);
293         }
294
295         if ( ! empty($layout_def['name']))
296         {
297                 array_push($alias_arr,$layout_def['name']);
298         }
299
300                 global $used_aliases, $alias_map;
301
302         $alias = strtolower(implode("_",$alias_arr));
303         
304         $short_alias = $this->getTruncatedColumnAlias($alias);
305
306                 if ( empty($used_aliases[$short_alias]))
307                 {
308                         $alias_map[$alias] = $short_alias;
309                     $used_aliases[$short_alias] = 1;
310                 return $short_alias;
311                 } else if ( ! empty($alias_map[$alias]) )
312                 {
313                         return $alias_map[$alias];
314                 } else {
315                         $alias_map[$alias] = $short_alias.'_'.$used_aliases[$short_alias];
316                   $used_aliases[$short_alias]++;
317                         return $alias_map[$alias];
318                 }
319  }
320
321  function queryFilterEmpty(&$layout_def)
322  {
323          $reporter = $this->layout_manager->getAttribute("reporter");
324          if( $reporter->db->dbType == 'mssql' && $layout_def['type'] == 'currency')
325      {
326          return '( '.$this->_get_column_select($layout_def).' IS NULL OR '.$this->_get_column_select($layout_def)."=0 )\n";
327      }
328      return '( '.$this->_get_column_select($layout_def).' IS NULL OR '.$this->_get_column_select($layout_def)."='' )\n";
329  }
330
331  function queryFilterIs(&$layout_def)
332  {
333         return '( '.$this->_get_column_select($layout_def)."='".$GLOBALS['db']->quote($layout_def['input_name0'])."')\n";
334  }
335
336   function queryFilteris_not(&$layout_def)
337  {
338         return '( '.$this->_get_column_select($layout_def)."<>'".$GLOBALS['db']->quote($layout_def['input_name0'])."')\n";
339  }
340  function queryFilterNot_Empty(&$layout_def)
341  {
342     $reporter = $this->layout_manager->getAttribute("reporter");
343     if( $reporter->db->dbType == 'mssql' && $layout_def['type'] == 'currency')
344     {
345         return '( '.$this->_get_column_select($layout_def).' IS NOT NULL AND '.$this->_get_column_select($layout_def)."<>0 )\n";
346     }
347
348     return '( '.$this->_get_column_select($layout_def).' IS NOT NULL AND '.$this->_get_column_select($layout_def)."<>'' )\n";
349  }
350
351 }
352 ?>