17 define(
'O4DOI_NOTIFICATION_TYPE_NEW',
'06');
18 define(
'O4DOI_NOTIFICATION_TYPE_UPDATE',
'07');
21 define(
'O4DOI_ID_TYPE_PROPRIETARY',
'01');
22 define(
'O4DOI_ID_TYPE_DOI',
'06');
23 define(
'O4DOI_ID_TYPE_ISSN',
'07');
26 define(
'O4DOI_TEXTFORMAT_ASCII',
'00');
29 define(
'O4DOI_TITLE_TYPE_FULL',
'01');
30 define(
'O4DOI_TITLE_TYPE_ISSUE',
'07');
33 define(
'O4DOI_PUBLISHING_ROLE_PUBLISHER',
'01');
36 define(
'O4DOI_PRODUCT_FORM_PRINT',
'JB');
37 define(
'O4DOI_PRODUCT_FORM_ELECTRONIC',
'JD');
42 define(
'O4DOI_EPUB_FORMAT_HTML',
'01');
43 define(
'O4DOI_EPUB_FORMAT_PDF',
'02');
46 define(
'O4DOI_DATE_FORMAT_YYYY',
'06');
49 define(
'O4DOI_EXTENT_TYPE_FILESIZE',
'22');
52 define(
'O4DOI_EXTENT_UNIT_BYTES',
'17');
55 define(
'O4DOI_CONTRIBUTOR_ROLE_ACTUAL_AUTHOR',
'A01');
58 define(
'O4DOI_LANGUAGE_ROLE_LANGUAGE_OF_TEXT',
'01');
61 define(
'O4DOI_SUBJECT_SCHEME_PUBLISHER',
'23');
62 define(
'O4DOI_SUBJECT_SCHEME_PROPRIETARY',
'24');
65 define(
'O4DOI_TEXT_TYPE_MAIN_DESCRIPTION',
'01');
68 define(
'O4DOI_RELATION_INCLUDES',
'80');
69 define(
'O4DOI_RELATION_IS_PART_OF',
'81');
70 define(
'O4DOI_RELATION_IS_A_NEW_VERSION_OF',
'82');
71 define(
'O4DOI_RELATION_HAS_A_NEW_VERSION',
'83');
72 define(
'O4DOI_RELATION_IS_A_DIFFERENT_FORM_OF',
'84');
73 define(
'O4DOI_RELATION_IS_A_LANGUAGE_VERSION_OF',
'85');
74 define(
'O4DOI_RELATION_IS_MANIFESTED_IN',
'89');
75 define(
'O4DOI_RELATION_IS_A_MANIFESTATION_OF',
'90');
78 import(
'lib.pkp.plugins.importexport.native.filter.NativeExportFilter');
87 parent::__construct($filterGroup);
119 $rootNode = $doc->createElementNS($deployment->getNamespace(), $rootNodeName);
120 $rootNode->setAttributeNS(
'http://www.w3.org/2000/xmlns/',
'xmlns:xsi', $deployment->getXmlSchemaInstance());
121 $rootNode->setAttribute(
'xsi:schemaLocation', $deployment->getNamespace() .
' ' . $deployment->getSchemaFilename());
132 $context = $deployment->getContext();
133 $plugin = $deployment->getPlugin();
134 $headNode = $doc->createElementNS($deployment->getNamespace(),
'Header');
135 $headNode->appendChild($node = $doc->createElementNS($deployment->getNamespace(),
'FromCompany', htmlspecialchars($plugin->getSetting($context->getId(),
'fromCompany'), ENT_COMPAT,
'UTF-8')));
136 $headNode->appendChild($node = $doc->createElementNS($deployment->getNamespace(),
'FromPerson', htmlspecialchars($plugin->getSetting($context->getId(),
'fromName'), ENT_COMPAT,
'UTF-8')));
137 $headNode->appendChild($node = $doc->createElementNS($deployment->getNamespace(),
'FromEmail', htmlspecialchars($plugin->getSetting($context->getId(),
'fromEmail'), ENT_COMPAT,
'UTF-8')));
138 $headNode->appendChild($node = $doc->createElementNS($deployment->getNamespace(),
'ToCompany',
'mEDRA'));
139 $headNode->appendChild($node = $doc->createElementNS($deployment->getNamespace(),
'SentDate', date(
'YmdHi')));
142 $name = $app->getName();
143 $version = $app->getCurrentVersion();
144 $versionString = $version->getVersionString();
145 $headNode->appendChild($node = $doc->createElementNS($deployment->getNamespace(),
'MessageNote',
"This dataset was exported with $name, version $versionString."));
158 $context = $deployment->getContext();
159 $plugin = $deployment->getPlugin();
160 $serialPublicationNode = $doc->createElementNS($deployment->getNamespace(),
'SerialPublication');
162 $serialPublicationNode->appendChild($this->
createSerialWorkNode($doc, $journalLocalePrecedence));
164 $onlineIssn = $context->getData(
'onlineIssn');
165 $serialPublicationNode->appendChild($this->
createSerialVersionNode($doc, $onlineIssn, O4DOI_PRODUCT_FORM_ELECTRONIC, $epubFormat));
167 if (($printIssn = $context->getData(
'printIssn')) && $this->isWork($context, $plugin)) {
168 $serialPublicationNode->appendChild($this->
createSerialVersionNode($doc, $printIssn, O4DOI_PRODUCT_FORM_PRINT,
null));
170 return $serialPublicationNode;
181 $context = $deployment->getContext();
182 $plugin = $deployment->getPlugin();
183 $serialWorkNode = $doc->createElementNS($deployment->getNamespace(),
'SerialWork');
186 assert(!empty($journalTitles));
187 foreach($journalTitles as $locale => $journalTitle) {
188 $serialWorkNode->appendChild($this->
createTitleNode($doc, $locale, $journalTitle, O4DOI_TITLE_TYPE_FULL));
193 $serialWorkNode->appendChild($node = $doc->createElementNS($deployment->getNamespace(),
'CountryOfPublication', htmlspecialchars($plugin->getSetting($context->getId(),
'publicationCountry'), ENT_COMPAT,
'UTF-8')));
194 return $serialWorkNode;
207 $titleNode = $doc->createElementNS($deployment->getNamespace(),
'Title');
209 $titleNode->setAttribute(
'textformat', O4DOI_TEXTFORMAT_ASCII);
212 assert(!empty($language));
213 $titleNode->setAttribute(
'language', $language);
215 $titleNode->appendChild($node = $doc->createElementNS($deployment->getNamespace(),
'TitleType', $titleType));
217 $titleNode->appendChild($node = $doc->createElementNS($deployment->getNamespace(),
'TitleText', htmlspecialchars(
PKPString::html2text($localizedTitle), ENT_COMPAT,
'UTF-8')));
229 $context = $deployment->getContext();
230 $publisherNode = $doc->createElementNS($deployment->getNamespace(),
'Publisher');
232 $publisherNode->appendChild($node = $doc->createElementNS($deployment->getNamespace(),
'PublishingRole', O4DOI_PUBLISHING_ROLE_PUBLISHER));
234 $publisher = $context->getData(
'publisherInstitution');
235 if (empty($publisher)) {
240 assert(!empty($publisher));
241 $publisherNode->appendChild($node = $doc->createElementNS($deployment->getNamespace(),
'PublisherName', htmlspecialchars($publisher, ENT_COMPAT,
'UTF-8')));
242 return $publisherNode;
255 $context = $deployment->getContext();
256 $serialVersionNode = $doc->createElementNS($deployment->getNamespace(),
'SerialVersion');
258 if ($productForm == O4DOI_PRODUCT_FORM_ELECTRONIC) {
259 $serialVersionNode->appendChild($this->
createIdentifierNode($doc,
'Product', O4DOI_ID_TYPE_PROPRIETARY, $context->getId()));
264 $serialVersionNode->appendChild($this->
createIdentifierNode($doc,
'Product', O4DOI_ID_TYPE_ISSN, $issn));
267 $serialVersionNode->appendChild($node = $doc->createElementNS($deployment->getNamespace(),
'ProductForm', $productForm));
268 if ($productForm == O4DOI_PRODUCT_FORM_ELECTRONIC) {
270 if ($epubFormat) $serialVersionNode->appendChild($node = $doc->createElementNS($deployment->getNamespace(),
'EpubFormat', $epubFormat));
272 $serialVersionNode->appendChild($node = $doc->createElementNS($deployment->getNamespace(),
'EpubFormatDescription',
'Open Journal Systems (OJS)'));
274 return $serialVersionNode;
286 $journalIssueNode = $doc->createElementNS($deployment->getNamespace(),
'JournalIssue');
288 $volume = $issue->getVolume();
289 if (!empty($volume) && $issue->getShowVolume()) {
290 $journalIssueNode->appendChild($node = $doc->createElementNS($deployment->getNamespace(),
'JournalVolumeNumber', htmlspecialchars($volume, ENT_COMPAT,
'UTF-8')));
293 $number = $issue->getNumber();
294 if (!empty($number) && $issue->getShowNumber()) {
295 $journalIssueNode->appendChild($node = $doc->createElementNS($deployment->getNamespace(),
'JournalIssueNumber', htmlspecialchars($number, ENT_COMPAT,
'UTF-8')));
298 $identification = $issue->getIssueIdentification();
299 if (!empty($identification)) {
300 $journalIssueNode->appendChild($node = $doc->createElementNS($deployment->getNamespace(),
'JournalIssueDesignation', htmlspecialchars($identification, ENT_COMPAT,
'UTF-8')));
302 assert(!(empty($number) && empty($identification)));
304 $year = (string) $issue->getYear();
305 $yearlen = strlen($year);
306 if ($issue->getShowYear() && !empty($year) && ($yearlen == 2 || $yearlen == 4)) {
307 $issueDateNode = $doc->createElementNS($deployment->getNamespace(),
'JournalIssueDate');
308 $issueDateNode->appendChild($node = $doc->createElementNS($deployment->getNamespace(),
'DateFormat', O4DOI_DATE_FORMAT_YYYY));
313 if ((
int)$year <= (
int)date(
'y')+1) {
314 $year =
'20' . $year;
316 $year =
'19' . $year;
319 $issueDateNode->appendChild($node = $doc->createElementNS($deployment->getNamespace(),
'Date', $year));
320 $journalIssueNode->appendChild($issueDateNode);
322 return $journalIssueNode;
335 $relatedNode = $doc->createElementNS($deployment->getNamespace(),
"Related$workOrProduct");
337 $relatedNode->appendChild($node = $doc->createElementNS($deployment->getNamespace(),
'RelationCode', $relationCode));
339 foreach($ids as $idType => $id) {
355 $productIdentifierNode = $doc->createElementNS($deployment->getNamespace(),
"${workOrProduct}Identifier");
357 $productIdentifierNode->appendChild($node = $doc->createElementNS($deployment->getNamespace(),
"${workOrProduct}IDType", $idType));
359 $productIdentifierNode->appendChild($node = $doc->createElementNS($deployment->getNamespace(),
'IDValue', $id));
360 return $productIdentifierNode;
371 $extentNode = $doc->createElementNS($deployment->getNamespace(),
'Extent');
373 $extentNode->appendChild($node = $doc->createElementNS($deployment->getNamespace(),
'ExtentType', O4DOI_EXTENT_TYPE_FILESIZE));
375 $extentNode->appendChild($node = $doc->createElementNS($deployment->getNamespace(),
'ExtentValue', $file->getFileSize()));
377 $extentNode->appendChild($node = $doc->createElementNS($deployment->getNamespace(),
'ExtentUnit', O4DOI_EXTENT_UNIT_BYTES));
390 $otherTextNode = $doc->createElementNS($deployment->getNamespace(),
'OtherText');
392 $otherTextNode->appendChild($node = $doc->createElementNS($deployment->getNamespace(),
'TextTypeCode', O4DOI_TEXT_TYPE_MAIN_DESCRIPTION));
395 assert(!empty($language));
396 $otherTextNode->appendChild($node = $doc->createElementNS($deployment->getNamespace(),
'Text', htmlspecialchars(
PKPString::html2text($description), ENT_COMPAT,
'UTF-8')));
397 $node->setAttribute(
'textformat', O4DOI_TEXTFORMAT_ASCII);
398 $node->setAttribute(
'language', $language);
399 return $otherTextNode;
411 $context = $deployment->getContext();
412 $plugin = $deployment->getPlugin();
413 if ($this->
isWork($context, $plugin)) {
414 return 'Abstraction';
416 return 'DigitalFixation';
431 $locales[] = $galley->getLocale();
433 if (is_a($article,
'Submission')) {
436 if (!is_null($articleLocale)) {
437 $locales[] = $articleLocale;
444 $locales[] = $article->getLocale();
449 $locales[] = $context->getPrimaryLocale();
452 $formLocales = array_keys($context->getSupportedFormLocaleNames());
456 foreach($formLocales as $formLocale) {
457 if (!in_array($formLocale, $locales)) $locales[] = $formLocale;
460 assert(!empty($locales));
472 if (strlen($language) == 2) {
475 if (strlen($language) == 3) {
496 if (!is_array($localizedData) || empty($localizedData))
return null;
499 foreach($localePrecedence as $locale) {
500 if (isset($localizedData[$locale]) && !empty($localizedData[$locale])) {
501 return $localizedData[$locale];
507 ksort($localizedData);
508 foreach($localizedData as $locale => $value) {
509 if (!empty($value))
return $value;
525 $reorderedLocalizedData = array();
528 if (!is_array($localizedData) || empty($localizedData))
return $reorderedLocalizedData;
531 foreach($localePrecedence as $locale) {
532 if (isset($localizedData[$locale]) && !empty($localizedData[$locale])) {
533 $reorderedLocalizedData[$locale] = $localizedData[$locale];
535 unset($localizedData[$locale]);
540 ksort($localizedData);
541 $reorderedLocalizedData = array_merge($reorderedLocalizedData, $localizedData);
543 return $reorderedLocalizedData;