Files
crm.e5.pl/modules/EcmCalls/SubPanel/EcmCallsSubPanel.php
2024-04-27 09:23:34 +02:00

396 lines
14 KiB
PHP
Executable File

<?php
if (! defined ( 'sugarEntry' ) || ! sugarEntry)
die ( 'Not A Valid Entry Point' );
/**
* Generic sub-panel class
*
* SugarCRM is a customer relationship management program developed by
* SugarCRM, Inc. Copyright (C) 2004 - 2007 SugarCRM Inc.
*
* This program is free software; you can redistribute it and/or modify it under
* the terms of the GNU 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 General Public License for more
* details.
*
* You should have received a copy of the GNU 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 General Public License version 3.
*
* In accordance with Section 7(b) of the GNU 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 ('XTemplate/xtpl.php');
require_once ('modules/EcmCalls/ListView/EcmCallsListView.php');
require_once ('include/dir_inc.php');
require_once ('include/utils/file_utils.php');
require_once ('include/SubPanel/registered_layout_defs.php');
//AG todo remove subpanedata and subpanel id from this class...
/*
* A single subpanel
*/
class EcmCallsSubPanel {
var $hideNewButton = false;
var $subpanel_id;
var $parent_record_id;
var $parent_module; // the name of the parent module
var $parent_bean; // the instantiated bean of the parent
var $template_file;
var $linked_fields;
var $action = 'DetailView';
var $show_select_button = true;
var $subpanel_define = null; // contains the layout_def.php
var $subpane_defs;
var $subpanel_query = null;
function EcmCallsSubPanel($module,$record_id,$subpanel_id,$subpanelDef,$layout_def_key = '') {
global $theme, $beanList, $beanFiles, $focus, $app_strings;
$this->subpanel_defs = $subpanelDef;
$this->subpanel_id = $subpanel_id;
$this->parent_record_id = $record_id;
$this->parent_module = $module;
$this->parent_bean = $focus;
$result = $focus;
if (empty ( $result )) {
$parent_bean_name = $beanList [$module];
$parent_bean_file = $beanFiles [$parent_bean_name];
require_once ($parent_bean_file);
$this->parent_bean = new $parent_bean_name ( );
$this->parent_bean->retrieve ( $this->parent_record_id );
$result = $this->parent_bean;
}
if ($record_id != 'fab4' && $result == null) {
sugar_die ( $app_strings ['ERROR_NO_RECORD'] );
}
if (empty ( $subpanelDef )) {
//load the subpanel by name.
if (! class_exists ( 'MyClass' )) {
require ('include/SubPanel/SubPanelDefinitions.php');
}
$panelsdef = new SubPanelDefinitions ( $result, $layout_def_key );
$subpanelDef = $panelsdef->load_subpanel ( $subpanel_id );
$this->subpanel_defs = $subpanelDef;
}
}
function setTemplateFile($template_file) {
$this->template_file = $template_file;
}
function setBeanList(&$value) {
$this->bean_list = $value;
}
function setHideNewButton($value) {
$this->hideNewButton = $value;
}
function getHeaderText($currentModule) {
}
function get_buttons($panel_query = null) {
$thisPanel = & $this->subpanel_defs;
$subpanel_def = $thisPanel->get_buttons ();
if (! isset ( $this->listview )) {
$this->listview = new EcmCallsListView ( );
}
$layout_manager = $this->listview->getLayoutManager ();
$widget_contents = '<div class="listViewButtons"><table cellpadding="0" cellspacing="0"><tr>';
foreach ( $subpanel_def as $widget_data ) {
$widget_data ['query'] = urlencode ( $panel_query );
$widget_data ['action'] = $_REQUEST ['action'];
$widget_data ['module'] = $thisPanel->get_inst_prop_value ( 'module' );
$widget_data ['focus'] = $this->parent_bean;
$widget_data ['subpanel_definition'] = $thisPanel;
$widget_contents .= '<td style="padding-right: 2px; padding-bottom: 2px;">' . "\n";
if (empty ( $widget_data ['widget_class'] )) {
$widget_contents .= "widget_class not defined for top subpanel buttons";
} else {
$widget_contents .= $layout_manager->widgetDisplay ( $widget_data );
}
$widget_contents .= '</td>';
}
$widget_contents .= '</tr></table></div>';
return $widget_contents;
}
function ProcessSubPanelListView($xTemplatePath,&$mod_strings) {
global $app_strings;
global $image_path;
global $current_user;
global $sugar_config;
if (isset ( $this->listview )) {
$ListView = & $this->listview;
} else {
$ListView = new EcmCallsListView ( );
}
$ListView->initNewXTemplate ( $xTemplatePath, $this->subpanel_defs->mod_strings );
$ListView->xTemplateAssign ( "RETURN_URL", "&return_module=" . $this->parent_module . "&return_action=DetailView&return_id=" . $this->parent_bean->id );
$ListView->xTemplateAssign ( "RELATED_MODULE", $this->parent_module ); // TODO: what about unions?
$ListView->xTemplateAssign ( "RECORD_ID", $this->parent_bean->id );
$ListView->xTemplateAssign ( "EDIT_INLINE_PNG", get_image ( $image_path . 'edit_inline', 'align="absmiddle" alt="' . $app_strings ['LNK_EDIT'] . '" border="0"' ) );
$ListView->xTemplateAssign ( "DELETE_INLINE_PNG", get_image ( $image_path . 'delete_inline', 'align="absmiddle" alt="' . $app_strings ['LNK_DELETE'] . '" border="0"' ) );
$ListView->xTemplateAssign ( "REMOVE_INLINE_PNG", get_image ( $image_path . 'delete_inline', 'align="absmiddle" alt="' . $app_strings ['LNK_REMOVE'] . '" border="0"' ) );
$header_text = '';
if (is_admin ( $current_user ) && $_REQUEST ['module'] != 'DynamicLayout' && ! empty ( $_SESSION ['editinplace'] )) {
$exploded = explode ( '/', $xTemplatePath );
$file_name = $exploded [sizeof ( $exploded ) - 1];
$mod_name = $exploded [sizeof ( $exploded ) - 2];
$header_text = "&nbsp;<a href='index.php?action=index&module=DynamicLayout&from_action=$file_name&from_module=$mod_name&mod_lang=" . $_REQUEST ['module'] . "'>" . get_image ( $image_path . "EditLayout", "border='0' alt='Edit Layout' align='bottom'" ) . "</a>";
}
$ListView->setHeaderTitle ( '' );
$ListView->setHeaderText ( '' );
ob_start ();
$ListView->is_dynamic = true;
$ListView->records_per_page = $sugar_config ['list_max_entries_per_subpanel'] + 0;
$ListView->start_link_wrapper = "javascript:showSubPanel('" . $this->subpanel_id . "','";
$ListView->subpanel_id = $this->subpanel_id;
$ListView->end_link_wrapper = "',true);";
$where = '';
$ListView->setQuery ( $where, '', '', '' );
$ListView->show_export_button = false;
//function returns the query that was used to populate sub-panel data.
$query = $ListView->process_dynamic_listview ( $this->parent_module, $this->parent_bean, $this->subpanel_defs );
$this->subpanel_query = $query;
$ob_contents = ob_get_contents ();
ob_end_clean ();
$ob_contents = str_replace('action=SubPanelViewerMy','action=SubPanelViewer',$ob_contents);
$ob_contents = str_replace('action=SubPanelViewer','action=SubPanelViewerMy',$ob_contents);
return $ob_contents;
}
/*
* Display the subpanel
*/
function display() {
global $timedate;
global $mod_strings;
global $app_strings;
global $app_list_strings;
global $gridline, $theme;
global $beanList;
global $beanFiles;
global $current_language;
require_once ('themes/' . $theme . '/layout_utils.php');
$image_path = 'themes/' . $theme . '/images/';
$result_array = array ( );
$return_string = $this->ProcessSubPanelListView ( $this->template_file, $result_array );
print $return_string;
}
function getModulesWithSubpanels() {
global $beanList;
$dir = dir ( 'modules' );
$modules = array ( );
while ( $entry = $dir->read () ) {
if (file_exists ( 'modules/' . $entry . '/layout_defs.php' )) {
$modules [$entry] = $entry;
}
}
return $modules;
}
/*
* Get an array of subpanels for this module
*/
function getModuleSubpanels($module) {
require_once ('include/SubPanel/SubPanelDefinitions.php');
global $beanList, $beanFiles;
if (! isset ( $beanList [$module] )) {
return array ( );
}
$class = $beanList [$module];
require_once ($beanFiles [$class]);
$mod = new $class ( );
$spd = new SubPanelDefinitions ( $mod );
$tabs = $spd->get_available_tabs (true);
$ret_tabs = array ( );
$reject_tabs = array ('history' => 1, 'activities' => 1 );
foreach ( $tabs as $key => $tab ) {
foreach($tab as $k=>$v){
if (! isset ( $reject_tabs [$k] )) {
$ret_tabs [$k] = $v;
}
}
}
return $ret_tabs;
}
/*
* Update the definition for a subpanel
* Creates the new definition in the Ext directory and then uses the module installer to activate the new definition
* @param panel A string identifier for the subpanel to update
* @param subsection The section of the definition to be overridden (for example,
* @param override The new definition as an Array
*/
function saveSubPanelDefOverride($panel,$subsection,$override) {
global $layout_defs, $beanList;
//save the new subpanel
$name = "subpanel_layout['list_fields']";
//bugfix: load looks for moduleName/metadata/subpanels, not moduleName/subpanels
$path = 'custom/modules/' . $panel->_instance_properties ['module'] . '/metadata/subpanels';
$filename = $panel->parent_bean->object_name . $panel->_instance_properties ['subpanel_name'];
mkdir_recursive ( $path, true );
write_array_to_file ( $name, $override, $path . '/' . $filename . '.php' );
//save the override for the layoutdef
$name = "layout_defs['" . $panel->parent_bean->module_dir . "']['subpanel_setup']['" . strtolower ( $panel->name ) . "']"; // tyoung 10.12.07 pushed panel->name to lowercase to match case in subpaneldefs.php files - gave error on bad index 'module' as this override key didn't match the key in the subpaneldefs
$extname = '_override' . $panel->parent_bean->object_name . $panel->_instance_properties ['module'] . $panel->_instance_properties ['subpanel_name'];
$newValue = override_value_to_string ( $name, 'override_subpanel_name', $filename );
mkdir_recursive ( 'custom/Extension/modules/' . $panel->parent_bean->module_dir . '/Ext/Layoutdefs', true );
$fp = fopen ( 'custom/Extension/modules/' . $panel->parent_bean->module_dir . "/Ext/Layoutdefs/$extname.php", 'w' );
fwrite ( $fp, "<?php\n//auto-generated file DO NOT EDIT\n$newValue\n?>" );
fclose ( $fp );
require_once ('ModuleInstall/ModuleInstaller.php');
$moduleInstaller = new ModuleInstaller ( );
$moduleInstaller->silent = true; // make sure that the ModuleInstaller->log() function doesn't echo while rebuilding the layoutdefs
$moduleInstaller->rebuild_layoutdefs ();
if (file_exists ( 'modules/' . $panel->parent_bean->module_dir . '/layout_defs.php' ))
include ('modules/' . $panel->parent_bean->module_dir . '/layout_defs.php');
if (file_exists ( 'custom/modules/' . $panel->parent_bean->module_dir . '/Ext/Layoutdefs/layoutdefs.ext.php' ))
include ('custom/modules/' . $panel->parent_bean->module_dir . '/Ext/Layoutdefs/layoutdefs.ext.php');
}
function get_subpanel_setup($module) {
$subpanel_setup = '';
$layout_defs = get_layout_defs ();
if (! empty ( $layout_defs ) && ! empty ( $layout_defs [$module] ['subpanel_setup'] )) {
$subpanel_setup = $layout_defs [$module] ['subpanel_setup'];
}
return $subpanel_setup;
}
/**
* Retrieve the subpanel definition for a specified subpanel
* The definition is a merge of the default definition and any custom definition
* @param module The module name
* @param subpanel_id Subpanel identifier (string)
* @return Array
*/
function getSubPanelDefine($module,$subpanel_id) {
$default_subpanel_define = SubPanel::_get_default_subpanel_define ( $module, $subpanel_id );
$custom_subpanel_define = SubPanel::_get_custom_subpanel_define ( $module, $subpanel_id );
$subpanel_define = array_merge ( $default_subpanel_define, $custom_subpanel_define );
if (empty ( $subpanel_define )) {
print ('Could not load subpanel definition for: ' . $subpanel_id);
}
return $subpanel_define;
}
function _get_custom_subpanel_define($module,$subpanel_id) {
$ret_val = array ( );
if ($subpanel_id != '') {
$layout_defs = get_layout_defs ();
if (! empty ( $layout_defs [$module] ['custom_subpanel_defines'] [$subpanel_id] )) {
$ret_val = $layout_defs [$module] ['custom_subpanel_defines'] [$subpanel_id];
}
}
return $ret_val;
}
/*
* @param module Not used (?)
* @param subpanel_id Subpanel Identifier (string)
*/
function _get_default_subpanel_define($module,$subpanel_id) {
$ret_val = array ( );
if ($subpanel_id != '') {
$layout_defs = get_layout_defs (); // just get the global $layout_defs...
if (! empty ( $layout_defs [$subpanel_id] ['default_subpanel_define'] )) {
$ret_val = $layout_defs [$subpanel_id] ['default_subpanel_define'];
}
}
return $ret_val;
}
}
?>