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 = '
';
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 = " " . get_image ( $image_path . "EditLayout", "border='0' alt='Edit Layout' align='bottom'" ) . "";
}
$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, "" );
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;
}
}
?>