ILIAS  trunk Revision v11.0_alpha-3011-gc6b235a2e85
Legacy.php
Go to the documentation of this file.
1<?php
2
19declare(strict_types=1);
20
22
31
32class Legacy implements ReaderInterface
33{
37
38 public function __construct(
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
111 $this->prepareAddingOfVocabulary(
112 'structure',
113 (string) $xml->attributes()->Structure,
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
126 $this->prepareAddingOfVocabulary(
127 'status',
128 (string) $xml->attributes()->status,
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)) {
186 $this->prepareAddingOfLangstring(
187 'installationRemarks',
189 $xml->InstallationRemarks
190 );
191 }
192
193 if (!empty($xml->OtherPlatformRequirements)) {
194 $this->prepareAddingOfLangstring(
195 'otherPlatformRequirements',
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
213 $this->prepareAddingOfVocabulary(
214 'interactivityType',
215 (string) $xml->attributes()->InteractivityType,
217 );
218
219 $this->prepareAddingOfVocabulary(
220 'learningResourceType',
221 (string) $xml->attributes()->LearningResourceType,
223 );
224
225 $this->prepareAddingOfVocabulary(
226 'interactivityLevel',
227 (string) $xml->attributes()->InteractivityLevel,
229 );
230
231 $this->prepareAddingOfVocabulary(
232 'semanticDensity',
233 (string) $xml->attributes()->SemanticDensity,
235 );
236
237 $this->prepareAddingOfVocabulary(
238 'intendedEndUserRole',
239 (string) $xml->attributes()->IntendedEndUserRole,
241 );
242
243 $this->prepareAddingOfVocabulary(
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
253 $this->prepareAddingOfVocabulary(
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
279 $this->prepareAddingOfVocabulary(
280 'cost',
281 (string) $xml->attributes()->Cost,
282 $rights
283 );
284
285 $this->prepareAddingOfVocabulary(
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
309 $this->prepareAddingOfVocabulary(
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
343 SetInterface $set,
344 \SimpleXMLElement $xml
345 ): void {
346 $classification = $this->addScaffoldAndMark($set->getRoot(), 'classification');
347
348 $this->prepareAddingOfVocabulary(
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
370 $this->prepareAddingOfLangstring(
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 }
395 $this->prepareAddingOfVocabulary(
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') {
417 $this->prepareAddingOfVocabulary(
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 = ''
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}
$version
Definition: plugin.php:24
$classification
$technical
$general
SECTIONS.
$lifecycle
$annotation
$relation
$rights
$metametadata
$educational
$duration
prepareAddingOfClassification(SetInterface $set, \SimpleXMLElement $xml)
Definition: Legacy.php:342
prepareAddingOfRequirement(ElementInterface $element, \SimpleXMLElement $xml)
Definition: Legacy.php:381
prepareAddingOfRelation(SetInterface $set, \SimpleXMLElement $xml)
Definition: Legacy.php:303
prepareAddingOfMetaMetadata(SetInterface $set, \SimpleXMLElement $xml)
Definition: Legacy.php:137
MarkerFactoryInterface $marker_factory
Definition: Legacy.php:34
prepareAddingOfEducational(SetInterface $set, \SimpleXMLElement $xml)
Definition: Legacy.php:207
prepareAddingOfVocabulary(string $name, string $value, ElementInterface $element, bool $fill_spaces_in_value=false)
Definition: Legacy.php:450
read(\SimpleXMLElement $xml, Version $version)
Definition: Legacy.php:48
prepareAddingOfRights(SetInterface $set, \SimpleXMLElement $xml)
Definition: Legacy.php:273
CopyrightHandlerInterface $copyright_handler
Definition: Legacy.php:36
prepareAddingOfLifeCycle(SetInterface $set, \SimpleXMLElement $xml)
Definition: Legacy.php:118
transformVocabValue(string $value, bool $fill_spaces=false)
Definition: Legacy.php:507
prepareAddingOfContribute(ElementInterface $element, \SimpleXMLElement $xml)
Definition: Legacy.php:479
prepareAddingOfTechnical(SetInterface $set, \SimpleXMLElement $xml)
Definition: Legacy.php:158
prepareAddingOfIdentifier(ElementInterface $element, \SimpleXMLElement $xml)
Definition: Legacy.php:463
ScaffoldProviderInterface $scaffold_provider
Definition: Legacy.php:35
prepareAddingOfLangstring(string $name, ElementInterface $element, \SimpleXMLElement $xml)
Definition: Legacy.php:435
prepareAddingOfGeneral(SetInterface $set, \SimpleXMLElement $xml)
Definition: Legacy.php:83
__construct(MarkerFactoryInterface $marker_factory, ScaffoldProviderInterface $scaffold_provider, CopyrightHandlerInterface $copyright_handler)
Definition: Legacy.php:38
addScaffoldAndMark(ElementInterface $to_element, string $name, string $value='')
Definition: Legacy.php:497
prepareAddingOfAnnotation(SetInterface $set, \SimpleXMLElement $xml)
Definition: Legacy.php:328
mark(MarkerFactoryInterface $factory, Action $action, string $data_value='')
Leaves a trail of markers from this element up to the root element, or up to the first already marked...