ILIAS  trunk Revision v11.0_alpha-3011-gc6b235a2e85
ilTestQuestionPoolImporter Class Reference

Importer class for question pools. More...

+ Inheritance diagram for ilTestQuestionPoolImporter:
+ Collaboration diagram for ilTestQuestionPoolImporter:

Public Member Functions

 __construct ()
 
 importXmlRepresentation (string $a_entity, string $a_id, string $a_xml, ilImportMapping $a_mapping)
 
 finalProcessing (ilImportMapping $a_mapping)
 Final processing. More...
 
- Public Member Functions inherited from ilXmlImporter
 __construct ()
 
 setImport (ilImport $a_val)
 
 getImport ()
 
 init ()
 
 setInstallId (string $a_val)
 
 getInstallId ()
 
 setInstallUrl (string $a_val)
 
 getInstallUrl ()
 
 setSchemaVersion (string $a_val)
 
 getSchemaVersion ()
 
 setImportDirectory (string $a_val)
 
 getImportDirectory ()
 
 setSkipEntities (array $a_val)
 
 getSkipEntities ()
 
 exportedFromSameInstallation ()
 
 importXmlRepresentation (string $a_entity, string $a_id, string $a_xml, ilImportMapping $a_mapping)
 
 finalProcessing (ilImportMapping $a_mapping)
 
 afterContainerImportProcessing (ilImportMapping $mapping)
 

Protected Member Functions

 importQuestionSkillAssignments ($xmlFile, ilImportMapping $mappingRegistry, $targetParentObjId)
 

Protected Attributes

readonly RequestDataCollector $request_data_collector
 
- Protected Attributes inherited from ilXmlImporter
array $skip_entities = array()
 
ilImport $imp
 
string $install_id
 
string $install_url
 
string $schema_version
 
string $import_directory
 

Private Attributes

ilObjQuestionPool $pool_obj
 

Detailed Description

Importer class for question pools.

Author
Helmut Schottmüller ilias.nosp@m.@aur.nosp@m.ealis.nosp@m..de
Version
$Id$ \

Definition at line 33 of file class.ilTestQuestionPoolImporter.php.

Constructor & Destructor Documentation

◆ __construct()

ilTestQuestionPoolImporter::__construct ( )

Reimplemented from ilXmlImporter.

Definition at line 40 of file class.ilTestQuestionPoolImporter.php.

41 {
43
44 $local_dic = QuestionPoolDIC::dic();
45 $this->request_data_collector = $local_dic['request_data_collector'];
46 }
__construct(Container $dic, ilPlugin $plugin)
@inheritDoc

References ILIAS\GlobalScreen\Provider\__construct().

+ Here is the call graph for this function:

Member Function Documentation

◆ finalProcessing()

ilTestQuestionPoolImporter::finalProcessing ( ilImportMapping  $a_mapping)

Final processing.

Parameters
ilImportMapping$a_mapping
Returns
void

Reimplemented from ilXmlImporter.

Definition at line 169 of file class.ilTestQuestionPoolImporter.php.

169 : void
170 {
171 $maps = $a_mapping->getMappingsOfEntity('components/ILIAS/TestQuestionPool', 'qpl');
172 foreach ($maps as $old => $new) {
173 if ($old !== 'new_id' && (int) $old > 0) {
174 $new_tax_ids = $a_mapping->getMapping('components/ILIAS/Taxonomy', 'tax_usage_of_obj', (string) $old);
175 if ($new_tax_ids !== null) {
176 $tax_ids = explode(':', $new_tax_ids);
177 foreach ($tax_ids as $tid) {
178 ilObjTaxonomy::saveUsage((int) $tid, (int) $new);
179 }
180 }
181 }
182 }
183 }
getMapping(string $a_comp, string $a_entity, string $a_old_id)
getMappingsOfEntity(string $a_comp, string $a_entity)
static saveUsage(int $a_tax_id, int $a_obj_id)

References ilImportMapping\getMapping(), ilImportMapping\getMappingsOfEntity(), and ilObjTaxonomy\saveUsage().

+ Here is the call graph for this function:

◆ importQuestionSkillAssignments()

ilTestQuestionPoolImporter::importQuestionSkillAssignments (   $xmlFile,
ilImportMapping  $mappingRegistry,
  $targetParentObjId 
)
protected

Definition at line 185 of file class.ilTestQuestionPoolImporter.php.

185 : void
186 {
187 $parser = new ilAssQuestionSkillAssignmentXmlParser($xmlFile);
188 $parser->startParsing();
189
190 $importer = new ilAssQuestionSkillAssignmentImporter();
191 $importer->setTargetParentObjId($targetParentObjId);
192 $importer->setImportInstallationId($this->getInstallId());
193 $importer->setImportMappingRegistry($mappingRegistry);
194 $importer->setImportMappingComponent('components/ILIAS/TestQuestionPool');
195 $importer->setImportAssignmentList($parser->getAssignmentList());
196
197 $importer->import();
198
199 if ($importer->getFailedImportAssignmentList()->assignmentsExist()) {
200 $qsaImportFails = new ilAssQuestionSkillAssignmentImportFails($targetParentObjId);
201 $qsaImportFails->registerFailedImports($importer->getFailedImportAssignmentList());
202
203 $this->pool_obj->getObjectProperties()->storePropertyIsOnline($this->pool_obj->getObjectProperties()->getPropertyIsOnline()->withOffline());
204 }
205 }

◆ importXmlRepresentation()

ilTestQuestionPoolImporter::importXmlRepresentation ( string  $a_entity,
string  $a_id,
string  $a_xml,
ilImportMapping  $a_mapping 
)

Reimplemented from ilXmlImporter.

