Open Monograph Press  3.3.0
PublicationNativeXmlFilter.inc.php
1 <?php
2 
16 import('lib.pkp.plugins.importexport.native.filter.PKPPublicationNativeXmlFilter');
17 
19  //
20  // Implement template methods from PersistableFilter
21  //
25  function getClassName() {
26  return 'plugins.importexport.native.filter.PublicationNativeXmlFilter';
27  }
28 
34  return 'publication-format=>native-xml';
35  }
36 
37  //
38  // Submission conversion functions
39  //
46  function createEntityNode($doc, $entity) {
47  $deployment = $this->getDeployment();
48  $entityNode = parent::createEntityNode($doc, $entity);
49 
50  $context = $deployment->getContext();
51 
52  $deployment->setPublication($entity);
53 
54  // Add the series, if one is designated.
55  if ($seriesId = $entity->getData('seriesId')) {
56  $seriesDao = DAORegistry::getDAO('SeriesDAO');
57  $series = $seriesDao->getById($seriesId, $context->getId());
58 
59  $entityNode->setAttribute('series', $series->getPath());
60  $entityNode->setAttribute('series_position', $entity->getData('seriesPosition'));
61  }
62 
63  $this->addChapters($doc, $entityNode, $entity);
64 
65  // cover images
66  $coversNode = $this->createPublicationCoversNode($this, $doc, $entity);
67  if ($coversNode) $entityNode->appendChild($coversNode);
68 
69  $citationsListNode = $this->createCitationsNode($doc, $deployment, $entity);
70  if ($citationsListNode) {
71  $entityNode->appendChild($citationsListNode);
72  }
73 
74  return $entityNode;
75  }
76 
83  function addChapters($doc, $entityNode, $entity) {
84  $filterDao = DAORegistry::getDAO('FilterDAO');
85  $nativeExportFilters = $filterDao->getObjectsByGroup('chapter=>native-xml');
86  assert(count($nativeExportFilters)==1); // Assert only a single serialization filter
87  $exportFilter = array_shift($nativeExportFilters);
88  $exportFilter->setDeployment($this->getDeployment());
89 
90  $chapters = $entity->getData('chapters');
91  $chaptersDoc = $exportFilter->execute($chapters);
92  if ($chaptersDoc->documentElement instanceof DOMElement) {
93  $clone = $doc->importNode($chaptersDoc->documentElement, true);
94  $entityNode->appendChild($clone);
95  }
96  }
97 
105  function createPublicationCoversNode($filter, $doc, $object) {
106  $deployment = $filter->getDeployment();
107 
108  $context = $deployment->getContext();
109 
110  $coversNode = null;
111  $coverImages = $object->getData('coverImage');
112  if (!empty($coverImages)) {
113  $coversNode = $doc->createElementNS($deployment->getNamespace(), 'covers');
114  foreach ($coverImages as $locale => $coverImage) {
115  $coverImageName = $coverImage['uploadName'];
116 
117  $coverNode = $doc->createElementNS($deployment->getNamespace(), 'cover');
118  $coverNode->setAttribute('locale', $locale);
119  $coverNode->appendChild($node = $doc->createElementNS($deployment->getNamespace(), 'cover_image', htmlspecialchars($coverImageName, ENT_COMPAT, 'UTF-8')));
120  $coverNode->appendChild($node = $doc->createElementNS($deployment->getNamespace(), 'cover_image_alt_text', htmlspecialchars($coverImage['altText'], ENT_COMPAT, 'UTF-8')));
121 
122  import('classes.file.PublicFileManager');
123  $publicFileManager = new PublicFileManager();
124 
125  $contextId = $context->getId();
126 
127  $filePath = $publicFileManager->getContextFilesPath($contextId) . '/' . $coverImageName;
128  $embedNode = $doc->createElementNS($deployment->getNamespace(), 'embed', base64_encode(file_get_contents($filePath)));
129  $embedNode->setAttribute('encoding', 'base64');
130  $coverNode->appendChild($embedNode);
131  $coversNode->appendChild($coverNode);
132  }
133  }
134  return $coversNode;
135  }
136 
144  function parseCovers($filter, $node, $object, $assocType) {
145  $deployment = $filter->getDeployment();
146  for ($n = $node->firstChild; $n !== null; $n=$n->nextSibling) {
147  if (is_a($n, 'DOMElement')) {
148  switch ($n->tagName) {
149  case 'cover':
150  $this->parseCover($filter, $n, $object, $assocType);
151  break;
152  default:
153  $deployment->addWarning($assocType, $object->getId(), __('plugins.importexport.common.error.unknownElement', array('param' => $n->tagName)));
154  }
155  }
156  }
157  }
158 
166  private function createCitationsNode($doc, $deployment, $publication) {
167  $citationDao = DAORegistry::getDAO('CitationDAO');
168 
169  $nodeCitations = $doc->createElementNS($deployment->getNamespace(), 'citations');
170  $submissionCitations = $citationDao->getByPublicationId($publication->getId());
171  if ($submissionCitations->getCount() != 0) {
172  while ($elementCitation = $submissionCitations->next()) {
173  $rawCitation = $elementCitation->getRawCitation();
174  $nodeCitations->appendChild($node = $doc->createElementNS($deployment->getNamespace(), 'citation', htmlspecialchars($rawCitation, ENT_COMPAT, 'UTF-8')));
175  }
176 
177  return $nodeCitations;
178  }
179 
180  return null;
181  }
182 }
PublicationNativeXmlFilter\addChapters
addChapters($doc, $entityNode, $entity)
Definition: PublicationNativeXmlFilter.inc.php:83
PublicationNativeXmlFilter
Class that converts a Article to a Native XML document.
Definition: PublicationNativeXmlFilter.inc.php:18
PublicationNativeXmlFilter\createPublicationCoversNode
createPublicationCoversNode($filter, $doc, $object)
Definition: PublicationNativeXmlFilter.inc.php:105
DAORegistry\getDAO
static & getDAO($name, $dbconn=null)
Definition: DAORegistry.inc.php:57
NativeImportExportFilter\getDeployment
getDeployment()
Definition: NativeImportExportFilter.inc.php:49
PublicFileManager
Wrapper class for uploading files to a site/press' public directory.
Definition: PublicFileManager.inc.php:19
PublicationNativeXmlFilter\parseCovers
parseCovers($filter, $node, $object, $assocType)
Definition: PublicationNativeXmlFilter.inc.php:144
PKPPublicationNativeXmlFilter
Base class that converts a PKPPublication to a Native XML document.
Definition: PKPPublicationNativeXmlFilter.inc.php:18
PublicationNativeXmlFilter\getClassName
getClassName()
Definition: PublicationNativeXmlFilter.inc.php:25
PublicationNativeXmlFilter\createEntityNode
createEntityNode($doc, $entity)
Definition: PublicationNativeXmlFilter.inc.php:46
PublicationNativeXmlFilter\getRepresentationExportFilterGroupName
getRepresentationExportFilterGroupName()
Definition: PublicationNativeXmlFilter.inc.php:33