public function convert(BaseQuestionType $questionType, $interactionIdentifier, $interactionLabel) { //TODO: Need validation a question shall have at least 1 {{response}} and 1 item in `possible_responses` /** @var imageclozeassociation $question */ $question = $questionType; // Map `possible_responses` to `gapImg`(s) $possibleResponses = $question->get_possible_responses(); $matchMax = !is_null($question->get_duplicate_responses()) ? count($possibleResponses) : 1; $gapImageCollection = $this->buildGapImgCollection($possibleResponses, $matchMax); // Build the main background image `object` $imageObject = $this->buildMainImageObject($question->get_image()); // Build associable hotspots based on `response_positions` $associableHotspotCollection = $this->buildAssociableHotspotCollection($question->get_response_positions(), $imageObject->getWidth(), $imageObject->getHeight()); // Build dah` interaction $interaction = new GraphicGapMatchInteraction($interactionIdentifier, $imageObject, $gapImageCollection, $associableHotspotCollection); $interaction->setLabel($interactionLabel); $interaction->setPrompt($this->convertStimulusForPrompt($question->get_stimulus())); $validationBuilder = new ImageclozeassociationValidationBuilder($possibleResponses); list($responseDeclaration, $responseProcessing) = $validationBuilder->buildValidation($interaction->getResponseIdentifier(), $question->get_validation()); return [$interaction, $responseDeclaration, $responseProcessing]; }