19 declare(strict_types=1);
49 ?
string $path_to_file =
'',
53 $this->db = $DIC[
'ilDB'];
54 $this->log = $DIC[
'ilLog'];
55 $this->tree = $DIC[
'tree'];
56 $this->component_repository = $DIC[
'component.repository'];
57 $this->questioninfo = $DIC->testQuestionPool()->questionInfo();
83 xml_set_object($xml_parser, $this);
84 xml_set_element_handler($xml_parser,
'handlerBeginTag',
'handlerEndTag');
85 xml_set_character_data_handler($xml_parser,
'handlerCharacterData');
94 case 'RandomQuestionSetConfig':
95 $this->in_random_question_set_config =
true;
98 case 'RandomQuestionSetSettings':
99 if ($this->in_random_question_set_config !== null) {
100 $this->in_random_question_set_settings =
true;
102 $this->attr = $tag_attributes;
106 case 'RandomQuestionStage':
107 if ($this->in_random_question_set_config !== null) {
108 $this->in_random_question_stage =
true;
112 case 'RandomQuestionStagingPool':
113 if ($this->in_random_question_stage !== null) {
115 $this->attr = $tag_attributes;
119 case 'RandomQuestionSelectionDefinitions':
120 if ($this->in_random_question_set_config !== null) {
121 $this->in_random_question_selection_definitions =
true;
125 case 'RandomQuestionSelectionDefinition':
126 if ($this->in_random_question_selection_definitions !== null) {
129 $this->attr = $tag_attributes;
133 case 'RandomQuestionSourcePoolTitle':
134 case 'RandomQuestionSourcePoolPath':
135 if ($this->source_pool_definition !== null) {
145 case 'RandomQuestionSetConfig':
146 $this->in_random_question_set_config =
false;
149 case 'RandomQuestionSetSettings':
150 if ($this->in_random_question_set_config) {
156 case 'RandomQuestionStage':
157 if ($this->in_random_question_set_config) {
158 $this->in_random_question_stage =
false;
162 case 'RandomQuestionStagingPool':
163 if ($this->in_random_question_set_config !== null
164 && $this->in_random_question_stage !== null) {
171 case 'RandomQuestionSelectionDefinitions':
172 if ($this->in_random_question_set_config) {
173 $this->in_random_question_selection_definitions =
false;
177 case 'RandomQuestionSelectionDefinition':
178 if ($this->in_random_question_set_config !== null
179 && $this->in_random_question_selection_definitions !== null) {
181 $this->source_pool_definition->saveToDb();
186 (
string) $this->attr[
'id'],
187 (
string) $this->source_pool_definition->getId()
190 $this->source_pool_definition = null;
195 case 'RandomQuestionSourcePoolTitle':
196 if ($this->source_pool_definition !== null) {
197 $this->source_pool_definition->setPoolTitle($this->cdata);
202 case 'RandomQuestionSourcePoolPath':
203 if ($this->source_pool_definition !== null) {
204 $this->source_pool_definition->setPoolPath($this->cdata);
213 if ($char_data !=
"\n") {
215 $char_data = preg_replace(
"/\t+/",
" ", $char_data);
217 $this->cdata .= $char_data;
228 $this->component_repository,
233 if (!$question_set_config->isValidQuestionAmountConfigurationMode($attr[
'amountMode'])) {
235 'invalid random test question set config amount mode given: "' . $attr[
'amountMode'] .
'"' 239 $question_set_config->setQuestionAmountConfigurationMode($attr[
'amountMode']);
240 $question_set_config->setQuestionAmountPerTest((
int) $attr[
'questAmount']);
241 $question_set_config->setPoolsWithHomogeneousScoredQuestionsRequired((
bool) $attr[
'homogeneous']);
242 $question_set_config->setLastQuestionSyncTimestamp((
int) $attr[
'synctimestamp']);
244 $question_set_config->saveToDb();
249 $old_pool_id = $attr[
'poolId'];
250 $new_pool_id = $this->db->nextId(
'object_data');
255 (
string) $old_pool_id,
256 (
string) $new_pool_id
259 $old_question_ids = explode(
',', $cdata);
261 foreach ($old_question_ids as $old_question_id) {
269 $staging_question->setTestId($this->test_obj->getTestId());
270 $staging_question->setPoolId($new_pool_id);
271 $staging_question->setQuestionId($new_question_id);
273 $staging_question->saveQuestionStaging();
279 $source_pool_id = (
int) $attr[
'poolId'];
283 (
string) $source_pool_id
285 $source_pool_definition->
setPoolId($effective_pool_id);
287 $derive_from_obj_id =
true;
289 if (isset($attr[
'ref_id']) && is_numeric($attr[
'ref_id'])) {
290 if ($source_pool_id === $effective_pool_id) {
291 $derive_from_obj_id =
false;
292 $source_pool_definition->
setPoolRefId((
int) $attr[
'ref_id']);
296 if ($derive_from_obj_id) {
306 if (isset($attr[
'typeFilter']) && strlen($attr[
'typeFilter']) > 0) {
311 if (isset($attr[
'tax']) && isset($attr[
'taxNode'])) {
313 (
int) $attr[
'tax'] => [
314 (
int) $attr[
'taxNode']
318 } elseif (isset($attr[
'taxFilter']) && strlen($attr[
'taxFilter']) > 0) {
319 $mappedTaxFilter = unserialize($attr[
'taxFilter']);
handlerCharacterData($xml_parser, string $char_data)
Readable part of repository interface to ilComponentDataDB.
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
handlerBeginTag( $xml_parser, string $tag_name, array $tag_attributes)
setPoolQuestionCount(?int $pool_question_count)
static _getAllReferences(int $id)
get all reference ids for object ID
setQuestionAmount(?int $question_amount)
ilImportMapping $import_mapping
importRandomQuestionSetSettings($attr)
Base Exception for all Exceptions relating to Modules/Test.
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
setMappedTaxonomyFilter(array $filter=[])
set the original taxonomy filter condition
bool $in_random_question_selection_definitions
ilComponentRepository $component_repository
bool $in_random_question_set_settings
importRandomQuestionStagingPool(array $attr, string $cdata)
setSequencePosition(int $sequence_position)
__construct(?string $path_to_file='', ?bool $throw_exception=false)
ILIAS TestQuestionPool QuestionInfoService $questioninfo
bool $in_random_question_stage
handlerEndTag($xml_parser, string $tag_name)
bool $in_random_question_set_config
setPoolRefId(?int $pool_ref_id)
ilTestRandomQuestionSetSourcePoolDefinition $source_pool_definition
setTypeFilterFromTypeTags(array $tags)
Set the type filter from a list of type tags.
importRandomQuestionSourcePoolDefinition(ilTestRandomQuestionSetSourcePoolDefinition $source_pool_definition, $attr)
setImportMapping(\ilImportMapping $import_mapping)
setTestOBJ(\ilObjTest $test_obj)