16 import(
'lib.pkp.plugins.importexport.native.filter.NativeExportFilter');
28 parent::__construct($filterGroup);
39 return 'lib.pkp.plugins.importexport.native.filter.SubmissionNativeXmlFilter';
53 $doc =
new DOMDocument(
'1.0');
54 $doc->preserveWhiteSpace =
false;
55 $doc->formatOutput =
true;
63 $rootNode = $doc->createElementNS($deployment->getNamespace(), $deployment->getSubmissionsNodeName());
64 foreach ($submissions as $submission) {
68 $doc->appendChild($rootNode);
69 $rootNode->setAttributeNS(
'http://www.w3.org/2000/xmlns/',
'xmlns:xsi',
'http://www.w3.org/2001/XMLSchema-instance');
70 $rootNode->setAttribute(
'xsi:schemaLocation', $deployment->getNamespace() .
' ' . $deployment->getSchemaFilename());
87 $deployment->setSubmission($submission);
88 $submissionNode = $doc->createElementNS($deployment->getNamespace(), $deployment->getSubmissionNodeName());
90 $submissionNode->setAttribute(
'date_submitted', strftime(
'%Y-%m-%d', strtotime($submission->getData(
'dateSubmitted'))));
91 $submissionNode->setAttribute(
'status', $submission->getData(
'status'));
92 $submissionNode->setAttribute(
'submission_progress', $submission->getData(
'submissionProgress'));
93 $submissionNode->setAttribute(
'current_publication_id', $submission->getData(
'currentPublicationId'));
101 $this->
addFiles($doc, $submissionNode, $submission);
104 return $submissionNode;
117 $submissionNode->appendChild($node = $doc->createElementNS($deployment->getNamespace(),
'id', $submission->getId()));
118 $node->setAttribute(
'type',
'internal');
119 $node->setAttribute(
'advice',
'ignore');
136 function addControlledVocabulary($doc, $submissionNode, $controlledVocabulariesNodeName, $controlledVocabularyNodeName, $controlledVocabulary) {
138 $locales = array_keys($controlledVocabulary);
139 foreach ($locales as $locale) {
140 if (!empty($controlledVocabulary[$locale])) {
141 $controlledVocabulariesNode = $doc->createElementNS($deployment->getNamespace(), $controlledVocabulariesNodeName);
142 $controlledVocabulariesNode->setAttribute(
'locale', $locale);
143 foreach ($controlledVocabulary[$locale] as $controlledVocabularyItem) {
144 $controlledVocabulariesNode->appendChild($node = $doc->createElementNS($deployment->getNamespace(), $controlledVocabularyNodeName, htmlspecialchars($controlledVocabularyItem, ENT_COMPAT,
'UTF-8')));
146 $submissionNode->appendChild($controlledVocabulariesNode);
157 function addFiles($doc, $submissionNode, $submission) {
160 $submissionFiles = $submissionFileDao->getBySubmissionId($submission->getId());
172 $submissionFileNodesByFileId = array();
173 foreach ($submissionFiles as $submissionFile) {
174 $nativeExportFilters = $filterDao->getObjectsByGroup(get_class($submissionFile) .
'=>native-xml');
175 assert(count($nativeExportFilters)==1);
176 $exportFilter = array_shift($nativeExportFilters);
179 $exportFilter->setOpts($this->opts);
180 $submissionFileDoc = $exportFilter->execute($submissionFile);
181 $fileId = $submissionFileDoc->documentElement->getAttribute(
'id');
182 if (!isset($submissionFileNodesByFileId[$fileId])) {
183 $clone = $doc->importNode($submissionFileDoc->documentElement,
true);
184 $submissionNode->appendChild($clone);
185 $submissionFileNodesByFileId[$fileId] = $clone;
187 $submissionFileNode = $submissionFileNodesByFileId[$fileId];
189 $revisionNode =
null;
190 foreach ($submissionFileDoc->documentElement->childNodes as $childNode) {
191 if (!is_a($childNode,
'DOMElement'))
continue;
192 if ($childNode->tagName ==
'revision') $revisionNode = $childNode;
194 assert(is_a($revisionNode,
'DOMElement'));
195 $clone = $doc->importNode($revisionNode,
true);
196 $firstRevisionChild = $submissionFileNode->firstChild;
197 $submissionFileNode->insertBefore($clone, $firstRevisionChild);
210 $nativeExportFilters = $filterDao->getObjectsByGroup(
'publication=>native-xml');
211 assert(count($nativeExportFilters)==1);
212 $exportFilter = array_shift($nativeExportFilters);
215 $publications = (array) $submission->getData(
'publications');
216 foreach ($publications as $publication) {
217 $publicationDoc = $exportFilter->execute($publication);
218 if ($publicationDoc->documentElement instanceof DOMElement) {
219 $clone = $doc->importNode($publicationDoc->documentElement,
true);
220 $submissionNode->appendChild($clone);
236 $this->_includeSubmissionsNode = $includeSubmissionsNode;