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

Public Member Functions

 __construct (private ilDBInterface $db, private ilTestRandomSourcePoolDefinitionQuestionCollectionProvider $question_collection_provider, private ilTestRandomQuestionSetSourcePoolDefinitionList $source_pool_definition_list)
 
 initialise ()
 
 reset ()
 
 calculateQuantities (ilTestRandomQuestionSetSourcePoolDefinition $definition)
 

Protected Member Functions

 buildSourcePoolDefinitionListInstance ()
 
 buildRandomQuestionCollectionInstance ()
 
 buildQuestionCollectionSubsetApplicationInstance ()
 
 buildQuestionCollectionSubsetApplicationListInstance ()
 
 resetQuestRelatedSrcPoolDefRegister ()
 
 registerQuestRelatedSrcPoolDef (int $question_id, ilTestRandomQuestionSetSourcePoolDefinition $definition)
 
 getQuestRelatedSrcPoolDefinitionList (int $question_id)
 
 resetSrcPoolDefRelatedQuestRegister ()
 
 registerSrcPoolDefRelatedQuest (int $definition_id, ilTestRandomQuestionSetQuestion $random_set_question)
 
 getSrcPoolDefRelatedQuestionCollection (int $definition_id)
 
 initialiseRegisters ()
 
 resetRegisters ()
 
 getSrcPoolDefQuestionCombinationCollection ()
 
 getExclusiveQuestionCollection (int $definition_id)
 
 getSharedQuestionCollection (int $definition_id)
 
 getIntersectionQuestionCollection (int $this_definition_id, int $that_definition_id)
 
 getIntersectionQstCollectionByDefinitionMap (ilTestRandomQuestionSetSourcePoolDefinition $definition)
 
 getIntersectionQuestionCollectionSubsetApplicationList (ilTestRandomQuestionSetSourcePoolDefinition $definition)
 
 getIntersectionSharingDefinitionList (ilTestRandomQuestionSetSourcePoolDefinition $definition)
 
 isQuestionUsedByMultipleSrcPoolDefinitions (ilTestRandomQuestionSetQuestion $question)
 
 getSrcPoolDefRelatedQuestionAmount (ilTestRandomQuestionSetSourcePoolDefinition $definition)
 
 getExclusiveQuestionAmount (ilTestRandomQuestionSetSourcePoolDefinition $definition)
 
 getAvailableSharedQuestionAmount (ilTestRandomQuestionSetSourcePoolDefinition $definition)
 
 getRequiredSharedQuestionAmount (ilTestRandomQuestionSetSourcePoolDefinition $definition)
 
 requiresSharedQuestions (ilTestRandomQuestionSetSourcePoolDefinition $definition)
 

Protected Attributes

array $quest_related_src_pool_def_register = []
 
array $src_pool_def_related_quest_register = []
 

Detailed Description

Constructor & Destructor Documentation

◆ __construct()

ilTestRandomQuestionsQuantitiesDistribution::__construct ( private ilDBInterface  $db,
private ilTestRandomSourcePoolDefinitionQuestionCollectionProvider  $question_collection_provider,
private ilTestRandomQuestionSetSourcePoolDefinitionList  $source_pool_definition_list 
)

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

44  {
45  }

Member Function Documentation

◆ buildQuestionCollectionSubsetApplicationInstance()

ilTestRandomQuestionsQuantitiesDistribution::buildQuestionCollectionSubsetApplicationInstance ( )
protected

◆ buildQuestionCollectionSubsetApplicationListInstance()

ilTestRandomQuestionsQuantitiesDistribution::buildQuestionCollectionSubsetApplicationListInstance ( )
protected

◆ buildRandomQuestionCollectionInstance()

ilTestRandomQuestionsQuantitiesDistribution::buildRandomQuestionCollectionInstance ( )
protected

◆ buildSourcePoolDefinitionListInstance()

ilTestRandomQuestionsQuantitiesDistribution::buildSourcePoolDefinitionListInstance ( )
protected

Definition at line 47 of file class.ilTestRandomQuestionsQuantitiesDistribution.php.

