ILIAS  release_10 Revision v10.1-43-ga1241a92c2f
ilTestRandomQuestionSetStagingPoolBuilder Class Reference
+ Collaboration diagram for ilTestRandomQuestionSetStagingPoolBuilder:

Public Member Functions

 __construct (private readonly ilDBInterface $db, private readonly TestLogger $logger, private readonly ilObjTest $test_obj)
 
 rebuild (ilTestRandomQuestionSetSourcePoolDefinitionList $source_pool_definition_list)
 
 reset ()
 

Private Member Functions

 removeMirroredTaxonomies ()
 
 removeStagedQuestions ()
 
 build (ilTestRandomQuestionSetSourcePoolDefinitionList $source_pool_definition_list)
 
 stageQuestionsFromSourcePool (int $source_pool_id, array $question_id_mapping_per_pool, array $filter_ids=null, array $type_filter=null, array $lifecycle_filter=null)
 
 mirrorSourcePoolTaxonomies (int $source_pool_id, array $questionId_mapping)
 
 applyMappedTaxonomiesKeys (ilTestRandomQuestionSetSourcePoolDefinitionList $source_pool_definition_list, ilQuestionPoolDuplicatedTaxonomiesKeysMap $taxonomies_keys_map, int $source_pool_id)
 

Detailed Description

Constructor & Destructor Documentation

◆ __construct()

ilTestRandomQuestionSetStagingPoolBuilder::__construct ( private readonly ilDBInterface  $db,
private readonly TestLogger  $logger,
private readonly ilObjTest  $test_obj 
)

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

35  {
36  }

Member Function Documentation

◆ applyMappedTaxonomiesKeys()

ilTestRandomQuestionSetStagingPoolBuilder::applyMappedTaxonomiesKeys ( ilTestRandomQuestionSetSourcePoolDefinitionList  $source_pool_definition_list,
ilQuestionPoolDuplicatedTaxonomiesKeysMap  $taxonomies_keys_map,
int  $source_pool_id 
)
private

Definition at line 189 of file class.ilTestRandomQuestionSetStagingPoolBuilder.php.

Referenced by build().

193  : void {
194  foreach ($source_pool_definition_list as $definition) {
195  if ($definition->getPoolId() === $source_pool_id) {
196  $definition->mapTaxonomyFilter($taxonomies_keys_map);
197  }
198  }
199  }
+ Here is the caller graph for this function:

◆ build()

ilTestRandomQuestionSetStagingPoolBuilder::build ( ilTestRandomQuestionSetSourcePoolDefinitionList  $source_pool_definition_list)
private

Definition at line 88 of file class.ilTestRandomQuestionSetStagingPoolBuilder.php.

References applyMappedTaxonomiesKeys(), ilObjTaxonomy\getSubTreeItems(), mirrorSourcePoolTaxonomies(), and stageQuestionsFromSourcePool().

Referenced by rebuild().

90  : void {
91  $question_id_mapping_per_pool = [];
92  foreach ($source_pool_definition_list as $definition) {
93  $tax_filter = $definition->getOriginalTaxonomyFilter();
94  $type_filter = $definition->getTypeFilter();
95  $lifecycle_filter = $definition->getLifecycleFilter();
96 
97  $filter_items = null;
98  foreach ($tax_filter as $tax_id => $node_ids) {
99  $tax_items = [];
100  foreach ($node_ids as $node_id) {
101  $node_items = ilObjTaxonomy::getSubTreeItems(
102  'qpl',
103  $definition->getPoolId(),
104  'quest',
105  $tax_id,
106  $node_id
107  );
108 
109  foreach ($node_items as $node_item) {
110  $tax_items[] = $node_item['item_id'];
111  }
112  }
113 
114  $filter_items = isset($filter_items) ? array_intersect($filter_items, array_unique($tax_items)) : array_unique($tax_items);
115  }
116 
117  $question_id_mapping_per_pool = $this->stageQuestionsFromSourcePool(
118  $definition->getPoolId(),
119  $question_id_mapping_per_pool,
120  $filter_items !== null ? array_values($filter_items) : null,
121  $type_filter,
122  $lifecycle_filter
123  );
124  }
125 
126  foreach ($question_id_mapping_per_pool as $source_pool_id => $question_id_mapping) {
127  $taxonomiesKeysMap = $this->mirrorSourcePoolTaxonomies($source_pool_id, $question_id_mapping);
128  $this->applyMappedTaxonomiesKeys($source_pool_definition_list, $taxonomiesKeysMap, $source_pool_id);
129  }
130  }
stageQuestionsFromSourcePool(int $source_pool_id, array $question_id_mapping_per_pool, array $filter_ids=null, array $type_filter=null, array $lifecycle_filter=null)
mirrorSourcePoolTaxonomies(int $source_pool_id, array $questionId_mapping)
static getSubTreeItems(string $a_comp, int $a_obj_id, string $a_item_type, int $a_tax_id, $a_node)
Get all assigned items under a node.
applyMappedTaxonomiesKeys(ilTestRandomQuestionSetSourcePoolDefinitionList $source_pool_definition_list, ilQuestionPoolDuplicatedTaxonomiesKeysMap $taxonomies_keys_map, int $source_pool_id)
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ mirrorSourcePoolTaxonomies()

ilTestRandomQuestionSetStagingPoolBuilder::mirrorSourcePoolTaxonomies ( int  $source_pool_id,
array  $questionId_mapping 
)
private

Definition at line 174 of file class.ilTestRandomQuestionSetStagingPoolBuilder.php.

Referenced by build().

