public function initializeForCommand() { switch ($this->command) { case 'notice': $response = null; $responseVersion = 1; if ($this->getOptionalModuleVar('BANNER_ALERT', false, 'notice')) { $noticeData = $this->getOptionalModuleSection('notice'); if ($noticeData) { $response = array('notice' => '', 'moduleID' => null, 'link' => $this->getOptionalModuleVar('BANNER_ALERT_MODULE_LINK', false, 'notice')); // notice can either take a module or data model class or retriever class. The section is passed on. It must implement the HomeAlertInterface interface if (isset($noticeData['BANNER_ALERT_MODULE'])) { $moduleID = $noticeData['BANNER_ALERT_MODULE']; $controller = WebModule::factory($moduleID); $response['moduleID'] = $moduleID; $string = "Module {$moduleID}"; } elseif (isset($noticeData['BANNER_ALERT_MODEL_CLASS'])) { $controller = DataModel::factory($noticeData['BANNER_ALERT_MODEL_CLASS'], $noticeData); $string = $noticeData['BANNER_ALERT_MODEL_CLASS']; } elseif (isset($noticeData['BANNER_ALERT_RETRIEVER_CLASS'])) { $controller = DataRetriever::factory($noticeData['BANNER_ALERT_RETRIEVER_CLASS'], $noticeData); $string = $noticeData['BANNER_ALERT_RETRIEVER_CLASS']; } else { throw new KurogoConfigurationException("Banner alert not properly configured"); } if (!$controller instanceof HomeAlertInterface) { throw new KurogoConfigurationException("{$string} does not implement HomeAlertModule interface"); } $response['notice'] = $controller->getHomeScreenAlert(); } } $this->setResponse($response); $this->setResponseVersion($responseVersion); break; case 'modules': if ($setcontext = $this->getArg('setcontext')) { Kurogo::sharedInstance()->setUserContext($setcontext); } $responseVersion = 2; $response = array('primary' => array(), 'secondary' => array(), 'customize' => $this->getOptionalModuleVar('ALLOW_CUSTOMIZE', true), 'displayType' => $this->getOptionalModuleVar('display_type', 'springboard')); $allmodules = $this->getAllModules(); $navModules = Kurogo::getSiteSections('navigation', Config::APPLY_CONTEXTS_NAVIGATION); foreach ($navModules as $moduleID => $moduleData) { if ($module = Kurogo::arrayVal($allmodules, $moduleID)) { $title = Kurogo::arrayVal($moduleData, 'title', $module->getModuleVar('title')); $type = Kurogo::arrayVal($moduleData, 'type', 'primary'); $visible = Kurogo::arrayVal($moduleData, 'visible', 1); $response[$type][] = array('tag' => $moduleID, 'title' => $title, 'visible' => (bool) $visible); } } $this->setResponse($response); $this->setResponseVersion($responseVersion); break; default: $this->invalidCommand(); } }
protected function getAllModuleNavigationData() { $modules = $moduleNavData = array('primary' => array(), 'secondary' => array()); $navModules = Kurogo::getSiteSections('navigation', Config::APPLY_CONTEXTS_NAVIGATION); foreach ($navModules as $moduleID => $moduleData) { $type = Kurogo::arrayVal($moduleData, 'type', 'primary'); $moduleNavData[$type][$moduleID] = $moduleData; } return $moduleNavData; }
protected function getAllModuleNavigationData() { $modules = $moduleNavData = array('primary' => array(), 'secondary' => array()); $navModules = Kurogo::getSiteSections('navigation', Config::APPLY_CONTEXTS_NAVIGATION); foreach ($navModules as $moduleID => $moduleData) { $type = Kurogo::arrayVal($moduleData, 'type', 'primary'); if (isset($moduleData['minAPIClientVersion'])) { if (version_compare($this->clientVersion, $moduleData['minAPIClientVersion'], 'lt')) { continue; } } if (isset($moduleData['maxAPIClientVersion'])) { if (version_compare($this->clientVersion, $moduleData['maxAPIClientVersion'], 'gt')) { continue; } } if (isset($moduleData['pagetype'])) { if (!is_array($moduleData['pagetype'])) { $moduleData['pagetype'] = array($moduleData['pagetype']); } if (!in_array($this->clientPagetype, $moduleData['pagetype'])) { continue; } } if (isset($moduleData['browser'])) { if (!is_array($moduleData['browser'])) { $moduleData['browser'] = array($moduleData['browser']); } if (!in_array($this->clientBrowser, $moduleData['browser'])) { continue; } } if (isset($moduleData['platform'])) { if (!is_array($moduleData['platform'])) { $moduleData['platform'] = array($moduleData['platform']); } if (!in_array($this->clientPlatform, $moduleData['platform'])) { continue; } } $moduleNavData[$type][$moduleID] = $moduleData; } return $moduleNavData; }
protected function getAllModuleNavigationData($includeHidden = self::INCLUDE_HIDDEN_MODULES, $iconSetType = 'navigation') { $modules = $moduleNavData = array('primary' => array(), 'secondary' => array()); $navModules = Kurogo::getSiteSections('navigation', Config::APPLY_CONTEXTS_NAVIGATION); foreach ($navModules as $moduleID => $moduleData) { $type = Kurogo::arrayVal($moduleData, 'type', 'primary'); $moduleNavData[$type][$moduleID] = $moduleData; } if ($iconSet = $this->getOptionalThemeVar($iconSetType . '_icon_set')) { $iconSetSize = $this->getOptionalThemeVar($iconSetType . '_icon_size'); $imgPrefix = "/common/images/iconsets/{$iconSet}/{$iconSetSize}/"; } else { $homeModuleID = $this->getHomeModuleID(); $imgPrefix = "/modules/{$homeModuleID}/images/"; } //this is fixed for now $modulesThatCannotBeHidden = array('customize'); $allModuleData = array(); $userNavData = $this->getUserNavData(); foreach ($moduleNavData as $type => $modulesOfType) { foreach ($modulesOfType as $moduleID => $navData) { $icon = $moduleID; $selected = $this->configModule == $moduleID; $primary = $type == 'primary'; $classes = array(); if ($selected) { $classes[] = 'selected'; } if (!$primary) { $classes[] = 'utility'; } $hidable = !in_array($moduleID, $modulesThatCannotBeHidden); $imgSuffix = $this->pagetype == 'tablet' && $selected ? '' : ''; $linkTarget = Kurogo::arrayVal($navData, 'linkTarget'); // customize is implemented as a page on the home module if ($moduleID == 'customize') { $visible = true; $icon = $moduleID; $moduleData = array('type' => $type, 'selected' => $selected, 'title' => $this->getLocalizedString('CUSTOMIZE_TITLE'), 'shortTitle' => $this->getLocalizedString('CUSTOMIZE_SHORT_TITLE'), 'url' => "/" . $this->getHomeModuleID() . "/customize", 'hideable' => $hidable, 'visible' => true, 'img' => $imgPrefix . "{$icon}{$imgSuffix}" . $this->imageExt, 'class' => implode(' ', $classes), 'linkTarget' => $linkTarget); } else { //this will throw an exception if a module is not available, so watch out $moduleConfig = Kurogo::getModuleConfig('module', $moduleID); $title = Kurogo::arrayVal($navData, 'title', $moduleConfig->getVar('title')); $shortTitle = Kurogo::arrayVal($navData, 'shortTitle', $title); $icon = $moduleConfig->getOptionalVar('icon', $moduleID); $visible = Kurogo::arrayVal($userNavData, $moduleID, Kurogo::arrayVal($navData, 'visible', 1)); $moduleData = array('type' => $type, 'selected' => $selected, 'title' => $title, 'shortTitle' => $shortTitle, 'url' => "/{$moduleID}/", 'hideable' => $hidable, 'visible' => $visible, 'img' => $imgPrefix . "{$icon}{$imgSuffix}" . $this->imageExt, 'class' => implode(' ', $classes), 'linkTarget' => $linkTarget); if (Kurogo::getOptionalSiteVar('DYNAMIC_MODULE_NAV_DATA', false)) { $module = WebModule::factory($moduleID, false, array(), false); // do not initialize $moduleData = $module->getModuleNavigationData($moduleData); } } if ($visible || $includeHidden || $type == 'primary' && isset($userNavData['visible'])) { $modules[$type][$moduleID] = $moduleData; } } } if (isset($userNavData['visible'])) { $userModuleNavData = array(); foreach ($userNavData['visible'] as $moduleID => $visible) { if (isset($modules['primary'][$moduleID])) { if ($visible || $includeHidden) { $userModuleNavData[$moduleID] = $modules['primary'][$moduleID]; $userModuleNavData[$moduleID]['visible'] = $visible; } } } // make sure all primary modules are defined in userNavData // this ensures that new modules show up if a user has customized their layout $userModules = array_keys($userNavData['visible']); $navModules = array_keys($modules['primary']); if ($diff = array_diff($navModules, $userModules)) { foreach ($diff as $moduleID) { $userModuleNavData[$moduleID] = $modules['primary'][$moduleID]; } } $modules['primary'] = $userModuleNavData; } return $modules; }