Referenced by getIntersectionSharingDefinitionList(), and registerQuestRelatedSrcPoolDef().

48  {
49  $any_test_object = new ilObjTest();
50  $non_required_db = $this->db;
51  $non_used_factory = new ilTestRandomQuestionSetSourcePoolDefinitionFactory($non_required_db, $any_test_object);
52  return new ilTestRandomQuestionSetSourcePoolDefinitionList($non_required_db, $any_test_object, $non_used_factory);
53  }
+ Here is the caller graph for this function:

◆ calculateQuantities()

ilTestRandomQuestionsQuantitiesDistribution::calculateQuantities ( ilTestRandomQuestionSetSourcePoolDefinition  $definition)

Definition at line 317 of file class.ilTestRandomQuestionsQuantitiesDistribution.php.

References getAvailableSharedQuestionAmount(), getExclusiveQuestionAmount(), getIntersectionSharingDefinitionList(), and getSrcPoolDefRelatedQuestionAmount().

320  $quantity_calculation = new ilTestRandomQuestionsSrcPoolDefinitionQuantitiesCalculation($definition);
321  $quantity_calculation->setOverallQuestionAmount($this->getSrcPoolDefRelatedQuestionAmount($definition));
322  $quantity_calculation->setExclusiveQuestionAmount($this->getExclusiveQuestionAmount($definition));
323  $quantity_calculation->setAvailableSharedQuestionAmount($this->getAvailableSharedQuestionAmount($definition));
324 
325  $quantity_calculation->setIntersectionQuantitySharingDefinitionList(
326  $this->getIntersectionSharingDefinitionList($definition)
327  );
328 
329  return $quantity_calculation;
330  }
getIntersectionSharingDefinitionList(ilTestRandomQuestionSetSourcePoolDefinition $definition)
getAvailableSharedQuestionAmount(ilTestRandomQuestionSetSourcePoolDefinition $definition)
getExclusiveQuestionAmount(ilTestRandomQuestionSetSourcePoolDefinition $definition)
getSrcPoolDefRelatedQuestionAmount(ilTestRandomQuestionSetSourcePoolDefinition $definition)
+ Here is the call graph for this function:

◆ getAvailableSharedQuestionAmount()

ilTestRandomQuestionsQuantitiesDistribution::getAvailableSharedQuestionAmount ( ilTestRandomQuestionSetSourcePoolDefinition  $definition)
protected

Definition at line 283 of file class.ilTestRandomQuestionsQuantitiesDistribution.php.

References ilTestRandomQuestionSetSourcePoolDefinition\getId(), getIntersectionQuestionCollectionSubsetApplicationList(), and getSharedQuestionCollection().

Referenced by calculateQuantities().

283  : int
284  {
285  $intersectionSubsetApplicationList = $this->getIntersectionQuestionCollectionSubsetApplicationList($definition);
286 
287  foreach ($this->getSharedQuestionCollection($definition->getId()) as $sharedQuestion) {
288  $intersectionSubsetApplicationList->handleQuestionRequest($sharedQuestion);
289  }
290 
291  return $intersectionSubsetApplicationList->getNonReservedQuestionAmount();
292  }
getIntersectionQuestionCollectionSubsetApplicationList(ilTestRandomQuestionSetSourcePoolDefinition $definition)
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ getExclusiveQuestionAmount()

ilTestRandomQuestionsQuantitiesDistribution::getExclusiveQuestionAmount ( ilTestRandomQuestionSetSourcePoolDefinition  $definition)
protected

Definition at line 278 of file class.ilTestRandomQuestionsQuantitiesDistribution.php.

References getExclusiveQuestionCollection(), and ilTestRandomQuestionSetSourcePoolDefinition\getId().

Referenced by calculateQuantities().

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

◆ getExclusiveQuestionCollection()

ilTestRandomQuestionsQuantitiesDistribution::getExclusiveQuestionCollection ( int  $definition_id)
protected

Definition at line 154 of file class.ilTestRandomQuestionsQuantitiesDistribution.php.

