function loadSubpanel($module_name, $child_module)
    {
        $this->parent_module = $module_name;
        $this->child_module = $child_module;
        global $beanList, $beanFiles;
        $class = $beanList[$module_name];
        require_once $beanFiles[$class];
        require_once 'include/SubPanel/SubPanelDefinitions.php';
        $mod = new $class();
        $spd = new SubPanelDefinitions($mod);
        $spd->open_layout_defs(true);
        $panel = $spd->load_subpanel($child_module, true);
        $this->panel = $panel;
        $subpanel = new SubPanel($module_name, 'fab4', $child_module, $panel);
        $subpanel->setTemplateFile('include/SubPanel/SubPanelDynamic.html');
        $oldcontents = ob_get_contents();
        ob_clean();
        $subpanel->display();
        $this->curText = ob_get_contents();
        ob_clean();
        echo $oldcontents;
        $this->subpanel = $subpanel;
        $this->form = <<<EOQ
\t\t</form>
\t\t<form name='studio' method='POST'>
\t\t\t<input type='hidden' name='action' value='saveSubpanel'>
\t\t\t<input type='hidden' name='module' value='Studio'>
\t\t\t<input type='hidden' name='subpanel' value='{$child_module}'>
EOQ;
    }
 function set_subpanel($module_name, $child_module)
 {
     $this->parent_module = $module_name;
     $this->child_module = $child_module;
     global $beanList, $beanFiles;
     $class = $beanList[$module_name];
     require_once $beanFiles[$class];
     require_once 'include/SubPanel/SubPanelDefinitions.php';
     $mod = new $class();
     $spd = new SubPanelDefinitions($mod);
     $spd->open_layout_defs(true);
     $panel = $spd->load_subpanel($child_module, true);
     $this->panel = $panel;
     $subpanel = new SubPanel($module_name, 'fab4', $child_module, $panel);
     $subpanel->setTemplateFile('include/SubPanel/SubPanelDynamic.html');
     ob_flush();
     ob_clean();
     $subpanel->display();
     $this->contents = ob_get_contents();
     ob_clean();
     $this->subpanel = $subpanel;
 }
Example #3
0
 public function testSubpanelOverride()
 {
     // Create Subpanel 1
     $subpanel_1 = array('order' => 100, 'module' => 'Cases', 'subpanel_name' => 'default', 'sort_order' => 'asc', 'sort_by' => 'id', 'title_key' => 'LBL_CONTACTS_CASES_1_FROM_CASES_TITLE', 'get_subpanel_data' => 'contacts_cases_1', 'top_buttons' => array(0 => array('widget_class' => 'SubPanelTopButtonQuickCreate'), 1 => array('widget_class' => 'SubPanelTopSelectButton', 'mode' => 'MultiSelect')));
     $subpanel_list_fields_1['list_fields'] = array('priority' => array('type' => 'enum', 'vname' => 'LBL_PRIORITY', 'sortable' => false, 'width' => '10%', 'default' => true));
     $subpanel_def_1 = new aSubPanel("contacts_cases_1", $subpanel_1, $this->bean);
     $subpanel_1 = new SubPanel('Contacts', 'fab4', $subpanel_def_1->_instance_properties['subpanel_name'], $subpanel_def_1);
     $subpanel_1->saveSubPanelDefOverride($subpanel_def_1, 'list_fields', $subpanel_list_fields_1);
     $path_1 = 'custom/modules/' . $subpanel_def_1->_instance_properties['module'] . '/metadata/subpanels';
     $filename_1 = $subpanel_def_1->parent_bean->object_name . "_subpanel_" . $subpanel_def_1->name;
     $extname_1 = '_override' . $subpanel_def_1->parent_bean->object_name . "_subpanel_" . $subpanel_def_1->name;
     // Create SubPane 2
     $subpanel_2 = array('order' => 100, 'module' => 'Cases', 'subpanel_name' => 'default', 'sort_order' => 'asc', 'sort_by' => 'id', 'title_key' => 'LBL_CONTACTS_CASES_2_FROM_CASES_TITLE', 'get_subpanel_data' => 'contacts_cases_2', 'top_buttons' => array(0 => array('widget_class' => 'SubPanelTopButtonQuickCreate'), 1 => array('widget_class' => 'SubPanelTopSelectButton', 'mode' => 'MultiSelect')));
     $subpanel_list_fields_2 = array('case_number' => array('vname' => 'LBL_LIST_NUMBER', 'width' => '6%', 'default' => true));
     $subpanel_def_2 = new aSubPanel("contacts_cases_2", $subpanel_2, $this->bean);
     $subpanel_2 = new SubPanel('Contacts', 'fab4', $subpanel_def_2->_instance_properties['subpanel_name'], $subpanel_def_2);
     $subpanel_2->saveSubPanelDefOverride($subpanel_def_2, 'list_fields', $subpanel_list_fields_2);
     $path_2 = 'custom/modules/' . $subpanel_def_2->_instance_properties['module'] . '/metadata/subpanels';
     $filename_2 = $subpanel_def_1->parent_bean->object_name . "_subpanel_" . $subpanel_def_2->name;
     $extname_2 = '_override' . $subpanel_def_1->parent_bean->object_name . "_subpanel_" . $subpanel_def_2->name;
     // Check files genertaed by subpanel overriding : layout override and subpanel overire
     $this->filename_check[] = 'custom/Extension/modules/' . $subpanel_def_1->parent_bean->module_dir . "/Ext/Layoutdefs/{$extname_1}.php";
     $this->assertTrue(file_exists(end($this->filename_check)));
     $this->filename_check[] = $path_1 . '/' . $filename_1 . '.php';
     $this->assertTrue(file_exists(end($this->filename_check)));
     $this->filename_check[] = 'custom/Extension/modules/' . $subpanel_def_2->parent_bean->module_dir . "/Ext/Layoutdefs/{$extname_2}.php";
     $this->assertTrue(file_exists(end($this->filename_check)));
     $this->filename_check[] = $path_2 . '/' . $filename_2 . '.php';
     $this->assertTrue(file_exists(end($this->filename_check)));
     // laout_defs are reloaded in saveSubPanelDefOverride method, we lauched it
     global $layout_defs;
     // Check override_subpanel_name are differents
     $this->assertTrue(isset($layout_defs['Contacts']['subpanel_setup']['contacts_cases_1']['override_subpanel_name']));
     $this->assertTrue(isset($layout_defs['Contacts']['subpanel_setup']['contacts_cases_2']['override_subpanel_name']));
     $this->assertNotEquals($layout_defs['Contacts']['subpanel_setup']['contacts_cases_1']['override_subpanel_name'], $layout_defs['Contacts']['subpanel_setup']['contacts_cases_2']['override_subpanel_name']);
 }
 function deploy($defs)
 {
     // first sort out the historical record...
     write_array_to_file(self::HISTORYVARIABLENAME, $this->_viewdefs, $this->historyPathname, 'w', '');
     $this->_history->append($this->historyPathname);
     $this->_viewdefs = $defs;
     require_once 'include/SubPanel/SubPanel.php';
     $subpanel = new SubPanel($this->_moduleName, 'fab4', $this->_subpanelName, $this->_aSubPanelObject);
     $subpanel->saveSubPanelDefOverride($this->_aSubPanelObject, 'list_fields', $defs);
     // now clear the cache so that the results are immediately visible
     MetaDataFiles::clearModuleClientCache($this->_aSubPanelObject->template_instance->module_name, 'view');
     MetaDataFiles::clearModuleClientCache($this->_moduleName, 'layout');
     include_once 'include/TemplateHandler/TemplateHandler.php';
     TemplateHandler::clearCache($this->_moduleName);
 }
Example #5
0
 /**
  * Gets a list of subpanels used by the current module
  */
 function getSubpanels()
 {
     if (!empty($GLOBALS['current_user']) && empty($GLOBALS['modListHeader'])) {
         $GLOBALS['modListHeader'] = query_module_access_list($GLOBALS['current_user']);
     }
     require_once 'include/SubPanel/SubPanel.php';
     $nodes = array();
     $GLOBALS['log']->debug("StudioModule->getSubpanels(): getting subpanels for " . $this->module);
     // counter to add a unique key to assoc array below
     $ct = 0;
     foreach (SubPanel::getModuleSubpanels($this->module) as $name => $label) {
         if ($name == 'users') {
             continue;
         }
         $subname = sugar_ucfirst(!empty($label) ? translate($label, $this->module) : $name);
         $action = "module=ModuleBuilder&action=editLayout&view=ListView&view_module={$this->module}&subpanel={$name}&subpanelLabel=" . urlencode($subname);
         //  bug47452 - adding a unique number to the $nodes[ key ] so if you have 2+ panels
         //  with the same subname they will not cancel each other out
         $nodes[$subname . $ct++] = array('name' => $name, 'label' => $subname, 'action' => $action, 'imageTitle' => $subname, 'imageName' => 'icon_' . ucfirst($name) . '_32', 'altImageName' => 'Subpanels', 'size' => '48');
     }
     return $nodes;
 }
