ILIAS  trunk Revision v11.0_alpha-3011-gc6b235a2e85
ilTestRandomQuestionSetPoolDeriver Class Reference
+ Collaboration diagram for ilTestRandomQuestionSetPoolDeriver:

Public Member Functions

 __construct (private readonly ilDBInterface $db, private readonly ilComponentRepository $component_repository, private readonly ilObjTest $test_obj, private readonly ilTestRandomQuestionSetSourcePoolDefinitionList $source_pool_definition_list, private int $owner_id, private int $target_container_ref)
 
 derive (ilTestRandomQuestionSetNonAvailablePool $non_available_pool)
 

Private Member Functions

 getQuestionsForPool (ilTestRandomQuestionSetNonAvailablePool $non_available_pool)
 
 createNewPool (ilTestRandomQuestionSetNonAvailablePool $non_available_pool)
 
 copyQuestionsToPool (ilObjQuestionPool $pool, array $questions)
 
 updateTestQuestionStage (array $pool_qid_by_test_qid_map)
 
 filterForQuestionRelatedTaxonomies (array $taxonomy_ids, array $related_question_ids)
 
 duplicateTaxonomies (array $pool_qid_by_test_qid_map, ilObjQuestionPool $pool)
 
 buildOriginalTaxonomyFilterForDerivedPool (ilQuestionPoolDuplicatedTaxonomiesKeysMap $tax_keys_map, array $mapped_taxonomy_filter)
 
 updateRelatedSourcePoolDefinitions (ilQuestionPoolDuplicatedTaxonomiesKeysMap $tax_keys_map, int $derived_pool_id, int $non_available_pool_id)
 

Private Attributes

ilQuestionPoolFactory $pool_factory
 

Detailed Description

Definition at line 27 of file class.ilTestRandomQuestionSetPoolDeriver.php.

Constructor & Destructor Documentation

◆ __construct()

ilTestRandomQuestionSetPoolDeriver::__construct ( private readonly ilDBInterface  $db,
private readonly ilComponentRepository  $component_repository,
private readonly ilObjTest  $test_obj,
private readonly ilTestRandomQuestionSetSourcePoolDefinitionList  $source_pool_definition_list,
private int  $owner_id,
private int  $target_container_ref 
)

Definition at line 31 of file class.ilTestRandomQuestionSetPoolDeriver.php.

38 {
39 $this->pool_factory = new ilQuestionPoolFactory();
40 }

Member Function Documentation

◆ buildOriginalTaxonomyFilterForDerivedPool()

ilTestRandomQuestionSetPoolDeriver::buildOriginalTaxonomyFilterForDerivedPool ( ilQuestionPoolDuplicatedTaxonomiesKeysMap  $tax_keys_map,
array  $mapped_taxonomy_filter 
)
private

Definition at line 157 of file class.ilTestRandomQuestionSetPoolDeriver.php.

160 : array {
161 $original_taxonomy_filter = [];
162 foreach ($mapped_taxonomy_filter as $test_taxonomy_id => $test_tax_nodes) {
163 $pool_taxonomy_id = $tax_keys_map->getMappedTaxonomyId($test_taxonomy_id);
164 if ($pool_taxonomy_id === null) {
165 continue;
166 }
167 $original_taxonomy_filter[$pool_taxonomy_id] = [];
168
169 foreach ($test_tax_nodes as $test_tax_node) {
170 $mapped_tax_node_id = $tax_keys_map->getMappedTaxNodeId((int) $test_tax_node);
171 if ($mapped_tax_node_id !== null) {
172 $original_taxonomy_filter[$pool_taxonomy_id][] = $mapped_tax_node_id;
173 }
174 }
175 }
176
177 return $original_taxonomy_filter;
178 }

References ilQuestionPoolDuplicatedTaxonomiesKeysMap\getMappedTaxNodeId(), and ilQuestionPoolDuplicatedTaxonomiesKeysMap\getMappedTaxonomyId().

