/**
  *
  */
 protected function createControls()
 {
     $this->page = $this->controller->page;
     $this->setPostback('site', 'endEditPage', array('id' => $this->page->id, 'pa_site' => $this->page->pa_site, 'pa_module' => 'site', 'pa_action' => $this->page->pa_action, 'initPanel' => $this->request->initPanel));
     $panel = new CaptionedTabPanelControl($this, 'panel');
     $panel->setCaption('Seite » bearbeiten');
     $tabStammdaten = $panel->tabs->addTab('Stammdaten');
     $tabLayout = $panel->tabs->addTab('Layout');
     $lookup = new LookupBoxControl(null, 'pa_parent');
     $lookup->setLookupEntity(new Page())->setTextfield('pa_bezeichnung')->setValuefield('pa_id')->setGroupfield('parent')->setFilter(array('site' => $this->page->pa_site))->showNull(0, '-- Kein Parent --')->preSelect($this->page->pa_parent);
     $edit = new EditControl($tabStammdaten, 'edit');
     $edit->setEntity($this->page)->addRow('pa_ausblenden')->addRow('pa_bezeichnung')->addRow('Parent-Page', $lookup)->addRow('pa_css')->addRow('-')->addRow('pa_link')->addRow('pa_description')->addRow('pa_keywords')->addRow('pa_icon');
     $button = new SaveButtonControl($tabStammdaten, 'button');
     // region Texte
     $texte = new TranslatedTextControl($tabStammdaten, 'texte');
     $texte->setCaption('Angezeiger Text im Menü');
     $texte->setElement($this->page->getElementId());
     if ($this->request->action === 'newPage' && isset($this->request->text)) {
         $texte->setText($this->request->text);
     }
     // endregion
     // region Rechte
     $panelRechte = new CaptionedPanelControl($tabStammdaten, 'panelRechte');
     $panelRechte->setCaption('Seiten » Berechtigungen');
     $security = new SecurityCheckboxControl($panelRechte, 'berechtigung');
     $security->setElement($this->page->getElementId());
     // endregion
     // region Layout (Neu)
     if ($this->page->pa_action == 'composePage') {
         $rootRegions = Region::loadByPageAndParent($this->page->id, 0);
         foreach ($rootRegions as $region) {
             $block = $region->getBlock();
             if ($block !== null) {
                 $control = $block->toDesignModeHtml();
                 $tabLayout->add($control);
             }
         }
         $addRegion = new Controls\ChooseLayoutBlockControl($tabLayout, 'choose');
         $addRegion->setPage($this->page);
     }
     // endregion
     // region Layout (alt)
     if ($this->page->pa_action == 'useInnerTemplate') {
         $choose = new Controls\ChooseTemplateControl($tabLayout, 'pa_innertemplate');
         $choose->setChosenTemplate($this->page->pa_innertemplate);
         $choose->setOuterTemplate(Template::load($this->controller->site->si_template));
         $edit = new Controls\EditRegionsControl($tabLayout, 'editInPlace');
         $edit->setPageId($this->page->id);
         $edit->setRegions($this->page->getRegions());
         $edit->setTemplate($this->page->pa_innertemplate);
         $button = new ButtonControl($tabLayout, 'button2');
         $button->setCaption('Speichern')->setOnClick("\$('#initPanel').val(1); \$('#postback').submit();");
     }
     // endregion
 }
 public function pageDown()
 {
     $this->page = new Page($this->request->id);
     $this->page->down();
     $this->request->clear();
     $this->request->site = $this->page->pa_site;
     $this->flushCache();
 }
 /**
  * Gibt den HTML String für die unterliegenden Menüpunkte aus
  *
  * @return string
  */
 public function getSubHtml()
 {
     if (!$this->renderChildren or !$this->page->hasChildren()) {
         return '';
     }
     $ul = Html::create('ul')->css('dropdown-menu')->attr('role', 'menu');
     foreach ($this->children as $child) {
         $ul->text($child->toHtml());
     }
     return $ul->render();
 }
 /**
  * Füllt das Request-Objekt auf Basis des Pathinfo.
  * @param $request
  * @param string $pathinfo
  */
 public function fillRequestByPathinfo(&$request, $pathinfo)
 {
     Profiler::startSection('SiteRouting.fillRequestByPathInfo');
     $page = null;
     if ($pathinfo !== '') {
         $page = Page::loadByLink(Application::currentSiteId(), $pathinfo);
     }
     if ($page !== null) {
         $this->setCurrentPage($request, $page);
     } else {
         parent::fillRequestByPathinfo($request, $pathinfo);
     }
     Profiler::endSection('SiteRouting.fillRequestByPathInfo');
 }
 /**
  * Erstellt die Unterobjekte für die einzelnen Menüs
  */
 protected function loadMenuItems()
 {
     Profiler::startSection('SiteMenuControl.loadMenuItems');
     $this->loadRootPage();
     try {
         $pages = $this->rootPage->loadChildrenForCurrentUser();
     } catch (\Exception $e) {
         Logging::error('Fehler beim Laden der Children für die Root-Page des SiteMenuControls ' . $e->getMessage());
         $pages = [];
     }
     foreach ($pages as $page) {
         $itemControl = new MenuItemControl($this, 'page' . $page->id);
         $itemControl->setPage($page);
         $itemControl->setRenderChildren($this->renderChildren);
     }
     Profiler::endSection('SiteMenuControl.loadMenuItems');
 }
 public function install()
 {
     parent::install();
     // Datensätze anlegen
     $site = new Site();
     $site->si_bezeichnung = 'Administration';
     $site->si_name = 'admin';
     $site->si_urlpattern = 'admin.php';
     $site->si_template = 'bootadmin';
     $site->save();
     // Struktur-Eintrag im Menü
     $page = new Page();
     $page->pa_site = $site->id;
     $page->pa_parent = 0;
     $page->pa_bezeichnung = 'Struktur';
     $page->pa_link = 'struktur';
     $page->pa_pos = 0;
     $page->pa_title = 'Struktur';
     $page->pa_module = 'site';
     $page->pa_action = 'useInnerTemplate';
     $page->pa_haschildren = false;
     $page->pa_innertemplate = 'normal';
     $page->save();
     $region = new Region();
     $region->re_page = $page->id;
     $region->re_name = 'main';
     $region->re_module = 'site';
     $region->re_action = 'showSite';
     $region->re_position = 1;
     $region->save();
     Security::berechtigungSchreiben($page->getElementId(), 1, 1);
     Text::saveArray($page->getElementId(), array(1 => 'Struktur'));
     // Benutzer-Eintrag im Menü
     $page = new Page();
     $page->pa_site = $site->id;
     $page->pa_parent = 0;
     $page->pa_bezeichnung = 'Benutzer';
     $page->pa_link = 'benutzer';
     $page->pa_pos = 0;
     $page->pa_title = 'Benutzer';
     $page->pa_module = 'site';
     $page->pa_action = 'useInnerTemplate';
     $page->pa_haschildren = false;
     $page->pa_innertemplate = 'normal';
     $page->save();
     $region = new Region();
     $region->re_page = $page->id;
     $region->re_name = 'main';
     $region->re_module = 'user';
     $region->re_action = 'indexUser';
     $region->re_position = 1;
     $region->save();
     Security::berechtigungSchreiben($page->getElementId(), 1, 1);
     Text::saveArray($page->getElementId(), array(1 => 'Benutzer'));
     // Modul-Eintrag im Menü
     $page = new Page();
     $page->pa_site = $site->id;
     $page->pa_parent = 0;
     $page->pa_bezeichnung = 'Module';
     $page->pa_link = 'module';
     $page->pa_pos = 0;
     $page->pa_title = 'Module';
     $page->pa_module = 'site';
     $page->pa_action = 'useInnerTemplate';
     $page->pa_haschildren = false;
     $page->pa_innertemplate = 'normal';
     $page->save();
     $region = new Region();
     $region->re_page = $page->id;
     $region->re_name = 'main';
     $region->re_module = 'modView';
     $region->re_action = 'showModules';
     $region->re_position = 1;
     $region->save();
     Security::berechtigungSchreiben($page->getElementId(), 1, 1);
     Text::saveArray($page->getElementId(), array(1 => 'Module'));
     // Site-Definition Frontend
     $site = new Site();
     $site->si_bezeichnung = 'Webseite';
     $site->si_name = 'web';
     $site->si_urlpattern = '';
     $site->si_template = 'unify';
     $site->save();
 }
 /**
  * Gibt die Wurzel-Page für diese Site zurück.
  * @return Page
  */
 public function loadRoot()
 {
     return Page::findFirst(array('site' => $this->id, 'parent' => 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;
 }