Open Monograph Press  3.3.0
NativeXmlPublicationFilter.inc.php
1 <?php
2 
16 import('lib.pkp.plugins.importexport.native.filter.NativeXmlPKPPublicationFilter');
17 
19  //
20  // Implement template methods from PersistableFilter
21  //
25  function getClassName() {
26  return 'plugins.importexport.native.filter.NativeXmlPublicationFilter';
27  }
28 
35  function populateObject($publication, $node) {
36  $deployment = $this->getDeployment();
37  $context = $deployment->getContext();
38 
39  $seriesPath = $node->getAttribute('series');
40  $seriesPosition = $node->getAttribute('series_position');
41  if ($seriesPath !== '') {
42  $seriesDao = DAORegistry::getDAO('SeriesDAO');
43  $series = $seriesDao->getByPath($seriesPath, $context->getId());
44  if (!$series) {
45  $deployment->addError(ASSOC_TYPE_PUBLICATION, $publication->getId(), __('plugins.importexport.native.error.unknownSeries', array('param' => $seriesPath)));
46  } else {
47  $publication->setData('seriesId', $series->getId());
48  $publication->setData('seriesPosition', $seriesPosition);
49  }
50  }
51 
52  return parent::populateObject($publication, $node);
53  }
54 
60  function handleChildElement($n, $publication) {
61  switch ($n->tagName) {
62  case 'publication_format':
63  $this->parsePublicationFormat($n, $publication);
64  break;
65  case 'chapters':
66  $this->parseChapters($n, $publication);
67  break;
68  case 'covers':
69  $this->parsePublicationCovers($this, $n, $publication);
70  break;
71  default:
72  parent::handleChildElement($n, $publication);
73  }
74  }
75 
81  function getImportFilter($elementName) {
82  $deployment = $this->getDeployment();
83  $publication = $deployment->getPublication();
84  $importClass = null; // Scrutinizer
85  switch ($elementName) {
86  case 'publication_format':
87  $importClass='PublicationFormat';
88  break;
89  case 'chapter':
90  $importClass='Chapter';
91  break;
92  default:
93  $deployment->addError(ASSOC_TYPE_PUBLICATION, $publication->getId(), __('plugins.importexport.common.error.unknownElement', array('param' => $elementName)));
94  }
95  // Caps on class name for consistency with imports, whose filter
96  // group names are generated implicitly.
97  $filterDao = DAORegistry::getDAO('FilterDAO'); /* @var $filterDao FilterDAO */
98  $importFilters = $filterDao->getObjectsByGroup('native-xml=>' . $importClass);
99  $importFilter = array_shift($importFilters);
100  return $importFilter;
101  }
102 
108  function parsePublicationFormat($n, $publication) {
109  $importFilter = $this->getImportFilter($n->tagName);
110  assert($importFilter); // There should be a filter
111 
112  $existingDeployment = $this->getDeployment();
113  $request = Application::get()->getRequest();
114 
115  $onixDeployment = new Onix30ExportDeployment($request->getContext(), $request->getUser());
116  $onixDeployment->setPublication($existingDeployment->getPublication());
117  $onixDeployment->setFileDBIds($existingDeployment->getFileDBIds());
118  $onixDeployment->setAuthorDBIds($existingDeployment->getAuthorDBIds());
119  $importFilter->setDeployment($existingDeployment);
120  $formatDoc = new DOMDocument();
121  $formatDoc->appendChild($formatDoc->importNode($n, true));
122  return $importFilter->execute($formatDoc);
123  }
124 
130  function parseChapters($node, $publication) {
131  $deployment = $this->getDeployment();
132 
133  $chapters = array();
134 
135  for ($n = $node->firstChild; $n !== null; $n=$n->nextSibling) {
136  if (is_a($n, 'DOMElement')) {
137  switch ($n->tagName) {
138  case 'chapter':
139  $chapter = $this->parseChapter($n, $publication);
140  $chapters[] = $chapter;
141  break;
142  default:
143  $deployment->addWarning(ASSOC_TYPE_PUBLICATION, $publication->getId(), __('plugins.importexport.common.error.unknownElement', array('param' => $n->tagName)));
144  }
145  }
146  }
147 
148  $publication->setData('chapters', $chapters);
149  }
150 
156  function parseChapter($n, $publication) {
157  $importFilter = $this->getImportFilter($n->tagName);
158  assert($importFilter); // There should be a filter
159 
160  $existingDeployment = $this->getDeployment();
161  $request = Application::get()->getRequest();
162 
163  $importFilter->setDeployment($existingDeployment);
164  $chapterDoc = new DOMDocument();
165  $chapterDoc->appendChild($chapterDoc->importNode($n, true));
166  return $importFilter->execute($chapterDoc);
167  }
168 
175  function parsePublicationCovers($filter, $node, $object) {
176  $deployment = $filter->getDeployment();
177 
178  $coverImages = array();
179 
180  for ($n = $node->firstChild; $n !== null; $n=$n->nextSibling) {
181  if (is_a($n, 'DOMElement')) {
182  switch ($n->tagName) {
183  case 'cover':
184  $coverImage = $this->parsePublicationCover($filter, $n, $object);
185  $coverImages[key($coverImage)] = reset($coverImage);
186  break;
187  default:
188  $deployment->addWarning(ASSOC_TYPE_PUBLICATION, $object->getId(), __('plugins.importexport.common.error.unknownElement', array('param' => $n->tagName)));
189  }
190  }
191  }
192 
193  $object->setData('coverImage', $coverImages);
194  }
195 
202  function parsePublicationCover($filter, $node, $object) {
203  $deployment = $filter->getDeployment();
204 
205  $context = $deployment->getContext();
206 
207  $locale = $node->getAttribute('locale');
208  if (empty($locale)) $locale = $context->getPrimaryLocale();
209 
210  $coverImagelocale = array();
211  $coverImage = array();
212 
213  for ($n = $node->firstChild; $n !== null; $n=$n->nextSibling) {
214  if (is_a($n, 'DOMElement')) {
215  switch ($n->tagName) {
216  case 'cover_image':
217  $coverImage['uploadName'] = $n->textContent;
218  break;
219  case 'cover_image_alt_text':
220  $coverImage['altText'] = $n->textContent;
221  break;
222  case 'embed':
223  import('classes.file.PublicFileManager');
224  $publicFileManager = new PublicFileManager();
225  $filePath = $publicFileManager->getContextFilesPath($context->getId()) . '/' . $coverImage['uploadName'];
226  file_put_contents($filePath, base64_decode($n->textContent));
227  break;
228  default:
229  $deployment->addWarning(ASSOC_TYPE_PUBLICATION, $object->getId(), __('plugins.importexport.common.error.unknownElement', array('param' => $n->tagName)));
230  }
231  }
232  }
233 
234  $coverImagelocale[$locale] = $coverImage;
235 
236  return $coverImagelocale;
237  }
238 
244  return 'publication-format=>native-xml';
245  }
246 }
247 
248 
NativeXmlPublicationFilter\populateObject
populateObject($publication, $node)
Definition: NativeXmlPublicationFilter.inc.php:35
Onix30ExportDeployment
Class configuring the native import/export process to this application's specifics.
Definition: Onix30ExportDeployment.inc.php:19
NativeXmlPublicationFilter\parsePublicationCovers
parsePublicationCovers($filter, $node, $object)
Definition: NativeXmlPublicationFilter.inc.php:175
DAORegistry\getDAO
static & getDAO($name, $dbconn=null)
Definition: DAORegistry.inc.php:57
NativeXmlPublicationFilter\parsePublicationFormat
parsePublicationFormat($n, $publication)
Definition: NativeXmlPublicationFilter.inc.php:108
NativeXmlPublicationFilter\getImportFilter
getImportFilter($elementName)
Definition: NativeXmlPublicationFilter.inc.php:81
NativeXmlPublicationFilter\parsePublicationCover
parsePublicationCover($filter, $node, $object)
Definition: NativeXmlPublicationFilter.inc.php:202
NativeImportExportFilter\getDeployment
getDeployment()
Definition: NativeImportExportFilter.inc.php:49
NativeXmlPublicationFilter\parseChapters
parseChapters($node, $publication)
Definition: NativeXmlPublicationFilter.inc.php:130
NativeXmlPublicationFilter\getClassName
getClassName()
Definition: NativeXmlPublicationFilter.inc.php:25
PublicFileManager
Wrapper class for uploading files to a site/press' public directory.
Definition: PublicFileManager.inc.php:19
NativeXmlPKPPublicationFilter
Base class that converts a Native XML document to a set of publications.
Definition: NativeXmlPKPPublicationFilter.inc.php:18
NativeXmlPublicationFilter\handleChildElement
handleChildElement($n, $publication)
Definition: NativeXmlPublicationFilter.inc.php:60
NativeXmlPublicationFilter\parseChapter
parseChapter($n, $publication)
Definition: NativeXmlPublicationFilter.inc.php:156
NativeXmlPublicationFilter
Class that converts a Native XML document to a set of monographs.
Definition: NativeXmlPublicationFilter.inc.php:18
NativeXmlPublicationFilter\getRepresentationExportFilterGroupName
getRepresentationExportFilterGroupName()
Definition: NativeXmlPublicationFilter.inc.php:243
PKPApplication\get
static get()
Definition: PKPApplication.inc.php:235