References buildRandomQuestionCollectionInstance(), getSrcPoolDefRelatedQuestionCollection(), and isQuestionUsedByMultipleSrcPoolDefinitions().

Referenced by getExclusiveQuestionAmount(), getRequiredSharedQuestionAmount(), and getSharedQuestionCollection().

155  {
156  $exclusive_qst_collection = $this->buildRandomQuestionCollectionInstance();
157  foreach ($this->getSrcPoolDefRelatedQuestionCollection($definition_id) as $question) {
158  if ($this->isQuestionUsedByMultipleSrcPoolDefinitions($question)) {
159  continue;
160  }
161 
162  $exclusive_qst_collection->addQuestion($question);
163  }
164  return $exclusive_qst_collection;
165  }
isQuestionUsedByMultipleSrcPoolDefinitions(ilTestRandomQuestionSetQuestion $question)
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ getIntersectionQstCollectionByDefinitionMap()

ilTestRandomQuestionsQuantitiesDistribution::getIntersectionQstCollectionByDefinitionMap ( ilTestRandomQuestionSetSourcePoolDefinition  $definition)
protected
Returns
array<$definitionId, ilTestRandomQuestionSetQuestionCollection>

Definition at line 190 of file class.ilTestRandomQuestionsQuantitiesDistribution.php.

References ilTestRandomQuestionSetSourcePoolDefinition\getId(), getIntersectionQuestionCollection(), getQuestRelatedSrcPoolDefinitionList(), and getSharedQuestionCollection().

Referenced by getIntersectionQuestionCollectionSubsetApplicationList().

192  : array {
193  $intersectionQstCollectionsByDefId = [];
194 
195  $sharedQuestionCollection = $this->getSharedQuestionCollection($definition->getId());
196  foreach ($sharedQuestionCollection as $sharedQuestion) {
197  $relatedSrcPoolDefList = $this->getQuestRelatedSrcPoolDefinitionList($sharedQuestion->getQuestionId());
198  foreach ($relatedSrcPoolDefList as $otherDefinition) {
199  if ($otherDefinition->getId() == $definition->getId()) {
200  continue;
201  }
202 
203  if (isset($intersectionQstCollectionsByDefId[$otherDefinition->getId()])) {
204  continue;
205  }
206 
207  $intersectionQuestionCollection = $this->getIntersectionQuestionCollection(
208  $definition->getId(),
209  $otherDefinition->getId()
210  );
211 
212  $intersectionQstCollectionsByDefId[$otherDefinition->getId()] = $intersectionQuestionCollection;
213  }
214  }
215 
216  return $intersectionQstCollectionsByDefId;
217  }
getIntersectionQuestionCollection(int $this_definition_id, int $that_definition_id)
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ getIntersectionQuestionCollection()

ilTestRandomQuestionsQuantitiesDistribution::getIntersectionQuestionCollection ( int  $this_definition_id,
int  $that_definition_id 
)
protected

Definition at line 175 of file class.ilTestRandomQuestionsQuantitiesDistribution.php.

References getSharedQuestionCollection().

Referenced by getIntersectionQstCollectionByDefinitionMap().

179  $this_def_related_shared_qst_collection = $this->getSharedQuestionCollection($this_definition_id);
180  $that_def_related_shared_qst_collection = $this->getSharedQuestionCollection($that_definition_id);
181 
182  return $this_def_related_shared_qst_collection->getIntersectionCollection(
183  $that_def_related_shared_qst_collection
184  );
185  }
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ getIntersectionQuestionCollectionSubsetApplicationList()

ilTestRandomQuestionsQuantitiesDistribution::getIntersectionQuestionCollectionSubsetApplicationList ( ilTestRandomQuestionSetSourcePoolDefinition  $definition)
protected

Definition at line 219 of file class.ilTestRandomQuestionsQuantitiesDistribution.php.

References buildQuestionCollectionSubsetApplicationInstance(), buildQuestionCollectionSubsetApplicationListInstance(), and getIntersectionQstCollectionByDefinitionMap().

Referenced by getAvailableSharedQuestionAmount().

