17 import(
'classes.handler.Handler');
20 import(
'lib.pkp.classes.linkAction.LinkAction');
21 import(
'lib.pkp.classes.core.JSONMessage');
34 parent::__construct();
47 function authorize($request, &$args, $roleAssignments) {
48 import(
'classes.security.authorization.OmpPublishedSubmissionAccessPolicy');
50 return parent::authorize($request, $args, $roleAssignments);
62 function book($args, $request) {
69 $submissionId = array_shift($args);
70 $subPath = empty($args) ? 0 : array_shift($args);
71 if ($subPath ===
'version') {
72 $this->isVersionRequest =
true;
73 $publicationId = (int) array_shift($args);
74 foreach ($submission->getData(
'publications') as
$publication) {
80 $this->publication = $submission->getCurrentPublication();
83 if (!$this->publication || $this->publication->getData(
'status') !== STATUS_PUBLISHED) {
84 $request->getDispatcher()->handle404();
89 if (!ctype_digit((
string) $submissionId) && $submissionId !== $this->publication->getData(
'urlPath') && !$subPath) {
91 $newArgs = $this->publication->getData(
'urlPath')
92 ? $this->publication->getData(
'urlPath')
93 : $this->publication->getId();
94 $request->redirect(
null, $request->getRequestedPage(), $request->getRequestedOp(), $newArgs);
97 $templateMgr->assign([
98 'publishedSubmission' => $submission,
99 'publication' => $this->publication,
100 'firstPublication' => reset($submission->getData(
'publications')),
101 'currentPublication' => $submission->getCurrentPublication(),
102 'authorString' => $this->publication->getAuthorString(
DAORegistry::getDAO(
'UserGroupDAO')->getByContextId($submission->getData(
'contextId'))->toArray()),
106 $availablePublicationFormats = [];
107 $availableRemotePublicationFormats = [];
108 foreach ($this->publication->getData(
'publicationFormats') as $format) {
109 if ($format->getIsAvailable()) {
110 $availablePublicationFormats[] = $format;
111 if ($format->getRemoteURL()) {
112 $availableRemotePublicationFormats[] = $format;
116 $templateMgr->assign(array(
117 'publicationFormats' => $availablePublicationFormats,
118 'remotePublicationFormats' => $availableRemotePublicationFormats,
122 $templateMgr->assign(
'chapters',
DAORegistry::getDAO(
'ChapterDAO')->getByPublicationId($this->publication->getId())->toAssociativeArray());
125 $templateMgr->assign(array(
131 $templateMgr->assign([
132 'categories' =>
DAORegistry::getDAO(
'CategoryDAO')->getByPublicationId($this->publication->getId())->toArray(),
136 if ($this->publication->getData(
'citationsRaw')) {
137 $parsedCitations =
DAORegistry::getDAO(
'CitationDAO')->getByPublicationId($this->publication->getId());
138 $templateMgr->assign([
139 'citations' => $parsedCitations->toArray(),
140 'parsedCitations' => $parsedCitations,
146 if ($submission->getWorkType() == WORK_TYPE_EDITED_VOLUME) {
147 foreach ($this->publication->getData(
'authors') as $author) {
148 if ($author->getIsVolumeEditor()) {
149 $editors[] = $author;
153 $templateMgr->assign([
154 'editors' => $editors,
159 $templateMgr->assign(
'pubIdPlugins', $pubIdPlugins);
161 $availableFiles = array_filter(
162 DAORegistry::getDAO(
'SubmissionFileDAO')->getLatestRevisions($submission->getId(),
null,
null),
164 return $a->getDirectSalesPrice() !== null && $a->getAssocType() == ASSOC_TYPE_PUBLICATION_FORMAT;
169 $filteredAvailableFiles = array();
170 foreach ($availableFiles as $file) {
171 foreach ($availablePublicationFormats as $format) {
172 if ($file->getAssocId() == $format->getId()) {
173 $filteredAvailableFiles[] = $file;
178 $templateMgr->assign(
'availableFiles', $filteredAvailableFiles);
181 if ($currencyCode = $request->getContext()->getData(
'currency')) {
182 $isoCodes = new \Sokil\IsoCodes\IsoCodesFactory();
183 $templateMgr->assign(
'currency', $isoCodes->getCurrencies()->getByLetterCode($currencyCode));
187 $templateMgr->assign([
188 'keywords' => $this->publication->getLocalizedData(
'keywords'),
189 'licenseUrl' => $this->publication->getData(
'licenseUrl'),
193 if ($this->publication->getId() !== $submission->getCurrentPublication()->getId()) {
194 $templateMgr->addHeader(
'noindex',
'<meta name="robots" content="noindex">');
195 $url = $request->getDispatcher()->url($request, ROUTE_PAGE,
null,
'catalog',
'book', $submission->getBestId());
196 $templateMgr->addHeader(
'canonical',
'<link rel="canonical" href="' . $url .
'">');
200 if (!
HookRegistry::call(
'CatalogBookHandler::book', array(&$request, &$submission))) {
201 return $templateMgr->display(
'frontend/pages/book.tpl');
211 function view($args, $request) {
212 $this->
download($args, $request,
true);
221 function download($args, $request, $view =
false) {
222 $dispatcher = $request->getDispatcher();
225 $press = $request->getPress();
228 $monographId = array_shift($args);
229 $subPath = array_shift($args);
230 if ($subPath ===
'version') {
231 $publicationId = array_shift($args);
232 $representationId = array_shift($args);
233 $bestFileId = array_shift($args);
235 $publicationId = $submission->getCurrentPublication()->getId();
236 $representationId = $subPath;
237 $bestFileId = array_shift($args);
240 $publicationFormat =
Application::get()->getRepresentationDAO()->getByBestId($representationId, $publicationId);
241 if (!$publicationFormat || !$publicationFormat->getIsAvailable() || $remoteURL = $publicationFormat->getRemoteURL()) $dispatcher->handle404();
244 foreach ((array) $submission->getData(
'publications') as $iPublication) {
245 if ($iPublication->getId() == $publicationId) {
253 || $publicationFormat->getData(
'publicationId') !==
$publication->getId()) {
254 $dispatcher->handle404();
257 import(
'lib.pkp.classes.submission.SubmissionFile');
258 $submissionFile =
DAORegistry::getDAO(
'SubmissionFileDAO')->getByBestId($bestFileId, $submission->getId());
259 if (!$submissionFile) $dispatcher->handle404();
261 $fileIdAndRevision = $submissionFile->getFileIdAndRevision();
262 list($fileId, $revision) = array_map(
function($a) {
264 }, preg_split(
'/-/', $fileIdAndRevision));
265 import(
'lib.pkp.classes.file.SubmissionFileManager');
266 $monographFileManager =
new SubmissionFileManager($submission->getData(
'contextId'), $submission->getId());
268 switch ($submissionFile->getAssocType()) {
269 case ASSOC_TYPE_PUBLICATION_FORMAT:
270 if ($submissionFile->getAssocId() != $publicationFormat->getId() || $submissionFile->getDirectSalesPrice() ===
null) $dispatcher->handle404();
272 case ASSOC_TYPE_SUBMISSION_FILE:
274 $genre = $genreDao->getById($submissionFile->getGenreId());
275 if (!$genre->getDependent()) $dispatcher->handle404();
276 return $monographFileManager->downloadById($fileId, $revision);
278 default: $dispatcher->handle404();
281 $urlPath = [$submission->getBestId()];
282 if ($publicationId !== $submission->getCurrentPublication()->getId()) {
283 $urlPath[] =
'version';
284 $urlPath[] = $publicationId;
286 $urlPath[] = $publicationFormat->getBestId();
287 $urlPath[] = $submissionFile->getBestId();
291 $templateMgr->assign(array(
292 'publishedSubmission' => $submission,
293 'publicationFormat' => $publicationFormat,
294 'submissionFile' => $submissionFile,
295 'chapter' => $chapterDao->getChapter($submissionFile->getData(
'chapterId')),
296 'downloadUrl' => $dispatcher->url($request, ROUTE_PAGE,
null,
null,
'download', $urlPath, array(
'inline' =>
true)),
300 $user = $request->getUser();
301 if ($submissionFile->getDirectSalesPrice() ===
'0' || ($user && $ompCompletedPaymentDao->hasPaidPurchaseFile($user->getId(), $fileIdAndRevision))) {
303 if (!$user && $press->getData(
'restrictMonographAccess')) {
309 if (
HookRegistry::call(
'CatalogBookHandler::view', array(&$this, &$submission, &$publicationFormat, &$submissionFile))) {
317 $inline = $request->getUserVar(
'inline')?
true:
false;
318 if (
HookRegistry::call(
'CatalogBookHandler::download', array(&$this, &$submission, &$publicationFormat, &$submissionFile, &$inline))) {
322 return $monographFileManager->downloadById($fileId, $revision, $inline);
328 if (!$user)
return $request->redirect(
null,
'login',
null,
null, array(
'source' => $request->url(
null,
null,
null, array($monographId, $representationId, $bestFileId))));
331 import(
'classes.payment.omp.OMPPaymentManager');
333 if (!$paymentManager->isConfigured()) {
334 $request->redirect(
null,
'catalog');
337 $queuedPayment = $paymentManager->createQueuedPayment(
339 PAYMENT_TYPE_PURCHASE_FILE,
342 $submissionFile->getDirectSalesPrice(),
343 $press->getData(
'currency')
345 $paymentManager->queuePayment($queuedPayment);
347 $paymentForm = $paymentManager->getPaymentForm($queuedPayment);
348 $paymentForm->display($request);
357 $templateMgr = TemplateManager::getmanager($request);
358 if ($seriesId = $submission->getSeriesId()) {
360 $series = $seriesDao->getById($seriesId, $submission->getData(
'contextId'));
361 $templateMgr->assign(
'series', $series);
364 parent::setupTemplate($request);