178  $duplicator = new ilQuestionPoolTaxonomiesDuplicator();
179  $duplicator->setSourceObjId($source_pool_id);
180  $duplicator->setSourceObjType('qpl');
181  $duplicator->setTargetObjId($this->test_obj->getId());
182  $duplicator->setTargetObjType($this->test_obj->getType());
183  $duplicator->setQuestionIdMapping($questionId_mapping);
184  $duplicator->duplicate($duplicator->getAllTaxonomiesForSourceObject());
185 
186  return $duplicator->getDuplicatedTaxonomiesKeysMap();
187  }
+ Here is the caller graph for this function:

◆ rebuild()

ilTestRandomQuestionSetStagingPoolBuilder::rebuild ( ilTestRandomQuestionSetSourcePoolDefinitionList  $source_pool_definition_list)

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

References build(), and reset().

40  : void
41  {
42  $this->reset();
43  $this->build($source_pool_definition_list);
44  }
build(ilTestRandomQuestionSetSourcePoolDefinitionList $source_pool_definition_list)
+ Here is the call graph for this function:

◆ removeMirroredTaxonomies()

ilTestRandomQuestionSetStagingPoolBuilder::removeMirroredTaxonomies ( )
private

Definition at line 52 of file class.ilTestRandomQuestionSetStagingPoolBuilder.php.

References ilObjTaxonomy\getUsageOfObject().

Referenced by reset().

53  {
54  foreach (ilObjTaxonomy::getUsageOfObject($this->test_obj->getId()) as $tax_id) {
55  $taxonomy = new ilObjTaxonomy($tax_id);
56  $taxonomy->delete();
57  }
58  }
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
static getUsageOfObject(int $a_obj_id, bool $a_include_titles=false)
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ removeStagedQuestions()

ilTestRandomQuestionSetStagingPoolBuilder::removeStagedQuestions ( )
private

Definition at line 60 of file class.ilTestRandomQuestionSetStagingPoolBuilder.php.

References $res, assQuestion\instantiateQuestion(), and ILIAS\Repository\logger().

Referenced by reset().

61  {
62  $res = $this->db->queryF(
63  'SELECT * FROM tst_rnd_cpy WHERE tst_fi = %s',
64  ['integer'],
65  [$this->test_obj->getTestId()]
66  );
67 
68  while ($row = $this->db->fetchAssoc($res)) {
69  try {
70  $question = assQuestion::instantiateQuestion($row['qst_fi']);
71  } catch (InvalidArgumentException $ex) {
72  $this->logger->warning(
73  "could not delete staged random question (ref={$this->test_obj->getRefId()} / qst={$row['qst_fi']})"
74  );
75  return;
76  }
77  $question->delete($row['qst_fi']);
78  }
79 
80  $this->db->manipulateF(
81  'DELETE FROM tst_rnd_cpy WHERE tst_fi = %s',
82  ['integer'],
83  [$this->test_obj->getTestId()
84  ]
85  );
86  }
$res
Definition: ltiservices.php:69
static instantiateQuestion(int $question_id)
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ reset()

ilTestRandomQuestionSetStagingPoolBuilder::reset ( )

Definition at line 46 of file class.ilTestRandomQuestionSetStagingPoolBuilder.php.

References removeMirroredTaxonomies(), and removeStagedQuestions().

Referenced by rebuild().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ stageQuestionsFromSourcePool()

ilTestRandomQuestionSetStagingPoolBuilder::stageQuestionsFromSourcePool ( int  $source_pool_id,
array  $question_id_mapping_per_pool,
array  $filter_ids = null,
array  $type_filter = null,
array  $lifecycle_filter = null 
)
private

Definition at line 132 of file class.ilTestRandomQuestionSetStagingPoolBuilder.php.

References $res, and assQuestion\instantiateQuestion().

Referenced by build().

138  : array {
139  $query = 'SELECT question_id FROM qpl_questions WHERE obj_fi = %s AND complete = %s AND original_id IS NULL';
140  if (!empty($filter_ids)) {
141  $query .= ' AND ' . $this->db->in('question_id', $filter_ids, false, 'integer');
142  }
143  if (!empty($type_filter)) {
144  $query .= ' AND ' . $this->db->in('question_type_fi', $type_filter, false, 'integer');
145  }
146  if (!empty($lifecycle_filter)) {
147  $query .= ' AND ' . $this->db->in('lifecycle', $lifecycle_filter, false, 'text');
148  }
149  $res = $this->db->queryF($query, ['integer', 'text'], [$source_pool_id, 1]);
150 
151  while ($row = $this->db->fetchAssoc($res)) {
152  if (!isset($question_id_mapping_per_pool[$source_pool_id])) {
153  $question_id_mapping_per_pool[$source_pool_id] = [];
154  }
155  if (!isset($question_id_mapping_per_pool[$source_pool_id][ $row['question_id'] ])) {
156  $question = assQuestion::instantiateQuestion($row['question_id']);
157  $duplicateId = $question->duplicate(true, '', '', -1, $this->test_obj->getId());
158 
159  $nextId = $this->db->nextId('tst_rnd_cpy');
160  $this->db->insert('tst_rnd_cpy', [
161  'copy_id' => ['integer', $nextId],
162  'tst_fi' => ['integer', $this->test_obj->getTestId()],
163  'qst_fi' => ['integer', $duplicateId],
164  'qpl_fi' => ['integer', $source_pool_id]
165  ]);
166 
167  $question_id_mapping_per_pool[$source_pool_id][ $row['question_id'] ] = $duplicateId;
168  }
169  }
170 
171  return $question_id_mapping_per_pool;
172  }
$res
Definition: ltiservices.php:69
static instantiateQuestion(int $question_id)
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

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