16 import(
'classes.plugins.PubIdPlugin');
23 public function register($category, $path, $mainContextId =
null) {
24 $success = parent::register($category, $path, $mainContextId);
25 if (!
Config::getVar(
'general',
'installed') || defined(
'RUNNING_UPGRADE'))
return $success;
26 if ($success && $this->
getEnabled($mainContextId)) {
28 HookRegistry::register(
'Publication::getProperties::summaryProperties', array($this,
'modifyObjectProperties'));
29 HookRegistry::register(
'Publication::getProperties::fullProperties', array($this,
'modifyObjectProperties'));
31 HookRegistry::register(
'Galley::getProperties::summaryProperties', array($this,
'modifyObjectProperties'));
48 return __(
'plugins.pubIds.doi.displayName');
55 return __(
'plugins.pubIds.doi.description');
66 return $pubIdPrefix .
'/' . $pubIdSuffix;
87 return 'Digital Object Identifier';
94 return 'https://doi.org/'.$this->_doiURLEncode($pubId);
115 $this->
import(
'classes.form.DOISettingsForm');
123 return array(
'doiSuffix');
151 $linkActions = array();
152 import(
'lib.pkp.classes.linkAction.request.RemoteActionConfirmationModal');
154 $userVars =
$request->getUserVars();
155 $userVars[
'pubIdPlugIn'] = get_class($this);
157 $linkActions[
'clearPubIdLinkActionDoi'] =
new LinkAction(
161 __(
'plugins.pubIds.doi.editor.clearObjectsDoi.confirm'),
163 $request->url(
null,
null,
'clearPubId',
null, $userVars),
166 __(
'plugins.pubIds.doi.editor.clearObjectsDoi'),
168 __(
'plugins.pubIds.doi.editor.clearObjectsDoi')
179 'Publication' =>
'doiPublicationSuffixPattern',
180 'Representation' =>
'doiRepresentationSuffixPattern'
188 return array(
'pub-id::doi');
195 return (
boolean) $this->
getSetting($contextId,
"enable${pubObjectType}Doi");
202 return __(
'plugins.pubIds.doi.editor.doiSuffixCustomIdentifierNotUnique');
209 return preg_match(
'/^\d+(.\d+)+\//', $pubId);
224 $citationData = $args[0];
233 $citationData->DOI = $pubId;
246 $search = array (
'%',
'"',
'#',
' ',
'<',
'>',
'{');
247 $replace = array (
'%25',
'%22',
'%23',
'%20',
'%3c',
'%3e',
'%7b');
248 $pubId = str_replace($search, $replace, $pubId);
263 if (empty($props[
'pub-id::doi'])) {
267 if ($action === VALIDATE_ACTION_ADD) {
268 $submission =
Services::get(
'submission')->get($props[
'submissionId']);
270 $publication =
Services::get(
'publication')->get($props[
'id']);
271 $submission =
Services::get(
'submission')->get($publication->getData(
'submissionId'));
274 $contextId = $submission->getData(
'contextId');
275 $doiPrefix = $this->
getSetting($contextId,
'doiPrefix');
278 if (strpos($props[
'pub-id::doi'], $doiPrefix) !== 0) {
279 $doiErrors[] = __(
'plugins.pubIds.doi.editor.missingPrefix', [
'doiPrefix' => $doiPrefix]);
281 if (!$this->
checkDuplicate($props[
'pub-id::doi'],
'Publication', $submission->getId(), $contextId)) {
284 if (!empty($doiErrors)) {
285 $errors[
'pub-id::doi'] = $doiErrors;
305 $props[] =
'pub-id::doi';
327 if (get_class($object) ===
'Publication' || get_class($object) ===
'ArticleGalley') {
331 if (in_array(
'pub-id::doi', $props)) {
333 $values[
'pub-id::doi'] = $pubId ? $pubId :
null;
345 if ($form->id !==
'publicationIdentifiers') {
349 if (!$this->
getSetting($form->submissionContext->getId(),
'enablePublicationDoi')) {
353 $prefix = $this->
getSetting($form->submissionContext->getId(),
'doiPrefix');
355 $suffixType = $this->
getSetting($form->submissionContext->getId(),
'doiSuffix');
357 if ($suffixType ===
'default') {
359 } elseif ($suffixType ===
'pattern') {
360 $pattern = $this->
getSetting($form->submissionContext->getId(),
'doiPublicationSuffixPattern');
365 $form->addField(
new \
PKP\components\forms\
FieldText(
'pub-id::doi', [
366 'label' => __(
'metadata.property.displayName.doi'),
367 'description' => __(
'plugins.pubIds.doi.editor.doi.description', [
'prefix' => $prefix]),
368 'value' => $form->publication->getData(
'pub-id::doi'),
372 'label' => __(
'metadata.property.displayName.doi'),
373 'value' => $form->publication->getData(
'pub-id::doi'),
375 'pattern' => $pattern,
378 'submissionId' => $form->publication->getData(
'submissionId'),
379 'publicationId' => $form->publication->getId(),
381 'assignId' => __(
'plugins.pubIds.doi.editor.doi.assignDoi'),
382 'clearId' => __(
'plugins.pubIds.doi.editor.clearObjectsDoi'),
383 'missingParts' => __(
'plugins.pubIds.doi.editor.missingParts'),
386 if ($form->publication->getData(
'pub-id::publisher-id')) {
387 $fieldData[
'publisherId'] = $form->publication->getData(
'pub-id::publisher-id');
389 $form->addField(
new \
PKP\components\forms\
FieldPubId(
'pub-id::doi', $fieldData));
401 if ($form->id !==
'publish' || !empty($form->errors)) {
405 $submission =
Services::get(
'submission')->get($form->publication->getData(
'submissionId'));
406 $publicationDoiEnabled = $this->
getSetting($submission->getData(
'contextId'),
'enablePublicationDoi');
407 $galleyDoiEnabled = $this->
getSetting($submission->getData(
'contextId'),
'enableRepresentationDoi');
408 $warningIconHtml =
'<span class="fa fa-exclamation-triangle pkpIcon--inline"></span>';
410 if (!$publicationDoiEnabled && !$galleyDoiEnabled) {
414 }
else if (!$galleyDoiEnabled) {
415 if ($form->publication->getData(
'pub-id::doi')) {
416 $msg = __(
'plugins.pubIds.doi.editor.preview.publication', [
'doi' => $form->publication->getData(
'pub-id::doi')]);
418 $msg =
'<div class="pkpNotification pkpNotification--warning">' . $warningIconHtml . __(
'plugins.pubIds.doi.editor.preview.publication.none') .
'</div>';
420 $form->addField(
new \
PKP\components\forms\
FieldHTML(
'doi', [
421 'description' => $msg,
422 'groupId' =>
'default',
429 if ($publicationDoiEnabled) {
430 if ($form->publication->getData(
'pub-id::doi')) {
431 $doiTableRows[] = [$form->publication->getData(
'pub-id::doi'),
'Publication'];
433 $doiTableRows[] = [$warningIconHtml . __(
'submission.status.unassigned'),
'Publication'];
436 if ($galleyDoiEnabled) {
437 foreach ((array) $form->publication->getData(
'galleys') as $galley) {
438 if ($galley->getStoredPubId(
'doi')) {
439 $doiTableRows[] = [$galley->getStoredPubId(
'doi'), __(
'plugins.pubIds.doi.editor.preview.galleys', [
'galleyLabel' => $galley->getGalleyLabel()])];
441 $doiTableRows[] = [$warningIconHtml . __(
'submission.status.unassigned'),__(
'plugins.pubIds.doi.editor.preview.galleys', [
'galleyLabel' => $galley->getGalleyLabel()])];
445 if (!empty($doiTableRows)) {
446 $table =
'<table class="pkpTable"><thead><tr>' .
447 '<th>' . __(
'plugins.pubIds.doi.editor.doi') .
'</th>' .
448 '<th>' . __(
'plugins.pubIds.doi.editor.preview.objects') .
'</th>' .
449 '</tr></thead><tbody>';
450 foreach ($doiTableRows as $doiTableRow) {
451 $table .=
'<tr><td>' . $doiTableRow[0] .
'</td><td>' . $doiTableRow[1] .
'</td></tr>';
453 $table .=
'</tbody></table>';
455 $form->addField(
new \
PKP\components\forms\
FieldHTML(
'doi', [
456 'description' => $table,
457 'groupId' =>
'default',