/** * Handler for the issue change event. * * @param MetaIssue $p_oldIssue * @param MetaIssue $p_newIssue */ private function setIssueHandler(MetaIssue $p_oldIssue, MetaIssue $p_newIssue) { static $issueHandlerRunning = false; if (!$this->m_readonlyProperties['preview'] && !$p_newIssue->is_published && $p_newIssue->defined()) { return; } if ($issueHandlerRunning || $p_newIssue->same_as($p_oldIssue)) { return; } $issueHandlerRunning = true; if ($p_newIssue->defined() && !$this->getPublication()->same_as($p_newIssue->publication)) { $this->setPublicationHandler($this->getPublication(), $p_newIssue->publication); } if ($p_newIssue->defined() && !$this->getLanguage()->same_as($p_newIssue->language)) { $this->setLanguageHandler($this->getLanguage(), $p_newIssue->language); } $this->setSectionHandler($this->getSection(), self::$m_nullMetaSection); $this->m_readonlyProperties['url']->issue = $p_newIssue; $this->m_objects['issue'] = $p_newIssue; $issueHandlerRunning = false; }
/** * Get issue * * @param string $name * @return MetaIssue */ private function _getIssue($name, MetaLanguage $language, MetaPublication $publication) { if (!empty($name)) { $issueArray = Issue::GetIssues($publication->identifier, $language->number, null, $name, null, !$this->m_preview); if (is_array($issueArray) && sizeof($issueArray) == 1) { $issue = new MetaIssue($publication->identifier, $language->number, $issueArray[0]->getIssueNumber()); } else { throw new InvalidArgumentException("Invalid issue identifier in URL.", self::INVALID_ISSUE); } } else { $issueObj = Issue::GetCurrentIssue($publication->identifier, $language->number); $issue = new MetaIssue($publication->identifier, $language->number, $issueObj->getIssueNumber()); if (!$issue->defined()) { throw new InvalidArgumentException("No published issue was found.", self::INVALID_ISSUE); } } return $issue; }
/** * Get issue * * @param string $name * * @return MetaIssue */ private function _getIssue($name, MetaLanguage $language, MetaPublication $publication) { $cacheService = \Zend_Registry::get('container')->getService('newscoop.cache'); $issueKey = $cacheService->getCacheKey(array('metaIssue', $name, $publication->identifier, $language->number), 'issue'); if ($cacheService->contains($issueKey)) { return $cacheService->fetch($issueKey); } $issueObj = Issue::GetCurrentIssue($publication->identifier, $language->number); if (!empty($name)) { $issueArray = Issue::GetIssues($publication->identifier, $language->number, null, $name, null, !$this->m_preview); if (is_array($issueArray) && sizeof($issueArray) == 1) { $issue = new MetaIssue($publication->identifier, $language->number, $issueArray[0]->getIssueNumber()); } else { throw new InvalidArgumentException("Invalid issue identifier in URL.", self::INVALID_ISSUE); } } else { $issue = new MetaIssue($publication->identifier, $language->number, $issueObj->getIssueNumber()); if (!$issue->defined()) { throw new InvalidArgumentException("No published issue was found.", self::INVALID_ISSUE); } } $cacheService->save($issueKey, $issue); return $issue; }
/** * Returns whether the template name given is a valid template resource. * * @param string $p_templateName * The name of the template from the URI path * * @return boolean * true on success, false on failure */ protected function isValidTemplate($p_templateName) { if (is_null($this->m_issue) || !$this->m_issue->defined()) { return false; } $resourceId = new ResourceId(__CLASS__); $syncResService = $resourceId->getService(ISyncResourceService::NAME); return !is_null($syncResService->findByPath($this->getThemePath() . $p_templateName)); }