Example #6
0
 /**
  * Gets a list of subpanels used by the current module
  */
 function getSubpanels()
 {
     if (!empty($GLOBALS['current_user']) && empty($GLOBALS['modListHeader'])) {
         $GLOBALS['modListHeader'] = query_module_access_list($GLOBALS['current_user']);
     }
     require_once 'include/SubPanel/SubPanel.php';
     $nodes = array();
     $GLOBALS['log']->debug("StudioModule->getSubpanels(): getting subpanels for " . $this->module);
     foreach (SubPanel::getModuleSubpanels($this->module) as $name => $label) {
         if ($name == 'users') {
             continue;
         }
         $subname = sugar_ucfirst(!empty($label) ? translate($label, $this->module) : $name);
         $nodes[$subname] = array('name' => $name, 'label' => $subname, 'action' => "module=ModuleBuilder&action=editLayout&view=ListView&view_module={$this->module}&subpanel={$name}&subpanelLabel={$subname}", 'imageTitle' => $subname, 'imageName' => 'icon_' . ucfirst($name) . '_32', 'altImageName' => 'Subpanels', 'size' => '48');
     }
     return $nodes;
 }
Example #7
0
 /**
  * @group 53223
  */
 public function testOneToManyRelationshipModule2Modult()
 {
     $_REQUEST['relate_id'] = $this->parentAccount->id;
     $_REQUEST['relate_to'] = $this->relationship->getName();
     // create new account
     $objAccount = new Account();
     $objAccount->name = "AccountBug53223" . $_REQUEST['relate_to'] . time();
     $objAccount->save();
     SugarTestAccountUtilities::setCreatedAccount(array($objAccount->id));
     // Retrieve new data
     $this->parentAccount->retrieve($this->parentAccount->id);
     $objAccount->retrieve($objAccount->id);
     $this->parentAccount->load_relationship($this->relationship->getName());
     $objAccount->load_relationship($this->relationship->getName());
     // Getting data of subpanel of parent bean
     $_REQUEST['module'] = 'Accounts';
     $_REQUEST['action'] = 'DetailView';
     $_REQUEST['record'] = $this->parentAccount->id;
     $_SERVER['REQUEST_METHOD'] = 'GET';
     unset($GLOBALS['focus']);
     $subpanels = new SubPanelDefinitions($this->parentAccount, 'Accounts');
     $subpanelDef = $subpanels->load_subpanel($this->relationship->getName() . 'accounts_ida');
     $subpanel = new SubPanel('Accounts', $this->parentAccount->id, 'default', $subpanelDef);
     $subpanel->setTemplateFile('include/SubPanel/SubPanelDynamic.html');
     $subpanel->display();
     $actual = $this->getActualOutput();
     $this->assertContains($objAccount->name, $actual, 'Account name is not displayed in subpanel of parent account');
     ob_clean();
     // Getting data of subpanel of child bean
     $_REQUEST['module'] = 'Accounts';
     $_REQUEST['action'] = 'DetailView';
     $_REQUEST['record'] = $objAccount->id;
     $_SERVER['REQUEST_METHOD'] = 'GET';
     unset($GLOBALS['focus']);
     $subpanels = new SubPanelDefinitions($objAccount, 'Accounts');
     $subpanelDef = $subpanels->load_subpanel($this->relationship->getName() . 'accounts_ida');
     $subpanel = new SubPanel('Accounts', $objAccount->id, 'default', $subpanelDef);
     $subpanel->setTemplateFile('include/SubPanel/SubPanelDynamic.html');
     $subpanel->display();
     $actual = $this->getActualOutput();
     $this->assertNotContains($this->parentAccount->name, $actual, 'Parent account name is displayed in subpanel of child aaccount');
 }
