/** * @see \qtism\data\storage\xml\marshalling\RecursiveMarshaller::unmarshallChildrenKnown() */ protected function unmarshallChildrenKnown(DOMElement $element, QtiComponentCollection $children) { if (count($children) > 0) { // The first element of $children must be a templateIf. $templateIf = $children[0]; $templateCondition = new TemplateCondition($templateIf); if (isset($children[1])) { $templateElseIfs = new TemplateElseIfCollection(); // We have at least one elseIf. for ($i = 1; $i < count($children) - 1; $i++) { $templateElseIfs[] = $children[$i]; } $templateCondition->setTemplateElseIfs($templateElseIfs); $lastTemplateControl = $children[count($children) - 1]; if ($lastTemplateControl instanceof TemplateElseIf) { // There is no else. $templateElseIfs[] = $lastTemplateControl; } else { // We have an else. $templateCondition->setTemplateElse($lastTemplateControl); } } return $templateCondition; } else { $msg = "A 'templateCondition' element must contain at least one 'templateIf' element. None given."; throw new UnmarshallingException($msg, $element); } }
public function testMarshallIfElseMinimal() { $true = new BaseValue(BaseType::BOOLEAN, true); $setTemplateValue = new SetTemplateValue('tpl1', new BaseValue(BaseType::INTEGER, 1337)); $templateIf = new TemplateIf($true, new TemplateRuleCollection(array($setTemplateValue))); $templateCondition = new TemplateCondition($templateIf); $setCorrectResponse = new SetCorrectResponse('RESPONSE', new BaseValue(BaseType::IDENTIFIER, 'einstein')); $templateElse = new TemplateElse(new TemplateRuleCollection(array($setCorrectResponse))); $templateCondition->setTemplateElse($templateElse); $element = $this->getMarshallerFactory()->createMarshaller($templateCondition)->marshall($templateCondition); $dom = new DOMDocument('1.0', 'UTF-8'); $element = $dom->importNode($element, true); $this->assertEquals('<templateCondition><templateIf><baseValue baseType="boolean">true</baseValue><setTemplateValue identifier="tpl1"><baseValue baseType="integer">1337</baseValue></setTemplateValue></templateIf><templateElse><setCorrectResponse identifier="RESPONSE"><baseValue baseType="identifier">einstein</baseValue></setCorrectResponse></templateElse></templateCondition>', $dom->saveXML($element)); }