%PDF- %PDF-
Direktori : /var/www/crm/include/Dashlets/ |
Current File : /var/www/crm/include/Dashlets/DashletGenericChart.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". ********************************************************************************/ require_once('include/Dashlets/Dashlet.php'); require_once('include/generic/LayoutManager.php'); abstract class DashletGenericChart extends Dashlet { /** * The title of the dashlet * @var string */ public $title; /** * @see Dashlet::$isConfigurable */ public $isConfigurable = true; /** * @see Dashlet::$isRefreshable */ public $isRefreshable = true; /** * location of smarty template file for configuring * @var string */ protected $_configureTpl = 'include/Dashlets/DashletGenericChartConfigure.tpl'; /** * Bean file used in this Dashlet * @var object */ private $_seedBean; /** * Module used in this Dashlet * @var string */ protected $_seedName; /** * Array of fields and thier defintions that we are searching on * @var array */ protected $_searchFields; /** * smarty object for the generic configuration template * @var object */ private $_configureSS; /** * Constructor * * @param int $id * @param array $options */ public function __construct( $id, array $options = null ) { parent::Dashlet($id); if ( isset($options) ) { foreach ( $options as $key => $value ) { $this->$key = $value; } } // load searchfields $classname = get_class($this); if ( is_file("modules/Charts/Dashlets/$classname/$classname.data.php") ) { require("modules/Charts/Dashlets/$classname/$classname.data.php"); $this->_searchFields = $dashletData[$classname]['searchFields']; } // load language files $this->loadLanguage($classname, 'modules/Charts/Dashlets/'); if ( empty($options['title']) ) $this->title = $this->dashletStrings['LBL_TITLE']; if ( isset($options['autoRefresh']) ) $this->autoRefresh = $options['autoRefresh']; $this->layoutManager = new LayoutManager(); $this->layoutManager->setAttribute('context', 'Report'); // fake a reporter object here just to pass along the db type used in many widgets. // this should be taken out when sugarwidgets change $temp = (object) array('db' => &$GLOBALS['db'], 'report_def_str' => ''); $this->layoutManager->setAttributePtr('reporter', $temp); } /** * @see Dashlet::setRefreshIcon() */ public function setRefreshIcon() { $additionalTitle = ''; if($this->isRefreshable) $additionalTitle .= '<a href="#" onclick="SUGAR.mySugar.retrieveDashlet(\'' . $this->id . '\',\'predefined_chart\'); return false;"><!--not_in_theme!--><img border="0" title="' . translate('LBL_DASHLET_REFRESH', 'Home') . '" alt="' . translate('LBL_DASHLET_REFRESH', 'Home') . '" src="' . SugarThemeRegistry::current()->getImageURL('dashlet-header-refresh.png').'"/></a>'; return $additionalTitle; } /** * Displays the javascript for the dashlet * * @return string javascript to use with this dashlet */ public function displayScript() { require_once('include/SugarCharts/SugarChartFactory.php'); $sugarChart = SugarChartFactory::getInstance(); return $sugarChart->getDashletScript($this->id); } /** * Gets the smarty object for the config window. Designed to allow lazy loading the object * when it's needed. */ protected function getConfigureSmartyInstance() { if ( !($this->_configureSS instanceof Sugar_Smarty) ) { $this->_configureSS = new Sugar_Smarty(); } return $this->_configureSS; } /** * Saves the chart config options * Filter the $_REQUEST and only save only the needed options * * @param array $req * @return array */ public function saveOptions( $req ) { global $timedate; $options = array(); foreach($req as $name => $value) if(!is_array($value)) $req[$name] = trim($value); foreach($this->_searchFields as $name => $params) { $widgetDef = $params; if ( isset($this->getSeedBean()->field_defs[$name]) ) $widgetDef = $this->getSeedBean()->field_defs[$name]; if ( $widgetDef['type'] == 'date') // special case date types $options[$widgetDef['name']] = $timedate->swap_formats($req['type_'.$widgetDef['name']], $timedate->get_date_format(), $timedate->dbDayFormat); elseif ( $widgetDef['type'] == 'time') // special case time types $options[$widgetDef['name']] = $timedate->swap_formats($req['type_'.$widgetDef['name']], $timedate->get_time_format(), $timedate->dbTimeFormat); elseif ( $widgetDef['type'] == 'datepicker') // special case datepicker types $options[$widgetDef['name']] = $timedate->swap_formats($req[$widgetDef['name']], $timedate->get_date_format(), $timedate->dbDayFormat); elseif (!empty($req[$widgetDef['name']])) $options[$widgetDef['name']] = $req[$widgetDef['name']]; } if (!empty($req['dashletTitle'])) $options['title'] = $req['dashletTitle']; $options['autoRefresh'] = empty($req['autoRefresh']) ? '0' : $req['autoRefresh']; return $options; } /** * Handles displaying the chart dashlet configuration popup window * * @return string HTML to return to the browser */ public function displayOptions() { $currentSearchFields = array(); if ( is_array($this->_searchFields) ) { foreach($this->_searchFields as $name=>$params) { if(!empty($name)) { $name = strtolower($name); $currentSearchFields[$name] = array(); $widgetDef = $params; if ( isset($this->getSeedBean()->field_defs[$name]) ) $widgetDef = $this->getSeedBean()->field_defs[$name]; if($widgetDef['type'] == 'enum' || $widgetDef['type'] == 'singleenum') $widgetDef['remove_blank'] = true; // remove the blank option for the dropdown if ( empty($widgetDef['input_name0']) ) $widgetDef['input_name0'] = empty($this->$name) ? '' : $this->$name; $currentSearchFields[$name]['label'] = translate($widgetDef['vname'], $this->getSeedBean()->module_dir); if ( $currentSearchFields[$name]['label'] == $widgetDef['vname'] ) $currentSearchFields[$name]['label'] = translate($widgetDef['vname'], 'Charts'); $currentSearchFields[$name]['input'] = $this->layoutManager->widgetDisplayInput($widgetDef, true, (empty($this->$name) ? '' : $this->$name)); } else { // ability to create spacers in input fields $currentSearchFields['blank' + $count]['label'] = ''; $currentSearchFields['blank' + $count]['input'] = ''; $count++; } } } $this->currentSearchFields = $currentSearchFields; $this->getConfigureSmartyInstance()->assign('title',translate('LBL_TITLE','Charts')); $this->getConfigureSmartyInstance()->assign('save',$GLOBALS['app_strings']['LBL_SAVE_BUTTON_LABEL']); $this->getConfigureSmartyInstance()->assign('clear',$GLOBALS['app_strings']['LBL_CLEAR_BUTTON_LABEL']); $this->getConfigureSmartyInstance()->assign('id', $this->id); $this->getConfigureSmartyInstance()->assign('searchFields', $this->currentSearchFields); $this->getConfigureSmartyInstance()->assign('dashletTitle', $this->title); $this->getConfigureSmartyInstance()->assign('dashletType', 'predefined_chart'); $this->getConfigureSmartyInstance()->assign('module', $_REQUEST['module']); $this->getConfigureSmartyInstance()->assign('showClearButton', $this->isConfigPanelClearShown); if($this->isAutoRefreshable()) { $this->getConfigureSmartyInstance()->assign('isRefreshable', true); $this->getConfigureSmartyInstance()->assign('autoRefresh', $GLOBALS['app_strings']['LBL_DASHLET_CONFIGURE_AUTOREFRESH']); $this->getConfigureSmartyInstance()->assign('autoRefreshOptions', $this->getAutoRefreshOptions()); $this->getConfigureSmartyInstance()->assign('autoRefreshSelect', $this->autoRefresh); } return parent::displayOptions() . $this->getConfigureSmartyInstance()->fetch($this->_configureTpl); } /** * Returns the DashletGenericChart::_seedBean object. Designed to allow lazy loading the object * when it's needed. * * @return object */ protected function getSeedBean() { if ( !($this->_seedBean instanceof SugarBean) ) $this->_seedBean = SugarModule::get($this->_seedName)->loadBean(); return $this->_seedBean; } /** * Returns the built query read to feed into SugarChart::getData() * * @return string SQL query */ protected function constructQuery() { return ''; } /** * Returns the array of group by parameters for SugarChart::$group_by * * @return string SQL query */ protected function constructGroupBy() { return array(); } /** * Displays the Dashlet, must call process() prior to calling this * * @return string HTML that displays Dashlet */ public function display() { return parent::display() . $this->processAutoRefresh(); } /** * Processes and displays the auto refresh code for the dashlet * * @param int $dashletOffset * @return string HTML code */ protected function processAutoRefresh($dashletOffset = 0) { global $sugar_config; if ( empty($dashletOffset) ) { $dashletOffset = 0; $module = $_REQUEST['module']; if(isset($_REQUEST[$module.'2_'.strtoupper($this->getSeedBean()->object_name).'_offset'])) { $dashletOffset = $_REQUEST[$module.'2_'.strtoupper($this->getSeedBean()->object_name).'_offset']; } } if ( !$this->isRefreshable ) { return ''; } if ( !empty($sugar_config['dashlet_auto_refresh_min']) && $sugar_config['dashlet_auto_refresh_min'] == -1 ) { return ''; } $autoRefreshSS = new Sugar_Smarty(); $autoRefreshSS->assign('dashletOffset', $dashletOffset); $autoRefreshSS->assign('dashletId', $this->id); $autoRefreshSS->assign('strippedDashletId', str_replace("-","",$this->id)); //javascript doesn't like "-" in function names if ( empty($this->autoRefresh) ) { $this->autoRefresh = 0; } elseif ( !empty($sugar_config['dashlet_auto_refresh_min']) && $sugar_config['dashlet_auto_refresh_min'] > $this->autoRefresh ) { $this->autoRefresh = $sugar_config['dashlet_auto_refresh_min']; } $autoRefreshSS->assign('dashletRefreshInterval', $this->autoRefresh * 1000); $autoRefreshSS->assign('url', "predefined_chart"); $tpl = 'include/Dashlets/DashletGenericAutoRefresh.tpl'; if ( $_REQUEST['action'] == "DynamicAction" ) { $tpl = 'include/Dashlets/DashletGenericAutoRefreshDynamic.tpl'; } return $autoRefreshSS->fetch($tpl); } }