function getTabs($tabs, $showTabs = true, $selectedGroup = 'All')
 {
     //$groups = array('Tasks'=> array('activities','history', 'projects' ), 'People'=>array('contacts','leads', 'campaigns'),'Sales'=>array('opportunities', 'quotes', 'campaigns'), 'Support'=>array('cases','bugs' ), );
     require_once 'include/GroupedTabs/GroupedTabStructure.php';
     $groupedTabsClass = new GroupedTabStructure();
     $groups = $groupedTabsClass->get_tab_structure($tabs);
     /* Move history to same tab as activities */
     if (in_array('history', $tabs) && in_array('activities', $tabs)) {
         foreach ($groups as $mainTab => $group) {
             if (in_array('activities', array_map('strtolower', $group['modules']))) {
                 if (!in_array('history', array_map('strtolower', $group['modules']))) {
                     /* Move hist from there to here */
                     $groups[$mainTab]['modules'][] = 'history';
                 }
             } else {
                 if (false !== ($i = array_search('history', array_map('strtolower', $group['modules'])))) {
                     unset($groups[$mainTab]['modules'][$i]);
                     if (empty($groups[$mainTab]['modules'])) {
                         unset($groups[$mainTab]);
                     }
                 }
             }
         }
     }
     /* Add the 'All' group.
      * Note that if a tab group already exists with the name 'All',
      * it will be overwritten in this union operation.
      */
     if (count($groups) <= 1) {
         $groups = array('All' => array('label' => 'LBL_TABGROUP_ALL', 'modules' => $tabs));
     } else {
         $groups = array('All' => array('label' => 'LBL_TABGROUP_ALL', 'modules' => $tabs)) + $groups;
     }
     /* Note - all $display checking and array_intersects with $tabs
      * are now redundant (thanks to GroupedTabStructure), and could
      * be removed for performance, but for now can stay to help ensure
      * that the tabs get renedered correctly. 
      */
     $retTabs = array();
     if ($showTabs) {
         require_once 'include/SubPanel/SugarTab.php';
         $sugarTab = new SugarTab();
         $displayTabs = array();
         $otherTabs = array();
         foreach ($groups as $key => $tab) {
             $display = false;
             foreach ($tab['modules'] as $subkey => $subtab) {
                 if (in_array(strtolower($subtab), $tabs)) {
                     $display = true;
                     break;
                 }
             }
             $selected = 'other';
             if ($selectedGroup == $key) {
                 $selected = 'current';
             }
             if ($display) {
                 $relevantTabs = SubPanelTilesTabs::applyUserCustomLayoutToTabs($tabs, $key);
                 $sugarTabs[$key] = array('label' => $key, 'type' => $selected);
                 $otherTabs[$key] = array('key' => $key, 'tabs' => array());
                 $orderedTabs = array_intersect($relevantTabs, array_map('strtolower', $groups[$key]['modules']));
                 foreach ($orderedTabs as $subkey => $subtab) {
                     $otherTabs[$key]['tabs'][$subkey] = array('key' => $subtab, 'label' => translate($this->subpanel_definitions->layout_defs['subpanel_setup'][$subtab]['title_key']));
                 }
                 if ($selectedGroup == $key) {
                     $displayTabs = $otherTabs[$key]['tabs'];
                     $retTabs = $orderedTabs;
                 }
             }
         }
         if (empty($displayTabs)) {
             $selectedGroup = 'All';
             $displayTabs = $otherTabs[$selectedGroup]['tabs'];
             $sugarTabs[$selectedGroup]['type'] = 'current';
             $retTabs = array_intersect($tabs, array_map('strtolower', $groups[$selectedGroup]['modules']));
         }
         $sugarTab->setup($sugarTabs, $otherTabs, $displayTabs, $selectedGroup);
         $sugarTab->display();
     } else {
         $tabs = SubPanelTilesTabs::applyUserCustomLayoutToTabs($tabs, $selectedGroup);
         $retTabs = array_intersect($tabs, array_map('strtolower', $groups[$selectedGroup]['modules']));
     }
     return $retTabs;
 }
 function getTabs($showTabs = true, $selectedGroup = '')
 {
     global $current_user;
     //get all the "tabs" - this actually means all the subpanels available for display within a tab
     $tabs = $this->subpanel_definitions->get_available_tabs();
     if (!empty($selectedGroup)) {
         // Bug #44344 : Custom relationships under same module only show once in subpanel tabs
         // use object property instead new object to have ability run unit test (can override subpanel_definitions)
         $objSubPanelTilesTabs = new SubPanelTilesTabs($this->focus);
         $tabs = $objSubPanelTilesTabs->getTabs($tabs, $showTabs, $selectedGroup);
         unset($objSubPanelTilesTabs);
         return $tabs;
     } else {
         // see if user current user has custom subpanel layout
         $tabs = SubPanelTilesTabs::applyUserCustomLayoutToTabs($tabs);
         /* Check if the preference is set now,
          * because there's no point in executing this code if
          * we aren't going to render anything.
          */
         $subpanelLinksPref = $current_user->getPreference('subpanel_links');
         if (!isset($subpanelLinksPref)) {
             $subpanelLinksPref = $GLOBALS['sugar_config']['default_subpanel_links'];
         }
         if ($showTabs && $subpanelLinksPref) {
             require_once 'include/SubPanel/SugarTab.php';
             $sugarTab = new SugarTab();
             $displayTabs = array();
             foreach ($tabs as $tab) {
                 $displayTabs[] = array('key' => $tab, 'label' => translate($this->subpanel_definitions->layout_defs['subpanel_setup'][$tab]['title_key']));
                 //echo '<td nowrap="nowrap"><a class="subTabLink" href="#' . $tab . '">' .  translate($this->subpanel_definitions->layout_defs['subpanel_setup'][$tab]['title_key']) .  '</a></td><td> | </td>';
             }
             $sugarTab->setup(array(), array(), $displayTabs);
             $sugarTab->display();
         }
         //echo '<td width="100%">&nbsp;</td></tr></table>';
     }
     return $tabs;
 }
 function getTabs($tabs, $showTabs = true, $selectedGroup = 'All')
 {
     //WDong Bug: 12258 "All" tab in the middle of a record's detail view is not localized.
     if ($selectedGroup == 'All') {
         $selectedGroup = translate('LBL_TABGROUP_ALL');
     }
     // Set up a mapping from subpanelID, found in the $tabs list, to the source module name
     // As the $GLOBALS['tabStructure'] array holds the Group Tabs by module name we need to efficiently convert between the two
     // when constructing the subpanel tabs
     // Note that we can't use the very similar GroupedTabStructure class as it lacks this mapping, and logically, it is designed
     // for use when constructing the module by module tabs, not the subpanel tabs, as we move away from using module names to represent
     // subpanels, and use unique subpanel IDs instead.
     $moduleNames = array();
     foreach ($tabs as $subpanelID) {
         // Bug #44344 : Custom relationships under same module only show once in subpanel tabs
         // use object property instead new object to have ability run unit test (can override subpanel_definitions)
         $subpanel = $this->subpanel_definitions->load_subpanel($subpanelID);
         if ($subpanel !== false) {
             $moduleNames[$subpanelID] = $subpanel->get_module_name();
         }
     }
     $groups = array();
     $found = array();
     foreach ($GLOBALS['tabStructure'] as $mainTab => $subModules) {
         foreach ($subModules['modules'] as $key => $subModule) {
             foreach ($tabs as $subpanelID) {
                 if (isset($moduleNames[$subpanelID]) && strcasecmp($subModule, $moduleNames[$subpanelID]) === 0) {
                     // Bug #44344 : Custom relationships under same module only show once in subpanel tabs
                     $groups[translate($mainTab)]['modules'][] = $subpanelID;
                     $found[$subpanelID] = true;
                 }
             }
         }
     }
     // Put all the remaining subpanels into the 'Other' tab.
     foreach ($tabs as $subpanelID) {
         if (!isset($found[$subpanelID])) {
             $groups[translate('LBL_TABGROUP_OTHER')]['modules'][] = $subpanelID;
         }
     }
     /* Move history to same tab as activities */
     if (in_array('history', $tabs) && in_array('activities', $tabs)) {
         foreach ($groups as $mainTab => $group) {
             if (in_array('activities', array_map('strtolower', $group['modules']))) {
                 if (!in_array('history', array_map('strtolower', $group['modules']))) {
                     /* Move hist from there to here */
                     $groups[$mainTab]['modules'][] = 'history';
                 }
             } else {
                 if (false !== ($i = array_search('history', array_map('strtolower', $group['modules'])))) {
                     unset($groups[$mainTab]['modules'][$i]);
                     if (empty($groups[$mainTab]['modules'])) {
                         unset($groups[$mainTab]);
                     }
                 }
             }
         }
     }
     /* Add the 'All' group.
      * Note that if a tab group already exists with the name 'All',
      * it will be overwritten in this union operation.
      */
     if (count($groups) <= 1) {
         $groups = array(translate('LBL_TABGROUP_ALL') => array('label' => translate('LBL_TABGROUP_ALL'), 'modules' => $tabs));
     } else {
         $groups = array(translate('LBL_TABGROUP_ALL') => array('label' => translate('LBL_TABGROUP_ALL'), 'modules' => $tabs)) + $groups;
     }
     /* Note - all $display checking and array_intersects with $tabs
      * are now redundant (thanks to GroupedTabStructure), and could
      * be removed for performance, but for now can stay to help ensure
      * that the tabs get renedered correctly.
      */
     $retTabs = array();
     if ($showTabs) {
         require_once 'include/SubPanel/SugarTab.php';
         $sugarTab = new SugarTab();
         $displayTabs = array();
         $otherTabs = array();
         foreach ($groups as $key => $tab) {
             $display = false;
             foreach ($tab['modules'] as $subkey => $subtab) {
                 if (in_array(strtolower($subtab), $tabs)) {
                     $display = true;
                     break;
                 }
             }
             $selected = '';
             if ($selectedGroup == $key) {
                 $selected = 'current';
             }
             if ($display) {
                 $relevantTabs = SubPanelTilesTabs::applyUserCustomLayoutToTabs($tabs, $key);
                 $sugarTabs[$key] = array('label' => !empty($tab['label']) ? $tab['label'] : $key, 'type' => $selected);
                 $otherTabs[$key] = array('key' => $key, 'tabs' => array());
                 $orderedTabs = array_intersect($relevantTabs, array_map('strtolower', $groups[$key]['modules']));
                 foreach ($orderedTabs as $subkey => $subtab) {
                     $otherTabs[$key]['tabs'][$subkey] = array('key' => $subtab, 'label' => translate($this->subpanel_definitions->layout_defs['subpanel_setup'][$subtab]['title_key']));
                 }
                 if ($selectedGroup == $key) {
                     $displayTabs = $otherTabs[$key]['tabs'];
                     $retTabs = $orderedTabs;
                 }
             }
         }
         if (empty($displayTabs) && !empty($otherTabs)) {
             //WDong Bug: 12258 "All" tab in the middle of a record's detail view is not localized.
             $selectedGroup = translate('LBL_TABGROUP_ALL');
             $displayTabs = $otherTabs[$selectedGroup]['tabs'];
             $sugarTabs[$selectedGroup]['type'] = 'current';
             $retTabs = array_intersect($tabs, array_map('strtolower', $groups[$selectedGroup]['modules']));
         }
         if (!empty($sugarTabs) || !empty($otherTabs)) {
             $sugarTab->setup($sugarTabs, $otherTabs, $displayTabs, $selectedGroup);
             $sugarTab->display();
         }
     } else {
         $tabs = SubPanelTilesTabs::applyUserCustomLayoutToTabs($tabs, $selectedGroup);
         $retTabs = array_intersect($tabs, array_map('strtolower', $groups[$selectedGroup]['modules']));
     }
     return $retTabs;
 }
 function getTabs($showTabs = true, $selectedGroup = '')
 {
     global $current_user;
     //get all the tabs
     $tabs = $this->subpanel_definitions->get_available_tabs();
     if (!empty($selectedGroup)) {
         return SubPanelTilesTabs::getTabs($tabs, $showTabs, $selectedGroup);
     } else {
         // see if user current user has custom subpanel layout
         $tabs = SubPanelTilesTabs::applyUserCustomLayoutToTabs($tabs);
         /* Check if the preference is set now,
          * because there's no point in executing this code if
          * we aren't going to render anything. 
          */
         $subpanelLinksPref = $current_user->getPreference('subpanel_links');
         if (!isset($subpanelLinksPref)) {
             $subpanelLinksPref = $GLOBALS['sugar_config']['default_subpanel_links'];
         }
         if ($showTabs && $subpanelLinksPref) {
             require_once 'include/SubPanel/SugarTab.php';
             $sugarTab = new SugarTab();
             $displayTabs = array();
             foreach ($tabs as $tab) {
                 $displayTabs[] = array('key' => $tab, 'label' => translate($this->subpanel_definitions->layout_defs['subpanel_setup'][$tab]['title_key']));
                 //echo '<td nowrap="nowrap"><a class="subTabLink" href="#' . $tab . '">' .  translate($this->subpanel_definitions->layout_defs['subpanel_setup'][$tab]['title_key']) .  '</a></td><td> | </td>';
             }
             $sugarTab->setup(array(), array(), $displayTabs);
             $sugarTab->display();
         }
         //echo '<td width="100%">&nbsp;</td></tr></table>';
     }
     return $tabs;
 }