Example #8
0
}
$subpanel = $_REQUEST['subpanel'];
$record = $_REQUEST['record'];
$module = $_REQUEST['module'];
$image_path = 'themes/' . $theme . '/images/';
if (empty($_REQUEST['inline'])) {
    insert_popup_header($theme);
}
//require_once('include/SubPanel/SubPanelDefinitions.php');
//require_once($beanFiles[$beanList[$_REQUEST['module']]]);
//$focus=new $beanList[$_REQUEST['module']];
//$focus->retrieve($record);
include 'include/SubPanel/SubPanel.php';
$layout_def_key = '';
if (!empty($_REQUEST['layout_def_key'])) {
    $layout_def_key = $_REQUEST['layout_def_key'];
}
$subpanel_object = new SubPanel($module, $record, $subpanel, null, $layout_def_key);
$subpanel_object->setTemplateFile('include/SubPanel/SubPanelDynamic.html');
if (!empty($_REQUEST['mkt_id']) && $_REQUEST['mkt_id'] != 'all') {
    // bug 32910
    $mkt_id = $_REQUEST['mkt_id'];
}
if (!empty($mkt_id)) {
    $subpanel_object->subpanel_defs->_instance_properties['function_parameters']['EMAIL_MARKETING_ID_VALUE'] = $mkt_id;
}
echo empty($_REQUEST['inline']) ? $subpanel_object->get_buttons() : '';
$subpanel_object->display();
if (empty($_REQUEST['inline'])) {
    insert_popup_footer($theme);
}
require_once 'include/SubPanel/SubPanel.php';
require_once 'modules/Studio/parsers/StudioParser.php';
$moduleFiles = StudioParser::getFiles($the_module);
echo '<table width="100%" class="tabForm" cellpadding="0" cellspacing="0"><tr><td align="right"><b>Layouts:</b></td><td class="dataLabel" align="left">';
$count = 0;
foreach ($moduleFiles as $id => $attr) {
    $label = translate($id, $the_module);
    if ($count > 0) {
        echo '&nbsp;|&nbsp;';
    }
    echo " <a href='index.php?module=Studio&action=wizard&wizard=SelectModuleLayout&option={$id}' class='tabFormAdvLink'>{$label}</a>&nbsp;";
    $count++;
}
echo '</td></tr>';
echo '<tr><td align="right"><b>Subpanels:</b></td><td align="left">';
$layout_def = SubPanel::getModuleSubpanels($the_module);
$count = 0;
foreach ($layout_def as $key => $sub) {
    if ($sub == 'users') {
        unset($layout_def[$key]);
    }
}
$totalCount = count($layout_def);
foreach ($layout_def as $sub) {
    if ($count > 0) {
        echo '&nbsp;|&nbsp;';
    }
    $subname = !empty($GLOBALS['layout_defs'][$the_module]['subpanel_setup'][$sub]['title_key']) ? translate($GLOBALS['layout_defs'][$the_module]['subpanel_setup'][$sub]['title_key'], $the_module) : $sub;
    echo "&nbsp;<a href='index.php?module=Studio&action=index&subpanel={$sub}' class='tabFormAdvLink'>{$subname}</a> ";
    $count++;
}
Example #10
0
 function constructSmarty($parser)
 {
     global $mod_strings;
     $smarty = new Sugar_Smarty();
     $smarty->assign('translate', true);
     $smarty->assign('language', $parser->getLanguage());
     $smarty->assign('view', $this->editLayout);
     $smarty->assign('module', "ModuleBuilder");
     $smarty->assign('field_defs', $parser->getFieldDefs());
     $smarty->assign('action', 'listViewSave');
     $smarty->assign('view_module', $this->editModule);
     if (!empty($this->subpanel)) {
         $smarty->assign('subpanel', $this->subpanel);
         $smarty->assign('subpanelLabel', $this->subpanelLabel);
         if (!$this->fromModuleBuilder) {
             $subList = SubPanel::getModuleSubpanels($this->editModule);
             $subRef = $subList[strtolower($this->subpanel)];
             $subTitleKey = !empty($subRef) ? $subRef : "LBL_" . strtoupper($this->subpanel) . "_SUBPANEL_TITLE";
             $subTitle = !empty($subRef) ? translate($subTitleKey, $this->editModule) : UCfirst($this->subpanel);
             $smarty->assign('subpanel_label', $subTitleKey);
             $smarty->assign('subpanel_title', $subTitle);
         }
     }
     $helpName = $this->subpanel ? 'subPanelEditor' : 'listViewEditor';
     $smarty->assign('helpName', $helpName);
     $smarty->assign('helpDefault', 'modify');
     $smarty->assign('title', $this->_constructTitle());
     $groups = array();
     foreach ($parser->columns as $column => $function) {
         // update this so that each field has a properties set
         // properties are name, value, title (optional)
         $groups[$GLOBALS['mod_strings'][$column]] = $parser->{$function}();
         // call the parser functions to populate the list view columns, by default 'default', 'available' and 'hidden'
     }
     foreach ($groups as $groupKey => $group) {
         foreach ($group as $fieldKey => $field) {
             if (isset($field['width'])) {
                 if (substr($field['width'], -1, 1) == '%') {
                     $groups[$groupKey][$fieldKey]['width'] = substr($field['width'], 0, strlen($field['width']) - 1);
                 }
             }
         }
     }
     $smarty->assign('groups', $groups);
     $smarty->assign('from_mb', $this->fromModuleBuilder);
     global $image_path;
     $imageSave = SugarThemeRegistry::current()->getImage('studio_save', '', null, null, '.gif', $mod_strings['LBL_BTN_SAVE']);
     //        $imageHelp = SugarThemeRegistry::current()->getImage('help') ;
     $history = $parser->getHistory();
     $histaction = "ModuleBuilder.history.browse(\"{$this->editModule}\", \"{$this->editLayout}\")";
     if ($this->subpanel) {
         $histaction = "ModuleBuilder.history.browse(\"{$this->editModule}\", \"{$this->editLayout}\", \"{$this->subpanel}\")";
     }
     $restoreAction = "onclick='ModuleBuilder.history.revert(\"{$this->editModule}\", \"{$this->editLayout}\", \"{$history->getLast()}\", \"\")'";
     if ($this->subpanel) {
         $restoreAction = "onclick='ModuleBuilder.history.revert(\"{$this->editModule}\", \"{$this->editLayout}\", \"{$history->getLast()}\", \"{$this->subpanel}\")'";
     }
     $buttons = array();
     $buttons[] = array('id' => 'savebtn', 'name' => 'savebtn', 'image' => $imageSave, 'text' => !$this->fromModuleBuilder ? $GLOBALS['mod_strings']['LBL_BTN_SAVEPUBLISH'] : $GLOBALS['mod_strings']['LBL_BTN_SAVE'], 'actionScript' => "onclick='studiotabs.generateGroupForm(\"edittabs\");if (countListFields()==0) ModuleBuilder.layoutValidation.popup() ; else ModuleBuilder.handleSave(\"edittabs\" )'");
     $buttons[] = array('id' => 'spacer', 'width' => '50px');
     $buttons[] = array('id' => 'historyBtn', 'name' => 'historyBtn', 'text' => translate('LBL_HISTORY'), 'actionScript' => "onclick='{$histaction}'");
     $buttons[] = array('id' => 'historyDefault', 'name' => 'historyDefault', 'text' => translate('LBL_RESTORE_DEFAULT'), 'actionScript' => $restoreAction);
     $smarty->assign('buttons', $this->_buildImageButtons($buttons));
     $editImage = SugarThemeRegistry::current()->getImage('edit_inline', '', null, null, '.gif', $mod_strings['LBL_EDIT']);
     $smarty->assign('editImage', $editImage);
     $deleteImage = SugarThemeRegistry::current()->getImage('delete_inline', '', null, null, '.gif', $mod_strings['LBL_MB_DELETE']);
     $smarty->assign('deleteImage', $deleteImage);
     $smarty->assign('MOD', $GLOBALS['mod_strings']);
     if ($this->fromModuleBuilder) {
         $smarty->assign('MB', true);
         $smarty->assign('view_package', $_REQUEST['view_package']);
         $mb = new ModuleBuilder();
         $module =& $mb->getPackageModule($_REQUEST['view_package'], $this->editModule);
         $smarty->assign('current_mod_strings', $module->getModStrings());
         if ($this->subpanel) {
             if (isset($_REQUEST['local'])) {
                 $smarty->assign('local', '1');
             }
             $smarty->assign("subpanel", $this->subpanel);
         } else {
             $smarty->assign('description', $GLOBALS['mod_strings']['LBL_LISTVIEW_DESCRIPTION']);
         }
     } else {
         if ($this->subpanel) {
             $smarty->assign("subpanel", "{$this->subpanel}");
         } else {
             $smarty->assign('description', $GLOBALS['mod_strings']['LBL_LISTVIEW_DESCRIPTION']);
         }
     }
     return $smarty;
 }
Example #11
0
 function get_list_view_data()
 {
     global $app_strings;
     global $mod_strings;
     $field_list = $this->get_list_view_array();
     $bean = BeanFactory::getBean('xeBayOrders');
     $bean->retrieve($field_list['ID']);
     require_once 'include/SubPanel/SubPanelDefinitions.php';
     $subpanel_definitions = new SubPanelDefinitions($bean);
     $subpanel_definitions->layout_defs['subpanel_setup']['xebaytransactions']['subpanel_name'] = "ForOrderSimple";
     $thisPanel = $subpanel_definitions->load_subpanel("xebaytransactions");
     ob_start();
     include_once 'include/SubPanel/SubPanel.php';
     $subpanel_object = new SubPanel('xeBayOrders', $field_list['ID'], 'all', $thisPanel);
     $subpanel_object->setTemplateFile('modules/xeBayTransactions/SubPanelDynamic.html');
     $subpanel_object->display();
     $subpanel_data = ob_get_contents();
     @ob_end_clean();
     $order_details .= '<p style="margin: 8px 0px 8px 0px;">';
     $order_details .= $field_list['BUYER_USER_ID'];
     $order_details .= '</p>';
     $order_details .= $subpanel_data;
     $field_list['ORDER_DETAILS'] = $order_details;
     if (!empty($field_list['BUYER_CHECKOUT_MESSAGE'])) {
         $message = "<img alt='{$mod_strings['LBL_MESSAGE']}' style='padding: 0px 5px 0px 2px' border='0' onclick=\"SUGAR.util.getStaticAdditionalDetails(this,'";
         $message .= str_replace(array("&#039;"), array("\\'"), $field_list['BUYER_CHECKOUT_MESSAGE']);
         // $message .= $field_list['BUYER_CHECKOUT_MESSAGE'];
         $message .= "','<div style=\\'float:left\\'>{$mod_strings['LBL_MESSAGE']}</div><div style=\\'float: right\\'>";
         $closeVal = "false";
         $message .= "'," . $closeVal . ")\" src='" . SugarThemeRegistry::current()->getImageURL('AlertEmailTemplates.gif') . "' class='info'>";
         $field_list['BUYER_CHECKOUT_MESSAGE'] = $message;
     }
     if ($field_list['PRINT_STATUS']) {
         $field_list['PRINT_STATUS_ICON'] = "<img alt='Print status' border='0' src='" . SugarThemeRegistry::current()->getImageURL('Print_Email.gif') . "'>";
     }
     return $field_list;
 }
\treturn true;
}
</script>
<form method='post' action='index.php'  onsubmit="return get_subpanel_value()">
<input type='hidden' name='action' value='index'>
<input type='hidden' name='module' value='DynamicLayout'>
<input type='hidden' name='edit_subpanel_MSI' value='1'>
<input type='hidden' name='subpanel' id='subpanel' value = ''>
<select id= 'select_subpanel_module' name='select_subpanel_module' onChange='swap_subpanels()'>

EOQ;
echo get_select_options_with_id($subpanelmodules, '');
echo '</select>';
foreach ($subpanelmodules as $mod) {
    echo "<div style='display:none' id='{$mod}'><select id='{$mod}subpanel' name='{$mod}subpanel'>";
    $layout_def = SubPanel::getModuleSubpanels($mod);
    foreach ($layout_def as $sub) {
        echo "<option value='{$sub}'>{$sub}</option>";
    }
    echo '</select></div>';
}
echo '<input type="submit" class="button" name="Submit" value="' . $mod_strings['LBL_SELECT_SUBPANEL'] . '"  ></form>';
echo <<<EOQ
<form name='edit' method='post' action='index.php'>
<input type='hidden' name='action' value='index'>
<input type='hidden' name='module' value='DynamicLayout'>

