165 lines
5.2 KiB
PHP
165 lines
5.2 KiB
PHP
<?php
|
|
|
|
/**
|
|
* @file plugins/generic/pdfJsViewer/PdfJsViewerPlugin.php
|
|
*
|
|
* Copyright (c) 2013-2020 Simon Fraser University
|
|
* Copyright (c) 2003-2020 John Willinsky
|
|
* Distributed under the GNU GPL v3. For full terms see the file docs/COPYING.
|
|
*
|
|
* @class PdfJsViewerPlugin
|
|
*
|
|
* @brief This plugin enables embedding of the pdf.js viewer for PDF display
|
|
*/
|
|
|
|
namespace APP\plugins\generic\pdfJsViewer;
|
|
|
|
use APP\core\Application;
|
|
use APP\template\TemplateManager;
|
|
use Exception;
|
|
use PKP\plugins\Hook;
|
|
|
|
class PdfJsViewerPlugin extends \PKP\plugins\GenericPlugin
|
|
{
|
|
/**
|
|
* @copydoc Plugin::register()
|
|
*
|
|
* @param null|mixed $mainContextId
|
|
*/
|
|
public function register($category, $path, $mainContextId = null)
|
|
{
|
|
if (parent::register($category, $path, $mainContextId)) {
|
|
if ($this->getEnabled($mainContextId)) {
|
|
// For OPS
|
|
Hook::add('PreprintHandler::view::galley', [$this, 'submissionCallback'], Hook::SEQUENCE_LAST);
|
|
// For OJS
|
|
Hook::add('ArticleHandler::view::galley', [$this, 'submissionCallback'], Hook::SEQUENCE_LAST);
|
|
Hook::add('IssueHandler::view::galley', [$this, 'issueCallback'], Hook::SEQUENCE_LAST);
|
|
}
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
|
|
/**
|
|
* Install default settings on context creation.
|
|
*
|
|
* @return string
|
|
*/
|
|
public function getContextSpecificPluginSettingsFile()
|
|
{
|
|
return $this->getPluginPath() . '/settings.xml';
|
|
}
|
|
|
|
/**
|
|
* @copydoc Plugin::getDisplayName
|
|
*/
|
|
public function getDisplayName()
|
|
{
|
|
return __('plugins.generic.pdfJsViewer.name');
|
|
}
|
|
|
|
/**
|
|
* @copydoc Plugin::getDescription
|
|
*/
|
|
public function getDescription()
|
|
{
|
|
return __('plugins.generic.pdfJsViewer.description');
|
|
}
|
|
|
|
/**
|
|
* Callback that renders the submission galley.
|
|
*
|
|
* @param string $hookName
|
|
* @param array $args
|
|
*
|
|
* @return bool
|
|
*/
|
|
public function submissionCallback($hookName, $args)
|
|
{
|
|
$request = & $args[0];
|
|
$application = Application::get();
|
|
switch ($application->getName()) {
|
|
case 'ojs2':
|
|
$issue = & $args[1];
|
|
$galley = & $args[2];
|
|
$submission = & $args[3];
|
|
$submissionNoun = 'article';
|
|
break;
|
|
case 'ops':
|
|
$galley = & $args[1];
|
|
$submission = & $args[2];
|
|
$submissionNoun = 'preprint';
|
|
$issue = null;
|
|
break;
|
|
default: throw new Exception('Unknown application!');
|
|
}
|
|
|
|
if (!$galley) {
|
|
return false;
|
|
}
|
|
|
|
$submissionFile = $galley->getFile();
|
|
if ($submissionFile->getData('mimetype') === 'application/pdf') {
|
|
$galleyPublication = null;
|
|
foreach ($submission->getData('publications') as $publication) {
|
|
if ($publication->getId() === $galley->getData('publicationId')) {
|
|
$galleyPublication = $publication;
|
|
break;
|
|
}
|
|
}
|
|
$templateMgr = TemplateManager::getManager($request);
|
|
$templateMgr->assign([
|
|
'displayTemplateResource' => $this->getTemplateResource('display.tpl'),
|
|
'pluginUrl' => $request->getBaseUrl() . '/' . $this->getPluginPath(),
|
|
'galleyFile' => $submissionFile,
|
|
'issue' => $issue,
|
|
'submission' => $submission,
|
|
'submissionNoun' => $submissionNoun,
|
|
'bestId' => $submission->getBestId(),
|
|
'galley' => $galley,
|
|
'currentVersionString' => $application->getCurrentVersion()->getVersionString(false),
|
|
'isLatestPublication' => $submission->getData('currentPublicationId') === $galley->getData('publicationId'),
|
|
'galleyPublication' => $galleyPublication,
|
|
]);
|
|
$templateMgr->display($this->getTemplateResource('submissionGalley.tpl'));
|
|
return true;
|
|
}
|
|
|
|
return false;
|
|
}
|
|
|
|
/**
|
|
* Callback that renders the issue galley.
|
|
*
|
|
* @param string $hookName
|
|
* @param array $args
|
|
*
|
|
* @return bool
|
|
*/
|
|
public function issueCallback($hookName, $args)
|
|
{
|
|
$request = & $args[0];
|
|
$issue = & $args[1];
|
|
$galley = & $args[2];
|
|
|
|
$templateMgr = TemplateManager::getManager($request);
|
|
if ($galley && $galley->getFileType() == 'application/pdf') {
|
|
$application = Application::get();
|
|
$templateMgr->assign([
|
|
'displayTemplateResource' => $this->getTemplateResource('display.tpl'),
|
|
'pluginUrl' => $request->getBaseUrl() . '/' . $this->getPluginPath(),
|
|
'galleyFile' => $galley->getFile(),
|
|
'issue' => $issue,
|
|
'galley' => $galley,
|
|
'currentVersionString' => $application->getCurrentVersion()->getVersionString(false),
|
|
'isLatestPublication' => true,
|
|
]);
|
|
$templateMgr->display($this->getTemplateResource('issueGalley.tpl'));
|
|
return true;
|
|
}
|
|
|
|
return false;
|
|
}
|
|
}
|