222  $qstCollectionSubsetApplicationList = $this->buildQuestionCollectionSubsetApplicationListInstance();
223 
224  $intersectionQstCollectionByDefIdMap = $this->getIntersectionQstCollectionByDefinitionMap($definition);
225  foreach ($intersectionQstCollectionByDefIdMap as $otherDefinitionId => $intersectionCollection) {
226  /* @var ilTestRandomQuestionSetQuestionCollection $intersectionCollection */
227 
228  $qstCollectionSubsetApplication = $this->buildQuestionCollectionSubsetApplicationInstance();
229  $qstCollectionSubsetApplication->setQuestions($intersectionCollection->getQuestions());
230  $qstCollectionSubsetApplication->setApplicantId($otherDefinitionId);
231 
232  $qstCollectionSubsetApplication->setRequiredAmount(
233  $this->source_pool_definition_list->getDefinition($otherDefinitionId)->getQuestionAmount()
234  );
235 
236  $qstCollectionSubsetApplicationList->addCollectionSubsetApplication($qstCollectionSubsetApplication);
237  }
238 
239  return $qstCollectionSubsetApplicationList;
240  }
getIntersectionQstCollectionByDefinitionMap(ilTestRandomQuestionSetSourcePoolDefinition $definition)
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ getIntersectionSharingDefinitionList()

ilTestRandomQuestionsQuantitiesDistribution::getIntersectionSharingDefinitionList ( ilTestRandomQuestionSetSourcePoolDefinition  $definition)
protected

Definition at line 242 of file class.ilTestRandomQuestionsQuantitiesDistribution.php.

References buildSourcePoolDefinitionListInstance(), ilTestRandomQuestionSetSourcePoolDefinition\getId(), getQuestRelatedSrcPoolDefinitionList(), and getSharedQuestionCollection().

Referenced by calculateQuantities().

245  $intersectionSharingDefinitionList = $this->buildSourcePoolDefinitionListInstance();
246 
247  $sharedQuestionCollection = $this->getSharedQuestionCollection($definition->getId());
248  foreach ($sharedQuestionCollection as $sharedQuestion) {
249  $relatedSrcPoolDefList = $this->getQuestRelatedSrcPoolDefinitionList($sharedQuestion->getQuestionId());
250  foreach ($relatedSrcPoolDefList as $otherDefinition) {
251  if ($otherDefinition->getId() == $definition->getId()) {
252  continue;
253  }
254 
255  if ($intersectionSharingDefinitionList->hasDefinition($otherDefinition->getId())) {
256  continue;
257  }
258 
259  $intersectionSharingDefinitionList->addDefinition($otherDefinition);
260  }
261  }
262 
263  return $intersectionSharingDefinitionList;
264  }
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ getQuestRelatedSrcPoolDefinitionList()

ilTestRandomQuestionsQuantitiesDistribution::getQuestRelatedSrcPoolDefinitionList ( int  $question_id)
protected

Definition at line 86 of file class.ilTestRandomQuestionsQuantitiesDistribution.php.

Referenced by getIntersectionQstCollectionByDefinitionMap(), and getIntersectionSharingDefinitionList().

87  {
88  if (isset($this->quest_related_src_pool_def_register[$question_id])) {
89  return $this->quest_related_src_pool_def_register[$question_id];
90  }
91 
92  return null;
93  }
+ Here is the caller graph for this function:

◆ getRequiredSharedQuestionAmount()

ilTestRandomQuestionsQuantitiesDistribution::getRequiredSharedQuestionAmount ( ilTestRandomQuestionSetSourcePoolDefinition  $definition)
protected

Definition at line 294 of file class.ilTestRandomQuestionsQuantitiesDistribution.php.

References getExclusiveQuestionCollection(), ilTestRandomQuestionSetSourcePoolDefinition\getId(), and ilTestRandomQuestionSetSourcePoolDefinition\getQuestionAmount().

Referenced by requiresSharedQuestions().