</form>
EOQ;
echo '<script>swap_subpanels();</script><BR><BR>';
// How To Use Layout Text Block Instructions
Example #13
0
 function display($showContainer = true, $forceTabless = false)
 {
     global $layout_edit_mode, $sugar_version, $sugar_config, $current_user, $app_strings, $modListHeader;
     if (isset($layout_edit_mode) && $layout_edit_mode) {
         return;
     }
     $template = new Sugar_Smarty();
     $template_header = "";
     $template_body = "";
     $template_footer = "";
     $tabs = array();
     $tabs_properties = array();
     $tab_names = array();
     $default_div_display = 'inline';
     if (!empty($sugar_config['hide_subpanels_on_login'])) {
         if (!isset($_SESSION['visited_details'][$this->focus->module_dir])) {
             setcookie($this->focus->module_dir . '_divs', '', 0, null, null, false, true);
             unset($_COOKIE[$this->focus->module_dir . '_divs']);
             $_SESSION['visited_details'][$this->focus->module_dir] = true;
         }
         $default_div_display = 'none';
     }
     $div_cookies = get_sub_cookies($this->focus->module_dir . '_divs');
     if (empty($_REQUEST['subpanels'])) {
         $selected_group = $forceTabless ? '' : $this->getSelectedGroup();
         $usersLayout = $current_user->getPreference('subpanelLayout', $this->focus->module_dir);
         // we need to use some intelligence here when restoring the user's layout, as new modules with new subpanels might have been installed since the user's layout was recorded
         // this means that we can't just restore the old layout verbatim as the new subpanels would then go walkabout
         // so we need to do a merge while attempting as best we can to preserve the sense of the specified order
         // this is complicated by the different ordering schemes used in the two sources for the panels: the user's layout uses an ordinal layout, the panels from getTabs have an explicit ordering driven by the 'order' parameter
         // it's not clear how to best reconcile these two schemes; so we punt on it, and add all new panels to the end of the user's layout. At least this will give them a clue that something has changed...
         // we also now check for tabs that have been removed since the user saved his or her preferences.
         $tabs = $this->getTabs($showContainer, $selected_group);
         if (!empty($usersLayout)) {
             $availableTabs = $tabs;
             $tabs = array_intersect($usersLayout, $availableTabs);
             // remove any tabs that have been removed since the user's layout was saved
             foreach (array_diff($availableTabs, $usersLayout) as $tab) {
                 $tabs[] = $tab;
             }
         }
     } else {
         $tabs = explode(',', $_REQUEST['subpanels']);
     }
     // Display the group header. this section is executed only if the tabbed interface is being used.
     $current_key = '';
     if (!empty($this->show_tabs)) {
         require_once 'include/tabs.php';
         $tab_panel = new SugarWidgetTabs($tabs, $current_key, 'showSubPanel');
         $template_header .= get_form_header('Related', '', false);
         $template_header .= $tab_panel->display();
     }
     if (empty($GLOBALS['relationships'])) {
         if (!class_exists('Relationship')) {
             require 'modules/Relationships/Relationship.php';
         }
         $rel = new Relationship();
         $rel->load_relationship_meta();
     }
     foreach ($tabs as $t => $tab) {
         // load meta definition of the sub-panel.
         $thisPanel = $this->subpanel_definitions->load_subpanel($tab);
         if ($thisPanel === false) {
             continue;
         }
         // this if-block will try to skip over ophaned subpanels. Studio/MB are being delete unloaded modules completely.
         // this check will ignore subpanels that are collections (activities, history, etc)
         if (!isset($thisPanel->_instance_properties['collection_list']) and isset($thisPanel->_instance_properties['get_subpanel_data'])) {
             // ignore when data source is a function
             if (!isset($this->focus->field_defs[$thisPanel->_instance_properties['get_subpanel_data']])) {
                 if (stripos($thisPanel->_instance_properties['get_subpanel_data'], 'function:') === false) {
                     $GLOBALS['log']->fatal("Bad subpanel definition, it has incorrect value for get_subpanel_data property " . $tab);
                     continue;
                 }
             } else {
                 $rel_name = '';
                 if (isset($this->focus->field_defs[$thisPanel->_instance_properties['get_subpanel_data']]['relationship'])) {
                     $rel_name = $this->focus->field_defs[$thisPanel->_instance_properties['get_subpanel_data']]['relationship'];
                 }
                 if (empty($rel_name) or !isset($GLOBALS['relationships'][$rel_name])) {
                     $GLOBALS['log']->fatal("Missing relationship definition " . $rel_name . ". skipping " . $tab . " subpanel");
                     continue;
                 }
             }
         }
         if ($thisPanel->isCollection()) {
             // collect names of sub-panels that may contain items of each module
             $collection_list = $thisPanel->get_inst_prop_value('collection_list');
             if (is_array($collection_list)) {
                 foreach ($collection_list as $data) {
                     if (!empty($data['module'])) {
                         $module_sub_panels[$data['module']][$tab] = true;
                     }
                 }
             }
         } else {
             $module = $thisPanel->get_module_name();
             if (!empty($module)) {
                 $module_sub_panels[$module][$tab] = true;
             }
         }
         $display = 'none';
         $div_display = $default_div_display;
         $cookie_name = $tab . '_v';
         if (isset($thisPanel->_instance_properties['collapsed']) && $thisPanel->_instance_properties['collapsed']) {
             $div_display = 'none';
         }
         if (isset($div_cookies[$cookie_name])) {
             // If defaultSubPanelExpandCollapse is set, ignore the cookie that remembers whether the panel is expanded or collapsed.
             // To be used with the above 'collapsed' metadata setting so they will always be set the same when the page is loaded.
             if (!isset($sugar_config['defaultSubPanelExpandCollapse']) || $sugar_config['defaultSubPanelExpandCollapse'] == false) {
                 $div_display = $div_cookies[$cookie_name];
             }
         }
         if (!empty($sugar_config['hide_subpanels']) or $thisPanel->isDefaultHidden()) {
             $div_display = 'none';
         }
         if ($div_display == 'none') {
             $opp_display = 'inline';
             $tabs_properties[$t]['expanded_subpanels'] = false;
         } else {
             $opp_display = 'none';
             $tabs_properties[$t]['expanded_subpanels'] = true;
         }
         if (!empty($this->layout_def_key)) {
             $layout_def_key = $this->layout_def_key;
         } else {
             $layout_def_key = '';
         }
         if (empty($this->show_tabs)) {
             ///
             /// Legacy Support for subpanels
             $show_icon_html = SugarThemeRegistry::current()->getImage('advanced_search', 'border="0" align="absmiddle"', null, null, '.gif', translate('LBL_SHOW'));
             $hide_icon_html = SugarThemeRegistry::current()->getImage('basic_search', 'border="0" align="absmiddle"', null, null, '.gif', translate('LBL_HIDE'));
             $tabs_properties[$t]['show_icon_html'] = $show_icon_html;
             $tabs_properties[$t]['hide_icon_html'] = $hide_icon_html;
             $max_min = "<a name=\"{$tab}\"> </a><span id=\"show_link_" . $tab . "\" style=\"display: {$opp_display}\"><a href='#' class='utilsLink' onclick=\"current_child_field = '" . $tab . "';showSubPanel('" . $tab . "',null,null,'" . $layout_def_key . "');document.getElementById('show_link_" . $tab . "').style.display='none';document.getElementById('hide_link_" . $tab . "').style.display='';return false;\">" . "" . $show_icon_html . "</a></span>";
             $max_min .= "<span id=\"hide_link_" . $tab . "\" style=\"display: {$div_display}\"><a href='#' class='utilsLink' onclick=\"hideSubPanel('" . $tab . "');document.getElementById('hide_link_" . $tab . "').style.display='none';document.getElementById('show_link_" . $tab . "').style.display='';return false;\">" . "" . $hide_icon_html . "</a></span>";
             $tabs_properties[$t]['title'] = $thisPanel->get_title();
             $tabs_properties[$t]['module_name'] = $thisPanel->get_module_name();
             $tabs_properties[$t]['get_form_header'] = get_form_header($thisPanel->get_title(), $max_min, false, false);
         }
         $tabs_properties[$t]['cookie_name'] = $cookie_name;
         $tabs_properties[$t]['div_display'] = $div_display;
         $tabs_properties[$t]['opp_display'] = $opp_display;
         // Get Subpanel
         include_once 'include/SubPanel/SubPanel.php';
         $subpanel_object = new SubPanel($this->module, $_REQUEST['record'], $tab, $thisPanel, $layout_def_key);
         $arr = array();
         // TODO: Remove x-template:
         $tabs_properties[$t]['subpanel_body'] = $subpanel_object->ProcessSubPanelListView('include/SubPanel/SubPanelDynamic.html', $arr);
         // Get subpanel buttons
         $tabs_properties[$t]['buttons'] = $this->get_buttons($thisPanel, $subpanel_object->subpanel_query);
         array_push($tab_names, $tab);
     }
     $tab_names = '["' . join($tab_names, '","') . '"]';
     $module_sub_panels = array_map('array_keys', $module_sub_panels);
     $module_sub_panels = json_encode($module_sub_panels);
     $template->assign('layout_def_key', $this->layout_def_key);
     $template->assign('show_subpanel_tabs', $this->show_tabs);
     $template->assign('subpanel_tabs', $tabs);
     $template->assign('subpanel_tabs_properties', $tabs_properties);
     $template->assign('module_sub_panels', $module_sub_panels);
     $template->assign('sugar_config', $sugar_config);
     $template->assign('REQUEST', $_REQUEST);
     $template->assign('GLOBALS', $GLOBALS);
     $template->assign('selected_group', $selected_group);
     $template->assign('tab_names', $tab_names);
     $template->assign('module_sub_panels', $module_sub_panels);
     $template->assign('module', $this->module);
     $template_body = $template->fetch('include/SubPanel/tpls/SubPanelTiles.tpl');
     return $template_header . $template_body . $template_footer;
 }