+ Here is the call graph for this function:

◆ copyQuestionsToPool()

ilTestRandomQuestionSetPoolDeriver::copyQuestionsToPool ( ilObjQuestionPool  $pool,
array  $questions 
)
private

Definition at line 92 of file class.ilTestRandomQuestionSetPoolDeriver.php.

95 : array {
96 $pool_qid_by_test_qid_map = [];
97 foreach ($questions as $question_obj) {
98 $pool_qid_by_test_qid_map[$question_obj->getId()] = $question_obj
99 ->duplicate(false, '', '', $this->owner_id, $pool->getId());
100 }
101
102 return $pool_qid_by_test_qid_map;
103 }

References ilObject\getId().

+ Here is the call graph for this function:

◆ createNewPool()

ilTestRandomQuestionSetPoolDeriver::createNewPool ( ilTestRandomQuestionSetNonAvailablePool  $non_available_pool)
private

Definition at line 79 of file class.ilTestRandomQuestionSetPoolDeriver.php.

82 $pool = $this->pool_factory->createNewInstance($this->target_container_ref);
83
84 if ($non_available_pool->getTitle() !== '') {
85 $pool->setTitle($non_available_pool->getTitle());
86 $pool->update();
87 }
88
89 return $pool;
90 }
setTitle(string $title)

References ilTestRandomQuestionSetNonAvailablePool\getTitle(), and ilObject\setTitle().

+ Here is the call graph for this function:

◆ derive()

ilTestRandomQuestionSetPoolDeriver::derive ( ilTestRandomQuestionSetNonAvailablePool  $non_available_pool)

Definition at line 42 of file class.ilTestRandomQuestionSetPoolDeriver.php.

45 $pool = $this->createNewPool($non_available_pool);
46 $questions = $this->getQuestionsForPool($non_available_pool);
47 $pool_qid_by_test_qid_map = $this->copyQuestionsToPool($pool, $questions);
48
49 $this->updateTestQuestionStage($pool_qid_by_test_qid_map);
51 $this->duplicateTaxonomies($pool_qid_by_test_qid_map, $pool),
52 $pool->getId(),
53 $non_available_pool->getId()
54 );
55
56 return $pool;
57 }
duplicateTaxonomies(array $pool_qid_by_test_qid_map, ilObjQuestionPool $pool)
updateRelatedSourcePoolDefinitions(ilQuestionPoolDuplicatedTaxonomiesKeysMap $tax_keys_map, int $derived_pool_id, int $non_available_pool_id)
copyQuestionsToPool(ilObjQuestionPool $pool, array $questions)
createNewPool(ilTestRandomQuestionSetNonAvailablePool $non_available_pool)
getQuestionsForPool(ilTestRandomQuestionSetNonAvailablePool $non_available_pool)

◆ duplicateTaxonomies()

ilTestRandomQuestionSetPoolDeriver::duplicateTaxonomies ( array  $pool_qid_by_test_qid_map,
ilObjQuestionPool  $pool 
)
private

Definition at line 138 of file class.ilTestRandomQuestionSetPoolDeriver.php.

142 $tax_duplicator = new ilQuestionPoolTaxonomiesDuplicator();
143 $tax_duplicator->setSourceObjId($this->test_obj->getId());
144 $tax_duplicator->setSourceObjType($this->test_obj->getType());
145 $tax_duplicator->setTargetObjId($pool->getId());
146 $tax_duplicator->setTargetObjType($pool->getType());
147 $tax_duplicator->setQuestionIdMapping($pool_qid_by_test_qid_map);
148
149 $tax_duplicator->duplicate($this->filterForQuestionRelatedTaxonomies(
150 $tax_duplicator->getAllTaxonomiesForSourceObject(),
151 array_keys($pool_qid_by_test_qid_map)
152 ));
153
154 return $tax_duplicator->getDuplicatedTaxonomiesKeysMap();
155 }
filterForQuestionRelatedTaxonomies(array $taxonomy_ids, array $related_question_ids)

