%PDF- %PDF-
| Direktori : /var/www/crm/include/generic/SugarWidgets/ |
| Current File : /var/www/crm/include/generic/SugarWidgets/SugarWidgetReportField.php |
<?php
if(!defined('sugarEntry') || !sugarEntry) die('Not A Valid Entry Point');
/*********************************************************************************
* SugarCRM Community Edition is a customer relationship management program developed by
* SugarCRM, Inc. Copyright (C) 2004-2012 SugarCRM Inc.
*
* This program is free software; you can redistribute it and/or modify it under
* the terms of the GNU Affero General Public License version 3 as published by the
* Free Software Foundation with the addition of the following permission added
* to Section 15 as permitted in Section 7(a): FOR ANY PART OF THE COVERED WORK
* IN WHICH THE COPYRIGHT IS OWNED BY SUGARCRM, SUGARCRM DISCLAIMS THE WARRANTY
* OF NON INFRINGEMENT OF THIRD PARTY RIGHTS.
*
* This program is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
* FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more
* details.
*
* You should have received a copy of the GNU Affero General Public License along with
* this program; if not, see http://www.gnu.org/licenses or write to the Free
* Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
* 02110-1301 USA.
*
* You can contact SugarCRM, Inc. headquarters at 10050 North Wolfe Road,
* SW2-130, Cupertino, CA 95014, USA. or at email address contact@sugarcrm.com.
*
* The interactive user interfaces in modified source and object code versions
* of this program must display Appropriate Legal Notices, as required under
* Section 5 of the GNU Affero General Public License version 3.
*
* In accordance with Section 7(b) of the GNU Affero General Public License version 3,
* these Appropriate Legal Notices must retain the display of the "Powered by
* SugarCRM" logo. If the display of the logo is not reasonably feasible for
* technical reasons, the Appropriate Legal Notices must display the words
* "Powered by SugarCRM".
********************************************************************************/
$used_aliases = array();
$alias_map = array();
class SugarWidgetReportField extends SugarWidgetField
{
/**
* Layout manager reporter attribute
* @var SugarBean
*/
protected $reporter;
function SugarWidgetReportField(&$layout_manager) {
parent::SugarWidgetField($layout_manager);
$this->reporter = $this->layout_manager->getAttribute("reporter");
}
function getSubClass($layout_def)
{
if (! empty($layout_def['type']))
{
if ($layout_def['type'] == 'time') {
$layout_def['widget_class'] = 'Fielddate';
} else {
$layout_def['widget_class'] = 'Field'.$layout_def['type'];
}
return $this->layout_manager->getClassFromWidgetDef($layout_def);
} else {
return $this;
}
}
function display($layout_def)
{
$obj = $this->getSubClass($layout_def);
$context = $this->layout_manager->getAttribute('context');//_ppd($context);
$func_name = 'display'.$context;
if ( ! empty($context) && method_exists($obj,$func_name))
{
return $obj->$func_name($layout_def);
} else
{
return 'display not found:'.$func_name;
}
}
function _get_column_select_special($layout_def)
{
$alias = '';
if ( ! empty($layout_def['table_alias']))
{
$alias = $layout_def['table_alias'];
}
if ($layout_def['name'] == 'weighted_sum' )
{
return sprintf("SUM(%s * %s * 0.01)", $this->reporter->db->convert("$alias.probability","IFNULL", array(0)),
$this->reporter->db->convert("$alias.amount_usdollar","IFNULL", array(0)));
}
if ($layout_def['name'] == 'weighted_amount' )
{
return sprintf("AVG(%s * %s * 0.01)", $this->reporter->db->convert("$alias.probability","IFNULL", array(0)),
$this->reporter->db->convert("$alias.amount_usdollar","IFNULL", array(0)));
}
}
function _get_column_select($layout_def)
{
global $reportAlias;
if (!isset($reportAlias)) {
$reportAlias = array();
}
if ( ! empty($layout_def['table_alias'])) {
$alias = $layout_def['table_alias'].".".$layout_def['name'];
} else if (! empty($layout_def['name'])) {
$alias = $layout_def['name'];
} else {
$alias = "*";
}
if ( ! empty($layout_def['group_function']) )
{
if ($layout_def['name'] == 'weighted_sum' || $layout_def['name'] == 'weighted_amount')
{
$alias = $this->_get_column_select_special($layout_def);
$reportAlias[$alias] = $layout_def;
return $alias;
}
// Removed ISNULL check as per bug 49452
$alias = "{$layout_def['group_function']}($alias)";
//$this->reporter->db->convert($alias, "IFNULL", array(0)));
}
$reportAlias[$alias] = $layout_def;
return $alias;
}
function querySelect(&$layout_def)
{
return $this->_get_column_select($layout_def)." ".$this->_get_column_alias($layout_def)."\n";
}
function queryGroupBy($layout_def)
{
return $this->_get_column_select($layout_def)." \n";
}
function queryOrderBy($layout_def)
{
if(!empty($this->reporter->all_fields[$layout_def['column_key']])) $field_def = $this->reporter->all_fields[$layout_def['column_key']];
if (!empty($layout_def['group_function']))
{
$order_by = $this->_get_column_alias($layout_def);
}
elseif (!empty($field_def['sort_on']))
{
$order_by = $layout_def['table_alias'].".".$field_def['sort_on'];
if(!empty($field_def['sort_on2']))
$order_by .= ', ' . $layout_def['table_alias'].".".$field_def['sort_on2'];
}
else {
/**
* Bug #54990
* use the table and column names in order by in order to support all databases
*/
$order_by = $layout_def['table_alias'] . "." . $layout_def['name'] . " \n";
}
if ( empty($layout_def['sort_dir']) || $layout_def['sort_dir'] == 'a')
{
return $order_by." ASC";
} else {
return $order_by." DESC";
}
}
function queryFilter($layout_def)
{
$method_name = "queryFilter".$layout_def['qualifier_name'];
return $this->$method_name($layout_def);
}
function displayHeaderCell($layout_def)
{
global $start_link_wrapper,$end_link_wrapper;
// don't show sort links if name isn't defined
$no_sort = $this->layout_manager->getAttribute('no_sort');
if(empty($layout_def['name']) || ! empty($no_sort) || ! empty($layout_def['no_sort']))
{
return $layout_def['label'];
}
$sort_by ='';
if ( ! empty($layout_def['table_key']) && ! empty($layout_def['name']) ) {
if (! empty($layout_def['group_function']) && $layout_def['group_function'] == 'count') {
$sort_by = 'count';
} else {
$sort_by = $layout_def['table_key'].":".$layout_def['name'];
if ( ! empty($layout_def['column_function'])) {
$sort_by .= ':'.$layout_def['column_function'];
} else if ( ! empty($layout_def['group_function']) ) {
$sort_by .= ':'.$layout_def['group_function'];
}
}
} else {
return $this->displayHeaderCellPlain($layout_def);
}
$start = empty($start_link_wrapper) ? '': $start_link_wrapper;
$end = empty($end_link_wrapper) ? '': $end_link_wrapper;
// unable to retrieve the vardef here, exclude columns of type clob/text from being sortable
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'))) {
$header_cell = "<a class=\"listViewThLinkS1\" href=\"".$start.$sort_by.$end."\">";
$header_cell .= $this->displayHeaderCellPlain($layout_def);
$header_cell .= ListView::getArrowUpDownStart(isset($layout_def['sort']) ? $layout_def['sort'] : '');
$header_cell .= ListView::getArrowUpDownEnd(isset($layout_def['sort']) ? $layout_def['sort'] : '');
$header_cell .= "</a>";
return $header_cell;
}
return $this->displayHeaderCellPlain($layout_def);
}
function query($layout_def)
{
$obj = $this->getSubClass($layout_def);
$context = $this->layout_manager->getAttribute('context');
$func_name = 'query'.$context;
if ( ! empty($context) && method_exists($obj,$func_name))
{
return $obj->$func_name($layout_def);
} else
{
return '';
}
}
function _get_column_alias($layout_def)
{
$alias_arr = array();
if (!empty($layout_def['table_key']) && $layout_def['table_key'] == 'self' && !empty($layout_def['name']) && $layout_def['name'] == 'id')
{
return 'primaryid';
}
// Bug: 44605
// this comment is being added to trigger the upgrade package
if ( ! empty($layout_def['group_function']) && $layout_def['group_function']=='count')
{
return $layout_def['table_alias'] . '__count';
}
if ( ! empty($layout_def['table_alias']))
{
array_push($alias_arr,$layout_def['table_alias']);
}
if ( ! empty($layout_def['group_function']) && $layout_def['group_function'] != 'weighted_amount' && $layout_def['group_function'] != 'weighted_sum')
{
array_push($alias_arr,$layout_def['group_function']);
} else if ( ! empty($layout_def['column_function']))
{
array_push($alias_arr,$layout_def['column_function']);
} else if ( ! empty($layout_def['qualifier']))
{
array_push($alias_arr,$layout_def['qualifier']);
}
if ( ! empty($layout_def['name']))
{
array_push($alias_arr,$layout_def['name']);
}
global $used_aliases, $alias_map;
$alias = strtolower(implode("_",$alias_arr));
$short_alias = $this->getTruncatedColumnAlias($alias);
if ( empty($used_aliases[$short_alias]))
{
$alias_map[$alias] = $short_alias;
$used_aliases[$short_alias] = 1;
return $short_alias;
} else if ( ! empty($alias_map[$alias]) )
{
return $alias_map[$alias];
} else {
$alias_map[$alias] = $short_alias.'_'.$used_aliases[$short_alias];
$used_aliases[$short_alias]++;
return $alias_map[$alias];
}
}
function queryFilterEmpty($layout_def)
{
$column = $this->_get_column_select($layout_def);
return "($column IS NULL OR $column = ".$this->reporter->db->emptyValue($layout_def['type']).")";
}
function queryFilterIs($layout_def)
{
return '( '.$this->_get_column_select($layout_def)."='".$GLOBALS['db']->quote($layout_def['input_name0'])."')\n";
}
function queryFilteris_not($layout_def)
{
return '( '.$this->_get_column_select($layout_def)."<>'".$GLOBALS['db']->quote($layout_def['input_name0'])."')\n";
}
function queryFilterNot_Empty($layout_def)
{
$column = $this->_get_column_select($layout_def);
return "($column IS NOT NULL AND $column <> ".$this->reporter->db->emptyValue($layout_def['type']).")";
}
}