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; }
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; }