/** * @see SugarView::display() */ public function display() { global $mod_strings; global $app_list_strings; global $app_strings; require_once "modules/MySettings/TabController.php"; $controller = new TabController(); $tabs = $controller->get_tabs_system(); $enabled = []; foreach ($tabs[0] as $key => $value) { $enabled[] = ["module" => $key, 'label' => translate($key)]; } $disabled = []; foreach ($tabs[1] as $key => $value) { $disabled[] = ["module" => $key, 'label' => translate($key)]; } $user_can_edit = $controller->get_users_can_edit(); $this->ss->assign('APP', $GLOBALS['app_strings']); $this->ss->assign('MOD', $GLOBALS['mod_strings']); $this->ss->assign('user_can_edit', $user_can_edit); $this->ss->assign('enabled_tabs', json_encode($enabled)); $this->ss->assign('disabled_tabs', json_encode($disabled)); $this->ss->assign('title', $this->getModuleTitle(false)); //get list of all subpanels and panels to hide $mod_list_strings_key_to_lower = array_change_key_case($app_list_strings['moduleList']); $panels_arr = SubPanelDefinitions::get_all_subpanels(); $hidpanels_arr = SubPanelDefinitions::get_hidden_subpanels(); if (!$hidpanels_arr || !is_array($hidpanels_arr)) { $hidpanels_arr = []; } //create array of subpanels to show, used to create Drag and Drop widget $enabled = []; foreach ($panels_arr as $key) { if (empty($key)) { continue; } $key = strtolower($key); $enabled[] = ["module" => $key, "label" => $mod_list_strings_key_to_lower[$key]]; } //now create array of subpanels to hide for use in Drag and Drop widget $disabled = []; foreach ($hidpanels_arr as $key) { if (empty($key)) { continue; } $key = strtolower($key); $disabled[] = ["module" => $key, "label" => $mod_list_strings_key_to_lower[$key]]; } $this->ss->assign('enabled_panels', json_encode($enabled)); $this->ss->assign('disabled_panels', json_encode($disabled)); echo $this->ss->fetch('modules/Administration/templates/ConfigureTabs.tpl'); }
/** * Gets the list of hidden subpanels * * @return array */ public function getHiddenSubpanels() { // BR-29 Handle hidden subpanels - SubPanelDefinitons needs a bean at // construct time, so hand it an admin bean. This returns a list of // hidden subpanels in lowercase module name form: // array('accounts', 'bugs', 'contacts'); $spd = new SubPanelDefinitions(BeanFactory::getBean('Administration')); return array_values($spd->get_hidden_subpanels()); }
/** * Load the Sub-Panel objects if it can from the metadata files. * * call this function for sub-panels that have unions. * * @todo Decide whether to make all activities modules exempt from visibility * checking or not. As of 6.4.5, Notes was no longer exempt but the * other activities modules were which is causing causing rendering of * subpanels for these modules even when these modules should not be shown. * * @return bool True by default if the subpanel was loaded. Will return false if none in the collection are * allowed by the current user. */ function load_sub_subpanels() { //by default all the activities modules are exempt, so hiding them won't //affect their appearance unless the 'activity' subpanel itself is hidden. //add email to the list temporarily so it is not affected in activities subpanel global $modules_exempt_from_availability_check; $modules_exempt_from_availability_check['Emails'] = 'Emails'; $listFieldMap = array(); if (empty($this->sub_subpanels)) { // Bug 57699 - Notes subpanel missing from Calls module after upgrade // Originally caused by the fix for Bug 49439 // Get the shown subpanel module list $subPanelDefinitions = new SubPanelDefinitions($this->parent_bean); // Bug 58089 - History sub panel doesn't show any record. // Rather than check ALL subpanels, we only need to really check to // see if the module(s) we are checking are not hidden. $hiddenSubPanels = $subPanelDefinitions->get_hidden_subpanels(); $panels = $this->get_inst_prop_value('collection_list'); foreach ($panels as $panel => $properties) { // Lowercase the collection module to check against the subpanel list $lcModule = strtolower($properties['module']); // Add a check for module subpanel visibility. If hidden, but exempt, pass it if (is_array($hiddenSubPanels) && !in_array($lcModule, $hiddenSubPanels) || isset($modules_exempt_from_availability_check[$properties['module']])) { $this->sub_subpanels[$panel] = new aSubPanel($panel, $properties, $this->parent_bean); } } // if it's empty just dump out as there is nothing to process. if (empty($this->sub_subpanels)) { return false; } //Sync displayed list fields across the subpanels $display_fields = $this->getDisplayFieldsFromCollection($this->sub_subpanels); $query_fields = array(); foreach ($this->sub_subpanels as $key => $subpanel) { $list_fields = $subpanel->get_list_fields(); $listFieldMap[$key] = array(); $index = 0; foreach ($list_fields as $field => $def) { if (isset($def['vname']) && isset($def['width'])) { $index++; if (!empty($def['alias'])) { $listFieldMap[$key][$def['alias']] = $field; } else { $listFieldMap[$key][$field] = $field; } if (!isset($display_fields[$def['vname']])) { if (sizeof($display_fields) > $index) { //Try to insert the new field in an order that makes sense $start = array_slice($display_fields, 0, $index); $end = array_slice($display_fields, $index); $display_fields = array_merge($start, array($def['vname'] => array('name' => $field, 'vname' => $def['vname'], 'width' => $def['width'])), $end); } else { $display_fields[$def['vname']] = array('name' => empty($def['alias']) ? $field : $def['alias'], 'vname' => $def['vname'], 'width' => $def['width']); } } } else { $query_fields[$field] = $def; } } } foreach ($this->sub_subpanels as $key => $subpanel) { $list_fields = array(); foreach ($display_fields as $vname => $def) { $field = $def['name']; $list_key = isset($listFieldMap[$key][$field]) ? $listFieldMap[$key][$field] : $field; if (isset($subpanel->panel_definition['list_fields'][$field])) { $list_fields[$field] = $subpanel->panel_definition['list_fields'][$field]; } else { if ($list_key != $field && isset($subpanel->panel_definition['list_fields'][$list_key])) { $list_fields[$list_key] = $subpanel->panel_definition['list_fields'][$list_key]; } else { $list_fields[$field] = $display_fields[$vname]; } } } foreach ($query_fields as $field => $def) { if (isset($subpanel->panel_definition['list_fields'][$field])) { $list_fields[$field] = $subpanel->panel_definition['list_fields'][$field]; } else { $list_fields[$field] = $def; } } $subpanel->panel_definition['list_fields'] = $list_fields; } } return true; }
$panels_to_hide = $_REQUEST['disabled_panels']; } //turn list into array $hidpanels_arr = split(',', $panels_to_hide); $hidpanels_arr = TabController::get_key_array($hidpanels_arr); //save list of subpanels to hide SubPanelDefinitions::set_hidden_subpanels($hidpanels_arr); //redirect to same page to refresh panel list header("Location: index.php?module=Administration&action=ConfigureSubPanels"); } ////////////////// Processing UI //create title for form $title = get_module_title($mod_strings['LBL_MODULE_NAME'], $mod_strings['LBL_CONFIGURE_SUBPANELS'] . ":", true); //get list of all subpanels and panels to hide $panels_arr = SubPanelDefinitions::get_all_subpanels(); $hidpanels_arr = SubPanelDefinitions::get_hidden_subpanels(); if (!$hidpanels_arr || !is_array($hidpanels_arr)) { $hidpanels_arr = array(); } //create array of subpanels to show, used to create Drag and Drop widget $groups = array(); $groups[$mod_strings['LBL_VISIBLE_PANELS']] = array(); foreach ($panels_arr as $key) { if (empty($key)) { continue; } $panels_arr[$key] = $mod_list_strings_key_to_lower[$key]; } $groups[$mod_strings['LBL_HIDDEN_PANELS']] = array(); //now create array of panels to hide for use in Drag and Drop widget foreach ($hidpanels_arr as $key) {
/** * @see SugarView::display() */ public function display() { global $mod_strings; global $app_list_strings; global $app_strings; require_once "modules/MySettings/TabController.php"; $controller = new TabController(); $tabs = $controller->get_tabs_system(); // Remove Home module from UI. We add it back to front of display tab list on save. if (isset($tabs[0]['Home'])) { unset($tabs[0]['Home']); } if (isset($tabs[1]['Home'])) { unset($tabs[1]['Home']); } $enabled = array(); foreach ($tabs[0] as $key => $value) { $enabled[] = array("module" => $key, 'label' => translate($key)); } $disabled = array(); foreach ($tabs[1] as $key => $value) { $disabled[] = array("module" => $key, 'label' => translate($key)); } $user_can_edit = $controller->get_users_can_edit(); $this->ss->assign('APP', $GLOBALS['app_strings']); $this->ss->assign('MOD', $GLOBALS['mod_strings']); $this->ss->assign('user_can_edit', $user_can_edit); $this->ss->assign('enabled_tabs', json_encode($enabled)); $this->ss->assign('disabled_tabs', json_encode($disabled)); $this->ss->assign('title', $this->getModuleTitle(false)); //get list of all subpanels and panels to hide $mod_list_strings_key_to_lower = array_change_key_case($app_list_strings['moduleList']); $panels_arr = SubPanelDefinitions::get_all_subpanels(); $hidpanels_arr = SubPanelDefinitions::get_hidden_subpanels(); if (!$hidpanels_arr || !is_array($hidpanels_arr)) { $hidpanels_arr = array(); } //create array of subpanels to show, used to create Drag and Drop widget $enabled = array(); foreach ($panels_arr as $key) { if (empty($key)) { continue; } $key = strtolower($key); $enabled[] = array("module" => $key, "label" => $mod_list_strings_key_to_lower[$key]); } //now create array of subpanels to hide for use in Drag and Drop widget $disabled = array(); foreach ($hidpanels_arr as $key) { if (empty($key)) { continue; } $key = strtolower($key); // we need this here for with RLI's are disabled as they shouldn't be seen in the list if ($key == 'revenuelineitems' && in_array('RevenueLineItems', $GLOBALS['modInvisList'])) { continue; } $disabled[] = array("module" => $key, "label" => $mod_list_strings_key_to_lower[$key]); } $this->ss->assign('enabled_panels', json_encode($enabled)); $this->ss->assign('disabled_panels', json_encode($disabled)); echo $this->ss->fetch('modules/Administration/templates/ConfigureTabs.tpl'); }
/** * check was module hidden in the top navigation bar or as subpanels * @param string moduleName - name of module to chaeck e.g. Notes, Tasks * @return bool * @see Bug #55632 : Hiding Notes Module does not prevent creation of notes. */ public static function isModuleHidden($moduleName) { global $modules_exempt_from_availability_check; if (isset($modules_exempt_from_availability_check[$moduleName])) { return false; } require_once 'modules/MySettings/TabController.php'; require_once 'include/SubPanel/SubPanelDefinitions.php'; $tabs = new TabController(); if (in_array(strtolower($moduleName), SubPanelDefinitions::get_hidden_subpanels())) { return true; } return false; }