16 import(
'lib.pkp.plugins.importexport.native.filter.NativeExportFilter');
25 parent::__construct($filterGroup);
36 return 'lib.pkp.plugins.importexport.native.filter.SubmissionFileNativeXmlFilter';
49 $doc =
new DOMDocument(
'1.0');
50 $doc->preserveWhiteSpace =
false;
51 $doc->formatOutput =
true;
54 $doc->appendChild($rootNode);
55 $rootNode->setAttributeNS(
'http://www.w3.org/2000/xmlns/',
'xmlns:xsi',
'http://www.w3.org/2001/XMLSchema-instance');
56 $rootNode->setAttribute(
'xsi:schemaLocation', $deployment->getNamespace() .
' ' . $deployment->getSchemaFilename());
72 $context = $deployment->getContext();
75 $submissionFileNode = $doc->createElementNS($deployment->getNamespace(), $this->getSubmissionFileElementName());
77 $stageToName = array_flip($deployment->getStageNameStageIdMapping());
78 $submissionFileNode->setAttribute(
'stage', $stageToName[$submissionFile->getFileStage()]);
79 $submissionFileNode->setAttribute(
'id', $submissionFile->getFileId());
82 $revisionNode = $doc->createElementNS($deployment->getNamespace(),
'revision');
83 $revisionNode->setAttribute(
'number', $submissionFile->getRevision());
84 if ($sourceFileId = $submissionFile->getSourceFileId()) {
85 $revisionNode->setAttribute(
'source', $sourceFileId .
'-' . $submissionFile->getSourceRevision());
89 $genre = $genreDao->getById($submissionFile->getGenreId());
91 $revisionNode->setAttribute(
'genre', $genre->getName($context->getPrimaryLocale()));
94 $revisionNode->setAttribute(
'filename', $submissionFile->getOriginalFileName());
95 $revisionNode->setAttribute(
'viewable', $submissionFile->getViewable()?
'true':
'false');
96 $revisionNode->setAttribute(
'date_uploaded', strftime(
'%Y-%m-%d', strtotime($submissionFile->getDateUploaded())));
97 $revisionNode->setAttribute(
'date_modified', strftime(
'%Y-%m-%d', strtotime($submissionFile->getDateModified())));
98 if ($submissionFile->getDirectSalesPrice() !==
null) {
99 $revisionNode->setAttribute(
'direct_sales_price', $submissionFile->getDirectSalesPrice());
101 $revisionNode->setAttribute(
'filesize', $submissionFile->getFileSize());
102 $revisionNode->setAttribute(
'filetype', $submissionFile->getFileType());
105 $uploaderUser = $userDao->getById($submissionFile->getUploaderUserId());
106 assert(isset($uploaderUser));
107 $revisionNode->setAttribute(
'uploader', $uploaderUser->getUsername());
113 if ($submissionFile->getFileStage() == SUBMISSION_FILE_DEPENDENT && $submissionFile->getAssocType() == ASSOC_TYPE_SUBMISSION_FILE) {
114 $fileRefNode = $doc->createElementNS($deployment->getNamespace(),
'submission_file_ref');
115 $fileRefNode->setAttribute(
'id', $submissionFile->getAssocId());
117 $latestRevision = $submissionFileDao->getLatestRevisionNumber($submissionFile->getAssocId());
118 $fileRefNode->setAttribute(
'revision', $latestRevision);
119 $revisionNode->appendChild($fileRefNode);
122 $submissionFileNode->appendChild($revisionNode);
125 if (array_key_exists(
'no-embed', $this->opts)) {
126 $hrefNode = $doc->createElementNS($deployment->getNamespace(),
'href');
127 if (array_key_exists(
'use-file-urls', $this->opts)) {
129 $stageId = $submissionFileDao->getWorkflowStageId($submissionFile);
131 $dispatcher = $app->getDispatcher();
132 $params = [
"fileId" => $submissionFile->getFileId(),
133 "revision" => $submissionFile->getRevision(),
134 "submissionId" => $submissionFile->getSubmissionId(),
135 "stageId" => $stageId];
136 $url = $dispatcher->url($app->getRequest(), ROUTE_COMPONENT, $context->getPath(),
"api.file.FileApiHandler",
"downloadFile",
null, $params);
137 $hrefNode->setAttribute(
'src', $url);
139 $hrefNode->setAttribute(
'src', $submissionFile->getFilePath());
141 $hrefNode->setAttribute(
'mime_type', $submissionFile->getFileType());
142 $revisionNode->appendChild($hrefNode);
144 $embedNode = $doc->createElementNS($deployment->getNamespace(),
'embed', base64_encode(file_get_contents($submissionFile->getFilePath())));
145 $embedNode->setAttribute(
'encoding',
'base64');
146 $revisionNode->appendChild($embedNode);
148 return $submissionFileNode;
163 if ($pubId = $submissionFile->getStoredPubId(
'publisher-id')) {
164 $revisionNode->appendChild($node = $doc->createElementNS($deployment->getNamespace(),
'id', htmlspecialchars($pubId, ENT_COMPAT,
'UTF-8')));
165 $node->setAttribute(
'type',
'public');
166 $node->setAttribute(
'advice',
'update');
171 foreach ($pubIdPlugins as $pubIdPlugin) {
172 $this->
addPubIdentifier($doc, $revisionNode, $submissionFile, $pubIdPlugin);
185 $pubId = $submissionFile->getStoredPubId($pubIdPlugin->getPubIdType());
188 $revisionNode->appendChild($node = $doc->createElementNS($deployment->getNamespace(),
'id', htmlspecialchars($pubId, ENT_COMPAT,
'UTF-8')));
189 $node->setAttribute(
'type', $pubIdPlugin->getPubIdType());
190 $node->setAttribute(
'advice',
'update');
200 return 'submission_file';