19declare(strict_types=1);
51 $non_required_db = $this->db;
84 $this->quest_related_src_pool_def_register = [];
89 if (!array_key_exists($question_id, $this->quest_related_src_pool_def_register)) {
93 $this->quest_related_src_pool_def_register[$question_id]->addDefinition($definition);
102 if (isset($this->quest_related_src_pool_def_register[$questionId])) {
103 return $this->quest_related_src_pool_def_register[$questionId];
111 $this->src_pool_def_related_quest_register = [];
116 if (!isset($this->src_pool_def_related_quest_register[$definition_id])) {
120 $this->src_pool_def_related_quest_register[$definition_id]->addQuestion($random_set_question);
125 if (isset($this->src_pool_def_related_quest_register[$definition_id])) {
126 return $this->src_pool_def_related_quest_register[$definition_id];
135 $source_pool_definition = $this->source_pool_definition_list->getDefinition(
136 $random_question->getSourcePoolDefinitionId()
140 $random_question->getSourcePoolDefinitionId(),
144 if ($source_pool_definition && $random_question->getQuestionId()) {
146 $random_question->getQuestionId(),
147 $source_pool_definition
161 return $this->question_collection_provider->getSrcPoolDefListRelatedQuestCombinationCollection(
162 $this->source_pool_definition_list
175 $exclusiveQstCollection->addQuestion($question);
178 return $exclusiveQstCollection;
185 return $srcPoolDefRelatedQstCollection->getRelativeComplementCollection($exclusiveQstCollection);
189 int $this_definition_id,
190 int $that_definition_id
195 return $this_def_related_shared_qst_collection->getIntersectionCollection(
196 $that_def_related_shared_qst_collection
206 $intersectionQstCollectionsByDefId = [];
208 $sharedQuestionCollection = $this->getSharedQuestionCollection($definition->
getId());
209 foreach ($sharedQuestionCollection as $sharedQuestion) {
210 $relatedSrcPoolDefList = $this->getQuestRelatedSrcPoolDefinitionList($sharedQuestion->getQuestionId());
211 foreach ($relatedSrcPoolDefList as $otherDefinition) {
212 if ($otherDefinition->getId() == $definition->
getId()) {
216 if (isset($intersectionQstCollectionsByDefId[$otherDefinition->getId()])) {
220 $intersectionQuestionCollection = $this->getIntersectionQuestionCollection(
221 $definition->
getId(),
222 $otherDefinition->getId()
225 $intersectionQstCollectionsByDefId[$otherDefinition->getId()] = $intersectionQuestionCollection;
229 return $intersectionQstCollectionsByDefId;
238 $qstCollectionSubsetApplicationList = $this->buildQuestionCollectionSubsetApplicationListInstance();
240 $intersectionQstCollectionByDefIdMap = $this->getIntersectionQstCollectionByDefinitionMap($definition);
241 foreach ($intersectionQstCollectionByDefIdMap as $otherDefinitionId => $intersectionCollection) {
244 $qstCollectionSubsetApplication = $this->buildQuestionCollectionSubsetApplicationInstance();
245 $qstCollectionSubsetApplication->setQuestions($intersectionCollection->getQuestions());
246 $qstCollectionSubsetApplication->setApplicantId($otherDefinitionId);
248 $qstCollectionSubsetApplication->setRequiredAmount(
249 $this->source_pool_definition_list->getDefinition($otherDefinitionId)->getQuestionAmount()
252 $qstCollectionSubsetApplicationList->addCollectionSubsetApplication($qstCollectionSubsetApplication);
255 return $qstCollectionSubsetApplicationList;
266 $intersectionSharingDefinitionList = $this->buildSourcePoolDefinitionListInstance();
268 $sharedQuestionCollection = $this->getSharedQuestionCollection($definition->
getId());
269 foreach ($sharedQuestionCollection as $sharedQuestion) {
270 $relatedSrcPoolDefList = $this->getQuestRelatedSrcPoolDefinitionList($sharedQuestion->getQuestionId());
271 foreach ($relatedSrcPoolDefList as $otherDefinition) {
272 if ($otherDefinition->getId() == $definition->
getId()) {
276 if ($intersectionSharingDefinitionList->hasDefinition($otherDefinition->getId())) {
280 $intersectionSharingDefinitionList->addDefinition($otherDefinition);
284 return $intersectionSharingDefinitionList;
294 $qstRelatedSrcPoolDefList = $this->quest_related_src_pool_def_register[$question->
getQuestionId()];
295 return $qstRelatedSrcPoolDefList->getDefinitionCount() > 1;
303 return $this->getSrcPoolDefRelatedQuestionCollection($definition->
getId())->getQuestionAmount();
312 return $this->getExclusiveQuestionCollection($definition->
getId())->getQuestionAmount();
321 $intersectionSubsetApplicationList = $this->getIntersectionQuestionCollectionSubsetApplicationList($definition);
323 foreach ($this->getSharedQuestionCollection($definition->
getId()) as $sharedQuestion) {
324 $intersectionSubsetApplicationList->handleQuestionRequest($sharedQuestion);
327 return $intersectionSubsetApplicationList->getNonReservedQuestionAmount();
336 $exclusiveQstCollection = $this->getExclusiveQuestionCollection($definition->
getId());
337 $missingExclsuiveQstCount = $exclusiveQstCollection->getMissingCount($definition->
getQuestionAmount());
338 return $missingExclsuiveQstCount;
347 return $this->getRequiredSharedQuestionAmount($definition) > 0;
354 $this->initialiseRegisters();
359 $this->resetRegisters();
372 $quantityCalculation->setOverallQuestionAmount($this->getSrcPoolDefRelatedQuestionAmount($definition));
373 $quantityCalculation->setExclusiveQuestionAmount($this->getExclusiveQuestionAmount($definition));
374 $quantityCalculation->setAvailableSharedQuestionAmount($this->getAvailableSharedQuestionAmount($definition));
376 $quantityCalculation->setIntersectionQuantitySharingDefinitionList(
377 $this->getIntersectionSharingDefinitionList($definition)
380 return $quantityCalculation;
getIntersectionQstCollectionByDefinitionMap(ilTestRandomQuestionSetSourcePoolDefinition $definition)
registerSrcPoolDefRelatedQuest(int $definition_id, ilTestRandomQuestionSetQuestion $random_set_question)
resetSrcPoolDefRelatedQuestRegister()
getQuestRelatedSrcPoolDefinitionList($questionId)
getSrcPoolDefQuestionCombinationCollection()
getAvailableSharedQuestionAmount(ilTestRandomQuestionSetSourcePoolDefinition $definition)
array $src_pool_def_related_quest_register
getSharedQuestionCollection(int $definition_id)
getRequiredSharedQuestionAmount(ilTestRandomQuestionSetSourcePoolDefinition $definition)
getExclusiveQuestionCollection(int $definition_id)
registerQuestRelatedSrcPoolDef(int $question_id, ilTestRandomQuestionSetSourcePoolDefinition $definition)
isQuestionUsedByMultipleSrcPoolDefinitions(ilTestRandomQuestionSetQuestion $question)
buildSourcePoolDefinitionListInstance()
getExclusiveQuestionAmount(ilTestRandomQuestionSetSourcePoolDefinition $definition)
buildRandomQuestionCollectionInstance()
__construct(private ilDBInterface $db, private ilTestRandomSourcePoolDefinitionQuestionCollectionProvider $question_collection_provider, private ilTestRandomQuestionSetSourcePoolDefinitionList $source_pool_definition_list)
getSrcPoolDefRelatedQuestionAmount(ilTestRandomQuestionSetSourcePoolDefinition $definition)
requiresSharedQuestions(ilTestRandomQuestionSetSourcePoolDefinition $definition)
getIntersectionQuestionCollection(int $this_definition_id, int $that_definition_id)
getIntersectionQuestionCollectionSubsetApplicationList(ilTestRandomQuestionSetSourcePoolDefinition $definition)
getIntersectionSharingDefinitionList(ilTestRandomQuestionSetSourcePoolDefinition $definition)
buildQuestionCollectionSubsetApplicationListInstance()
calculateQuantities(ilTestRandomQuestionSetSourcePoolDefinition $definition)
array $quest_related_src_pool_def_register
buildQuestionCollectionSubsetApplicationInstance()
resetQuestRelatedSrcPoolDefRegister()
getSrcPoolDefRelatedQuestionCollection(int $definition_id)