Example #14
0
 /**
  * Retrieve the subpanel definition from the registered layout_defs arrays.
  */
 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;
 }
Example #15
0
 function display()
 {
     global $locale;
     $editModule = $_REQUEST['view_module'];
     $allLabels = !empty($_REQUEST['labels']) && $_REQUEST['labels'] == 'all';
     if (!isset($_REQUEST['MB'])) {
         global $app_list_strings;
         $moduleNames = array_change_key_case($app_list_strings['moduleList']);
         $translatedEditModule = $moduleNames[strtolower($editModule)];
     }
     $selected_lang = null;
     if (!empty($_REQUEST['selected_lang'])) {
         $selected_lang = $_REQUEST['selected_lang'];
     } else {
         $selected_lang = $locale->getAuthenticatedUserLanguage();
     }
     $smarty = new Sugar_Smarty();
     global $mod_strings;
     $smarty->assign('mod_strings', $mod_strings);
     $smarty->assign('available_languages', get_languages());
     $objectName = BeanFactory::getObjectName($editModule);
     VardefManager::loadVardef($editModule, $objectName);
     global $dictionary;
     $vnames = array();
     //jchi 24557 . We should list all the lables in viewdefs(list,detail,edit,quickcreate) that the user can edit them.
     $parser = ParserFactory::getParser(MB_LISTVIEW, $editModule);
     foreach ($parser->getLayout() as $key => $def) {
         if (isset($def['label'])) {
             $vnames[$def['label']] = $def['label'];
         }
     }
     require_once 'modules/ModuleBuilder/parsers/views/GridLayoutMetaDataParser.php';
     $variableMap = $this->getVariableMap($editModule);
     foreach ($variableMap as $key => $value) {
         $gridLayoutMetaDataParserTemp = ParserFactory::getParser($key, $editModule);
         foreach ($gridLayoutMetaDataParserTemp->getLayout() as $panel) {
             foreach ($panel as $row) {
                 foreach ($row as $fieldArray) {
                     // fieldArray is an array('name'=>name,'label'=>label)
                     if (isset($fieldArray['label'])) {
                         $vnames[$fieldArray['label']] = $fieldArray['label'];
                     }
                 }
             }
         }
     }
     //end
     //Get Subpanel Labels:
     require_once 'include/SubPanel/SubPanel.php';
     $subList = SubPanel::getModuleSubpanels($editModule);
     foreach ($subList as $subpanel => $titleLabel) {
         $vnames[$titleLabel] = $titleLabel;
     }
     foreach ($dictionary[$objectName]['fields'] as $name => $def) {
         if (isset($def['vname'])) {
             $vnames[$def['vname']] = $def['vname'];
         }
     }
     $formatted_mod_strings = array();
     // we shouldn't set the $refresh=true here, or will lost template language
     // mod_strings.
     // return_module_language($selected_lang, $editModule,false) :
     // the mod_strings will be included from cache files here.
     foreach (return_module_language($selected_lang, $editModule, false) as $name => $label) {
         //#25294
         if ($allLabels || isset($vnames[$name]) || preg_match('/lbl_city|lbl_country|lbl_billing_address|lbl_alt_address|lbl_shipping_address|lbl_postal_code|lbl_state$/si', $name)) {
             // Bug 58174 - Escaped labels are sent to the client escaped
             // even in the label editor in studio
             $formatted_mod_strings[$name] = html_entity_decode($label, null, 'UTF-8');
         }
     }
     //Grab everything from the custom files
     $mod_bak = $mod_strings;
     $files = array("custom/modules/{$editModule}/language/{$selected_lang}.lang.php", "custom/modules/{$editModule}/Ext/Language/{$selected_lang}.lang.ext.php");
     foreach ($files as $langfile) {
         $mod_strings = array();
         if (is_file($langfile)) {
             include $langfile;
             foreach ($mod_strings as $key => $label) {
                 // Bug 58174 - Escaped labels are sent to the client escaped
                 // even in the label editor in studio
                 $formatted_mod_strings[$key] = html_entity_decode($label, null, 'UTF-8');
             }
         }
     }
     $mod_strings = $mod_bak;
     ksort($formatted_mod_strings);
     $smarty->assign('MOD', $formatted_mod_strings);
     $smarty->assign('view_module', $editModule);
     $smarty->assign('APP', $GLOBALS['app_strings']);
     $smarty->assign('selected_lang', $selected_lang);
     $smarty->assign('defaultHelp', 'labelsBtn');
     $smarty->assign('assistant', array('key' => 'labels', 'group' => 'module'));
     $smarty->assign('labels_choice', $mod_strings['labelTypes']);
     $smarty->assign('labels_current', $allLabels ? "all" : "");
     $ajax = new AjaxCompose();
     $ajax->addCrumb($mod_strings['LBL_STUDIO'], 'ModuleBuilder.getContent("module=ModuleBuilder&action=wizard")');
     $ajax->addCrumb($translatedEditModule, 'ModuleBuilder.getContent("module=ModuleBuilder&action=wizard&view_module=' . $editModule . '")');
     $ajax->addCrumb($mod_strings['LBL_LABELS'], '');
     $html = $smarty->fetch('modules/ModuleBuilder/tpls/labels.tpl');
     $ajax->addSection('center', $GLOBALS['mod_strings']['LBL_SECTION_EDLABELS'], $html);
     echo $ajax->getJavascript();
 }
