/** * Marshall a Weight object into a DOMElement object. * * @param QtiComponent $component A Weight object. * @return DOMElement The according DOMElement object. */ protected function marshall(QtiComponent $component) { $element = static::getDOMCradle()->createElement($component->getQtiClassName()); self::setDOMElementAttribute($element, 'identifier', $component->getIdentifier()); self::setDOMElementAttribute($element, 'value', $component->getValue()); return $element; }
protected function marshall(QtiComponent $component) { $element = static::getDOMCradle()->createElement($component->getQtiClassName()); self::setDOMElementAttribute($element, 'identifier', $component->getIdentifier()); self::setDOMElementAttribute($element, 'navigationMode', NavigationMode::getNameByConstant($component->getNavigationMode())); self::setDOMElementAttribute($element, 'submissionMode', SubmissionMode::getNameByConstant($component->getSubmissionMode())); foreach ($component->getPreConditions() as $preCondition) { $marshaller = $this->getMarshallerFactory()->createMarshaller($preCondition); $element->appendChild($marshaller->marshall($preCondition)); } foreach ($component->getBranchRules() as $branchRule) { $marshaller = $this->getMarshallerFactory()->createMarshaller($branchRule); $element->appendChild($marshaller->marshall($branchRule)); } $itemSessionControl = $component->getItemSessionControl(); if (!empty($itemSessionControl)) { $marshaller = $this->getMarshallerFactory()->createMarshaller($itemSessionControl); $element->appendChild($marshaller->marshall($itemSessionControl)); } $timeLimits = $component->getTimeLimits(); if (!empty($timeLimits)) { $marshaller = $this->getMarshallerFactory()->createMarshaller($timeLimits); $element->appendChild($marshaller->marshall($timeLimits)); } foreach ($component->getAssessmentSections() as $assessmentSection) { $marshaller = $this->getMarshallerFactory()->createMarshaller($assessmentSection); $element->appendChild($marshaller->marshall($assessmentSection)); } foreach ($component->getTestFeedbacks() as $testFeedback) { $marshaller = $this->getMarshallerFactory()->createMarshaller($testFeedback); $element->appendChild($marshaller->marshall($testFeedback)); } return $element; }
/** * Marshall a RubricBlockRef object to its XML counterpart. * * @return DOMElement */ public function marshall(QtiComponent $component) { $element = self::getDOMCradle()->createElement('rubricBlockRef'); self::setDOMElementAttribute($element, 'identifier', $component->getIdentifier()); self::setDOMElementAttribute($element, 'href', $component->getHref()); return $element; }
/** * Marshall a Gap object into a DOMElement object. * * @param \qtism\data\QtiComponent $component A Gap object. * @return \DOMElement The according DOMElement object. * @throws \qtism\data\storage\xml\marshalling\MarshallingException */ protected function marshall(QtiComponent $component) { $version = $this->getVersion(); $element = self::getDOMCradle()->createElement('gap'); self::setDOMElementAttribute($element, 'identifier', $component->getIdentifier()); if ($component->isFixed() === true) { self::setDOMElementAttribute($element, 'fixed', true); } if (Version::compare($version, '2.1.0', '>=') === true && $component->hasTemplateIdentifier() === true) { self::setDOMElementAttribute($element, 'templateIdentifier', $component->getTemplateIdentifier()); } if (Version::compare($version, '2.1.0', '>=') === true && $component->getShowHide() === ShowHide::HIDE) { self::setDOMElementAttribute($element, 'showHide', ShowHide::getNameByConstant(ShowHide::HIDE)); } if (Version::compare($version, '2.1.0', '>=') === true && $component->isRequired() === true) { self::setDOMElementAttribute($element, 'required', true); } if (Version::compare($version, '2.1.0', '<') === true) { $matchGroup = $component->getMatchGroup(); if (count($matchGroup) > 0) { self::setDOMElementAttribute($element, 'matchGroup', implode(' ', $matchGroup->getArrayCopy())); } } $this->fillElement($element, $component); return $element; }
/** * Marshall a HotspotChoice/AssociableHotspot object into a DOMElement object. * * @param QtiComponent $component A HotspotChoice/AssociableHotspot object. * @return DOMElement The according DOMElement object. * @throws MarshallingException */ protected function marshall(QtiComponent $component) { $element = self::getDOMCradle()->createElement($component->getQtiClassName()); self::setDOMElementAttribute($element, 'identifier', $component->getIdentifier()); self::setDOMElementAttribute($element, 'shape', Shape::getNameByConstant($component->getShape())); self::setDOMElementAttribute($element, 'coords', $component->getCoords()->__toString()); if ($component->isFixed() === true) { self::setDOMElementAttribute($element, 'fixed', true); } if ($component->hasTemplateIdentifier() === true) { self::setDOMElementAttribute($element, 'templateIdentifier', $component->getTemplateIdentifier()); } if ($component->getShowHide() === ShowHide::HIDE) { self::setDOMElementAttribute($element, 'showHide', ShowHide::getNameByConstant($component->getShowHide())); } if ($component->hasHotspotLabel() === true) { self::setDOMElementAttribute($element, 'hotspotLabel', $component->getHotspotLabel()); } if ($component instanceof AssociableHotspot) { self::setDOMElementAttribute($element, 'matchMax', $component->getMatchMax()); if ($component->getMatchMin() !== 0) { self::setDOMElementAttribute($element, 'matchMin', $component->getMatchMin()); } } self::fillElement($element, $component); return $element; }
/** * Marshall a PrintedVariable object into a DOMElement object. * * @param \qtism\data\QtiComponent $component A PrintedVariable object. * @return \DOMElement The according DOMElement object. * @throws \qtism\data\storage\xml\marshalling\MarshallingException */ protected function marshall(QtiComponent $component) { $element = self::getDOMCradle()->createElement('printedVariable'); $version = $this->getVersion(); self::setDOMElementAttribute($element, 'identifier', $component->getIdentifier()); self::setDOMElementAttribute($element, 'base', $component->getBase()); if (Version::compare($version, '2.1.0', '>=') === true) { self::setDOMElementAttribute($element, 'powerForm', $component->mustPowerForm()); self::setDOMElementAttribute($element, 'delimiter', $component->getDelimiter()); self::setDOMElementAttribute($element, 'mappingIndicator', $component->getMappingIndicator()); } if ($component->hasFormat() === true) { self::setDOMElementAttribute($element, 'format', $component->getFormat()); } if ($component->hasIndex() === true) { self::setDOMElementAttribute($element, 'index', $component->getIndex()); } if ($component->hasField() === true) { self::setDOMElementAttribute($element, 'field', $component->getField()); } if ($component->hasXmlBase() === true) { self::setXmlBase($element, $component->getXmlBase()); } $this->fillElement($element, $component); return $element; }
/** * Marshall a SetDefaultValue object into a DOMElement object. * * @param QtiComponent $component A SetDefaultValue object. * @return DOMElement The according DOMElement object. */ protected function marshall(QtiComponent $component) { $element = static::getDOMCradle()->createElement($component->getQtiClassName()); $marshaller = $this->getMarshallerFactory()->createMarshaller($component->getExpression()); $element->appendChild($marshaller->marshall($component->getExpression())); static::setDOMElementAttribute($element, 'identifier', $component->getIdentifier()); return $element; }
/** * Marshall a Variable object into a DOMElement object. * * @param QtiComponent $component A Variable object. * @return DOMElement The according DOMElement object. */ protected function marshall(QtiComponent $component) { $element = static::getDOMCradle()->createElement($component->getQtiClassName()); self::setDOMElementAttribute($element, 'identifier', $component->getIdentifier()); $weightIdentifier = $component->getWeightIdentifier(); if (!empty($weightIdentifier)) { self::setDOMElementAttribute($element, 'weightIdentifier', $weightIdentifier); } return $element; }
/** * Marshall a TestFeedbackRef object to its XML counterpart. * * @param \qtism\data\QtiComponent $component * @return \DOMElement */ public function marshall(QtiComponent $component) { $element = self::getDOMCradle()->createElement('testFeedbackRef'); self::setDOMElementAttribute($element, 'identifier', $component->getIdentifier()); self::setDOMElementAttribute($element, 'outcomeIdentifier', $component->getOutcomeIdentifier()); self::setDOMElementAttribute($element, 'access', TestFeedbackAccess::getNameByConstant($component->getAccess())); self::setDOMElementAttribute($element, 'showHide', ShowHide::getNameByConstant($component->getShowHide())); self::setDOMElementAttribute($element, 'href', $component->getHref()); return $element; }
/** * Marshall a ModalFeedbackRule object to its XML counterpart. * * @param \qtism\data\QtiComponent $component * @return \DOMElement */ public function marshall(QtiComponent $component) { $element = self::getDOMCradle()->createElement('modalFeedbackRule'); self::setDOMElementAttribute($element, 'outcomeIdentifier', $component->getOutcomeIdentifier()); self::setDOMElementAttribute($element, 'showHide', ShowHide::getNameByConstant($component->getShowHide())); self::setDOMElementAttribute($element, 'identifier', $component->getIdentifier()); if ($component->hasTitle() === true) { self::setDOMElementAttribute($element, 'title', $component->getTitle()); } return $element; }
/** * Marshall an AssessmentItem object into a DOMElement object. * * @param QtiComponent $component An AssessmentItem object. * @return DOMElement The according DOMElement object. */ protected function marshall(QtiComponent $component) { $element = static::getDOMCradle()->createElement($component->getQtiClassName()); self::setDOMElementAttribute($element, 'identifier', $component->getIdentifier()); self::setDOMElementAttribute($element, 'title', $component->getTitle()); self::setDOMElementAttribute($element, 'timeDependent', $component->isTimeDependent()); self::setDOMElementAttribute($element, 'adaptive', $component->isAdaptive()); if ($component->hasLang() === true) { self::setDOMElementAttribute($element, 'lang', $component->getLang()); } if ($component->hasLabel() === true) { self::setDOMElementAttribute($element, 'label', $component->getLabel()); } if ($component->hasToolName() === true) { self::setDOMElementAttribute($element, 'toolName', $component->getToolName()); } if ($component->hasToolVersion() === true) { self::setDOMElementAttribute($element, 'toolVersion', $component->getToolVersion()); } foreach ($component->getResponseDeclarations() as $responseDeclaration) { $marshaller = $this->getMarshallerFactory()->createMarshaller($responseDeclaration); $element->appendChild($marshaller->marshall($responseDeclaration)); } foreach ($component->getOutcomeDeclarations() as $outcomeDeclaration) { $marshaller = $this->getMarshallerFactory()->createMarshaller($outcomeDeclaration); $element->appendChild($marshaller->marshall($outcomeDeclaration)); } foreach ($component->getTemplateDeclarations() as $templateDeclaration) { $marshaller = $this->getMarshallerFactory()->createMarshaller($templateDeclaration); $element->appendChild($marshaller->marshall($templateDeclaration)); } if ($component->hasTemplateProcessing() === true) { $marshaller = $this->getMarshallerFactory()->createMarshaller($component->getTemplateProcessing()); $element->appendChild($marshaller->marshall($component->getTemplateProcessing())); } foreach ($component->getStylesheets() as $stylesheet) { $marshaller = $this->getMarshallerFactory()->createMarshaller($stylesheet); $element->appendChild($marshaller->marshall($stylesheet)); } if ($component->hasItemBody() === true) { $itemBody = $component->getItemBody(); $marshaller = $this->getMarshallerFactory()->createMarshaller($itemBody); $element->appendChild($marshaller->marshall($itemBody)); } if ($component->hasResponseProcessing() === true) { $marshaller = $this->getMarshallerFactory()->createMarshaller($component->getResponseProcessing()); $element->appendChild($marshaller->marshall($component->getResponseProcessing())); } foreach ($component->getModalFeedbacks() as $modalFeedback) { $marshaller = $this->getMarshallerFactory()->createMarshaller($modalFeedback); $element->appendChild($marshaller->marshall($modalFeedback)); } return $element; }
protected function marshallChildrenKnown(QtiComponent $component, array $elements) { $element = self::getDOMCradle()->createElement($component->getQtiClassName()); self::setDOMElementAttribute($element, 'outcomeIdentifier', $component->getOutcomeIdentifier()); self::setDOMElementAttribute($element, 'identifier', $component->getIdentifier()); self::setDOMElementAttribute($element, 'showHide', ShowHide::getNameByConstant($component->getShowHide())); if ($component->hasTitle() === true) { self::setDOMElementAttribute($element, 'title', $component->getTitle()); } foreach ($elements as $e) { $element->appendChild($e); } return $element; }
/** * Marshall a VariableDeclaration object into a DOMElement object. * * @param \qtism\data\QtiComponent $component An OutcomeDeclaration object. * @return \DOMElement The according DOMElement object. */ protected function marshall(QtiComponent $component) { $element = static::getDOMCradle()->createElement($component->getQtiClassName()); self::setDOMElementAttribute($element, 'identifier', $component->getIdentifier()); self::setDOMElementAttribute($element, 'cardinality', Cardinality::getNameByConstant($component->getCardinality())); if ($component->getBaseType() != -1) { self::setDOMElementAttribute($element, 'baseType', BaseType::getNameByConstant($component->getBaseType())); } // deal with default value. if ($component->getDefaultValue() != null) { $defaultValue = $component->getDefaultValue(); $defaultValueMarshaller = $this->getMarshallerFactory()->createMarshaller($defaultValue, array($component->getBaseType())); $element->appendChild($defaultValueMarshaller->marshall($defaultValue)); } return $element; }
/** * Marshall a TestFeedback object into a DOMElement object. * * @param QtiComponent $component A TestFeedback object. * @return DOMElement The according DOMElement object. */ protected function marshall(QtiComponent $component) { $element = static::getDOMCradle()->createElement($component->getQtiClassName()); $access = $component->getAccess() == TestFeedbackAccess::AT_END ? 'atEnd' : 'during'; $showHide = $component->getShowHide() == ShowHide::SHOW ? 'show' : 'hide'; self::setDOMElementAttribute($element, 'access', $access); self::setDOMElementAttribute($element, 'outcomeIdentifier', $component->getOutcomeIdentifier()); self::setDOMElementAttribute($element, 'showHide', $showHide); self::setDOMElementAttribute($element, 'identifier', $component->getIdentifier()); $title = $component->getTitle(); if (!empty($title)) { self::setDOMElementAttribute($element, 'title', $title); } $flowStatic = static::getDOMCradle()->createDocumentFragment(); $flowStatic->appendXML($component->getContent()); $element->appendChild($flowStatic); return $element; }
/** * Marshall a Gap object into a DOMElement object. * * @param QtiComponent $component A Gap object. * @return DOMElement The according DOMElement object. * @throws MarshallingException */ protected function marshall(QtiComponent $component) { $element = self::getDOMCradle()->createElement('gap'); self::setDOMElementAttribute($element, 'identifier', $component->getIdentifier()); if ($component->isFixed() === true) { self::setDOMElementAttribute($element, 'fixed', true); } if ($component->hasTemplateIdentifier() === true) { self::setDOMElementAttribute($element, 'templateIdentifier', $component->getTemplateIdentifier()); } if ($component->getShowHide() === ShowHide::HIDE) { self::setDOMElementAttribute($element, 'showHide', ShowHide::HIDE); } if ($component->isRequired() === true) { self::setDOMElementAttribute($element, 'required', true); } self::fillElement($element, $component); return $element; }
/** * Marshall a HotspotChoice/AssociableHotspot object into a DOMElement object. * * @param \qtism\data\QtiComponent $component A HotspotChoice/AssociableHotspot object. * @return \DOMElement The according DOMElement object. * @throws \qtism\data\storage\xml\marshalling\MarshallingException */ protected function marshall(QtiComponent $component) { $version = $this->getVersion(); $element = self::getDOMCradle()->createElement($component->getQtiClassName()); self::setDOMElementAttribute($element, 'identifier', $component->getIdentifier()); self::setDOMElementAttribute($element, 'shape', QtiShape::getNameByConstant($component->getShape())); self::setDOMElementAttribute($element, 'coords', $component->getCoords()->__toString()); if ($component->isFixed() === true) { self::setDOMElementAttribute($element, 'fixed', true); } if (Version::compare($version, '2.1.0', '>=') === true && $component->hasTemplateIdentifier() === true) { self::setDOMElementAttribute($element, 'templateIdentifier', $component->getTemplateIdentifier()); } if (Version::compare($version, '2.1.0', '>=') === true && $component->getShowHide() === ShowHide::HIDE) { self::setDOMElementAttribute($element, 'showHide', ShowHide::getNameByConstant($component->getShowHide())); } if ($component->hasHotspotLabel() === true) { self::setDOMElementAttribute($element, 'hotspotLabel', $component->getHotspotLabel()); } if ($component instanceof AssociableHotspot) { if (Version::compare($version, '2.1.0', '<') === true) { $matchGroup = $component->getMatchGroup(); if (count($matchGroup) > 0) { self::setDOMElementAttribute($element, 'matchGroup', implode(' ', $matchGroup->getArrayCopy())); } } if (Version::compare($version, '2.1.0', '>=') === true) { if ($component->getMatchMin() !== 0) { self::setDOMElementAttribute($element, 'matchMin', $component->getMatchMin()); } } } if ($component instanceof AssociableHotspot) { self::setDOMElementAttribute($element, 'matchMax', $component->getMatchMax()); } $this->fillElement($element, $component); return $element; }
/** * Marshall a SectionPart object into a DOMElement object. * * @param QtiComponent $component A SectionPart object. * @return DOMElement The according DOMElement object. */ protected function marshall(QtiComponent $component) { $element = static::getDOMCradle()->createElement($component->getQtiClassName()); self::setDOMElementAttribute($element, 'identifier', $component->getIdentifier()); self::setDOMElementAttribute($element, 'required', $component->isRequired()); self::setDOMElementAttribute($element, 'fixed', $component->isFixed()); foreach ($component->getPreConditions() as $preCondition) { $marshaller = $this->getMarshallerFactory()->createMarshaller($preCondition); $element->appendChild($marshaller->marshall($preCondition)); } foreach ($component->getBranchRules() as $branchRule) { $marshaller = $this->getMarshallerFactory()->createMarshaller($branchRule); $element->appendChild($marshaller->marshall($branchRule)); } if ($component->getItemSessionControl() != null) { $marshaller = $this->getMarshallerFactory()->createMarshaller($component->getItemSessionControl()); $element->appendChild($marshaller->marshall($component->getItemSessionControl())); } if ($component->getTimeLimits() != null) { $marshaller = $this->getMarshallerFactory()->createMarshaller($component->getTimeLimits()); $element->appendChild($marshaller->marshall($component->getTimeLimits())); } return $element; }
/** * Marshall an AssessmentTest object into a DOMElement object. * * @param QtiComponent $component An AssessmentTest object. * @return DOMElement The according DOMElement object. * @throws MarshallingException */ protected function marshall(QtiComponent $component) { $element = self::getDOMCradle()->createElement($component->getQtiClassName()); self::setDOMElementAttribute($element, 'identifier', $component->getIdentifier()); self::setDOMElementAttribute($element, 'title', $component->getTitle()); $toolName = $component->getToolName(); if (!empty($toolName)) { self::setDOMElementAttribute($element, 'toolName', $component->getToolName()); } $toolVersion = $component->getToolVersion(); if (!empty($toolVersion)) { self::setDOMElementAttribute($element, 'toolVersion', $component->getToolVersion()); } if ($component->hasTimeLimits() === true) { $marshaller = $this->getMarshallerFactory()->createMarshaller($component->getTimeLimits()); $element->appendChild($marshaller->marshall($component->getTimeLimits())); } foreach ($component->getOutcomeDeclarations() as $outcomeDeclaration) { $marshaller = $this->getMarshallerFactory()->createMarshaller($outcomeDeclaration); $element->appendChild($marshaller->marshall($outcomeDeclaration)); } foreach ($component->getTestParts() as $part) { $marshaller = $this->getMarshallerFactory()->createMarshaller($part); $element->appendChild($marshaller->marshall($part)); } $outcomeProcessing = $component->getOutcomeProcessing(); if (!empty($outcomeProcessing)) { $marshaller = $this->getMarshallerFactory()->createMarshaller($outcomeProcessing); $element->appendChild($marshaller->marshall($outcomeProcessing)); } foreach ($component->getTestFeedbacks() as $feedback) { $marshaller = $this->getMarshallerFactory()->createMarshaller($feedback); $element->appendChild($marshaller->marshall($feedback)); } return $element; }
protected function includeChoiceComponent(QtiComponent $component, DOMDocumentFragment $rendering) { $choiceIndex = $this->choiceCounter; $choiceIdentifier = PhpUtils::doubleQuotedPhpString($component->getIdentifier()); $interactionIndex = $this->interactionCounter; $stateName = $this->getStateName(); $includeStmtCmt = $rendering->ownerDocument->createComment(' qtism-include($' . "{$stateName}, {$interactionIndex}, {$choiceIdentifier}, {$choiceIndex}): "); $endIncludeStmtCmt = $rendering->ownerDocument->createComment(' qtism-endinclude '); $rendering->insertBefore($includeStmtCmt, $rendering->firstChild); $rendering->appendChild($endIncludeStmtCmt); }
/** * Whether or not the 'outcomeIdentifier'/'templateIdentifier' set on a templateElement/feedbackElement/choice * matches its 'identifier' attribute. * * @param QtiComponent $component A TemplateElement or FeedbackElement or Choice element. * @return boolean */ protected function identifierMatches(QtiComponent $component) { $variableIdentifier = $component instanceof FeedbackElement || $component instanceof ModalFeedback ? $component->getOutcomeIdentifier() : $component->getTemplateIdentifier(); $identifier = $component->getIdentifier(); $showHide = $component->getShowHide(); $state = $this->getState(); return ($val = $state[$variableIdentifier]) !== null && $val === $identifier; }
/** * @see \qtism\runtime\rendering\markup\xhtml\AbstractXhtmlRenderer::appendChildren() */ protected function appendChildren(DOMDocumentFragment $fragment, QtiComponent $component, $base = '') { $renderingEngine = $this->getRenderingEngine(); if ($renderingEngine !== null) { switch ($renderingEngine->getPrintedVariablePolicy()) { case AbstractMarkupRenderingEngine::CONTEXT_AWARE: $value = Utils::printVariable($this->getRenderingEngine()->getState(), $component->getIdentifier(), $component->getFormat(), $component->mustPowerForm(), $component->getBase(), $component->getIndex(), $component->getDelimiter(), $component->getField(), $component->getMappingIndicator()); $fragment->firstChild->appendChild($fragment->ownerDocument->createTextNode($value)); break; case AbstractMarkupRenderingEngine::TEMPLATE_ORIENTED: $base = $component->getBase(); $index = $component->getIndex(); $params = array('$' . $renderingEngine->getStateName(), PhpUtils::doubleQuotedPhpString($component->getIdentifier()), PhpUtils::doubleQuotedPhpString($component->getFormat()), $component->mustPowerForm() === true ? 'true' : 'false', is_int($base) === true ? $base : PhpUtils::doubleQuotedPhpString($base), is_int($index) === true ? $index : PhpUtils::doubleQuotedPhpString($index), PhpUtils::doubleQuotedPhpString($component->getDelimiter()), PhpUtils::doubleQuotedPhpString($component->getField()), PhpUtils::doubleQuotedPhpString($component->getMappingIndicator())); $value = " qtism-printVariable(" . implode(', ', $params) . ") "; $fragment->firstChild->appendChild($fragment->ownerDocument->createComment($value)); break; } } }