public function issueResolver(Request $request)
{
$uriParts = explode('/', $request->getRequestUri());
$uriPartsCount = count(array_filter($uriParts));
$issue = null;
$publication = $this->publicationService->getPublication();
if ($publication && $uriPartsCount >= 2 && $uriPartsCount <= 5) {
$cacheKey = $this->cacheService->getCacheKey(array('resolver', $publication->getId(), $uriParts[1], $uriParts[2]), 'issue');
if ($this->cacheService->contains($cacheKey)) {
$issue = $this->cacheService->fetch($cacheKey);
} else {
$issue = $this->em->getRepository('Newscoop\\Entity\\Issue')->getIssue($uriParts[1], $publication, $uriParts[2])->getOneOrNullResult();
$this->cacheService->save($cacheKey, $issue);
}
if ($issue) {
$this->issueMetadata = array('id' => $issue->getId(), 'number' => $issue->getNumber(), 'name' => $issue->getName(), 'shortName' => $issue->getShortName(), 'code_default_language' => $issue->getLanguage()->getCode(), 'id_default_language' => $issue->getLanguageId());
$request->attributes->set('_newscoop_issue_metadata', $this->issueMetadata);
$this->setIssue($issue);
return $issue;
}
}
return $this->getLatestPublishedIssue();
}