Example #16
0
    function display($showContainer = true, $forceTabless = false)
    {
        global $layout_edit_mode, $sugar_version, $sugar_config, $current_user, $app_strings;
        if (isset($layout_edit_mode) && $layout_edit_mode) {
            return;
        }
        global $modListHeader;
        ob_start();
        echo '<script type="text/javascript" src="' . getJSPath('include/SubPanel/SubPanelTiles.js') . '"></script>';
        ?>
<script>
if(document.DetailView != null &&
   document.DetailView.elements != null &&
   document.DetailView.elements.layout_def_key != null &&
   typeof document.DetailView.elements['layout_def_key'] != 'undefined'){
    document.DetailView.elements['layout_def_key'].value = '<?php 
        echo $this->layout_def_key;
        ?>
';
}
</script>
<?php 
        $tabs = array();
        $default_div_display = 'inline';
        if (!empty($sugar_config['hide_subpanels_on_login'])) {
            if (!isset($_SESSION['visited_details'][$this->focus->module_dir])) {
                setcookie($this->focus->module_dir . '_divs', '');
                unset($_COOKIE[$this->focus->module_dir . '_divs']);
                $_SESSION['visited_details'][$this->focus->module_dir] = true;
            }
            $default_div_display = 'none';
        }
        $div_cookies = get_sub_cookies($this->focus->module_dir . '_divs');
        //Display the group header. this section is executed only if the tabbed interface is being used.
        $current_key = '';
        if (!empty($this->show_tabs)) {
            require_once 'include/tabs.php';
            $tab_panel = new SugarWidgetTabs($tabs, $current_key, 'showSubPanel');
            echo get_form_header('Related', '', false);
            echo "<br />" . $tab_panel->display();
        }
        if (empty($_REQUEST['subpanels'])) {
            $selected_group = $forceTabless ? '' : $this->getSelectedGroup();
            $usersLayout = $current_user->getPreference('subpanelLayout', $this->focus->module_dir);
            // we need to use some intelligence here when restoring the user's layout, as new modules with new subpanels might have been installed since the user's layout was recorded
            // this means that we can't just restore the old layout verbatim as the new subpanels would then go walkabout
            // so we need to do a merge while attempting as best we can to preserve the sense of the specified order
            // this is complicated by the different ordering schemes used in the two sources for the panels: the user's layout uses an ordinal layout, the panels from getTabs have an explicit ordering driven by the 'order' parameter
            // it's not clear how to best reconcile these two schemes; so we punt on it, and add all new panels to the end of the user's layout. At least this will give them a clue that something has changed...
            // we also now check for tabs that have been removed since the user saved his or her preferences.
            $tabs = $this->getTabs($showContainer, $selected_group);
            if (!empty($usersLayout)) {
                $availableTabs = $tabs;
                $tabs = array_intersect($usersLayout, $availableTabs);
                // remove any tabs that have been removed since the user's layout was saved
                foreach (array_diff($availableTabs, $usersLayout) as $tab) {
                    $tabs[] = $tab;
                }
            }
        } else {
            $tabs = explode(',', $_REQUEST['subpanels']);
        }
        $tab_names = array();
        if ($showContainer) {
            echo '<ul class="noBullet" id="subpanel_list">';
        }
        //echo "<li id='hidden_0' style='height: 5px' class='noBullet'>&nbsp;&nbsp;&nbsp;</li>";
        if (empty($GLOBALS['relationships'])) {
            if (!class_exists('Relationship')) {
                require 'modules/Relationships/Relationship.php';
            }
            $rel = new Relationship();
            $rel->load_relationship_meta();
        }
        // this array will store names of sub-panels that can contain items
        // of each module
        $module_sub_panels = array();
        foreach ($tabs as $tab) {
            //load meta definition of the sub-panel.
            $thisPanel = $this->subpanel_definitions->load_subpanel($tab);
            if ($thisPanel === false) {
                continue;
            }
            //this if-block will try to skip over ophaned subpanels. Studio/MB are being delete unloaded modules completely.
            //this check will ignore subpanels that are collections (activities, history, etc)
            if (!isset($thisPanel->_instance_properties['collection_list']) and isset($thisPanel->_instance_properties['get_subpanel_data'])) {
                //ignore when data source is a function
                if (!isset($this->focus->field_defs[$thisPanel->_instance_properties['get_subpanel_data']])) {
                    if (stripos($thisPanel->_instance_properties['get_subpanel_data'], 'function:') === false) {
                        Log::fatal("Bad subpanel definition, it has incorrect value for get_subpanel_data property " . $tab);
                        continue;
                    }
                } else {
                    $rel_name = '';
                    if (isset($this->focus->field_defs[$thisPanel->_instance_properties['get_subpanel_data']]['relationship'])) {
                        $rel_name = $this->focus->field_defs[$thisPanel->_instance_properties['get_subpanel_data']]['relationship'];
                    }
                    if (empty($rel_name) or !isset($GLOBALS['relationships'][$rel_name])) {
                        Log::fatal("Missing relationship definition " . $rel_name . ". skipping " . $tab . " subpanel");
                        continue;
                    }
                }
            }
            if ($thisPanel->isCollection()) {
                // collect names of sub-panels that may contain items of each module
                $collection_list = $thisPanel->get_inst_prop_value('collection_list');
                if (is_array($collection_list)) {
                    foreach ($collection_list as $data) {
                        if (!empty($data['module'])) {
                            $module_sub_panels[$data['module']][$tab] = true;
                        }
                    }
                }
            } else {
                $module = $thisPanel->get_module_name();
                if (!empty($module)) {
                    $module_sub_panels[$module][$tab] = true;
                }
            }
            echo '<li class="noBullet" id="whole_subpanel_' . $tab . '">';
            $display = 'none';
            $div_display = $default_div_display;
            $cookie_name = $tab . '_v';
            if (isset($thisPanel->_instance_properties['collapsed']) && $thisPanel->_instance_properties['collapsed']) {
                $div_display = 'none';
            }
            if (isset($div_cookies[$cookie_name])) {
                //If defaultSubPanelExpandCollapse is set, ignore the cookie that remembers whether the panel is expanded or collapsed.
                //To be used with the above 'collapsed' metadata setting so they will always be set the same when the page is loaded.
                if (!isset($sugar_config['defaultSubPanelExpandCollapse']) || $sugar_config['defaultSubPanelExpandCollapse'] == false) {
                    $div_display = $div_cookies[$cookie_name];
                }
            }
            if (!empty($sugar_config['hide_subpanels'])) {
                $div_display = 'none';
            }
            if ($thisPanel->isDefaultHidden()) {
                $div_display = 'none';
            }
            if ($div_display == 'none') {
                $opp_display = 'inline';
            } else {
                $opp_display = 'none';
            }
            if (!empty($this->layout_def_key)) {
                $layout_def_key = $this->layout_def_key;
            } else {
                $layout_def_key = '';
            }
            if (empty($this->show_tabs)) {
                $show_icon_html = SugarThemeRegistry::current()->getImage('advanced_search', 'border="0" align="absmiddle"', null, null, '.gif', translate('LBL_SHOW'));
                $hide_icon_html = SugarThemeRegistry::current()->getImage('basic_search', 'border="0" align="absmiddle"', null, null, '.gif', translate('LBL_HIDE'));
                $max_min = "<a name=\"{$tab}\"> </a><span id=\"show_link_" . $tab . "\" style=\"display: {$opp_display}\"><a href='#' class='utilsLink' onclick=\"current_child_field = '" . $tab . "';showSubPanel('" . $tab . "',null,null,'" . $layout_def_key . "');document.getElementById('show_link_" . $tab . "').style.display='none';document.getElementById('hide_link_" . $tab . "').style.display='';return false;\">" . "" . $show_icon_html . "</a></span>";
                $max_min .= "<span id=\"hide_link_" . $tab . "\" style=\"display: {$div_display}\"><a href='#' class='utilsLink' onclick=\"hideSubPanel('" . $tab . "');document.getElementById('hide_link_" . $tab . "').style.display='none';document.getElementById('show_link_" . $tab . "').style.display='';return false;\">" . "" . $hide_icon_html . "</a></span>";
                echo '<div id="subpanel_title_' . $tab . '"';
                if (empty($sugar_config['lock_subpanels']) || $sugar_config['lock_subpanels'] == false) {
                    echo ' onmouseover="this.style.cursor = \'move\';"';
                }
                echo '>' . get_form_header($thisPanel->get_title(), $max_min, false) . '</div>';
            }
            echo <<<EOQ
<div cookie_name="{$cookie_name}" id="subpanel_{$tab}" style="display:{$div_display}">
    <script>document.getElementById("subpanel_{$tab}" ).cookie_name="{$cookie_name}";</script>
EOQ;
            $display_spd = '';
            if ($div_display != 'none') {
                echo "<script>SUGAR.util.doWhen(\"typeof(markSubPanelLoaded) != 'undefined'\", function() {markSubPanelLoaded('{$tab}');});</script>";
                $old_contents = ob_get_contents();
                @ob_end_clean();
                ob_start();
                include_once 'include/SubPanel/SubPanel.php';
                $subpanel_object = new SubPanel($this->module, $_REQUEST['record'], $tab, $thisPanel, $layout_def_key);
                $subpanel_object->setTemplateFile('include/SubPanel/SubPanelDynamic.html');
                $subpanel_object->display();
                $subpanel_data = ob_get_contents();
                @ob_end_clean();
                ob_start();
                echo $this->get_buttons($thisPanel, $subpanel_object->subpanel_query);
                $buttons = ob_get_contents();
                @ob_end_clean();
                ob_start();
                echo $old_contents;
                //echo $buttons;
                $display_spd = $subpanel_data;
            }
            echo <<<EOQ
    <div id="list_subpanel_{$tab}">{$display_spd}</div>
</div>
EOQ;
            array_push($tab_names, $tab);
            echo '</li>';
        }
        // end $tabs foreach
        if ($showContainer) {
            echo '</ul>';
            if (!empty($selected_group)) {
                // closing table from tpls/singletabmenu.tpl
                echo '</td></tr></table>';
            }
        }
        // drag/drop code
        $tab_names = '["' . join($tab_names, '","') . '"]';
        global $sugar_config;
        if (empty($sugar_config['lock_subpanels']) || $sugar_config['lock_subpanels'] == false) {
            echo <<<EOQ
    <script>
    \tvar SubpanelInit = function() {
    \t\tSubpanelInitTabNames({$tab_names});
    \t}
        var SubpanelInitTabNames = function(tabNames) {
    \t\tsubpanel_dd = new Array();
    \t\tj = 0;
    \t\tfor(i in tabNames) {
    \t\t\tsubpanel_dd[j] = new ygDDList('whole_subpanel_' + tabNames[i]);
    \t\t\tsubpanel_dd[j].setHandleElId('subpanel_title_' + tabNames[i]);
    \t\t\tsubpanel_dd[j].onMouseDown = SUGAR.subpanelUtils.onDrag;
    \t\t\tsubpanel_dd[j].afterEndDrag = SUGAR.subpanelUtils.onDrop;
    \t\t\tj++;
    \t\t}

    \t\tYAHOO.util.DDM.mode = 1;
    \t}
    \tcurrentModule = '{$this->module}';
    \tSUGAR.util.doWhen(
    \t    "typeof(SUGAR.subpanelUtils) == 'object' && typeof(SUGAR.subpanelUtils.onDrag) == 'function'" +
    \t        " && document.getElementById('subpanel_list')",
    \t    SubpanelInit
    \t);
    </script>
EOQ;
        }
        $module_sub_panels = array_map('array_keys', $module_sub_panels);
        $module_sub_panels = json_encode($module_sub_panels);
        echo <<<EOQ
<script>
var ModuleSubPanels = {$module_sub_panels};
</script>
EOQ;
        $ob_contents = ob_get_contents();
        ob_end_clean();
        return $ob_contents;
    }
 function handleSave()
 {
     $GLOBALS['log']->debug("in ParserModifySubPanel->handleSave()");
     require_once 'include/SubPanel/SubPanel.php';
     $subpanel = new SubPanel($this->moduleName, 'fab4', $this->subPanelName, $this->panel);
     $newFields = array();
     foreach ($this->listViewDefs as $name => $field) {
         if (!isset($field['usage']) || $field['usage'] != 'query_only') {
             $existingFields[$name] = $field;
         } else {
             $newFields[$name] = $field;
         }
     }
     // Loop through all of the fields defined in the 'Default' group of the ListView data in $_REQUEST
     // Replace the field specification in the originalListViewDef with this new updated specification
     foreach ($_REQUEST['group_0'] as $field) {
         if (!empty($this->originalListViewDefs[$field])) {
             $newFields[$field] = $this->originalListViewDefs[$field];
         } else {
             $vname = '';
             if (isset($this->panel->template_instance->field_defs[$field])) {
                 $vname = $this->panel->template_instance->field_defs[$field]['vname'];
             }
             if ($this->subPanelParentModule != null && (isset($this->subPanelParentModule->field_name_map[$field]) && ($this->subPanelParentModule->field_name_map[$field]['type'] == 'bool' || isset($this->subPanelParentModule->field_name_map[$field]['custom_type']) && $this->subPanelParentModule->field_name_map[$field]['custom_type'] == 'bool'))) {
                 $newFields[$field] = array('name' => $field, 'vname' => $vname, 'widget_type' => 'checkbox');
             } else {
                 $newFields[$field] = array('name' => $field, 'vname' => $vname);
             }
         }
         // Now set the field width if specified in the $_REQUEST data
         if (isset($_REQUEST[strtolower($field) . 'width'])) {
             $width = substr($_REQUEST[strtolower($field) . 'width'], 6, 3);
             if (strpos($width, "%") != false) {
                 $width = substr($width, 0, 2);
             }
             if ($width < 101 && $width > 0) {
                 $newFields[$field]['width'] = $width;
             }
         } else {
             if (isset($this->listViewDefs[$field]['width'])) {
                 $newFields[$field]['width'] = $this->listViewDefs[$field]['width'];
             }
         }
     }
     $subpanel->saveSubPanelDefOverride($this->panel, 'list_fields', $newFields);
 }
