/** * Unmarshall a DOMElement object corresponding to a QTI rubrickBlock element. * * @param DOMElement $element A DOMElement object. * @return RubricBlock A RubricBlock object. * @throws UnmarshallingException If the mandatory attribute 'href' is missing from $element. */ protected function unmarshall(DOMElement $element) { // First we retrieve the mandatory views. if (($value = static::getDOMElementAttributeAs($element, 'view', 'string')) !== null) { $viewsArray = explode(" ", $value); $viewsCollection = new ViewCollection(); $ref = View::asArray(); foreach ($viewsArray as $viewString) { $key = strtoupper(str_replace("ò", " ", $viewString)); if (array_key_exists($key, $ref)) { $viewsCollection[] = $ref[$key]; } } $object = new RubricBlock($viewsCollection); if (($value = static::getDOMElementAttributeAs($element, 'use', 'string')) !== null) { $object->setUse($value); } if (($xmlBase = static::getXmlBase($element)) !== false) { $component->setXmlBase($xmlBase); } $stylesheets = new StylesheetCollection(); $content = new FlowStaticCollection(); foreach (self::getChildElements($element, true) as $elt) { if ($elt instanceof DOMText) { $elt = self::getDOMCradle()->createElement('textRun', $elt->wholeText); } $marshaller = $this->getMarshallerFactory()->createMarshaller($elt); $cpt = $marshaller->unmarshall($elt); if ($cpt instanceof Stylesheet) { $stylesheets[] = $cpt; } else { if ($cpt instanceof FlowStatic && !in_array($cpt->getQtiClassName(), array('hottext', 'feedbackBlock', 'feedbackInline', 'rubricBlock', 'infoControl'))) { $content[] = $cpt; } else { $msg = "The 'rubricBlock' cannot contain '" . $cpt->getQtiClassName() . "' elements."; throw new UnmarshallingException($msg, $element); } } } $object->setStylesheets($stylesheets); $object->setContent($content); self::fillBodyElement($object, $element); return $object; } else { $msg = "The mandatory attribute 'views' is missing."; throw new UnmarshallingException($msg, $element); } }