Open Journal Systems  3.3.0
IssueGalleyNativeXmlFilter.inc.php
1 <?php
2 
16 import('lib.pkp.plugins.importexport.native.filter.NativeExportFilter');
17 
23  function __construct($filterGroup) {
24  $this->setDisplayName('Native XML issue galley export');
25  parent::__construct($filterGroup);
26  }
27 
28 
29  //
30  // Implement template methods from PersistableFilter
31  //
35  function getClassName() {
36  return 'plugins.importexport.native.filter.IssueGalleyNativeXmlFilter';
37  }
38 
39 
40  //
41  // Implement template methods from Filter
42  //
48  function &process(&$issueGalleys) {
49  // Create the XML document
50  $doc = new DOMDocument('1.0');
51  $doc->preserveWhiteSpace = false;
52  $doc->formatOutput = true;
53  $deployment = $this->getDeployment();
54 
55  $rootNode = $doc->createElementNS($deployment->getNamespace(), 'issue_galleys');
56  foreach ($issueGalleys as $issueGalley) {
57  $rootNode->appendChild($this->createIssueGalleyNode($doc, $issueGalley));
58  }
59 
60  $doc->appendChild($rootNode);
61  $rootNode->setAttributeNS('http://www.w3.org/2000/xmlns/', 'xmlns:xsi', 'http://www.w3.org/2001/XMLSchema-instance');
62  $rootNode->setAttribute('xsi:schemaLocation', $deployment->getNamespace() . ' ' . $deployment->getSchemaFilename());
63 
64  return $doc;
65  }
66 
67  //
68  // Submission conversion functions
69  //
76  function createIssueGalleyNode($doc, $issueGalley) {
77  // Create the root node and attributes
78  $deployment = $this->getDeployment();
79  $issueGalleyNode = $doc->createElementNS($deployment->getNamespace(), 'issue_galley');
80  $issueGalleyNode->setAttribute('locale', $issueGalley->getLocale());
81  $issueGalleyNode->appendChild($node = $doc->createElementNS($deployment->getNamespace(), 'label', htmlspecialchars($issueGalley->getLabel(), ENT_COMPAT, 'UTF-8')));
82 
83  $this->addIdentifiers($doc, $issueGalleyNode, $issueGalley);
84 
85  $this->addFile($doc, $issueGalleyNode, $issueGalley);
86 
87  return $issueGalleyNode;
88  }
89 
96  function addFile($doc, $issueGalleyNode, $issueGalley) {
97  $issueFileDao = DAORegistry::getDAO('IssueFileDAO'); /* @var $issueFileDao IssueFileDAO */
98  $issueFile = $issueFileDao->getById($issueGalley->getFileId());
99 
100  if ($issueFile) {
101  $deployment = $this->getDeployment();
102  $issueFileNode = $doc->createElementNS($deployment->getNamespace(), 'issue_file');
103  $issueFileNode->appendChild($node = $doc->createElementNS($deployment->getNamespace(), 'file_name', htmlspecialchars($issueFile->getServerFileName(), ENT_COMPAT, 'UTF-8')));
104  $issueFileNode->appendChild($node = $doc->createElementNS($deployment->getNamespace(), 'file_type', htmlspecialchars($issueFile->getFileType(), ENT_COMPAT, 'UTF-8')));
105  $issueFileNode->appendChild($node = $doc->createElementNS($deployment->getNamespace(), 'file_size', $issueFile->getFileSize()));
106  $issueFileNode->appendChild($node = $doc->createElementNS($deployment->getNamespace(), 'content_type', htmlspecialchars($issueFile->getContentType(), ENT_COMPAT, 'UTF-8')));
107  $issueFileNode->appendChild($node = $doc->createElementNS($deployment->getNamespace(), 'original_file_name', htmlspecialchars($issueFile->getOriginalFileName(), ENT_COMPAT, 'UTF-8')));
108  $issueFileNode->appendChild($node = $doc->createElementNS($deployment->getNamespace(), 'date_uploaded', strftime('%Y-%m-%d', strtotime($issueFile->getDateUploaded()))));
109  $issueFileNode->appendChild($node = $doc->createElementNS($deployment->getNamespace(), 'date_modified', strftime('%Y-%m-%d', strtotime($issueFile->getDateModified()))));
110 
111  import('classes.file.IssueFileManager');
112  $issueFileManager = new IssueFileManager($issueGalley->getIssueId());
113 
114  $filePath = $issueFileManager->getFilesDir() . '/' . $issueFileManager->contentTypeToPath($issueFile->getContentType()) . '/' . $issueFile->getServerFileName();
115  $embedNode = $doc->createElementNS($deployment->getNamespace(), 'embed', base64_encode(file_get_contents($filePath)));
116  $embedNode->setAttribute('encoding', 'base64');
117  $issueFileNode->appendChild($embedNode);
118 
119  $issueGalleyNode->appendChild($issueFileNode);
120  }
121  }
122 
129  function addIdentifiers($doc, $issueGalleyNode, $issueGalley) {
130  $deployment = $this->getDeployment();
131 
132  // Add internal ID
133  $issueGalleyNode->appendChild($node = $doc->createElementNS($deployment->getNamespace(), 'id', $issueGalley->getId()));
134  $node->setAttribute('type', 'internal');
135  $node->setAttribute('advice', 'ignore');
136 
137  // Add public ID
138  if ($pubId = $issueGalley->getStoredPubId('publisher-id')) {
139  $issueGalleyNode->appendChild($node = $doc->createElementNS($deployment->getNamespace(), 'id', htmlspecialchars($pubId, ENT_COMPAT, 'UTF-8')));
140  $node->setAttribute('type', 'public');
141  $node->setAttribute('advice', 'update');
142  }
143  }
144 }
145 
146 
IssueGalleyNativeXmlFilter\addFile
addFile($doc, $issueGalleyNode, $issueGalley)
Definition: IssueGalleyNativeXmlFilter.inc.php:96
IssueFileManager
Class defining operations for issue file management.
Definition: IssueFileManager.inc.php:22
DAORegistry\getDAO
static & getDAO($name, $dbconn=null)
Definition: DAORegistry.inc.php:57
IssueGalleyNativeXmlFilter\createIssueGalleyNode
createIssueGalleyNode($doc, $issueGalley)
Definition: IssueGalleyNativeXmlFilter.inc.php:76
IssueGalleyNativeXmlFilter\getClassName
getClassName()
Definition: IssueGalleyNativeXmlFilter.inc.php:35
NativeImportExportFilter\getDeployment
getDeployment()
Definition: NativeImportExportFilter.inc.php:49
IssueGalleyNativeXmlFilter\process
& process(&$issueGalleys)
Definition: IssueGalleyNativeXmlFilter.inc.php:48
NativeExportFilter
Base class that converts a DataObject to a Native XML document.
Definition: NativeExportFilter.inc.php:18
IssueGalleyNativeXmlFilter\__construct
__construct($filterGroup)
Definition: IssueGalleyNativeXmlFilter.inc.php:23
IssueGalleyNativeXmlFilter
Base class that converts a set of issue galleys to a Native XML document.
Definition: IssueGalleyNativeXmlFilter.inc.php:18
IssueGalleyNativeXmlFilter\addIdentifiers
addIdentifiers($doc, $issueGalleyNode, $issueGalley)
Definition: IssueGalleyNativeXmlFilter.inc.php:129
Filter\setDisplayName
setDisplayName($displayName)
Definition: Filter.inc.php:140