17 import(
'classes.plugins.PubIdPlugin');
24 public function register($category, $path, $mainContextId =
null) {
25 $success = parent::register($category, $path, $mainContextId);
26 if (!
Config::getVar(
'general',
'installed') || defined(
'RUNNING_UPGRADE'))
return $success;
27 if ($success && $this->
getEnabled($mainContextId)) {
28 HookRegistry::register(
'Publication::getProperties::summaryProperties', array($this,
'modifyObjectProperties'));
29 HookRegistry::register(
'Publication::getProperties::fullProperties', array($this,
'modifyObjectProperties'));
45 return __(
'plugins.pubIds.doi.displayName');
52 return __(
'plugins.pubIds.doi.description');
63 return $pubIdPrefix .
'/' . $pubIdSuffix;
84 return 'Digital Object Identifier';
91 return 'https://doi.org/'.$this->_doiURLEncode($pubId);
112 $this->
import(
'classes.form.DOISettingsForm');
120 return array(
'doiSuffix');
148 $linkActions = array();
149 import(
'lib.pkp.classes.linkAction.request.RemoteActionConfirmationModal');
151 $userVars =
$request->getUserVars();
152 $userVars[
'pubIdPlugIn'] = get_class($this);
154 $linkActions[
'clearPubIdLinkActionDoi'] =
new LinkAction(
158 __(
'plugins.pubIds.doi.editor.clearObjectsDoi.confirm'),
160 $request->url(
null,
null,
'clearPubId',
null, $userVars),
163 __(
'plugins.pubIds.doi.editor.clearObjectsDoi'),
165 __(
'plugins.pubIds.doi.editor.clearObjectsDoi')
175 'Submission' =>
'doiPublicationSuffixPattern',
176 'Representation' =>
'doiRepresentationSuffixPattern',
177 'SubmissionFile' =>
'doiSubmissionFileSuffixPattern',
178 'Chapter' =>
'doiChapterSuffixPattern',
186 return array(
'pub-id::doi');
193 return (
boolean) $this->
getSetting($contextId,
"enable${pubObjectType}Doi");
200 return __(
'plugins.pubIds.doi.editor.doiSuffixCustomIdentifierNotUnique');
207 return preg_match(
'/^\d+(.\d+)+\//', $pubId);
220 $search = array (
'%',
'"',
'#',
' ',
'<',
'>',
'{');
221 $replace = array (
'%25',
'%22',
'%23',
'%20',
'%3c',
'%3e',
'%7b');
222 $pubId = str_replace($search, $replace, $pubId);
237 if (empty($props[
'pub-id::doi'])) {
241 if ($action === VALIDATE_ACTION_ADD) {
242 $submission =
Services::get(
'submission')->get($props[
'submissionId']);
244 $publication =
Services::get(
'publication')->get($props[
'id']);
245 $submission =
Services::get(
'submission')->get($publication->getData(
'submissionId'));
248 $contextId = $submission->getData(
'contextId');
249 $doiPrefix = $this->
getSetting($contextId,
'doiPrefix');
252 if (strpos($props[
'pub-id::doi'], $doiPrefix) !== 0) {
253 $doiErrors[] = __(
'plugins.pubIds.doi.editor.missingPrefix', [
'doiPrefix' => $doiPrefix]);
255 if (!$this->
checkDuplicate($props[
'pub-id::doi'],
'Publication', $submission->getId(), $contextId)) {
258 if (!empty($doiErrors)) {
259 $errors[
'pub-id::doi'] = $doiErrors;
279 $props[] =
'pub-id::doi';
300 if (in_array(
'pub-id::doi', $props)) {
302 $values[
'pub-id::doi'] = $pubId ? $pubId :
null;
314 if ($form->id !==
'publicationIdentifiers') {
318 if (!$this->
getSetting($form->submissionContext->getId(),
'enablePublicationDoi')) {
322 $prefix = $this->
getSetting($form->submissionContext->getId(),
'doiPrefix');
324 $suffixType = $this->
getSetting($form->submissionContext->getId(),
'doiSuffix');
326 if ($suffixType ===
'default') {
328 } elseif ($suffixType ===
'pattern') {
329 $pattern = $this->
getSetting($form->submissionContext->getId(),
'doiPublicationSuffixPattern');
334 $form->addField(
new \
PKP\components\forms\
FieldText(
'pub-id::doi', [
335 'label' => __(
'metadata.property.displayName.doi'),
336 'description' => __(
'plugins.pubIds.doi.editor.doi.description', [
'prefix' => $prefix]),
337 'value' => $form->publication->getData(
'pub-id::doi'),
341 'label' => __(
'metadata.property.displayName.doi'),
342 'value' => $form->publication->getData(
'pub-id::doi'),
344 'pattern' => $pattern,
345 'contextInitials' => $form->submissionContext->getData(
'acronym', $form->submissionContext->getData(
'primaryLocale')) ??
'',
346 'isPForPress' =>
true,
348 'submissionId' => $form->publication->getData(
'submissionId'),
349 'assignIdLabel' => __(
'plugins.pubIds.doi.editor.doi.assignDoi'),
350 'clearIdLabel' => __(
'plugins.pubIds.doi.editor.clearObjectsDoi'),
351 'missingPartsLabel' => __(
'plugins.pubIds.doi.editor.missingParts'),
353 if ($form->publication->getData(
'pub-id::publisher-id')) {
354 $fieldData[
'publisherId'] = $form->publication->getData(
'pub-id::publisher-id');
356 if ($form->publication->getData(
'pages')) {
357 $fieldData[
'pages'] = $form->publication->getData(
'pages');
359 if ($form->publication->getData(
'issueId')) {
360 $issue =
Services::get(
'issue')->get($form->publication->getData(
'issueId'));
362 $fieldData[
'issueNumber'] = $issue->getNumber() ??
'';
363 $fieldData[
'issueVolume'] = $issue->getVolume() ??
'';
364 $fieldData[
'year'] = $issue->getYear() ??
'';
367 $form->addField(
new \
PKP\components\forms\
FieldPubId(
'pub-id::doi', $fieldData));
379 if ($form->id !==
'publish' || !empty($form->errors)) {
383 $submission =
Services::get(
'submission')->get($form->publication->getData(
'submissionId'));
384 $publicationDoiEnabled = $this->
getSetting($submission->getData(
'contextId'),
'enablePublicationDoi');
385 $chapterDoiEnabled = $this->
getSetting($submission->getData(
'contextId'),
'enableChapterDoi');
386 $pubFormatDoiEnabled = $this->
getSetting($submission->getData(
'contextId'),
'enableRepresentationDoi');
387 $submissionFileDoiEnabled = $this->
getSetting($submission->getData(
'contextId'),
'enableSubmissionFileDoi');
388 $warningIconHtml =
'<span class="fa fa-exclamation-triangle pkpIcon--inline"></span>';
390 if (!$publicationDoiEnabled && !$chapterDoiEnabled && !$pubFormatDoiEnabled && !$submissionFileDoiEnabled) {
394 }
else if (!$chapterDoiEnabled && !$pubFormatDoiEnabled && !$submissionFileDoiEnabled) {
395 if ($form->publication->getData(
'pub-id::doi')) {
396 $msg = __(
'plugins.pubIds.doi.editor.preview.publication', [
'doi' => $form->publication->getData(
'pub-id::doi')]);
398 $msg =
'<div class="pkpNotification pkpNotification--warning">' . $warningIconHtml . __(
'plugins.pubIds.doi.editor.preview.publication.none') .
'</div>';
400 $form->addField(
new \
PKP\components\forms\
FieldHTML(
'doi', [
401 'description' => $msg,
402 'groupId' =>
'default',
409 if ($publicationDoiEnabled) {
410 if ($form->publication->getData(
'pub-id::doi')) {
411 $doiTableRows[] = [$form->publication->getData(
'pub-id::doi'),
'Publication'];
413 $doiTableRows[] = [$warningIconHtml . __(
'submission.status.unassigned'),
'Publication'];
416 if ($chapterDoiEnabled) {
417 foreach ((array) $form->publication->getData(
'chapters') as $chapter) {
418 if ($chapter->getStoredPubId(
'doi')) {
419 $doiTableRows[] = [$chapter->getStoredPubId(
'doi'), __(
'plugins.pubIds.doi.editor.preview.chapters', [
'title' => $chapter->getLocalizedFullTitle()])];
421 $doiTableRows[] = [$warningIconHtml . __(
'submission.status.unassigned'),__(
'plugins.pubIds.doi.editor.preview.chapters', [
'title' => $chapter->getLocalizedFullTitle()])];
425 if ($pubFormatDoiEnabled) {
426 foreach ((array) $form->publication->getData(
'publicationFormats') as $publicationFormat) {
427 if ($publicationFormat->getStoredPubId(
'doi')) {
428 $doiTableRows[] = [$publicationFormat->getStoredPubId(
'doi'), __(
'plugins.pubIds.doi.editor.preview.publicationFormats', [
'title' => $publicationFormat->getLocalizedName()])];
430 $doiTableRows[] = [$warningIconHtml . __(
'submission.status.unassigned'),__(
'plugins.pubIds.doi.editor.preview.publicationFormats', [
'title' => $publicationFormat->getLocalizedName()])];
434 if ($submissionFileDoiEnabled) {
435 foreach ((array) $form->publication->getData(
'publicationFormats') as $publicationFormat) {
436 $files = (array) $publicationFormat->getRepresentationFiles();
437 foreach ($files as $file) {
438 if ($file->getStoredPubId(
'doi')) {
439 $doiTableRows[] = [$file->getStoredPubId(
'doi'), __(
'plugins.pubIds.doi.editor.preview.files', [
'title' => $file->getLocalizedName()])];
441 $doiTableRows[] = [$warningIconHtml . __(
'submission.status.unassigned'),__(
'plugins.pubIds.doi.editor.preview.files', [
'title' => $file->getLocalizedName()])];
446 if (!empty($doiTableRows)) {
447 $table =
'<table class="pkpTable"><thead><tr>' .
448 '<th>' . __(
'plugins.pubIds.doi.editor.doi') .
'</th>' .
449 '<th>' . __(
'plugins.pubIds.doi.editor.preview.objects') .
'</th>' .
450 '</tr></thead><tbody>';
451 foreach ($doiTableRows as $doiTableRow) {
452 $table .=
'<tr><td>' . $doiTableRow[0] .
'</td><td>' . $doiTableRow[1] .
'</td></tr>';
454 $table .=
'</tbody></table>';
456 $form->addField(
new \
PKP\components\forms\
FieldHTML(
'doi', [
457 'description' => $table,
458 'groupId' =>
'default',