-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathPdfMetadataPlugin.php
More file actions
106 lines (99 loc) · 5.19 KB
/
Copy pathPdfMetadataPlugin.php
File metadata and controls
106 lines (99 loc) · 5.19 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
<?php
/** SPDX-License-Identifier: GPL-3.0-or-later */
namespace APP\plugins\generic\pdfMetadata;
use APP\core\Application;
use APP\template\TemplateManager;
use APP\plugins\generic\pdfMetadata\classes\MetadataController;
use PKP\core\APIRouter;
use PKP\facades\Locale;
use PKP\plugins\GenericPlugin;
use PKP\plugins\Hook;
use PKP\security\Role;
class PdfMetadataPlugin extends GenericPlugin
{
public function register($category, $path, $mainContextId = null)
{
if (!parent::register($category, $path, $mainContextId)) {
return false;
}
// Register plugin locales explicitly. LazyLoadPlugin also does this, but
// doing it here makes translations available before any UI labels are resolved.
$this->ensureLocaleData();
if (!$this->getEnabled($mainContextId)) {
return true;
}
$version = Application::get()->getCurrentVersion()->getVersionString();
$normalizedVersion = str_replace('-', '.', $version);
if (!preg_match('/^3\.5\./', $version) || version_compare($normalizedVersion, '3.5.0.4', '<')) {
return false;
}
Hook::add('APIHandler::endpoints::plugin', function (string $hookName, APIRouter $apiRouter): bool {
$apiRouter->registerPluginApiControllers([new MetadataController()]);
return Hook::CONTINUE;
});
Hook::add('TemplateManager::display', function ($hook, $args) {
$this->ensureLocaleData();
$request = Application::get()->getRequest();
if (!$request->getContext() || !$request->getUser()) {
return Hook::CONTINUE;
}
$user = $request->getUser();
$contextId = $request->getContext()->getId();
$canUsePlugin = $user->hasRole([Role::ROLE_ID_MANAGER, Role::ROLE_ID_SUB_EDITOR], $contextId)
|| $user->hasRole([Role::ROLE_ID_SITE_ADMIN], Application::SITE_CONTEXT_ID);
if (!$canUsePlugin) {
return Hook::CONTINUE;
}
$manager = $args[0];
$base = $request->getBaseUrl() . '/' . $this->getPluginPath();
$manager->addJavaScript('pdfMetadata', $base . '/js/pdfMetadata.js', [
'contexts' => ['backend'], 'priority' => TemplateManager::STYLE_SEQUENCE_LATE + 2,
]);
$manager->addJavaScript('submissionMetadata', $base . '/js/submissionMetadata.js', [
'contexts' => ['backend'], 'priority' => TemplateManager::STYLE_SEQUENCE_LATE + 3,
]);
$manager->addStyleSheet('pdfMetadata', $base . '/styles/pdfMetadata.css', ['contexts' => ['backend']]);
$labels = [];
foreach (['name', 'description', 'load', 'extract', 'apply', 'file', 'locale', 'current', 'proposed',
'select', 'title', 'abstract', 'keywords', 'doi', 'references', 'authors', 'affiliations',
'givenName', 'familyName', 'email', 'addAuthor', 'skip', 'newAuthor', 'mapping', 'group',
'busy', 'saved', 'review', 'empty', 'reload', 'source', 'confidence', 'authorHelp',
'affiliationHelp', 'error', 'warning', 'text', 'noText', 'partial', 'unavailable',
'invalidPdf', 'limit', 'expired', 'conflict', 'forbidden', 'validation', 'doiExists',
'configuration', 'selectFields', 'issueWorkspace', 'issueWorkspaceDescription', 'openWorkspace',
'uploadIssue', 'issuePdf', 'documentPages', 'startPage', 'endPage', 'extractRange', 'reviewDraft',
'section', 'pages', 'subtitle', 'preferredPublicName', 'orcid', 'country', 'url', 'userGroup',
'saveReview', 'reviewedArticles', 'ready', 'notReady', 'edit', 'remove', 'exportJson', 'clearWorkspace',
'confirmClear', 'unassignedAffiliations', 'addReviewAuthor', 'close', 'uploadHelp', 'workspaceEmpty',
'rangeHelp', 'rawText', 'issueUploaded', 'articleSaved', 'schemaNote', 'status', 'issueAuthorHelp'] as $key) {
$labels[$key] = __('plugins.generic.pdfMetadata.' . $key);
}
$manager->addJavaScript('pdfMetadataConfig', 'window.pdfMetadataConfig = ' . json_encode([
'api' => $request->getDispatcher()->url($request, Application::ROUTE_API, $request->getContext()->getPath(), 'pdf-metadata'),
'csrf' => $request->getSession()->token(), 'labels' => $labels,
], JSON_HEX_TAG | JSON_HEX_AMP | JSON_HEX_APOS | JSON_HEX_QUOT | JSON_THROW_ON_ERROR) . ';', [
'inline' => true, 'contexts' => ['backend'], 'priority' => TemplateManager::STYLE_SEQUENCE_LATE + 1,
]);
return Hook::CONTINUE;
});
return true;
}
private function ensureLocaleData(): void
{
$path = __DIR__ . '/locale';
if (is_dir($path)) {
Locale::registerPath($path);
}
}
public function getName() { return 'pdfmetadataplugin'; }
public function getDisplayName()
{
$this->ensureLocaleData();
return __('plugins.generic.pdfMetadata.name');
}
public function getDescription()
{
$this->ensureLocaleData();
return __('plugins.generic.pdfMetadata.description');
}
}