/** * Get an array of Curry\Module\PageModuleWrapper objects for all modules on the PageRevision we are rendering. * * @return \Curry\Module\PageModuleWrapper[] */ protected function getPageModuleWrappers() { $langcode = (string) \Curry_Language::getLangCode(); $cacheName = md5(__CLASS__ . '_ModuleWrappers_' . $this->pageRevision->getPageRevisionId() . '_' . $langcode); if (($moduleWrappers = $this->app->cache->load($cacheName)) === false) { $moduleWrappers = $this->pageRevision->getPageModuleWrappers($langcode); $this->app->cache->save($moduleWrappers, $cacheName); } return $moduleWrappers; }
public function sortItems($params) { ModuleSortorderQuery::create()->filterByPageRevision($this->pageRevision)->delete(); $wrappers = $this->pageRevision->getPageModuleWrappers(); $unsortedIds = ArrayHelper::objectsToArray($wrappers, false, 'getPageModuleId'); $wrapperById = ArrayHelper::objectsToArray($wrappers, 'getPageModuleId'); // Get primary keys $items = $_POST['item']; if (!is_array($items)) { throw new Exception('Expected array POST variable `item`.'); } $sortedIds = array(); foreach ($items as $item) { $pk = json_decode($item, true); if ($pk === null) { throw new Exception('Invalid primary key for item: ' . $item); } if (!array_key_exists($pk, $wrapperById)) { throw new Exception('Module not found when sorting'); } $sortedIds[] = $pk; } if ($sortedIds !== $unsortedIds) { foreach ($wrappers as $wrapper) { $sortorder = $wrapper->getSortorder(true); $sortorder->insertAtBottom(); $sortorder->save(); } $pks = array(); foreach ($sortedIds as $id) { $pks[] = array($id, $this->pageRevision->getPageRevisionId()); } Propel::sortableReorder($pks, 'ModuleSortorder'); } $this->pageRevision->setUpdatedAt(time()); $this->pageRevision->save(); }
/** * Constructor * * @param PageModule $pageModule * @param PageRevision $pageRevision * @param string $langcode */ public function __construct(PageModule $pageModule, PageRevision $pageRevision, $langcode) { $this->pageRevisionId = $pageRevision->getPageRevisionId(); $this->pageModuleId = $pageModule->getPageModuleId(); $this->langcode = $langcode === null ? "" : $langcode; $this->reload(); }
/** * Render the specified page revision. * * @param PageRevision $pageRevision * @param Curry_Request $request * @param array $vars * @param array $options */ protected function render(PageRevision $pageRevision, Curry_Request $request, array $vars, array $options) { Curry_Core::log('Showing page ' . $pageRevision->getPage()->getName() . ' (PageRevisionId: ' . $pageRevision->getPageRevisionId() . ')', Zend_Log::NOTICE); $time = microtime(true); $queries = Curry_Propel::getQueryCount(); $cacheName = __CLASS__ . '_Page_' . md5($request->getUri()); $cacheLifetime = $pageRevision->getPage()->getCacheLifetime(); $doCache = $request->getMethod() === 'GET' && $cacheLifetime !== 0; if ($doCache) { ob_start(); } $generator = self::createPageGenerator($pageRevision, $request); $generator->display($vars, $options); if ($doCache) { $cache = array('page_id' => $pageRevision->getPageId(), 'page_revision_id' => $pageRevision->getPageRevisionId(), 'headers' => headers_list(), 'content' => ob_get_flush()); Curry_Core::$cache->save($cache, $cacheName, array(), $cacheLifetime < 0 ? false : $cacheLifetime); } if (Curry_Core::$config->curry->updateTranslationStrings) { Curry_Language::updateLanguageStrings(); } $time = microtime(true) - $time; $queries = $queries !== null ? Curry_Propel::getQueryCount() - $queries : null; Curry_Core::triggerHook('Curry_Application::render', $pageRevision->getPageId(), $pageRevision->getPageRevisionId(), $time, $queries); }
/** * Metadata form. * * @param PageRevision $pageRevision * @return Curry_Form */ public static function getMetadataForm(PageRevision $pageRevision) { $query = PageMetadataQuery::create()->joinWith('Metadata', Criteria::RIGHT_JOIN)->addJoinCondition('Metadata', 'PageMetadata.PageRevisionId = ?', $pageRevision->getPageRevisionId())->orderBy('Metadata.SortableRank'); $metadatas = $query->find(); $form = new Curry_Form(array('action' => url('', array("module", "view", "page_id")), 'method' => 'post', 'elements' => array('pid_metadata' => array('hidden')))); $typeOptions = array('textarea' => array('rows' => 6)); foreach ($metadatas as $pageMetadata) { $metadata = $pageMetadata->getMetadata(); $options = array('label' => $metadata->getDisplayName(), 'value' => $pageMetadata->getValue() !== null ? $pageMetadata->getValue() : $metadata->getDefaultValue()); if (isset($typeOptions[$metadata->getType()])) { ArrayHelper::extend($options, $typeOptions[$metadata->getType()]); } $form->addElement($metadata->getType(), $metadata->getName(), $options); } $form->addElement('submit', 'save', array('label' => 'Save')); return $form; }