16 import(
'lib.pkp.plugins.importexport.native.filter.NativeImportFilter');
25 parent::__construct($filterGroup);
36 return 'plugins.importexport.native.filter.NativeXmlIssueFilter';
66 $context = $deployment->getContext();
76 $issue = $issueDao->newDataObject();
77 $issue->setJournalId($context->getId());
78 $issue->setPublished($node->getAttribute(
'published'));
79 $issue->setCurrent($node->getAttribute(
'current'));
80 $issue->setAccessStatus($node->getAttribute(
'access_status'));
81 $issue->setData(
'urlPath', $node->getAttribute(
'url_path'));
82 if ($issue) $issueDao->updateCurrent($context->getId());
83 $issueDao->insertObject($issue);
84 $deployment->addProcessedObjectId(ASSOC_TYPE_ISSUE, $issue->getId());
86 $deployment->setIssue($issue);
88 for ($n = $node->firstChild; $n !==
null; $n=$n->nextSibling) {
89 if (is_a($n,
'DOMElement')) {
94 $issueDao->updateObject($issue);
107 $context = $deployment->getContext();
112 if (isset($localizedSetterMappings[$n->tagName])) {
113 if (!$processOnlyChildren) {
115 $setterFunction = $localizedSetterMappings[$n->tagName];
117 if (empty($locale)) $locale = $context->getPrimaryLocale();
118 $issue->$setterFunction($value, $locale);
120 }
else if (isset($dateSetterMappings[$n->tagName])) {
121 if (!$processOnlyChildren) {
123 $setterFunction = $dateSetterMappings[$n->tagName];
124 $issue->$setterFunction(strtotime($n->textContent));
126 }
else switch ($n->tagName) {
129 if (!$processOnlyChildren) {
136 case 'issue_galleys':
137 if (!$processOnlyChildren) {
145 if (!$processOnlyChildren) {
146 import(
'plugins.importexport.native.filter.NativeFilterHelper');
148 $nativeFilterHelper->parseIssueCovers($this, $n, $issue, ASSOC_TYPE_ISSUE);
151 case 'issue_identification':
152 if (!$processOnlyChildren) {
157 $deployment->addWarning(ASSOC_TYPE_ISSUE, $issue->getId(), __(
'plugins.importexport.common.error.unknownElement', array(
'param' => $n->tagName)));
171 $advice = $element->getAttribute(
'advice');
172 switch ($element->getAttribute(
'type')) {
175 assert(!$advice || $advice ==
'ignore');
178 if ($advice ==
'update') {
179 $issue->setStoredPubId(
'publisher-id', $element->textContent);
183 if ($advice ==
'update') {
186 $issue->setStoredPubId($element->getAttribute(
'type'), $element->textContent);
198 for ($n = $node->firstChild; $n !==
null; $n=$n->nextSibling) {
199 if (is_a($n,
'DOMElement')) {
200 switch ($n->tagName) {
205 $deployment->addWarning(ASSOC_TYPE_ISSUE, $issue->getId(), __(
'plugins.importexport.common.error.unknownElement', array(
'param' => $n->tagName)));
218 $importFilters = $filterDao->getObjectsByGroup(
'native-xml=>IssueGalley');
219 assert(count($importFilters)==1);
220 $importFilter = array_shift($importFilters);
222 $issueGalleyDoc =
new DOMDocument();
223 $issueGalleyDoc->appendChild($issueGalleyDoc->importNode($n,
true));
224 return $importFilter->execute($issueGalleyDoc);
234 for ($n = $node->firstChild; $n !==
null; $n=$n->nextSibling) {
235 if (is_a($n,
'DOMElement')) {
236 switch ($n->tagName) {
241 $deployment->addWarning(ASSOC_TYPE_ISSUE, $issue->getId(), __(
'plugins.importexport.common.error.unknownElement', array(
'param' => $n->tagName)));
254 $importFilters = $filterDao->getObjectsByGroup(
'native-xml=>article');
255 assert(count($importFilters)==1);
256 $importFilter = array_shift($importFilters);
258 $articleDoc =
new DOMDocument();
259 $articleDoc->appendChild($articleDoc->importNode($n,
true));
260 return $importFilter->execute($articleDoc);
270 for ($n = $node->firstChild; $n !==
null; $n=$n->nextSibling) {
271 if (is_a($n,
'DOMElement')) {
272 switch ($n->tagName) {
277 $deployment->addWarning(ASSOC_TYPE_ISSUE, $issue->getId(), __(
'plugins.importexport.common.error.unknownElement', array(
'param' => $n->tagName)));
289 $context = $deployment->getContext();
293 $section = $sectionDao->newDataObject();
294 $section->setContextId($context->getId());
295 $section->setReviewFormId($node->getAttribute(
'review_form_id'));
296 $section->setSequence($node->getAttribute(
'seq'));
297 $section->setEditorRestricted($node->getAttribute(
'editor_restricted'));
298 $section->setMetaIndexed($node->getAttribute(
'meta_indexed'));
299 $section->setMetaReviewed($node->getAttribute(
'meta_reviewed'));
300 $section->setAbstractsNotRequired($node->getAttribute(
'abstracts_not_required'));
301 $section->setHideAuthor($node->getAttribute(
'hide_author'));
302 $section->setHideTitle($node->getAttribute(
'hide_title'));
303 $section->setAbstractWordCount($node->getAttribute(
'abstract_word_count'));
305 $unknownNodes = array();
306 for ($n = $node->firstChild; $n !==
null; $n=$n->nextSibling) {
307 if (is_a($n,
'DOMElement')) {
308 switch ($n->tagName) {
311 $advice = $n->getAttribute(
'advice');
312 assert(!$advice || $advice ==
'ignore');
316 if (empty($locale)) $locale = $context->getPrimaryLocale();
317 $section->setAbbrev($value, $locale);
321 if (empty($locale)) $locale = $context->getPrimaryLocale();
322 $section->setPolicy($value, $locale);
326 if (empty($locale)) $locale = $context->getPrimaryLocale();
327 $section->setTitle($value, $locale);
330 $unknownNodes[] = $n->tagName;
336 $sectionId = $sectionDao->insertObject($section);
337 if (count($unknownNodes)) {
338 foreach ($unknownNodes as $tagName) {
339 $deployment->addWarning(ASSOC_TYPE_SECTION, $sectionId, __(
'plugins.importexport.common.error.unknownElement', array(
'param' => $tagName)));
342 $deployment->addProcessedObjectId(ASSOC_TYPE_SECTION, $sectionId);
354 $context = $deployment->getContext();
355 for ($n = $node->firstChild; $n !==
null; $n=$n->nextSibling) {
356 if (is_a($n,
'DOMElement')) {
357 switch ($n->tagName) {
359 $issue->setVolume($n->textContent);
360 $issue->setShowVolume(1);
363 $issue->setNumber($n->textContent);
364 $issue->setShowNumber(1);
367 $issue->setYear($n->textContent);
368 $issue->setShowYear(1);
372 if (empty($locale)) $locale = $context->getPrimaryLocale();
373 $issue->setTitle($value, $locale);
374 $issue->setShowTitle(1);
377 if ($allowWarnings) {
378 $deployment->addWarning(ASSOC_TYPE_ISSUE, $issue->getId(), __(
'plugins.importexport.common.error.unknownElement', array(
'param' => $n->tagName)));
394 'description' =>
'setDescription',
404 'date_published' =>
'setDatePublished',
405 'date_notified' =>
'setDateNotified',
406 'last_modified' =>
'setLastModified',
407 'open_access_date' =>
'setOpenAccessDate',
418 $context = $deployment->getContext();
421 foreach ($node->getElementsByTagName(
'issue_identification') as $n) {
422 $searchIssue = $issueDao->newDataObject();
424 $foundIssues = $issueDao->getIssuesByIdentification($context->getId(), $searchIssue->getVolume(), $searchIssue->getNumber(), $searchIssue->getYear(), (array) $searchIssue->getTitle(
null));
425 foreach ($foundIssues->toArray() as $issue) {
426 $deployment->addWarning(ASSOC_TYPE_ISSUE, $issue->getId(), __(
'plugins.importexport.native.import.error.issueIdentificationDuplicate', array(
'issueId' => $issue->getId(),
'issueIdentification' => $n->ownerDocument->saveXML($n))));
439 $issue = $deployment->getIssue();
444 $contextId = $importSection->getContextId();
446 $foundSectionId = $foundSectionTitle =
null;
448 $titles = $importSection->getTitle(
null);
449 foreach($titles as $locale => $title) {
450 $section = $sectionDao->getByTitle($title, $contextId);
452 $sectionId = $section->getId();
453 if ($foundSectionId) {
454 if ($foundSectionId != $sectionId) {
456 $deployment->addWarning(ASSOC_TYPE_ISSUE, $issue->getId(), __(
'plugins.importexport.native.import.error.sectionTitleMismatch', array(
'section1Title' => $title,
'section2Title' => $foundSectionTitle,
'issueTitle' => $issue->getIssueIdentification())));
458 }
else if ($index > 0) {
460 $deployment->addWarning(ASSOC_TYPE_ISSUE, $issue->getId(), __(
'plugins.importexport.native.import.error.sectionTitleMatch', array(
'sectionTitle' => $title,
'issueTitle' => $issue->getIssueIdentification())));
462 $foundSectionId = $sectionId;
463 $foundSectionTitle = $title;
465 if ($foundSectionId) {
467 $deployment->addWarning(ASSOC_TYPE_ISSUE, $issue->getId(), __(
'plugins.importexport.native.import.error.sectionTitleMatch', array(
'sectionTitle' => $foundSectionTitle,
'issueTitle' => $issue->getIssueIdentification())));
473 $abbrevSection =
null;
474 $foundSectionId = $foundSectionAbbrev =
null;
476 $abbrevs = $importSection->getAbbrev(
null);
477 foreach($abbrevs as $locale => $abbrev) {
478 $abbrevSection = $sectionDao->getByAbbrev($abbrev, $contextId);
479 if ($abbrevSection) {
480 $sectionId = $abbrevSection->getId();
481 if ($foundSectionId) {
482 if ($foundSectionId != $sectionId) {
484 $deployment->addWarning(ASSOC_TYPE_ISSUE, $issue->getId(), __(
'plugins.importexport.native.import.error.sectionAbbrevMismatch', array(
'section1Abbrev' => $abbrev,
'section2Abbrev' => $foundSectionAbbrev,
'issueTitle' => $issue->getIssueIdentification())));
486 }
else if ($index > 0) {
488 $deployment->addWarning(ASSOC_TYPE_ISSUE, $issue->getId(), __(
'plugins.importexport.native.import.error.sectionAbbrevMatch', array(
'sectionAbbrev' => $abbrev,
'issueTitle' => $issue->getIssueIdentification())));
490 $foundSectionId = $sectionId;
491 $foundSectionAbbrev = $abbrev;
493 if ($foundSectionId) {
495 $deployment->addWarning(ASSOC_TYPE_ISSUE, $issue->getId(), __(
'plugins.importexport.native.import.error.sectionAbbrevMatch', array(
'sectionAbbrev' => $foundSectionAbbrev,
'issueTitle' => $issue->getIssueIdentification())));
500 if (isset($section) && isset($abbrevSection)) {
501 return $section->getId() == $abbrevSection->getId();
503 return isset($section) || isset($abbrevSection);