Definition at line 48 of file class.ilTestQuestionPoolImporter.php.

53 : void {
54 global $DIC;
55 // Container import => pool object already created
56 if (($new_id = $a_mapping->getMapping('components/ILIAS/Container', 'objs', $a_id)) !== null) {
57 $new_obj = ilObjectFactory::getInstanceByObjId((int) $new_id, false);
58 $new_obj->getObjectProperties()->storePropertyIsOnline($new_obj->getObjectProperties()->getPropertyIsOnline()->withOffline()); // sets Question pools to always online
59
60 $selected_questions = [];
61 [$importdir, $xmlfile, $qtifile] = $this->buildImportDirectoriesFromContainerImport(
62 $this->getImportDirectory()
63 );
64 } elseif (($new_id = $a_mapping->getMapping('components/ILIAS/TestQuestionPool', 'qpl', 'new_id')) !== null) {
65 $new_obj = ilObjectFactory::getInstanceByObjId((int) $new_id, false);
66
67 $selected_questions = ilSession::get('qpl_import_selected_questions');
68 [$subdir, $importdir, $xmlfile, $qtifile] = $this->buildImportDirectoriesFromImportFile(
69 ilSession::get('path_to_import_file')
70 );
71 ilSession::clear('qpl_import_selected_questions');
72 } else {
73 // Shouldn't happen
74 $DIC['ilLog']->write(__METHOD__ . ': non container and no tax mapping, perhaps old qpl export');
75 return;
76 }
77
78 if (!file_exists($xmlfile)) {
79 $DIC['ilLog']->write(__METHOD__ . ': Cannot find xml definition: ' . $xmlfile);
80 return;
81 }
82 if (!file_exists($qtifile)) {
83 $DIC['ilLog']->write(__METHOD__ . ': Cannot find qti definition: ' . $qtifile);
84 return;
85 }
86
87 $this->pool_obj = $new_obj;
88
89 $new_obj->fromXML($xmlfile);
90
91 $qpl_new = $this->request_data_collector->string('qpl_new');
92
93 // set another question pool name (if possible)
94 if ($qpl_new !== '') {
95 $new_obj->setTitle($qpl_new);
96 }
97
98 $new_obj->update();
99 $new_obj->saveToDb();
100
101 // FIXME: Copied from ilObjQuestionPoolGUI::importVerifiedFileObject
102 // TODO: move all logic to ilObjQuestionPoolGUI::importVerifiedFile and call
103 // this method from ilObjQuestionPoolGUI and ilTestImporter
104
105 $DIC['ilLog']->write(__METHOD__ . ': xml file: ' . $xmlfile . ', qti file:' . $qtifile);
106
107 $qtiParser = new ilQTIParser(
108 $importdir,
109 $qtifile,
111 $new_obj->getId(),
112 $selected_questions
113 );
114 $qtiParser->startParsing();
115
116 $questionPageParser = new ilQuestionPageParser(
117 $new_obj,
118 $xmlfile,
119 $importdir
120 );
121 $questionPageParser->setQuestionMapping($qtiParser->getImportMapping());
122 $questionPageParser->startParsing();
123
124 foreach ($qtiParser->getImportMapping() as $k => $v) {
125 $old_question_id = substr($k, strpos($k, 'qst_') + strlen('qst_'));
126 $new_question_id = (string) $v['pool']; // yes, this is the new question id ^^
127
128 $a_mapping->addMapping(
129 'components/ILIAS/Taxonomy',
130 'tax_item',
131 "qpl:quest:{$old_question_id}",
132 $new_question_id
133 );
134
135 $a_mapping->addMapping(
136 'components/ILIAS/Taxonomy',
137 'tax_item_obj_id',
138 "qpl:quest:{$old_question_id}",
139 (string) $new_obj->getId()
140 );
141
142 $a_mapping->addMapping(
143 'components/ILIAS/TestQuestionPool',
144 'quest',
145 $old_question_id,
146 $new_question_id
147 );
148 }
149
150 $this->importQuestionSkillAssignments($xmlfile, $a_mapping, $new_obj->getId());
151
152 $a_mapping->addMapping('components/ILIAS/TestQuestionPool', 'qpl', $a_id, (string) $new_obj->getId());
153 $a_mapping->addMapping(
154 'components/ILIAS/MetaData',
155 'md',
156 $a_id . ':0:qpl',
157 $new_obj->getId() . ':0:qpl'
158 );
159
160
161 $new_obj->saveToDb();
162 }
addMapping(string $a_comp, string $a_entity, string $a_old_id, string $a_new_id)
static getInstanceByObjId(?int $obj_id, bool $stop_on_error=true)
get an instance of an Ilias object by object id
Legacy Content Object Parser.
static get(string $a_var)
static clear(string $a_var)
importQuestionSkillAssignments($xmlFile, ilImportMapping $mappingRegistry, $targetParentObjId)
buildImportDirectoriesFromContainerImport(string $importdir)
buildImportDirectoriesFromImportFile(string $file_to_import)
global $DIC
Definition: shib_login.php:26

References ILIAS\TestQuestionPool\Import\buildImportDirectoriesFromContainerImport(), ilXmlImporter\getImportDirectory(), and ilObjectFactory\getInstanceByObjId().

+ Here is the call graph for this function:

Field Documentation

◆ $pool_obj

ilObjQuestionPool ilTestQuestionPoolImporter::$pool_obj
private

Definition at line 37 of file class.ilTestQuestionPoolImporter.php.

◆ $request_data_collector

readonly RequestDataCollector ilTestQuestionPoolImporter::$request_data_collector
protected

Definition at line 38 of file class.ilTestQuestionPoolImporter.php.


The documentation for this class was generated from the following file: