Open Journal Systems  3.3.0
NativeXmlSubmissionFilter.inc.php
1 <?php
2 
16 import('lib.pkp.plugins.importexport.native.filter.NativeImportFilter');
17 
23  function __construct($filterGroup) {
24  $this->setDisplayName('Native XML submission import');
25  parent::__construct($filterGroup);
26  }
27 
28 
29  //
30  // Implement template methods from PersistableFilter
31  //
35  function getClassName() {
36  return 'lib.pkp.plugins.importexport.native.filter.NativeXmlSubmissionFilter';
37  }
38 
39 
40  //
41  // Implement template methods from NativeImportFilter
42  //
47  function getPluralElementName() {
48  $deployment = $this->getDeployment();
49  return $deployment->getSubmissionsNodeName();
50  }
51 
57  $deployment = $this->getDeployment();
58  return $deployment->getSubmissionNodeName();
59  }
60 
65  function handleElement($node) {
66  $deployment = $this->getDeployment();
67  $context = $deployment->getContext();
68 
69  // Create and insert the submission (ID needed for other entities)
70  $submissionDao = DAORegistry::getDAO('SubmissionDAO'); /* @var $submissionDao SubmissionDAO */
71  $submission = $submissionDao->newDataObject();
72 
73  $submission->setData('contextId', $context->getId());
74  $submission->stampLastActivity();
75  $submission->setData('status', $node->getAttribute('status'));
76  $submission->setData('submissionProgress', 0);
77 
78  import('lib.pkp.classes.workflow.WorkflowStageDAO');
79  $submission->setData('stageId', WorkflowStageDAO::getIdFromPath($node->getAttribute('stage')));
80  $submission->setData('currentPublicationId', $node->getAttribute('current_publication_id'));
81 
82  // Handle any additional attributes etc.
83  $submission = $this->populateObject($submission, $node);
84 
85  $submission = Services::get('submission')->add($submission, Application::get()->getRequest());
86  $deployment->setSubmission($submission);
87 
88  for ($n = $node->firstChild; $n !== null; $n=$n->nextSibling) {
89  if (is_a($n, 'DOMElement')) {
90  $this->handleChildElement($n, $submission);
91  }
92  }
93 
94  $submission = Services::get('submission')->edit($submission, array(), Application::get()->getRequest());
95 
96  return $submission;
97  }
98 
105  function populateObject($submission, $node) {
106  $submissionDao = DAORegistry::getDAO('SubmissionDAO'); /* @var $submissionDao SubmissionDAO */
107  if ($dateSubmitted = $node->getAttribute('date_submitted')) {
108  $submission->setData('dateSubmitted', Core::getCurrentDate(strtotime($dateSubmitted)));
109  } else {
110  $submission->setData('dateSubmitted', Core::getCurrentDate());
111  }
112 
113  return $submission;
114  }
115 
121  function handleChildElement($n, $submission) {
122  switch ($n->tagName) {
123  case 'id':
124  $this->parseIdentifier($n, $submission);
125  break;
126  case 'submission_file':
127  $this->parseSubmissionFile($n, $submission);
128  break;
129  case 'publication':
130  $publication = $this->parsePublication($n, $submission);
131 
132  $publications = $submission->getData('publications');
133  $publications[] = $publication[0];
134  $submission->setData('publications', $publications);
135 
136  break;
137  default:
138  $deployment = $this->getDeployment();
139  $deployment->addWarning(ASSOC_TYPE_SUBMISSION, $submission->getId(), __('plugins.importexport.common.error.unknownElement', array('param' => $n->tagName)));
140  }
141  }
142 
143  //
144  // Element parsing
145  //
151  function parseIdentifier($element, $submission) {
152  $deployment = $this->getDeployment();
153  $advice = $element->getAttribute('advice');
154  switch ($element->getAttribute('type')) {
155  case 'internal':
156  // "update" advice not supported yet.
157  assert(!$advice || $advice == 'ignore');
158  break;
159  }
160  }
161 
167  function parseSubmissionFile($n, $submission) {
168  $importFilter = $this->getImportFilter($n->tagName);
169  assert(isset($importFilter)); // There should be a filter
170 
171  $importFilter->setDeployment($this->getDeployment());
172  $submissionFileDoc = new DOMDocument();
173  $submissionFileDoc->appendChild($submissionFileDoc->importNode($n, true));
174  return $importFilter->execute($submissionFileDoc);
175  }
176 
182  function parsePublication($n, $submission) {
183  $importFilter = $this->getImportFilter($n->tagName);
184  assert(isset($importFilter)); // There should be a filter
185 
186  $importFilter->setDeployment($this->getDeployment());
187  $submissionFileDoc = new DOMDocument();
188  $submissionFileDoc->appendChild($submissionFileDoc->importNode($n, true));
189  return $importFilter->execute($submissionFileDoc);
190  }
191 
192  //
193  // Helper functions
194  //
195 
201  function getImportFilter($elementName) {
202  assert(false); // Subclasses should override
203  }
204 }
205 
206 
NativeXmlSubmissionFilter\getClassName
getClassName()
Definition: NativeXmlSubmissionFilter.inc.php:35
NativeXmlSubmissionFilter\handleChildElement
handleChildElement($n, $submission)
Definition: NativeXmlSubmissionFilter.inc.php:121
DAORegistry\getDAO
static & getDAO($name, $dbconn=null)
Definition: DAORegistry.inc.php:57
NativeImportExportFilter\getDeployment
getDeployment()
Definition: NativeImportExportFilter.inc.php:49
NativeXmlSubmissionFilter\parseSubmissionFile
parseSubmissionFile($n, $submission)
Definition: NativeXmlSubmissionFilter.inc.php:167
NativeXmlSubmissionFilter\handleElement
handleElement($node)
Definition: NativeXmlSubmissionFilter.inc.php:65
NativeImportFilter
Base class that converts a Native XML document to a DataObject.
Definition: NativeImportFilter.inc.php:18
NativeXmlSubmissionFilter\parseIdentifier
parseIdentifier($element, $submission)
Definition: NativeXmlSubmissionFilter.inc.php:151
WorkflowStageDAO\getIdFromPath
static getIdFromPath($stagePath)
Definition: WorkflowStageDAO.inc.php:43
NativeXmlSubmissionFilter\getSingularElementName
getSingularElementName()
Definition: NativeXmlSubmissionFilter.inc.php:56
NativeXmlSubmissionFilter\getImportFilter
getImportFilter($elementName)
Definition: NativeXmlSubmissionFilter.inc.php:201
NativeXmlSubmissionFilter\__construct
__construct($filterGroup)
Definition: NativeXmlSubmissionFilter.inc.php:23
Core\getCurrentDate
static getCurrentDate($ts=null)
Definition: Core.inc.php:63
NativeXmlSubmissionFilter\getPluralElementName
getPluralElementName()
Definition: NativeXmlSubmissionFilter.inc.php:47
PKPApplication\get
static get()
Definition: PKPApplication.inc.php:235
Filter\setDisplayName
setDisplayName($displayName)
Definition: Filter.inc.php:140
NativeXmlSubmissionFilter
Base class that converts a Native XML document to a set of submissions.
Definition: NativeXmlSubmissionFilter.inc.php:18
NativeXmlSubmissionFilter\populateObject
populateObject($submission, $node)
Definition: NativeXmlSubmissionFilter.inc.php:105
NativeXmlSubmissionFilter\parsePublication
parsePublication($n, $submission)
Definition: NativeXmlSubmissionFilter.inc.php:182
PKPServices\get
static get($service)
Definition: PKPServices.inc.php:49