19 declare(strict_types=1);
50 $non_required_db = $this->db;
72 $this->quest_related_src_pool_def_register = [];
79 if (!array_key_exists($question_id, $this->quest_related_src_pool_def_register)) {
83 $this->quest_related_src_pool_def_register[$question_id]->addDefinition($definition);
88 if (isset($this->quest_related_src_pool_def_register[$question_id])) {
89 return $this->quest_related_src_pool_def_register[$question_id];
97 $this->src_pool_def_related_quest_register = [];
104 if (!isset($this->src_pool_def_related_quest_register[$definition_id])) {
108 $this->src_pool_def_related_quest_register[$definition_id]->addQuestion($random_set_question);
113 if (isset($this->src_pool_def_related_quest_register[$definition_id])) {
114 return $this->src_pool_def_related_quest_register[$definition_id];
123 $source_pool_definition = $this->source_pool_definition_list->getDefinition(
124 $random_question->getSourcePoolDefinitionId()
128 $random_question->getSourcePoolDefinitionId(),
132 if ($source_pool_definition && $random_question->getQuestionId()) {
134 $random_question->getQuestionId(),
135 $source_pool_definition
149 return $this->question_collection_provider->getSrcPoolDefListRelatedQuestCombinationCollection(
150 $this->source_pool_definition_list
162 $exclusive_qst_collection->addQuestion($question);
164 return $exclusive_qst_collection;
170 ->getRelativeComplementCollection(
176 int $this_definition_id,
177 int $that_definition_id
182 return $this_def_related_shared_qst_collection->getIntersectionCollection(
183 $that_def_related_shared_qst_collection
193 $intersectionQstCollectionsByDefId = [];
196 foreach ($sharedQuestionCollection as $sharedQuestion) {
198 foreach ($relatedSrcPoolDefList as $otherDefinition) {
199 if ($otherDefinition->getId() == $definition->
getId()) {
203 if (isset($intersectionQstCollectionsByDefId[$otherDefinition->getId()])) {
208 $definition->
getId(),
209 $otherDefinition->getId()
212 $intersectionQstCollectionsByDefId[$otherDefinition->getId()] = $intersectionQuestionCollection;
216 return $intersectionQstCollectionsByDefId;
225 foreach ($intersectionQstCollectionByDefIdMap as $otherDefinitionId => $intersectionCollection) {
229 $qstCollectionSubsetApplication->setQuestions($intersectionCollection->getQuestions());
230 $qstCollectionSubsetApplication->setApplicantId($otherDefinitionId);
232 $qstCollectionSubsetApplication->setRequiredAmount(
233 $this->source_pool_definition_list->getDefinition($otherDefinitionId)->getQuestionAmount()
236 $qstCollectionSubsetApplicationList->addCollectionSubsetApplication($qstCollectionSubsetApplication);
239 return $qstCollectionSubsetApplicationList;
248 foreach ($sharedQuestionCollection as $sharedQuestion) {
250 foreach ($relatedSrcPoolDefList as $otherDefinition) {
251 if ($otherDefinition->getId() == $definition->
getId()) {
255 if ($intersectionSharingDefinitionList->hasDefinition($otherDefinition->getId())) {
259 $intersectionSharingDefinitionList->addDefinition($otherDefinition);
263 return $intersectionSharingDefinitionList;
269 $qstRelatedSrcPoolDefList = $this->quest_related_src_pool_def_register[$question->
getQuestionId()];
270 return $qstRelatedSrcPoolDefList->getDefinitionCount() > 1;
288 $intersectionSubsetApplicationList->handleQuestionRequest($sharedQuestion);
291 return $intersectionSubsetApplicationList->getNonReservedQuestionAmount();
297 $missingExclsuiveQstCount = $exclusiveQstCollection->getMissingCount($definition->
getQuestionAmount());
298 return $missingExclsuiveQstCount;
325 $quantity_calculation->setIntersectionQuantitySharingDefinitionList(
329 return $quantity_calculation;
getIntersectionQuestionCollectionSubsetApplicationList(ilTestRandomQuestionSetSourcePoolDefinition $definition)
buildQuestionCollectionSubsetApplicationListInstance()
getSrcPoolDefRelatedQuestionCollection(int $definition_id)
getIntersectionQstCollectionByDefinitionMap(ilTestRandomQuestionSetSourcePoolDefinition $definition)
buildSourcePoolDefinitionListInstance()
__construct(private ilDBInterface $db, private ilTestRandomSourcePoolDefinitionQuestionCollectionProvider $question_collection_provider, private ilTestRandomQuestionSetSourcePoolDefinitionList $source_pool_definition_list)
resetQuestRelatedSrcPoolDefRegister()
resetSrcPoolDefRelatedQuestRegister()
getRequiredSharedQuestionAmount(ilTestRandomQuestionSetSourcePoolDefinition $definition)
getSharedQuestionCollection(int $definition_id)
getIntersectionSharingDefinitionList(ilTestRandomQuestionSetSourcePoolDefinition $definition)
getQuestRelatedSrcPoolDefinitionList(int $question_id)
getSrcPoolDefQuestionCombinationCollection()
requiresSharedQuestions(ilTestRandomQuestionSetSourcePoolDefinition $definition)
getAvailableSharedQuestionAmount(ilTestRandomQuestionSetSourcePoolDefinition $definition)
isQuestionUsedByMultipleSrcPoolDefinitions(ilTestRandomQuestionSetQuestion $question)
buildQuestionCollectionSubsetApplicationInstance()
calculateQuantities(ilTestRandomQuestionSetSourcePoolDefinition $definition)
array $src_pool_def_related_quest_register
buildRandomQuestionCollectionInstance()
getExclusiveQuestionAmount(ilTestRandomQuestionSetSourcePoolDefinition $definition)
getSrcPoolDefRelatedQuestionAmount(ilTestRandomQuestionSetSourcePoolDefinition $definition)
array $quest_related_src_pool_def_register
registerSrcPoolDefRelatedQuest(int $definition_id, ilTestRandomQuestionSetQuestion $random_set_question)
getExclusiveQuestionCollection(int $definition_id)
getIntersectionQuestionCollection(int $this_definition_id, int $that_definition_id)
registerQuestRelatedSrcPoolDef(int $question_id, ilTestRandomQuestionSetSourcePoolDefinition $definition)