◆ filterForQuestionRelatedTaxonomies()

ilTestRandomQuestionSetPoolDeriver::filterForQuestionRelatedTaxonomies ( array  $taxonomy_ids,
array  $related_question_ids 
)
private

Definition at line 114 of file class.ilTestRandomQuestionSetPoolDeriver.php.

117 : array {
118 $filtered_tax_ids = [];
119 foreach ($taxonomy_ids as $taxonomy_id) {
120 $tax_node_assignment = new ilTaxNodeAssignment(
121 $this->test_obj->getType(),
122 $this->test_obj->getId(),
123 'quest',
124 $taxonomy_id
125 );
126
127 foreach ($related_question_ids as $question_id) {
128 if ($tax_node_assignment->getAssignmentsOfItem($question_id) !== []) {
129 $filtered_tax_ids[] = $taxonomy_id;
130 break;
131 }
132 }
133 }
134
135 return $filtered_tax_ids;
136 }
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...

◆ getQuestionsForPool()

ilTestRandomQuestionSetPoolDeriver::getQuestionsForPool ( ilTestRandomQuestionSetNonAvailablePool  $non_available_pool)
private

Definition at line 59 of file class.ilTestRandomQuestionSetPoolDeriver.php.

61 : array {
63 $this->db,
64 $this->component_repository
65 );
66 $question_list->setTestObjId($this->test_obj->getId());
67 $question_list->setTestId($this->test_obj->getTestId());
68 $question_list->setPoolId($non_available_pool->getId());
69 $question_list->loadQuestions();
70
71 $questions = [];
72 foreach ($question_list->getQuestions() as $question_id) {
73 $questions[] = assQuestion::instantiateQuestion($question_id);
74 }
75
76 return $questions;
77 }
static instantiateQuestion(int $question_id)

References assQuestion\instantiateQuestion().

+ Here is the call graph for this function:

◆ updateRelatedSourcePoolDefinitions()

ilTestRandomQuestionSetPoolDeriver::updateRelatedSourcePoolDefinitions ( ilQuestionPoolDuplicatedTaxonomiesKeysMap  $tax_keys_map,
int  $derived_pool_id,
int  $non_available_pool_id 
)
private

Definition at line 180 of file class.ilTestRandomQuestionSetPoolDeriver.php.

184 : void {
185 foreach ($this->source_pool_definition_list as $definition) {
186 if ($definition->getPoolId() !== $non_available_pool_id) {
187 continue;
188 }
189
190 $definition->setPoolId($derived_pool_id);
191 $definition->setOriginalTaxonomyFilter(
193 $tax_keys_map,
194 $definition->getMappedTaxonomyFilter()
195 )
196 );
197
198 $definition->saveToDb();
199 }
200 }
buildOriginalTaxonomyFilterForDerivedPool(ilQuestionPoolDuplicatedTaxonomiesKeysMap $tax_keys_map, array $mapped_taxonomy_filter)

◆ updateTestQuestionStage()

ilTestRandomQuestionSetPoolDeriver::updateTestQuestionStage ( array  $pool_qid_by_test_qid_map)
private

Definition at line 105 of file class.ilTestRandomQuestionSetPoolDeriver.php.

107 : void {
108 foreach ($pool_qid_by_test_qid_map as $test_qid => $pool_qid) {
110 assQuestion::saveOriginalId($test_qid, $pool_qid);
111 }
112 }
static saveOriginalId(int $questionId, int $originalId)
static resetOriginalId(int $questionId)

References assQuestion\resetOriginalId(), and assQuestion\saveOriginalId().

+ Here is the call graph for this function:

Field Documentation

◆ $pool_factory

ilQuestionPoolFactory ilTestRandomQuestionSetPoolDeriver::$pool_factory
private

Definition at line 29 of file class.ilTestRandomQuestionSetPoolDeriver.php.


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