public function saveAction()
 {
     $page_id = $this->_getParam('page_id');
     $pageTable = Engine_Api::_()->getDbtable('pages', 'core');
     $pageObject = $pageTable->fetchRow($pageTable->select()->where('name = ?', $page_id)->orWhere('page_id = ?', $page_id));
     $form = new Core_Form_Admin_Layout_Content_Page();
     if (!$pageObject->custom) {
         $form->removeElement('levels');
     }
     $form->populate($pageObject->toArray());
     $levels = $form->getElement('levels');
     if ($levels && !empty($pageObject->levels)) {
         $levels->setValue(Zend_Json_Decoder::decode($pageObject->levels));
     } else {
         if ($levels) {
             $levels->setValue(array_keys($levels->getMultiOptions()));
         }
     }
     if ($this->getRequest()->isPost() && $form->isValid($this->getRequest()->getPost())) {
         $values = $form->getValues();
         unset($values['page_id']);
         if (empty($values['url'])) {
             $values['url'] = new Zend_Db_Expr('NULL');
         }
         if ($values['levels']) {
             $values['levels'] = Zend_Json_Encoder::encode($values['levels']);
         }
         // @todo add provides no-viewer or viewer based on whether the public level is selected?
         $pageObject->setFromArray($values);
         $pageObject->save();
         $form->addNotice($this->view->translate('Your changes have been saved.'));
     }
     $this->getResponse()->setBody($form->render($this->view));
     $this->_helper->layout->disableLayout(true);
     $this->_helper->viewRenderer->setNoRender(true);
     return;
 }
Exemplo n.º 2
0
 public function indexAction()
 {
     // Get available content blocks
     $this->view->contentAreas = $contentAreas = $this->buildCategorizedContentAreas($this->getContentAreas());
     // Re-index by name
     $contentByName = array();
     foreach ($contentAreas as $category => $categoryAreas) {
         foreach ($categoryAreas as $info) {
             $contentByName[$info['name']] = $info;
         }
     }
     $this->view->contentByName = $contentByName;
     // Get page param
     $page = $this->_getParam('page', 'core_index_index');
     $pageTable = Engine_Api::_()->getDbtable('pages', 'core');
     $contentTable = Engine_Api::_()->getDbtable('content', 'core');
     // Get current page
     $this->view->pageObject = $pageObject = $pageTable->fetchRow($pageTable->select()->where('name = ?', $page)->orWhere('page_id = ?', $page));
     if (null === $pageObject) {
         $page = 'core_index_index';
         $pageObject = $pageTable->fetchRow($pageTable->select()->where('name = ?', $page));
         if (null === $pageObject) {
             throw new Engine_Exception('Home page is missing');
         }
     }
     $this->view->page = $page;
     $this->view->pageObject = $pageObject;
     // Make page form
     $this->view->pageForm = $pageForm = new Core_Form_Admin_Layout_Content_Page();
     $pageForm->populate($pageObject->toArray());
     // Get page list
     $this->view->pageList = $pageList = $pageTable->fetchAll();
     // Get registered content areas
     $contentRowset = $contentTable->fetchAll($contentTable->select()->where('page_id = ?', $pageObject->page_id));
     $contentStructure = $pageTable->prepareContentArea($contentRowset);
     // Validate structure
     // Note: do not validate for header or footer
     $error = false;
     if ($pageObject->name !== 'header' && $pageObject->name !== 'footer') {
         foreach ($contentStructure as &$info1) {
             if (!in_array($info1['name'], array('top', 'bottom', 'main')) || $info1['type'] != 'container') {
                 $error = true;
                 break;
             }
             foreach ($info1['elements'] as &$info2) {
                 if (!in_array($info2['name'], array('left', 'middle', 'right')) || $info1['type'] != 'container') {
                     $error = true;
                     break;
                 }
             }
             // Re order second-level elements
             usort($info1['elements'], array($this, '_reorderContentStructure'));
         }
     }
     if ($error) {
         throw new Exception('page failed validation check');
     }
     // Assign structure
     $this->view->contentRowset = $contentRowset;
     $this->view->contentStructure = $contentStructure;
 }