294  : int
295  {
296  $exclusiveQstCollection = $this->getExclusiveQuestionCollection($definition->getId());
297  $missingExclsuiveQstCount = $exclusiveQstCollection->getMissingCount($definition->getQuestionAmount());
298  return $missingExclsuiveQstCount;
299  }
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ getSharedQuestionCollection()

ilTestRandomQuestionsQuantitiesDistribution::getSharedQuestionCollection ( int  $definition_id)
protected

◆ getSrcPoolDefQuestionCombinationCollection()

ilTestRandomQuestionsQuantitiesDistribution::getSrcPoolDefQuestionCombinationCollection ( )
protected

Definition at line 147 of file class.ilTestRandomQuestionsQuantitiesDistribution.php.

Referenced by initialiseRegisters().

148  {
149  return $this->question_collection_provider->getSrcPoolDefListRelatedQuestCombinationCollection(
150  $this->source_pool_definition_list
151  );
152  }
+ Here is the caller graph for this function:

◆ getSrcPoolDefRelatedQuestionAmount()

ilTestRandomQuestionsQuantitiesDistribution::getSrcPoolDefRelatedQuestionAmount ( ilTestRandomQuestionSetSourcePoolDefinition  $definition)
protected

Definition at line 273 of file class.ilTestRandomQuestionsQuantitiesDistribution.php.

References ilTestRandomQuestionSetSourcePoolDefinition\getId(), and getSrcPoolDefRelatedQuestionCollection().

Referenced by calculateQuantities().

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

◆ getSrcPoolDefRelatedQuestionCollection()

ilTestRandomQuestionsQuantitiesDistribution::getSrcPoolDefRelatedQuestionCollection ( int  $definition_id)
protected

Definition at line 111 of file class.ilTestRandomQuestionsQuantitiesDistribution.php.

Referenced by getExclusiveQuestionCollection(), getSharedQuestionCollection(), and getSrcPoolDefRelatedQuestionAmount().

112  {
113  if (isset($this->src_pool_def_related_quest_register[$definition_id])) {
114  return $this->src_pool_def_related_quest_register[$definition_id];
115  }
116 
118  }
+ Here is the caller graph for this function:

◆ initialise()

ilTestRandomQuestionsQuantitiesDistribution::initialise ( )

Definition at line 307 of file class.ilTestRandomQuestionsQuantitiesDistribution.php.

References initialiseRegisters().

+ Here is the call graph for this function:

◆ initialiseRegisters()

ilTestRandomQuestionsQuantitiesDistribution::initialiseRegisters ( )
protected

Definition at line 120 of file class.ilTestRandomQuestionsQuantitiesDistribution.php.

References getSrcPoolDefQuestionCombinationCollection(), registerQuestRelatedSrcPoolDef(), and registerSrcPoolDefRelatedQuest().

Referenced by initialise().

120  : void
121  {
122  foreach ($this->getSrcPoolDefQuestionCombinationCollection() as $random_question) {
123  $source_pool_definition = $this->source_pool_definition_list->getDefinition(
124  $random_question->getSourcePoolDefinitionId()
125  );
126 
128  $random_question->getSourcePoolDefinitionId(),
129  $random_question
130  );
131 
132  if ($source_pool_definition && $random_question->getQuestionId()) {
134  $random_question->getQuestionId(),
135  $source_pool_definition
136  );
137  }
138  }
139  }
registerSrcPoolDefRelatedQuest(int $definition_id, ilTestRandomQuestionSetQuestion $random_set_question)
registerQuestRelatedSrcPoolDef(int $question_id, ilTestRandomQuestionSetSourcePoolDefinition $definition)
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ isQuestionUsedByMultipleSrcPoolDefinitions()

ilTestRandomQuestionsQuantitiesDistribution::isQuestionUsedByMultipleSrcPoolDefinitions ( ilTestRandomQuestionSetQuestion  $question)
protected

Definition at line 266 of file class.ilTestRandomQuestionsQuantitiesDistribution.php.

References ilTestRandomQuestionSetQuestion\getQuestionId().

Referenced by getExclusiveQuestionCollection().