Example #18
0
 function display()
 {
     $editModule = $_REQUEST['view_module'];
     if (!isset($_REQUEST['MB'])) {
         global $app_list_strings;
         $moduleNames = array_change_key_case($app_list_strings['moduleList']);
         $translatedEditModule = $moduleNames[strtolower($editModule)];
     }
     $selected_lang = !empty($_REQUEST['selected_lang']) ? $_REQUEST['selected_lang'] : $_SESSION['authenticated_user_language'];
     if (empty($selected_lang)) {
         $selected_lang = $GLOBALS['sugar_config']['default_language'];
     }
     $smarty = new Sugar_Smarty();
     global $mod_strings;
     $smarty->assign('mod_strings', $mod_strings);
     $smarty->assign('available_languages', get_languages());
     global $beanList;
     $objectName = $beanList[$editModule];
     if ($objectName == 'aCase') {
         $objectName = 'Case';
     }
     VardefManager::loadVardef($editModule, $objectName);
     global $dictionary;
     $vnames = array();
     //jchi 24557 . We should list all the lables in viewdefs(list,detail,edit,quickcreate) that the user can edit them.
     require_once 'modules/ModuleBuilder/parsers/views/ListLayoutMetaDataParser.php';
     $parser = new ListLayoutMetaDataParser(MB_LISTVIEW, $editModule);
     foreach ($parser->getLayout() as $key => $def) {
         if (isset($def['label'])) {
             $vnames[$def['label']] = $def['label'];
         }
     }
     require_once 'modules/ModuleBuilder/parsers/views/GridLayoutMetaDataParser.php';
     $variableMap = array(MB_EDITVIEW => 'EditView', MB_DETAILVIEW => 'DetailView', MB_QUICKCREATE => 'QuickCreate');
     if ($editModule == 'KBDocuments') {
         $variableMap = array();
     }
     foreach ($variableMap as $key => $value) {
         $gridLayoutMetaDataParserTemp = new GridLayoutMetaDataParser($value, $editModule);
         foreach ($gridLayoutMetaDataParserTemp->getLayout() as $panel) {
             foreach ($panel as $row) {
                 foreach ($row as $fieldArray) {
                     // fieldArray is an array('name'=>name,'label'=>label)
                     if (isset($fieldArray['label'])) {
                         $vnames[$fieldArray['label']] = $fieldArray['label'];
                     }
                 }
             }
         }
     }
     //end
     //Get Subpanel Labels:
     require_once 'include/SubPanel/SubPanel.php';
     $subList = SubPanel::getModuleSubpanels($editModule);
     foreach ($subList as $subpanel => $titleLabel) {
         $vnames[$titleLabel] = $titleLabel;
     }
     foreach ($dictionary[$objectName]['fields'] as $name => $def) {
         if (isset($def['vname'])) {
             $vnames[$def['vname']] = $def['vname'];
         }
     }
     $formatted_mod_strings = array();
     //we shouldn't set the $refresh=true here, or will lost template language mod_strings.
     //return_module_language($selected_lang, $editModule,false) : the mod_strings will be included from cache files here.
     foreach (return_module_language($selected_lang, $editModule, false) as $name => $label) {
         //#25294
         if (isset($vnames[$name]) || preg_match('/lbl_city|lbl_country|lbl_billing_address|lbl_alt_address|lbl_shipping_address|lbl_postal_code|lbl_state$/si', $name)) {
             $formatted_mod_strings[$name] = htmlentities($label, ENT_QUOTES, 'UTF-8');
         }
     }
     //Grab everything from the custom files
     $mod_bak = $mod_strings;
     $files = array("custom/modules/{$editModule}/language/{$selected_lang}.lang.php", "custom/modules/{$editModule}/Ext/Language/{$selected_lang}.lang.ext.php");
     foreach ($files as $langfile) {
         $mod_strings = array();
         if (is_file($langfile)) {
             include $langfile;
             foreach ($mod_strings as $key => $label) {
                 $formatted_mod_strings[$key] = htmlentities($label, ENT_QUOTES, 'UTF-8');
             }
         }
     }
     $mod_strings = $mod_bak;
     ksort($formatted_mod_strings);
     $smarty->assign('MOD', $formatted_mod_strings);
     $smarty->assign('view_module', $editModule);
     $smarty->assign('APP', $GLOBALS['app_strings']);
     $smarty->assign('selected_lang', $selected_lang);
     $smarty->assign('defaultHelp', 'labelsBtn');
     $smarty->assign('assistant', array('key' => 'labels', 'group' => 'module'));
     $ajax = new AjaxCompose();
     $ajax->addCrumb($mod_strings['LBL_STUDIO'], 'ModuleBuilder.getContent("module=ModuleBuilder&action=wizard")');
     $ajax->addCrumb($translatedEditModule, 'ModuleBuilder.getContent("module=ModuleBuilder&action=wizard&view_module=' . $editModule . '")');
     $ajax->addCrumb($mod_strings['LBL_LABELS'], '');
     $html = $smarty->fetch('modules/ModuleBuilder/tpls/labels.tpl');
     $ajax->addSection('center', $GLOBALS['mod_strings']['LBL_SECTION_EDLABELS'], $html);
     echo $ajax->getJavascript();
 }
    function display($showContainer = true, $forceTabless = false)
    {
        global $layout_edit_mode, $sugar_version, $sugar_config, $current_user, $app_strings;
        if (isset($layout_edit_mode) && $layout_edit_mode) {
            return;
        }
        global $modListHeader;
        ob_start();
        echo '<script type="text/javascript" src="include/javascript/popup_parent_helper.js?s=' . $sugar_version . '&c=' . $sugar_config['js_custom_version'] . '"></script>';
        echo '<script type="text/javascript" src="include/SubPanel/SubPanelTiles.js?s=' . $sugar_version . '&c=' . $sugar_config['js_custom_version'] . '"></script>';
        ?>
<script>
if(document.DetailView != null && 
   document.DetailView.elements != null && 
   document.DetailView.elements.layout_def_key != null && 
   typeof document.DetailView.elements['layout_def_key'] != 'undefined'){
    document.DetailView.elements['layout_def_key'].value = '<?php 
        echo $this->layout_def_key;
        ?>
';
}
</script>
<?php 
        $tabs = array();
        $default_div_display = 'inline';
        if (!empty($sugar_config['hide_subpanels_on_login'])) {
            if (!isset($_SESSION['visited_details'][$this->focus->module_dir])) {
                setcookie($this->focus->module_dir . '_divs', '');
                unset($_COOKIE[$this->focus->module_dir . '_divs']);
                $_SESSION['visited_details'][$this->focus->module_dir] = true;
            }
            $default_div_display = 'none';
        }
        $div_cookies = get_sub_cookies($this->focus->module_dir . '_divs');
        //Display the group header. this section is executed only if the tabbed interface is being used.
        $current_key = '';
        if (!empty($this->show_tabs)) {
            require_once 'include/tabs.php';
            $tab_panel = new SugarWidgetTabs($tabs, $current_key, 'showSubPanel');
            echo get_form_header('Related', '', false);
            echo "<br />" . $tab_panel->display();
        }
        if (empty($_REQUEST['subpanels'])) {
            $selected_group = $forceTabless ? '' : $this->getSelectedGroup();
            $tabs = $this->getTabs($showContainer, $selected_group);
        } else {
            $tabs = explode(',', $_REQUEST['subpanels']);
        }
        $tab_names = array();
        if ($showContainer) {
            echo '<ul class="noBullet" id="subpanel_list">';
        }
        //echo "<li id='hidden_0' style='height: 5px' class='noBullet'>&nbsp;&nbsp;&nbsp;</li>";
        foreach ($tabs as $tab) {
            echo '<li class="noBullet" id="whole_subpanel_' . $tab . '">';
            //load meta definition of the sub-panel.
            $thisPanel = $this->subpanel_definitions->load_subpanel($tab);
            $display = 'none';
            $div_display = $default_div_display;
            $cookie_name = $tab . '_v';
            if (isset($div_cookies[$cookie_name])) {
                $div_display = $div_cookies[$cookie_name];
            }
            if (!empty($sugar_config['hide_subpanels'])) {
                $div_display = 'none';
            }
            if ($div_display == 'none') {
                $opp_display = 'inline';
            } else {
                $opp_display = 'none';
            }
            if (empty($this->show_tabs)) {
                global $theme;
                $theme_path = "themes/" . $theme . "/";
                $image_path = $theme_path . "images/";
                $show_icon_html = get_image($image_path . 'advanced_search', 'alt="' . translate('LBL_SHOW') . '" border="0 align="absmiddle""');
                $hide_icon_html = get_image($image_path . 'basic_search', 'alt="' . translate('LBL_HIDE') . '" border="0" align="absmiddle"');
                $max_min = "<a name=\"{$tab}\"> </a><span id=\"show_link_" . $tab . "\" style=\"display: {$opp_display}\"><a href='#' class='utilsLink' onclick=\"current_child_field = '" . $tab . "';showSubPanel('" . $tab . "');document.getElementById('show_link_" . $tab . "').style.display='none';document.getElementById('hide_link_" . $tab . "').style.display='';return false;\">" . "" . $show_icon_html . "</a></span>";
                $max_min .= "<span id=\"hide_link_" . $tab . "\" style=\"display: {$div_display}\"><a href='#' class='utilsLink' onclick=\"hideSubPanel('" . $tab . "');document.getElementById('hide_link_" . $tab . "').style.display='none';document.getElementById('show_link_" . $tab . "').style.display='';return false;\">" . "" . $hide_icon_html . "</a></span>";
                echo '<div id="subpanel_title_' . $tab . '"';
                if (empty($sugar_config['lock_subpanels']) || $sugar_config['lock_subpanels'] == false) {
                    echo ' onmouseover="this.style.cursor = \'move\';"';
                }
                echo '>' . get_form_header($thisPanel->get_title(), $max_min, false) . '</div>';
            }
            echo <<<EOQ
<div cookie_name="{$cookie_name}" id="subpanel_{$tab}" style="display:{$div_display}">
    <script>document.getElementById("subpanel_{$tab}" ).cookie_name="{$cookie_name}";</script>
EOQ;
            $display_spd = '';
            if ($div_display != 'none') {
                echo "<script>markSubPanelLoaded('{$tab}');</script>";
                $old_contents = ob_get_contents();
                @ob_end_clean();
                ob_start();
                include_once 'include/SubPanel/SubPanel.php';
                $subpanel_object = new SubPanel($this->module, $_REQUEST['record'], $tab, $thisPanel);
                $subpanel_object->setTemplateFile('include/SubPanel/SubPanelDynamic.html');
                $subpanel_object->display();
                $subpanel_data = ob_get_contents();
                @ob_end_clean();
                ob_start();
                echo $this->get_buttons($thisPanel, $subpanel_object->subpanel_query);
                $buttons = ob_get_contents();
                @ob_end_clean();
                ob_start();
                echo $old_contents;
                echo $buttons;
                $display_spd = $subpanel_data;
            }
            echo <<<EOQ
    <div id="list_subpanel_{$tab}">{$display_spd}</div>
</div>
EOQ;
            array_push($tab_names, $tab);
            echo '</li>';
        }
        // end $tabs foreach
        echo '<li style="height: 5px" class="noBullet">&nbsp;&nbsp;&nbsp;</li>';
        if ($showContainer) {
            echo '</ul>';
            if (!empty($selected_group)) {
                // closing table from tpls/singletabmenu.tpl
                echo '</td></tr></table>';
            }
        }
        // drag/drop code
        $tab_names = '["' . join($tab_names, '","') . '"]';
        global $sugar_config;
        if (empty($sugar_config['lock_subpanels']) || $sugar_config['lock_subpanels'] == false) {
            echo <<<EOQ
    <script>
    \tvar SubpanelInit = function() {
    \t\tSubpanelInitTabNames({$tab_names});
    \t}
        var SubpanelInitTabNames = function(tabNames) {
    \t\tsubpanel_dd = new Array();
    \t\tj = 0;
    \t\tfor(i in tabNames) {
    \t\t\tsubpanel_dd[j] = new ygDDList('whole_subpanel_' + tabNames[i]);
    \t\t\tsubpanel_dd[j].setHandleElId('subpanel_title_' + tabNames[i]);
    \t\t\tsubpanel_dd[j].onMouseDown = SUGAR.subpanelUtils.onDrag;  
    \t\t\tsubpanel_dd[j].afterEndDrag = SUGAR.subpanelUtils.onDrop;
    \t\t\tj++;
    \t\t}
    \t
    \t\tYAHOO.util.DDM.mode = 1;
    \t}
    \tcurrentModule = '{$this->module}'; 
    \tYAHOO.util.Event.addListener(window, 'load', SubpanelInit);
    </script>  
EOQ;
        }
        $ob_contents = ob_get_contents();
        ob_end_clean();
        return $ob_contents;
    }