/**
  * Lädt das Modul mit dem übergebenen Namen
  * @param $name
  * @return Module|null
  */
 public function getModule($name)
 {
     if ($name === '') {
         Logging::warning('Leeres Modul sollte geladen werden.');
         return null;
     }
     $name = ucfirst($name);
     // Aus dem Cache holen
     $cacheId = 'module.' . $name;
     if (array_key_exists($cacheId, $this->internalCache)) {
         return $this->internalCache[$cacheId];
     }
     $result = Cache::get($cacheId, null);
     if ($result !== null) {
         $this->internalCache[$cacheId] = $result;
         return $result;
     }
     Profiler::startSection('module.load', $name);
     Logging::debug("Modul '{$name}' wird geladen");
     // Generieren der Klassendefinition für den Controller um dann via
     // Reflection die Datei und damit das Verzeichnis herauszubekommen.
     $naming = new ModuleNaming();
     $classOfController = $naming->getControllerClassFromCamelCase($name);
     if (class_exists($classOfController)) {
         $reflector = new ReflectionClass($classOfController);
         $directory = dirname($reflector->getFileName());
         $filename = $directory . '/Module.xml';
         if (file_exists($filename)) {
             $file = simplexml_load_file($filename);
             $result = $this->createByXml($file, $directory);
             unset($file);
         } else {
             Logging::error("Modul [{$name}] konnte in Pfad {$directory} nicht gefunden werden");
         }
     } else {
         Logging::warning("Controller für Modul [{$name}] konnte nicht gefunden werden [{$classOfController}]");
     }
     Cache::set($cacheId, $result);
     $this->internalCache[$cacheId] = $result;
     Profiler::endSection('module.load');
     return $result;
 }
Пример #2
0
 /**
  * Diese Methode lädt den Inhalt einer Skin-Datei in die Skin-Property der
  * Klasse. Dabei wird zuerst geschaut, ob es im aktuellen Template-Verzeichnis
  * eine entsprechende Datei gibt. Wenn nicht wird das Default-Skin geladen.
  * Die Skin eines Controls wird im Cache hinterlegt, um die Festplattten-
  * zugriffe zu minimieren. Dies kann zu Problemem führen, wenn im gleichen
  * Request zwei verschiedene Templates angesprochen werden. Aktuell ist dies
  * nicht vorgesehen.
  */
 protected function loadSkin()
 {
     // 1. Schritt -> Versuch aus Template zu lesen
     // 2. Schritt -> Default lesen
     if ($this->skin === null) {
         $this->skin = Cache::get($this->getCacheId(), Template::loadSkin($this));
         if ($this->skin === null && $this->defaultSkinFile !== '') {
             $this->skin = file_get_contents($this->defaultSkinFile);
         }
         Cache::set($this->getCacheId(), $this->skin);
     }
 }
Пример #3
0
 /**
  * Diese Methode lädt die Seiten dieses Menüs, basierend
  * auf einer Root-Seite und dem angemeldeten Benutzer. Die
  * geladenen Seiten werden im $pages Property abgelegt.
  *
  * @return Page[]
  * @throws Exception
  */
 public function loadChildrenForCurrentUser()
 {
     if (!$this->hasChildren()) {
         return [];
     }
     // Versuch es aus dem Cache zu lesen
     $this->pages = Cache::get($this->getCacheId(), null);
     if ($this->pages === null) {
         $this->pages = [];
         $sql = "\n            select seiten.*, text.*\n            from\n\n                (select distinct pa_id, pa_site, pa_parent, pa_bezeichnung, pa_link, pa_pos, pa_title, pa_module,\n                    pa_action, pa_css, pa_innertemplate, pa_parameter, pa_haschildren, pa_icon from pages\n                    join rechte on re_element = CONCAT('pages.', pa_id) and re_recht = 1 and re_rolle in {$_SESSION['rollen']}\n                    where pa_site = :site and pa_parent = :parent and (pa_ausblenden != 1) ) seiten\n\n                    left outer join texte text on text.te_element = CONCAT('pages.', pa_id) and text.te_sprache = :sprache\n\n             order by pa_pos\n\n\t\t    ";
         $sql = "\nselect distinct \n\tpa_id, pa_site, pa_parent, pa_bezeichnung, pa_link, pa_pos, pa_title, pa_module, pa_action, pa_css, pa_innertemplate, pa_parameter, \n\tpa_haschildren, pa_icon, text.* \n\nfrom pages \n\tjoin rechte on re_element = CONCAT('pages.', pa_id) and re_recht = 1 and re_rolle in {$_SESSION['rollen']}\n    join texte text on text.te_element = CONCAT('pages.', pa_id) and text.te_sprache = :sprache \n\nwhere pa_site = :site and pa_parent = :parent and  (pa_ausblenden != 1) order by pa_pos            \n            ";
         $this->db->query($sql, ['site' => $this->pa_site, 'parent' => $this->id, 'sprache' => $_SESSION['sp_id']]);
         $results = $this->db->fetchAll();
         foreach ($results as $row) {
             $item = new Page();
             $item->loadFromRow($row);
             $item->loadTextFromRow($row);
             $this->pages[] = $item;
         }
         Cache::set($this->getCacheId(), $this->pages);
     }
     return $this->pages;
 }