/** * Get navigation html * * @return string */ public function getNavigationHtml() { $modules = Uni_Fox::getModules(); $doc = new DOMDocument(); $this->finalMenuTree = new DOMDocument(); $this->finalMenuTree->formatOutput = true; $this->root = Uni_Data_XDOMDocument::createNode('menus', NULL, $this->finalMenuTree); $this->finalMenuTree->appendChild($this->root); $this->sourceQueue = array(); $this->targetQueue = array(); if (is_array($modules)) { foreach ($modules as $module) { if ($doc->load($module['path'] . DIRECTORY_SEPARATOR . 'conf' . DIRECTORY_SEPARATOR . 'config.xml')) { $xPath = new DOMXPath($doc); $menus = $xPath->query('/config/admin/menus'); if ($menus->length > 0) { foreach ($menus as $menu) { $this->getFinalMenuTree($menu); } } } } } if (isset($this->finalMenuTree) && $this->root->hasChildNodes()) { $this->optimizeMenuTree(); $this->mnuDoc = new DOMDocument(); $this->mnuDoc->formatOutput = true; $this->mnuRoot = Uni_Data_XDOMDocument::createNode('ul', array('class' => 'admin-nav-menu'), $this->mnuDoc); $this->mnuDoc->appendChild($this->mnuRoot); $this->createMenu($this->root); if (isset($this->mnuDoc)) { $this->menuHTML = $this->mnuDoc->saveXML($this->mnuRoot); return $this->menuHTML; } } }
/** * * @param array $paths * @param string $class * @param string $infix * @param int $pos * @return mixed Object of requested class or FALSE if not found */ public static function instantiate($paths, $class, $infix, $pos) { if (strpos($class, '/') === FALSE) { $fqcn = $class; $cpath = str_replace('_', DS, $class); } else { $classParts = explode('/', $class); $module = ucfirst($classParts[0]); if (!isset(self::$moduleInfo[$module])) { $modules = Uni_Fox::getModules(); self::$moduleInfo[$module]['namespace'] = $modules[$module]['namespace']; } $fqcn = self::$moduleInfo[$module]['namespace']; $cpath = self::$moduleInfo[$module]['namespace']; for ($i = 0; $i < count($classParts); $i++) { if ($i == $pos) { $fqcn = $fqcn . '_' . ucfirst($infix); $cpath = $cpath . DS . ucfirst($infix); } $fqcn = $fqcn . '_' . ucfirst($classParts[$i]); $cpath = $cpath . DS . ucfirst($classParts[$i]); } } while (count($paths)) { $path = array_pop($paths); $fcpath = $path . DS . $cpath . '.php'; if (file_exists($fcpath)) { require_once $fcpath; if (class_exists($fqcn)) { return new $fqcn(); } } else { } } return FALSE; }
/** * Loades layout defined for particular action * * @param string $layoutUpdate * @param string $updateKey * @return void */ public function load($layoutUpdate = NULL, $updateKey = NULL) { $this->finalLayout = new Uni_Data_XDOMDocument(); $this->finalLayout->preserveWhiteSpace = FALSE; $this->finalLayout->formatOutput = TRUE; $ds = DIRECTORY_SEPARATOR; $debug = FALSE; if (Uni_Core_Installer::isInstalled()) { $cacheSettings = Uni_Core_CacheManager::loadCacheSettings(); $isCacheEnabled = isset($cacheSettings[Fox_Core_Model_Cache::CACHE_CODE_LAYOUT]) ? $cacheSettings[Fox_Core_Model_Cache::CACHE_CODE_LAYOUT] : FALSE; $cacheLayoutBasePath = CACHE_DIR . $ds . Fox_Core_Model_Cache::CACHE_CODE_LAYOUT . $ds . $this->mode . $ds . $this->package . $ds . $this->theme; file_exists($cacheLayoutBasePath) && is_dir($cacheLayoutBasePath) || @mkdir($cacheLayoutBasePath, 0777, TRUE); $cacheLayoutPath = $cacheLayoutBasePath . $ds . strtolower($this->module) . '_' . strtolower($this->controller) . '_' . strtolower($this->action) . (isset($updateKey) ? '_' . urlencode($updateKey) : '') . '.lxml'; } else { $isCacheEnabled = FALSE; } if (!$isCacheEnabled || $isCacheEnabled && !file_exists($cacheLayoutPath)) { $debug || ob_start(); $this->layout = new Uni_Core_Layout(); $this->layout->init(); $lPaths[] = 'application' . $ds . 'views' . $ds . $this->mode . $ds . $this->package . $ds . $this->theme . $ds . 'layout'; $lPaths[] = 'application' . $ds . 'views' . $ds . $this->mode . $ds . $this->defaultPackage . $ds . $this->defaultTheme . $ds . 'layout'; $loadLayout = FALSE; foreach ($lPaths as $lBPath) { if (file_exists($lBPath . $ds . 'fox.xml')) { $lDPath = $lBPath . $ds . 'fox.xml'; break; } } if (isset($lDPath)) { $this->xDomFox = new Uni_Data_XDOMDocument(); $this->xDomFox->load($lDPath); } else { throw new Exception('Layout not found "' . $lDPath . '"'); } $this->layout->setLayout($this->xDomFox); /* * **************Parsing default Section from all other layouts************** */ $modules = array_keys(Uni_Fox::getModules()); foreach ($modules as $module) { if ($module != $this->module) { foreach ($lPaths as $lBPath) { if (file_exists($lBPath . $ds . lcfirst($module) . '.xml')) { $lPath = $lBPath . $ds . lcfirst($module) . '.xml'; break; } } if (isset($lPath)) { $mLXmlDoc = new Uni_Data_XDOMDocument(); $mLXmlDoc->load($lPath); $xpMLXmlDoc = new DOMXPath($mLXmlDoc); $defMLXml = $xpMLXmlDoc->query('/' . self::ROOT . '/global'); if ($defMLXml->length > 0) { $this->layout->mergeLayout($defMLXml->item(0), TRUE); $this->layout->showXML(); } unset($lPath); } } } foreach ($lPaths as $lBPath) { if (file_exists($lBPath . $ds . lcfirst($this->module) . '.xml')) { $lPath = $lBPath . $ds . lcfirst($this->module) . '.xml'; break; } } if (isset($lPath)) { $this->xDomMain = new Uni_Data_XDOMDocument(); $this->xDomMain->load($lPath); } else { throw new Exception('Layout not found "' . $lPath . '"'); } $xpMain = new DOMXPath($this->xDomMain); $defGlobal = $xpMain->query('/' . self::ROOT . '/global'); if ($defGlobal->length > 0) { $this->layout->mergeLayout($defGlobal->item(0), TRUE); } $defMain = $xpMain->query('/' . self::ROOT . '/default'); if ($defMain->length > 0) { $this->layout->mergeLayout($defMain->item(0), TRUE); } $actMain = $xpMain->query('/' . self::ROOT . '/' . $this->controller . '_' . $this->action); if ($actMain->length > 0) { $this->layout->mergeLayout($actMain->item(0), TRUE); } if (isset($layoutUpdate) && isset($updateKey)) { $domUpdate = new Uni_Data_XDOMDocument(); if (!$domUpdate->loadXML('<layout>' . $layoutUpdate . '</layout>')) { } $this->layout->mergeLayout($domUpdate->documentElement, TRUE); } $this->layout->prepareHead(); $this->layout->showXML(); $this->finalLayout->loadXML($this->layout->saveXML()); if ($isCacheEnabled) { $this->finalLayout->save($cacheLayoutPath); @chmod($cacheLayoutPath, 0777); } unset($this->layout); $debug || ob_clean(); } else { if (file_exists($cacheLayoutPath)) { $this->finalLayout->load($cacheLayoutPath); } } $this->parse($this->finalLayout); }
/** * Loads setting data * * @param string $item setting key */ function loadSettingData($item) { $this->item = $item; $modules = Uni_Fox::getModules(); $doc = new Uni_Data_XDOMDocument(); if (is_array($modules)) { $this->finalMenuTree = new Uni_Data_XDOMDocument(); $this->finalMenuTree->formatOutput = true; $this->root = Uni_Data_XDOMDocument::createNode('settings', NULL, $this->finalMenuTree); $this->finalMenuTree->appendChild($this->root); foreach ($modules as $module) { $filePath = $module['path'] . DIRECTORY_SEPARATOR . 'conf' . DIRECTORY_SEPARATOR . 'setting.xml'; if (file_exists($filePath)) { if ($doc->load($filePath)) { $xPath = new DOMXPath($doc); $setting = $xPath->query('/settings/setting|items'); if ($setting->length > 0) { foreach ($setting as $menu) { $this->getFinalMenuTree($menu); } } $q = '/settings/items/item[@name="' . $item . '"]/sections'; $sections = $xPath->query($q); if ($sections->length > 0) { foreach ($sections as $section) { $this->getFinalMenuTree($section); } } } } } } }