266  : bool
267  {
268  /* @var ilTestRandomQuestionSetSourcePoolDefinitionList $qstRelatedSrcPoolDefList */
269  $qstRelatedSrcPoolDefList = $this->quest_related_src_pool_def_register[$question->getQuestionId()];
270  return $qstRelatedSrcPoolDefList->getDefinitionCount() > 1;
271  }
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ registerQuestRelatedSrcPoolDef()

ilTestRandomQuestionsQuantitiesDistribution::registerQuestRelatedSrcPoolDef ( int  $question_id,
ilTestRandomQuestionSetSourcePoolDefinition  $definition 
)
protected

Definition at line 75 of file class.ilTestRandomQuestionsQuantitiesDistribution.php.

References buildSourcePoolDefinitionListInstance().

Referenced by initialiseRegisters().

78  : void {
79  if (!array_key_exists($question_id, $this->quest_related_src_pool_def_register)) {
80  $this->quest_related_src_pool_def_register[$question_id] = $this->buildSourcePoolDefinitionListInstance();
81  }
82 
83  $this->quest_related_src_pool_def_register[$question_id]->addDefinition($definition);
84  }
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ registerSrcPoolDefRelatedQuest()

ilTestRandomQuestionsQuantitiesDistribution::registerSrcPoolDefRelatedQuest ( int  $definition_id,
ilTestRandomQuestionSetQuestion  $random_set_question 
)
protected

Definition at line 100 of file class.ilTestRandomQuestionsQuantitiesDistribution.php.

References buildRandomQuestionCollectionInstance().

Referenced by initialiseRegisters().

103  : void {
104  if (!isset($this->src_pool_def_related_quest_register[$definition_id])) {
105  $this->src_pool_def_related_quest_register[$definition_id] = $this->buildRandomQuestionCollectionInstance();
106  }
107 
108  $this->src_pool_def_related_quest_register[$definition_id]->addQuestion($random_set_question);
109  }
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ requiresSharedQuestions()

ilTestRandomQuestionsQuantitiesDistribution::requiresSharedQuestions ( ilTestRandomQuestionSetSourcePoolDefinition  $definition)
protected

Definition at line 301 of file class.ilTestRandomQuestionsQuantitiesDistribution.php.

References getRequiredSharedQuestionAmount().

301  : bool
302  {
303  return $this->getRequiredSharedQuestionAmount($definition) > 0;
304  }
getRequiredSharedQuestionAmount(ilTestRandomQuestionSetSourcePoolDefinition $definition)
+ Here is the call graph for this function:

◆ reset()

ilTestRandomQuestionsQuantitiesDistribution::reset ( )

Definition at line 312 of file class.ilTestRandomQuestionsQuantitiesDistribution.php.

References resetRegisters().

+ Here is the call graph for this function:

◆ resetQuestRelatedSrcPoolDefRegister()

ilTestRandomQuestionsQuantitiesDistribution::resetQuestRelatedSrcPoolDefRegister ( )
protected

Definition at line 70 of file class.ilTestRandomQuestionsQuantitiesDistribution.php.

Referenced by resetRegisters().

71  {
72  $this->quest_related_src_pool_def_register = [];
73  }
+ Here is the caller graph for this function:

◆ resetRegisters()

ilTestRandomQuestionsQuantitiesDistribution::resetRegisters ( )
protected

◆ resetSrcPoolDefRelatedQuestRegister()

ilTestRandomQuestionsQuantitiesDistribution::resetSrcPoolDefRelatedQuestRegister ( )
protected

Definition at line 95 of file class.ilTestRandomQuestionsQuantitiesDistribution.php.

Referenced by resetRegisters().

96  {
97  $this->src_pool_def_related_quest_register = [];
98  }
+ Here is the caller graph for this function:

Field Documentation

◆ $quest_related_src_pool_def_register

array ilTestRandomQuestionsQuantitiesDistribution::$quest_related_src_pool_def_register = []
protected

◆ $src_pool_def_related_quest_register

array ilTestRandomQuestionsQuantitiesDistribution::$src_pool_def_related_quest_register = []
protected

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