16 import (
'classes.issue.IssueAction');
17 import(
'classes.handler.Handler');
27 function authorize($request, &$args, $roleAssignments) {
28 import(
'lib.pkp.classes.security.authorization.ContextRequiredPolicy');
31 import(
'classes.security.authorization.OjsJournalMustPublishPolicy');
34 import(
'classes.security.authorization.OjsIssueRequiredPolicy');
38 return parent::authorize($request, $args, $roleAssignments);
45 function initialize($request, $args = array()) {
47 $galleyId = isset($args[1]) ? $args[1] : 0;
51 $journal = $request->getJournal();
52 $galley = $galleyDao->getByBestId($galleyId, $issue->getId());
55 if (!$galley) $request->redirect(
null,
null,
'view', $issue->getId());
64 function index($args, $request) {
65 $this->
current($args, $request);
71 function current($args, $request) {
72 $journal = $request->getJournal();
74 $issue = $issueDao->getCurrent($journal->getId(),
true);
77 $request->redirect(
null,
'issue',
'view', $issue->getBestIssueId());
84 $templateMgr->assign(
'pubIdPlugins', $pubIdPlugins);
85 $templateMgr->display(
'frontend/pages/issue.tpl');
93 function view($args, $request) {
97 $journal = $request->getJournal();
100 if (!
HookRegistry::call(
'IssueHandler::view::galley', array(&$request, &$issue, &$galley))) {
101 $request->redirect(
null,
null,
'download', array($issue->getBestIssueId($journal), $galley->getBestGalleyId($journal)));
105 $templateMgr->assign(
'issueId', $issue->getBestIssueId());
109 $templateMgr->assign(
'pubIdPlugins', $pubIdPlugins);
110 $templateMgr->display(
'frontend/pages/issue.tpl');
119 function archive($args, $request) {
121 $page = isset($args[0]) ? (int) $args[0] : 1;
123 $context = $request->getContext();
125 $count = $context->getData(
'itemsPerPage') ? $context->getData(
'itemsPerPage') :
Config::getVar(
'interface',
'items_per_page');
126 $offset = $page > 1 ? ($page - 1) * $count : 0;
129 'contextId' => $context->getId(),
131 'orderDirection' =>
'ASC',
134 'isPublished' =>
true,
139 $showingStart = $offset + 1;
140 $showingEnd = min($offset + $count, $offset + count($issues));
141 $nextPage = $total > $showingEnd ? $page + 1 :
null;
142 $prevPage = $showingStart > 1 ? $page - 1 :
null;
144 $templateMgr->assign(array(
146 'showingStart' => $showingStart,
147 'showingEnd' => $showingEnd,
149 'nextPage' => $nextPage,
150 'prevPage' => $prevPage,
153 $templateMgr->display(
'frontend/pages/issueArchive.tpl');
161 function download($args, $request) {
167 import(
'classes.file.IssueFileManager');
169 return $issueFileManager->downloadById($galley->getFileId(), $request->getUserVar(
'inline')?
true:
false);
187 $this->_galley = $galley;
196 import(
'classes.issue.IssueAction');
199 $journal = $request->getJournal();
200 $user = $request->getUser();
201 $userId = $user ? $user->getId() : 0;
207 if ($issueAction->allowedIssuePrePublicationAccess($journal, $user))
return true;
210 if ($issue->getPublished()) {
211 $subscriptionRequired = $issueAction->subscriptionRequired($issue, $journal);
212 $isSubscribedDomain = $issueAction->subscribedDomain($request, $journal, $issue->getId());
221 if (!$isSubscribedDomain && $subscriptionRequired) {
223 $subscribedUser = $issueAction->subscribedUser($user, $journal, $issue->getId());
224 if (!$subscribedUser) {
228 if ($paymentManager->purchaseIssueEnabled() || $paymentManager->membershipEnabled() ) {
231 if ($paymentManager->onlyPdfEnabled() && !$galley->isPdfGalley())
return true;
239 $dateEndMembership = $user->getSetting(
'dateEndMembership', 0);
240 if ($completedPaymentDao->hasPaidPurchaseIssue($userId, $issue->getId()) || (!is_null($dateEndMembership) && $dateEndMembership > time())) {
244 $queuedPayment = $paymentManager->createQueuedPayment($request, PAYMENT_TYPE_PURCHASE_ISSUE, $userId, $issue->getId(), $journal->getData(
'purchaseIssueFee'));
245 $paymentManager->queuePayment($queuedPayment);
247 $paymentForm = $paymentManager->getPaymentForm($queuedPayment);
248 $paymentForm->display($request);
256 $request->redirect(
null,
'about',
'subscriptions');
260 $request->redirect(
null,
'index');
266 parent::setupTemplate($request);
280 $journal = $request->getJournal();
281 $user = $request->getUser();
287 $templateMgr->assign(array(
288 'issueIdentification' => $issue->getIssueIdentification(),
289 'issueTitle' => $issue->getLocalizedTitle(),
290 'issueSeries' => $issue->getIssueIdentification(array(
'showTitle' =>
false)),
295 $templateMgr->assign(array(
302 $primaryGenres = $genreDao->getPrimaryByContextId($journal->getId())->toArray();
303 $primaryGenreIds = array_map(
function($genre) {
304 return $genre->getId();
308 import(
'classes.submission.Submission');
309 $allowedStatuses = [STATUS_PUBLISHED];
310 if (!$issue->getPublished()) {
311 $allowedStatuses[] = STATUS_SCHEDULED;
315 'contextId' => $journal->getId(),
316 'issueIds' => [$issue->getId()],
317 'status' => $allowedStatuses,
319 'orderDirection' =>
'ASC',
322 $sections =
Application::get()->getSectionDao()->getByIssueId($issue->getId());
323 $issueSubmissionsInSection = [];
324 foreach ($sections as $section) {
325 $issueSubmissionsInSection[$section->getId()] = [
326 'title' => $section->getHideTitle()?
null:$section->getLocalizedTitle(),
330 foreach ($issueSubmissions as $submission) {
331 if (!$sectionId = $submission->getCurrentPublication()->getData(
'sectionId')) {
334 $issueSubmissionsInSection[$sectionId][
'articles'][] = $submission;
337 $templateMgr->assign(array(
339 'issueGalleys' => $issueGalleyDao->getByIssueId($issue->getId()),
340 'publishedSubmissions' => $issueSubmissionsInSection,
341 'primaryGenreIds' => $primaryGenreIds,
345 import(
'classes.issue.IssueAction');
347 $subscriptionRequired = $issueAction->subscriptionRequired($issue, $journal);
348 $subscribedUser = $issueAction->subscribedUser($user, $journal);
349 $subscribedDomain = $issueAction->subscribedDomain($request, $journal);
351 if ($subscriptionRequired && !$subscribedUser && !$subscribedDomain) {
352 $templateMgr->assign(
'subscriptionExpiryPartial',
true);
355 $partial = $issueAction->subscribedUser($user, $journal, $issue->getId());
356 if (!$partial) $issueAction->subscribedDomain($request, $journal, $issue->getId());
357 $templateMgr->assign(
'issueExpiryPartial', $partial);
360 $articleExpiryPartial = array();
361 foreach ($issueSubmissions as $issueSubmission) {
362 $partial = $issueAction->subscribedUser($user, $journal, $issue->getId(), $issueSubmission->getId());
363 if (!$partial) $issueAction->subscribedDomain($request, $journal, $issue->getId(), $issueSubmission->getId());
364 $articleExpiryPartial[$issueSubmission->getId()] = $partial;
366 $templateMgr->assign(
'articleExpiryPartial', $articleExpiryPartial);
370 $templateMgr->assign(array(
371 'hasAccess' => !$subscriptionRequired ||
372 $issue->getAccessStatus() == ISSUE_ACCESS_OPEN ||
373 $subscribedUser || $subscribedDomain ||
374 ($user && $completedPaymentDao->hasPaidPurchaseIssue($user->getId(), $issue->getId()))
377 import(
'classes.payment.ojs.OJSPaymentManager');
379 if ( $paymentManager->onlyPdfEnabled() ) {
380 $templateMgr->assign(
'restrictOnlyPdf',
true);
382 if ( $paymentManager->purchaseArticleEnabled() ) {
383 $templateMgr->assign(
'purchaseArticleEnabled',
true);