ILIAS  trunk Revision v11.0_alpha-1843-g9e1fad99175
All Data Structures Namespaces Files Functions Variables Enumerations Enumerator Modules Pages
Legacy.php
Go to the documentation of this file.
1 <?php
2 
19 declare(strict_types=1);
20 
22 
31 
32 class Legacy implements ReaderInterface
33 {
37 
38  public function __construct(
39  MarkerFactoryInterface $marker_factory,
40  ScaffoldProviderInterface $scaffold_provider,
41  CopyrightHandlerInterface $copyright_handler
42  ) {
43  $this->marker_factory = $marker_factory;
44  $this->scaffold_provider = $scaffold_provider;
45  $this->copyright_handler = $copyright_handler;
46  }
47 
48  public function read(
49  \SimpleXMLElement $xml,
51  ): SetInterface {
52  $set = $this->scaffold_provider->set();
53 
54  $this->prepareAddingOfGeneral($set, $xml->General);
55  if (!empty($xml->Lifecycle)) {
56  $this->prepareAddingOfLifeCycle($set, $xml->Lifecycle);
57  }
58  if (!empty($xml->{'Meta-Metadata'})) {
59  $this->prepareAddingOfMetaMetadata($set, $xml->{'Meta-Metadata'});
60  }
61  if (!empty($xml->Technical)) {
62  $this->prepareAddingOfTechnical($set, $xml->Technical);
63  }
64  if (!empty($xml->Educational)) {
65  $this->prepareAddingOfEducational($set, $xml->Educational);
66  }
67  if (!empty($xml->Rights)) {
68  $this->prepareAddingOfRights($set, $xml->Rights);
69  }
70  foreach ($xml->Relation as $relation_xml) {
71  $this->prepareAddingOfRelation($set, $relation_xml);
72  }
73  foreach ($xml->Annotation as $annotation_xml) {
74  $this->prepareAddingOfAnnotation($set, $annotation_xml);
75  }
76  foreach ($xml->Classification as $classification_xml) {
77  $this->prepareAddingOfClassification($set, $classification_xml);
78  }
79 
80  return $set;
81  }
82 
83  protected function prepareAddingOfGeneral(
84  SetInterface $set,
85  \SimpleXMLElement $xml
86  ): void {
87  $general = $this->addScaffoldAndMark($set->getRoot(), 'general');
88 
89  foreach ($xml->Identifier as $identifier_xml) {
90  $this->prepareAddingOfIdentifier($general, $identifier_xml);
91  }
92 
93  $this->prepareAddingOfLangstring('title', $general, $xml->Title);
94 
95  foreach ($xml->Language as $language_xml) {
96  $this->addScaffoldAndMark($general, 'language', (string) $language_xml->attributes()->Language);
97  }
98 
99  foreach ($xml->Description as $description_xml) {
100  $this->prepareAddingOfLangstring('description', $general, $description_xml);
101  }
102 
103  foreach ($xml->Keyword as $keyword_xml) {
104  $this->prepareAddingOfLangstring('keyword', $general, $keyword_xml);
105  }
106 
107  if (!empty($xml->Coverage)) {
108  $this->prepareAddingOfLangstring('coverage', $general, $xml->Coverage);
109  }
110 
112  'structure',
113  (string) $xml->attributes()->Structure,
114  $general
115  );
116  }
117 
118  protected function prepareAddingOfLifeCycle(
119  SetInterface $set,
120  \SimpleXMLElement $xml
121  ): void {
122  $lifecycle = $this->addScaffoldAndMark($set->getRoot(), 'lifeCycle');
123 
124  $this->prepareAddingOfLangstring('version', $lifecycle, $xml->Version);
125 
127  'status',
128  (string) $xml->attributes()->status,
129  $lifecycle
130  );
131 
132  foreach ($xml->Contribute as $contribute_xml) {
133  $this->prepareAddingOfContribute($lifecycle, $contribute_xml);
134  }
135  }
136 
137  protected function prepareAddingOfMetaMetadata(
138  SetInterface $set,
139  \SimpleXMLElement $xml
140  ): void {
141  $metametadata = $this->addScaffoldAndMark($set->getRoot(), 'metaMetadata');
142 
143  foreach ($xml->Identifier as $identifier_xml) {
144  $this->prepareAddingOfIdentifier($metametadata, $identifier_xml);
145  }
146 
147  foreach ($xml->Contribute as $contribute_xml) {
148  $this->prepareAddingOfContribute($metametadata, $contribute_xml);
149  }
150 
151  $this->addScaffoldAndMark($metametadata, 'metadataSchema', 'LOMv1.0');
152 
153  if (!empty($xml->attributes()->Language)) {
154  $this->addScaffoldAndMark($metametadata, 'language', (string) $xml->attributes()->Language);
155  }
156  }
157 
158  protected function prepareAddingOfTechnical(
159  SetInterface $set,
160  \SimpleXMLElement $xml
161  ): void {
162  $technical = $this->addScaffoldAndMark($set->getRoot(), 'technical');
163 
164  foreach ($xml->Format as $format_xml) {
165  $this->addScaffoldAndMark($technical, 'format', (string) $format_xml);
166  }
167 
168  if (!empty($xml->Size)) {
169  $this->addScaffoldAndMark($technical, 'size', (string) $xml->Size);
170  }
171 
172  foreach ($xml->Location as $location_xml) {
173  $this->addScaffoldAndMark($technical, 'location', (string) $location_xml);
174  }
175 
176  foreach ($xml->Requirement as $requirement_xml) {
177  $this->prepareAddingOfRequirement($technical, $requirement_xml);
178  }
179  foreach ($xml->OrComposite as $or_composite_xml) {
180  foreach ($or_composite_xml->Requirement as $requirement_xml) {
181  $this->prepareAddingOfRequirement($technical, $requirement_xml);
182  }
183  }
184 
185  if (!empty($xml->InstallationRemarks)) {
187  'installationRemarks',
188  $technical,
189  $xml->InstallationRemarks
190  );
191  }
192 
193  if (!empty($xml->OtherPlatformRequirements)) {
195  'otherPlatformRequirements',
196  $technical,
197  $xml->OtherPlatformRequirements
198  );
199  }
200 
201  if (!empty($xml->Duration)) {
202  $duration = $this->addScaffoldAndMark($technical, 'duration');
203  $this->addScaffoldAndMark($duration, 'duration', (string) $xml->Duration);
204  }
205  }
206 
207  protected function prepareAddingOfEducational(
208  SetInterface $set,
209  \SimpleXMLElement $xml
210  ): void {
211  $educational = $this->addScaffoldAndMark($set->getRoot(), 'educational');
212 
214  'interactivityType',
215  (string) $xml->attributes()->InteractivityType,
217  );
218 
220  'learningResourceType',
221  (string) $xml->attributes()->LearningResourceType,
223  );
224 
226  'interactivityLevel',
227  (string) $xml->attributes()->InteractivityLevel,
229  );
230 
232  'semanticDensity',
233  (string) $xml->attributes()->SemanticDensity,
235  );
236 
238  'intendedEndUserRole',
239  (string) $xml->attributes()->IntendedEndUserRole,
241  );
242 
244  'context',
245  (string) $xml->attributes()->Context,
247  );
248 
249  foreach ($xml->TypicalAgeRange as $tar_xml) {
250  $this->prepareAddingOfLangstring('typicalAgeRange', $educational, $tar_xml);
251  }
252 
254  'difficulty',
255  (string) $xml->attributes()->Difficulty,
257  );
258 
259  if (!empty($xml->TypicalLearningTime)) {
260  $duration = $this->addScaffoldAndMark($educational, 'typicalLearningTime');
261  $this->addScaffoldAndMark($duration, 'duration', (string) $xml->TypicalLearningTime);
262  }
263 
264  foreach ($xml->Description as $description_xml) {
265  $this->prepareAddingOfLangstring('description', $educational, $description_xml);
266  }
267 
268  foreach ($xml->Language as $language_xml) {
269  $this->addScaffoldAndMark($educational, 'language', (string) $language_xml->attributes()->Language);
270  }
271  }
272 
273  protected function prepareAddingOfRights(
274  SetInterface $set,
275  \SimpleXMLElement $xml
276  ): void {
277  $rights = $this->addScaffoldAndMark($set->getRoot(), 'rights');
278 
280  'cost',
281  (string) $xml->attributes()->Cost,
282  $rights
283  );
284 
286  'copyrightAndOtherRestrictions',
287  (string) $xml->attributes()->CopyrightAndOtherRestrictions,
288  $rights
289  );
290 
291  $description_scaffold = $this->addScaffoldAndMark($rights, 'description');
292  $this->addScaffoldAndMark(
293  $description_scaffold,
294  'language',
295  (string) $xml->Description->attributes()->Language
296  );
297  $description_string = $this->copyright_handler->copyrightFromExport((string) $xml->Description);
298  if ($description_string !== '') {
299  $this->addScaffoldAndMark($description_scaffold, 'string', $description_string);
300  }
301  }
302 
303  protected function prepareAddingOfRelation(
304  SetInterface $set,
305  \SimpleXMLElement $xml
306  ): void {
307  $relation = $this->addScaffoldAndMark($set->getRoot(), 'relation');
308 
310  'kind',
311  (string) $xml->attributes()->Kind,
312  $relation,
313  true
314  );
315 
316  $resource = $this->addScaffoldAndMark($relation, 'resource');
317  $resource_xml = $xml->Resource;
318 
319  foreach ($resource_xml->Identifier_ as $identifier_xml) {
320  $this->prepareAddingOfIdentifier($resource, $identifier_xml);
321  }
322 
323  foreach ($resource_xml->Description as $description_xml) {
324  $this->prepareAddingOfLangstring('description', $resource, $description_xml);
325  }
326  }
327 
328  protected function prepareAddingOfAnnotation(
329  SetInterface $set,
330  \SimpleXMLElement $xml
331  ): void {
332  $annotation = $this->addScaffoldAndMark($set->getRoot(), 'annotation');
333 
334  $this->addScaffoldAndMark($annotation, 'entity', (string) $xml->Entity);
335 
336  $date = $this->addScaffoldAndMark($annotation, 'date');
337  $this->addScaffoldAndMark($date, 'dateTime', (string) $xml->Date);
338 
339  $this->prepareAddingOfLangstring('description', $annotation, $xml->Description);
340  }
341 
342  protected function prepareAddingOfClassification(
343  SetInterface $set,
344  \SimpleXMLElement $xml
345  ): void {
346  $classification = $this->addScaffoldAndMark($set->getRoot(), 'classification');
347 
349  'purpose',
350  (string) $xml->attributes()->Purpose,
352  );
353 
354  foreach ($xml->TaxonPath as $taxon_path_xml) {
355  $taxon_path = $this->addScaffoldAndMark($classification, 'taxonPath');
356 
357  $this->prepareAddingOfLangstring('source', $taxon_path, $taxon_path_xml->Source);
358 
359  foreach ($taxon_path_xml->taxon as $taxon_xml) {
360  $taxon = $this->addScaffoldAndMark($taxon_path, 'taxon');
361 
362  if (!empty($taxon_xml->attributes()->Id)) {
363  $this->addScaffoldAndMark($taxon, 'id', (string) $taxon_xml->attributes()->Id);
364  }
365 
366  $this->prepareAddingOfLangstring('entry', $taxon, $taxon_xml);
367  }
368  }
369 
371  'description',
373  $xml->Description
374  );
375 
376  foreach ($xml->Keyword as $keyword_xml) {
377  $this->prepareAddingOfLangstring('keyword', $classification, $keyword_xml);
378  }
379  }
380 
381  protected function prepareAddingOfRequirement(
382  ElementInterface $element,
383  \SimpleXMLElement $xml
384  ): void {
385  $scaffold = $this->addScaffoldAndMark($element, 'requirement');
386 
387  foreach ($xml->Type->OperatingSystem as $os_xml) {
388  $orc_scaffold = $this->addScaffoldAndMark($scaffold, 'orComposite');
389  $this->prepareAddingOfVocabulary('type', 'operating system', $orc_scaffold);
390 
391  $name = (string) $os_xml->attributes()->Name;
392  if ($name === 'MacOS') {
393  $name = 'macos';
394  }
396  'name',
397  $name,
398  $orc_scaffold
399  );
400 
401  $min_version = (string) ($os_xml->attributes()->MinimumVersion ?? '');
402  $max_version = (string) ($os_xml->attributes()->MaximumVersion ?? '');
403  if ($min_version !== '') {
404  $this->addScaffoldAndMark($orc_scaffold, 'minimumVersion', $min_version);
405  }
406  if ($max_version !== '') {
407  $this->addScaffoldAndMark($orc_scaffold, 'maximumVersion', $max_version);
408  }
409  }
410 
411  foreach ($xml->Type->Browser as $browser_xml) {
412  $orc_scaffold = $this->addScaffoldAndMark($scaffold, 'orComposite');
413  $this->prepareAddingOfVocabulary('type', 'browser', $orc_scaffold);
414 
415  $name = (string) $browser_xml->attributes()->Name;
416  if ($name !== 'Mozilla') {
418  'name',
419  strtolower((string) $browser_xml->attributes()->Name),
420  $orc_scaffold
421  );
422  }
423 
424  $min_version = (string) ($browser_xml->attributes()->MinimumVersion ?? '');
425  $max_version = (string) ($browser_xml->attributes()->MaximumVersion ?? '');
426  if ($min_version !== '') {
427  $this->addScaffoldAndMark($orc_scaffold, 'minimumVersion', $min_version);
428  }
429  if ($max_version !== '') {
430  $this->addScaffoldAndMark($orc_scaffold, 'maximumVersion', $max_version);
431  }
432  }
433  }
434 
435  protected function prepareAddingOfLangstring(
436  string $name,
437  ElementInterface $element,
438  \SimpleXMLElement $xml
439  ): void {
440  $language = (string) $xml->attributes()->Language;
441  $string = (string) $xml;
442 
443  $scaffold = $this->addScaffoldAndMark($element, $name);
444  $this->addScaffoldAndMark($scaffold, 'language', $language);
445  if ($string !== '') {
446  $this->addScaffoldAndMark($scaffold, 'string', $string);
447  }
448  }
449 
450  protected function prepareAddingOfVocabulary(
451  string $name,
452  string $value,
453  ElementInterface $element,
454  bool $fill_spaces_in_value = false
455  ): void {
456  $value = $this->transformVocabValue($value, $fill_spaces_in_value);
457 
458  $scaffold = $this->addScaffoldAndMark($element, $name);
459  $this->addScaffoldAndMark($scaffold, 'source', 'LOMv1.0');
460  $this->addScaffoldAndMark($scaffold, 'value', $value);
461  }
462 
463  protected function prepareAddingOfIdentifier(
464  ElementInterface $element,
465  \SimpleXMLElement $xml
466  ): void {
467  $catalog = (string) ($xml->attributes()->Catalog ?? '');
468  $entry = (string) ($xml->attributes()->Entry ?? '');
469 
470  $scaffold = $this->addScaffoldAndMark($element, 'identifier');
471  if ($catalog !== '') {
472  $this->addScaffoldAndMark($scaffold, 'catalog', $catalog);
473  }
474  if ($entry !== '') {
475  $this->addScaffoldAndMark($scaffold, 'entry', $entry);
476  }
477  }
478 
479  protected function prepareAddingOfContribute(
480  ElementInterface $element,
481  \SimpleXMLElement $xml
482  ): void {
483  $role = (string) ($xml->attributes()->Role ?? '');
484  $date = (string) $xml->Date;
485 
486  $scaffold = $this->addScaffoldAndMark($element, 'contribute');
487  $this->prepareAddingOfVocabulary('role', $role, $scaffold);
488  foreach ($xml->Entity as $entity_xml) {
489  $this->addScaffoldAndMark($scaffold, 'entity', (string) $entity_xml);
490  }
491  if ($date !== '') {
492  $date_scaffold = $this->addScaffoldAndMark($scaffold, 'date');
493  $this->addScaffoldAndMark($date_scaffold, 'dateTime', $date);
494  }
495  }
496 
497  protected function addScaffoldAndMark(
498  ElementInterface $to_element,
499  string $name,
500  string $value = ''
501  ): ElementInterface {
502  $scaffold = $to_element->addScaffoldToSubElements($this->scaffold_provider, $name);
503  $scaffold->mark($this->marker_factory, Action::CREATE_OR_UPDATE, strip_tags($value));
504  return $scaffold;
505  }
506 
507  protected function transformVocabValue(string $value, bool $fill_spaces = false): string
508  {
509  $value = $this->camelCaseToSpaces($value);
510 
511  if ($fill_spaces) {
512  $value = str_replace(' ', '', $value);
513  }
514 
515  return $value;
516  }
517 
518  protected function camelCaseToSpaces(string $string): string
519  {
520  $string = preg_replace('/(?<=[a-z])(?=[A-Z])/', ' ', $string);
521  return strtolower($string);
522  }
523 }
prepareAddingOfIdentifier(ElementInterface $element, \SimpleXMLElement $xml)
Definition: Legacy.php:463
prepareAddingOfGeneral(SetInterface $set, \SimpleXMLElement $xml)
Definition: Legacy.php:83
prepareAddingOfLangstring(string $name, ElementInterface $element, \SimpleXMLElement $xml)
Definition: Legacy.php:435
transformVocabValue(string $value, bool $fill_spaces=false)
Definition: Legacy.php:507
prepareAddingOfTechnical(SetInterface $set, \SimpleXMLElement $xml)
Definition: Legacy.php:158
read(\SimpleXMLElement $xml, Version $version)
Definition: Legacy.php:48
$version
Definition: plugin.php:24
prepareAddingOfAnnotation(SetInterface $set, \SimpleXMLElement $xml)
Definition: Legacy.php:328
$relation
$technical
$duration
__construct(MarkerFactoryInterface $marker_factory, ScaffoldProviderInterface $scaffold_provider, CopyrightHandlerInterface $copyright_handler)
Definition: Legacy.php:38
prepareAddingOfClassification(SetInterface $set, \SimpleXMLElement $xml)
Definition: Legacy.php:342
prepareAddingOfRequirement(ElementInterface $element, \SimpleXMLElement $xml)
Definition: Legacy.php:381
prepareAddingOfMetaMetadata(SetInterface $set, \SimpleXMLElement $xml)
Definition: Legacy.php:137
prepareAddingOfEducational(SetInterface $set, \SimpleXMLElement $xml)
Definition: Legacy.php:207
getRoot()
Returns the root element of the metadata set.
addScaffoldAndMark(ElementInterface $to_element, string $name, string $value='')
Definition: Legacy.php:497
prepareAddingOfLifeCycle(SetInterface $set, \SimpleXMLElement $xml)
Definition: Legacy.php:118
$educational
prepareAddingOfVocabulary(string $name, string $value, ElementInterface $element, bool $fill_spaces_in_value=false)
Definition: Legacy.php:450
addScaffoldToSubElements(ScaffoldProviderInterface $scaffold_provider, string $name)
If possible, adds a scaffold with the given name to this element&#39;s sub-elements, and returns it...
prepareAddingOfContribute(ElementInterface $element, \SimpleXMLElement $xml)
Definition: Legacy.php:479
$general
SECTIONS.
CopyrightHandlerInterface $copyright_handler
Definition: Legacy.php:36
$annotation
$lifecycle
$classification
$rights
MarkerFactoryInterface $marker_factory
Definition: Legacy.php:34
ScaffoldProviderInterface $scaffold_provider
Definition: Legacy.php:35
$metametadata
prepareAddingOfRelation(SetInterface $set, \SimpleXMLElement $xml)
Definition: Legacy.php:303
prepareAddingOfRights(SetInterface $set, \SimpleXMLElement $xml)
Definition: Legacy.php:273