ILIAS  trunk Revision v13.0_alpha-62-g3b72d83f2e5
class.ilTrackingImporter.php
Go to the documentation of this file.
1<?php
2
19declare(strict_types=1);
20
21use ILIAS\Tracking\Export\Exception as TrackingExportException;
23use ILIAS\Tracking\Factory as TrackingFactory;
24use ILIAS\Tracking\FactoryInterface as TrackingFactoryInterface;
25
27{
28 protected TrackingFactoryInterface $tracking_factory;
29
30 public function init(): void
31 {
32 $this->tracking_factory = new TrackingFactory();
33 }
34
38 public function importXmlRepresentation(
39 string $a_entity,
40 string $a_id,
41 string $a_xml,
42 ilImportMapping $a_mapping
43 ): void {
44 if (strcmp($a_entity, "lpsettings") === 0) {
45 $this->importLPSettings($a_id, $a_xml, $a_mapping);
46 }
47 }
48
52 protected function importLPSettings(
53 string $a_id,
54 string $a_xml,
55 ilImportMapping $a_mapping
56 ): void {
57 try {
58 $new_id = $this->getNewId($a_id, $a_mapping);
59 } catch (TrackingExportException $e) {
60 return;
61 }
62 $export_factory = $this->tracking_factory->export();
63 $db_factory = $this->tracking_factory->db();
64 $reader = $export_factory->xml()->reader();
65 $info = $export_factory->info();
66 $info = $reader->readLPSettings($a_xml, $info);
67 $info = $reader->readLPCollection($a_xml, $info);
68 $info = $reader->readLPStatusCollection($a_xml, $info);
69 $info = $this->applyMappings($new_id, $a_mapping, $info);
70 $db_factory->lpSettings()->repository()->writeLPSettings($info->getLPSettings());
71 $db_factory->lpCollection()->repository()->writeLPCollection($info->getLPCollection());
72 foreach ($reader->readAdditionalContentRootsIdentifierMap($a_xml) as $lp_status_id => $xml_root) {
73 $info->getLPStatusCollection()->getElementByStatusId((string) $lp_status_id)
74 ->importCustomLPSettingsExportXML(
75 $new_id,
76 $a_mapping,
77 $xml_root
78 );
79 }
80 }
81
85 protected function getNewId(
86 string $id,
87 ilImportMapping $a_mapping
88 ): int {
89 $new_id = $a_mapping->getMapping("components/ILIAS/Tracking", "obj", $id);
90 if (is_null($new_id)) {
91 throw new TrackingExportException(sprintf("Object id (%s) during tracking import not found in mapping", $id));
92 }
93 return (int) $new_id;
94 }
95
96 protected function applyMappings(
97 int $new_id,
98 ilImportMapping $mapping,
100 ): InfoInterface {
101 $lp_collection = $info->getLPCollection();
102 $elements = [];
103 foreach ($lp_collection as $collection) {
104 $new_item_id = $mapping->getMapping("components/ILIAS/Container", "refs", (string) $collection->getItemId());
105 if (is_null($new_item_id)) {
106 # Element is not exported, the element is ignored.
107 continue;
108 }
109 $new_item_id = (int) $new_item_id;
110 $elements[] = $collection
111 ->withItemId($new_item_id);
112 }
113 $new_lp_collection = $this->tracking_factory->db()->lpCollection()->element()->lpCollection(...$elements)
114 ->withObjectId($new_id)
115 ->withFixedNumObligatory();
116 return $info
117 ->withLPSettings($info->getLPSettings()->withObjectId($new_id))
118 ->withLPCollection($new_lp_collection);
119 }
120}
$id
plugin.php for ilComponentBuildPluginInfoObjectiveTest::testAddPlugins
Definition: plugin.php:23
getMapping(string $a_comp, string $a_entity, string $a_old_id)
importLPSettings(string $a_id, string $a_xml, ilImportMapping $a_mapping)
getNewId(string $id, ilImportMapping $a_mapping)
importXmlRepresentation(string $a_entity, string $a_id, string $a_xml, ilImportMapping $a_mapping)
applyMappings(int $new_id, ilImportMapping $mapping, InfoInterface $info)
TrackingFactoryInterface $tracking_factory
Xml importer class.
try
$info
Definition: entry_point.php:21
if(!file_exists('../ilias.ini.php'))