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[$question_id])) {
103 return $this->quest_related_src_pool_def_register[$question_id];
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 $exclusive_qst_collection->addQuestion($question);
178 return $exclusive_qst_collection;
185 return $src_pool_def_related_qst_collection->getRelativeComplementCollection($exclusive_qst_collection);
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 $intersection_qst_collections_by_def_id = [];
208 $shared_question_collection = $this->getSharedQuestionCollection($definition->
getId());
209 foreach ($shared_question_collection as $shared_question) {
210 $related_src_pool_def_list = $this->getQuestRelatedSrcPoolDefinitionList($shared_question->getQuestionId());
211 foreach ($related_src_pool_def_list as $other_definition) {
212 if ($other_definition->getId() == $definition->
getId()) {
216 if (isset($intersection_qst_collections_by_def_id[$other_definition->getId()])) {
220 $intersection_question_collection = $this->getIntersectionQuestionCollection(
221 $definition->
getId(),
222 $other_definition->getId()
225 $intersection_qst_collections_by_def_id[$other_definition->getId()] = $intersection_question_collection;
229 return $intersection_qst_collections_by_def_id;
238 $qst_collection_subset_application_list = $this->buildQuestionCollectionSubsetApplicationListInstance();
240 $intersection_qst_collection_by_def_id_map = $this->getIntersectionQstCollectionByDefinitionMap($definition);
241 foreach ($intersection_qst_collection_by_def_id_map as $other_definition_id => $intersection_collection) {
244 $qst_collection_subset_application = $this->buildQuestionCollectionSubsetApplicationInstance();
245 $qst_collection_subset_application->setQuestions($intersection_collection->getQuestions());
246 $qst_collection_subset_application->setApplicantId($other_definition_id);
248 $qst_collection_subset_application->setRequiredAmount(
249 $this->source_pool_definition_list->getDefinition($other_definition_id)->getQuestionAmount()
252 $qst_collection_subset_application_list->addCollectionSubsetApplication($qst_collection_subset_application);
255 return $qst_collection_subset_application_list;
266 $intersection_sharing_definition_list = $this->buildSourcePoolDefinitionListInstance();
268 $shared_question_collection = $this->getSharedQuestionCollection($definition->
getId());
269 foreach ($shared_question_collection as $shared_question) {
270 $related_src_pool_def_list = $this->getQuestRelatedSrcPoolDefinitionList($shared_question->getQuestionId());
271 foreach ($related_src_pool_def_list as $other_definition) {
272 if ($other_definition->getId() == $definition->
getId()) {
276 if ($intersection_sharing_definition_list->hasDefinition($other_definition->getId())) {
280 $intersection_sharing_definition_list->addDefinition($other_definition);
284 return $intersection_sharing_definition_list;
294 $qst_related_src_pool_def_list = $this->quest_related_src_pool_def_register[$question->
getQuestionId()];
295 return $qst_related_src_pool_def_list->getDefinitionCount() > 1;
303 return $this->getSrcPoolDefRelatedQuestionCollection($definition->
getId())->getQuestionAmount();
312 return $this->getExclusiveQuestionCollection($definition->
getId())->getQuestionAmount();
321 $intersection_subset_application_list = $this->getIntersectionQuestionCollectionSubsetApplicationList($definition);
323 foreach ($this->getSharedQuestionCollection($definition->
getId()) as $shared_question) {
324 $intersection_subset_application_list->handleQuestionRequest($shared_question);
327 return $intersection_subset_application_list->getNonReservedQuestionAmount();
336 $exclusive_qst_collection = $this->getExclusiveQuestionCollection($definition->
getId());
337 $missing_exclsuive_qst_count = $exclusive_qst_collection->getMissingCount($definition->
getQuestionAmount());
338 return $missing_exclsuive_qst_count;
347 return $this->getRequiredSharedQuestionAmount($definition) > 0;
354 $this->initialiseRegisters();
359 $this->resetRegisters();
372 $quantity_calculation->setOverallQuestionAmount($this->getSrcPoolDefRelatedQuestionAmount($definition));
373 $quantity_calculation->setExclusiveQuestionAmount($this->getExclusiveQuestionAmount($definition));
374 $quantity_calculation->setAvailableSharedQuestionAmount($this->getAvailableSharedQuestionAmount($definition));
376 $quantity_calculation->setIntersectionQuantitySharingDefinitionList(
377 $this->getIntersectionSharingDefinitionList($definition)
380 return $quantity_calculation;
getIntersectionQstCollectionByDefinitionMap(ilTestRandomQuestionSetSourcePoolDefinition $definition)
registerSrcPoolDefRelatedQuest(int $definition_id, ilTestRandomQuestionSetQuestion $random_set_question)
resetSrcPoolDefRelatedQuestRegister()
getSrcPoolDefQuestionCombinationCollection()
getAvailableSharedQuestionAmount(ilTestRandomQuestionSetSourcePoolDefinition $definition)
array $src_pool_def_related_quest_register
getQuestRelatedSrcPoolDefinitionList($question_id)
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)