protected function getMapResponseTemplateValidation() { $validResponses = []; foreach ($this->responseDeclaration->getMapping()->getMapEntries() as $mapEntry) { /** @var MapEntry $mapEntry */ if (!isset($this->options[$mapEntry->getMapKey()])) { LogService::log('Invalid choice `' . $mapEntry->getMapKey() . '`'); continue; } if ($mapEntry->getMappedValue() < 0) { LogService::log('Invalid score ` ' . $mapEntry->getMappedValue() . ' `. Negative score is ignored'); continue; } $validResponses[] = new ValidResponse($mapEntry->getMappedValue(), [$mapEntry->getMapKey()]); } // Handle `multiple` cardinality if ($this->responseDeclaration->getCardinality() === Cardinality::MULTIPLE) { $combinationChoicesCount = $this->maxChoices === 0 ? count($validResponses) : $this->maxChoices; $combinationResponses = ArrayUtil::combinations($validResponses, $combinationChoicesCount); $validResponses = ArrayUtil::combineValidResponsesWithSummedScore($combinationResponses); } return ValidationBuilder::build('mcq', 'exactMatch', $validResponses); }