public function testSeparateStylesheetTwo() { // The loaded component is still a rubricBlock but this // time with two (YES, TWO!) stylesheets. $doc = new XmlDocument('2.1'); $doc->load(self::samplesDir() . 'rendering/rubricblock_3.xml'); $this->assertEquals(2, count($doc->getDocumentComponent()->getStylesheets())); $renderingEngine = new XhtmlRenderingEngine(); $renderingEngine->setStylesheetPolicy(XhtmlRenderingEngine::STYLESHEET_SEPARATE); $rendering = $renderingEngine->render($doc->getDocumentComponent()); $linkElts = $rendering->getElementsByTagName('link'); $this->assertEquals(0, $linkElts->length); $linksFragment = $renderingEngine->getStylesheets(); $this->assertInstanceOf('\\DOMDocumentFragment', $linksFragment); $this->assertEquals(2, $linksFragment->childNodes->length); // Test first <link> element. $linkElt = $linksFragment->childNodes->item(0); $this->assertEquals('link', $linkElt->localName); $this->assertEquals('style1.css', $linkElt->getAttribute('href')); $this->assertEquals('text/css', $linkElt->getAttribute('type')); $this->assertEquals('screen', $linkElt->getAttribute('media')); $this->assertEquals('\\0_ !HOURRAY! _0/', $linkElt->getAttribute('title')); // Test second <link> element. $linkElt = $linksFragment->childNodes->item(1); $this->assertEquals('link', $linkElt->localName); $this->assertEquals('style2.css', $linkElt->getAttribute('href')); $this->assertEquals('text/css', $linkElt->getAttribute('type')); $this->assertEquals('screen', $linkElt->getAttribute('media')); $this->assertEquals('0/*\\0 (Jedi duel)', $linkElt->getAttribute('title')); }
/** * Create a new AqtiRenderingEngine object. * */ public function __construct() { parent::__construct(); // Register the MathRenderer to make it render // MathML without namespacing. $this->registerRenderer('math', new MathRenderer(null, false)); }
public function testRenderChildren() { $ctx = new XhtmlRenderingEngine(); $ctx->setCssClassPolicy(XhtmlRenderingEngine::CSSCLASS_ABSTRACT); $abbr = new Abbr('my-abbr', 'qti qti-abbr'); $abbrRenderer = new BodyElementRenderer(); $abbrRenderer->setRenderingEngine($ctx); $textRun = new TextRun('abbreviation...'); $textRunRenderer = new TextRunRenderer(); $textRunRenderer->setRenderingEngine($ctx); $renderedTextRun = $textRunRenderer->render($textRun); $ctx->storeRendering($textRun, $renderedTextRun); $abbr->setContent(new InlineCollection(array($textRun))); $element = $abbrRenderer->render($abbr)->firstChild; $this->assertEquals('abbr', $element->nodeName); $this->assertEquals('my-abbr', $element->getAttribute('id')); $this->assertEquals('qti-bodyElement qti-abbr qti qti-abbr', $element->getAttribute('class')); $this->assertEquals('abbreviation...', $element->firstChild->wholeText); }
/** * Get the route (the way items are delivered into a test). * This method will compute the shuffling and other predefined conditions to take the test. * * @param string $testFilePath - the path of the QTI Test definition * @return array the test structure as it should be delivered. */ private function getRoute($testFilePath) { $route = array(); // Load the test definition. $testDefinition = new XmlDocument(); $testDefinition->load($testFilePath); // Make the test definition a compact one. Compact tests combine all needed // information to run a test instance. $resolver = new taoQtiTest_helpers_ItemResolver(); $compactTestDef = XmlCompactDocument::createFromXmlAssessmentTestDocument($testDefinition, $resolver); $sessionManager = new SessionManager(); $testSession = $sessionManager->createAssessmentTestSession($compactTestDef->getDocumentComponent()); $assessmentTest = $testSession->getAssessmentTest(); $renderingEngine = new XhtmlRenderingEngine(); $testPartId = null; $sectionId = null; //We are getting items with their respective test part and sections, so we need to restructure it foreach ($testSession->getRoute() as $routeItem) { $item = array('id' => $routeItem->getAssessmentItemRef()->getIdentifier(), 'href' => $routeItem->getAssessmentItemRef()->getHref()); $routeSections = $routeItem->getAssessmentSections()->getArrayCopy(); $lastSection = $routeSections[count($routeSections) - 1]; if ($sectionId != $lastSection->getIdentifier() || $testPartId != $routeItem->getTestPart()->getIdentifier()) { $sectionId = $lastSection->getIdentifier(); $rubricBlocks = array(); foreach ($routeItem->getAssessmentSections() as $section) { foreach ($section->getRubricBlocks() as $rubricBlock) { $xmlRendering = $renderingEngine->render($rubricBlock); $strRendering = $xmlRendering->saveXML($xmlRendering->documentElement); $finalRendering = ''; // No formatting at all :) ! foreach (preg_split('/\\n|\\r/u', $strRendering, -1, PREG_SPLIT_NO_EMPTY) as $line) { $finalRendering .= trim($line); } $rubricBlocks[] = $finalRendering; } } $section = array('id' => $section->getIdentifier(), 'title' => $section->getTitle(), 'rubricBlock' => $rubricBlocks, 'items' => array($item)); if ($testPartId != $routeItem->getTestPart()->getIdentifier()) { $testPartId = $routeItem->getTestPart()->getIdentifier(); $route[] = array('id' => $testPartId, 'sections' => array($section)); } else { $route = $this->addSectionToRoute($route, $testPartId, $section); } } else { $route = $this->addItemToRoute($route, $testPartId, $sectionId, $item); } } return array('id' => $assessmentTest->getIdentifier(), 'title' => $assessmentTest->getTitle(), 'testParts' => $route); }
<?php use qtism\runtime\rendering\markup\AbstractMarkupRenderingEngine; use qtism\data\View; use qtism\data\ViewCollection; use qtism\data\storage\xml\XmlDocument; use qtism\runtime\rendering\markup\xhtml\XhtmlRenderingEngine; require_once dirname(__FILE__) . '/../../qtism/qtism.php'; $doc = new XmlDocument(); $doc->load('../samples/rendering/rubricblock_1.xml'); $renderer = new XhtmlRenderingEngine(); if (isset($argv[1])) { if (strpos($argv[1], ',') !== false) { $strviews = explode(',', $argv[1]); $view = new ViewCollection(); foreach ($strviews as $v) { $view[] = View::getConstantByName(trim($v)); } } else { $view = new ViewCollection(array(View::getConstantByName(trim($argv[1])))); } $renderer->setViewPolicy(AbstractMarkupRenderingEngine::CONTEXT_AWARE); $renderer->setViews($view); } $rendering = $renderer->render($doc->getDocumentComponent()); $rendering->formatOutput = true; echo $rendering->saveXML();
<?php use qtism\data\storage\xml\XmlDocument; use qtism\runtime\rendering\markup\xhtml\XhtmlRenderingEngine; require_once dirname(__FILE__) . '/../../qtism/qtism.php'; $doc = new XmlDocument(); $doc->load('../samples/rendering/gapmatchinteraction_1.xml'); $renderer = new XhtmlRenderingEngine(); if (isset($argv[1]) && $argv[1] === 'shuffle') { $renderer->setShuffle(true); } $rendering = $renderer->render($doc->getDocumentComponent()); $rendering->formatOutput = true; echo $rendering->saveXML();
<?php use qtism\runtime\common\State; use qtism\data\storage\xml\XmlDocument; use qtism\runtime\rendering\markup\xhtml\XhtmlRenderingEngine; use qtism\runtime\rendering\markup\AbstractMarkupRenderingEngine; use qtism\runtime\common\OutcomeVariable; use qtism\common\enums\BaseType; use qtism\common\enums\Cardinality; use qtism\common\datatypes\Identifier; require_once dirname(__FILE__) . '/../../vendor/autoload.php'; $doc = new XmlDocument(); $doc->load(dirname(__FILE__) . '/../samples/rendering/itemfeedback_1.xml'); $outcome1 = new OutcomeVariable('FEEDBACK', Cardinality::SINGLE, BaseType::IDENTIFIER, new Identifier('')); $renderer = new XhtmlRenderingEngine(); if (isset($argv[1]) && $argv[1] === 'CONTEXT_AWARE') { $renderer->setFeedbackShowHidePolicy(AbstractMarkupRenderingEngine::CONTEXT_AWARE); if (isset($argv[2])) { $outcome1->setValue(new Identifier($argv[2])); } } $renderer->setState(new State(array($outcome1))); $rendering = $renderer->render($doc->getDocumentComponent()); $rendering->formatOutput = true; echo $rendering->saveXML();
<?php use qtism\runtime\rendering\markup\AbstractMarkupRenderingEngine; use qtism\data\storage\xml\XmlDocument; use qtism\runtime\rendering\markup\xhtml\XhtmlRenderingEngine; require_once dirname(__FILE__) . '/../../vendor/autoload.php'; $doc = new XmlDocument(); $doc->load(dirname(__FILE__) . '/../samples/rendering/xmlbase_1.xml'); $renderer = new XhtmlRenderingEngine(); if (empty($argv[1]) === false) { switch (strtolower($argv[1])) { case 'ignore': $renderer->setXmlBasePolicy(AbstractMarkupRenderingEngine::XMLBASE_IGNORE); break; case 'keep': $renderer->setXmlBasePolicy(AbstractMarkupRenderingEngine::XMLBASE_KEEP); break; case 'process': $renderer->setXmlBasePolicy(AbstractMarkupRenderingEngine::XMLBASE_PROCESS); break; } } if (empty($argv[2]) === false) { $renderer->setRootBase(strval($argv[2])); } $rendering = $renderer->render($doc->getDocumentComponent()); $rendering->formatOutput = true; echo $rendering->saveXML();
/** * Initialize the compilation by: * * * 1. Spawning public and private compilation directoryies. * * 2. Instantiating appropriate rendering engine and CSS utilities. * * for the next compilation process. */ protected function initCompilation() { $ds = DIRECTORY_SEPARATOR; // Initialize public and private compilation directories. $this->setPrivateDirectory($this->spawnPrivateDirectory()); $this->setPublicDirectory($this->spawnPublicDirectory()); // Extra path. $testService = taoQtiTest_models_classes_QtiTestService::singleton(); $testDefinitionDir = dirname($testService->getRelTestPath($this->getResource())); $this->setExtraPath($testDefinitionDir); // Initialize rendering engine. $renderingEngine = new XhtmlRenderingEngine(); $renderingEngine->setStylesheetPolicy(XhtmlRenderingEngine::STYLESHEET_SEPARATE); $renderingEngine->setXmlBasePolicy(XhtmlRenderingEngine::XMLBASE_PROCESS); $renderingEngine->setFeedbackShowHidePolicy(XhtmlRenderingEngine::TEMPLATE_ORIENTED); $renderingEngine->setViewPolicy(XhtmlRenderingEngine::TEMPLATE_ORIENTED); $renderingEngine->setPrintedVariablePolicy(XhtmlRenderingEngine::TEMPLATE_ORIENTED); $renderingEngine->setStateName(TAOQTITEST_RENDERING_STATE_NAME); $renderingEngine->setRootBase(TAOQTITEST_PLACEHOLDER_BASE_URI . rtrim($this->getExtraPath(), $ds)); $renderingEngine->setViewsName(TAOQTITEST_VIEWS_NAME); $this->setRenderingEngine($renderingEngine); // Initialize CSS Scoper. $this->setCssScoper(new CssScoper()); // Initialize Post Markup Renderer. $this->setMarkupPostRenderer(new MarkupPostRenderer(true, true, true)); }
<?php use qtism\runtime\rendering\markup\AbstractMarkupRenderingEngine; use qtism\data\View; use qtism\data\ViewCollection; use qtism\data\storage\xml\XmlDocument; use qtism\runtime\rendering\markup\xhtml\XhtmlRenderingEngine; require_once dirname(__FILE__) . '/../../qtism/qtism.php'; $doc = new XmlDocument(); $doc->load('../samples/rendering/rubricblock_2.xml'); $renderer = new XhtmlRenderingEngine(); $separate = false; if (isset($argv[1]) && strtolower($argv[1]) === 'separate') { $separate = true; } $renderer->setStylesheetPolicy($separate === true ? XhtmlRenderingEngine::STYLESHEET_SEPARATE : XhtmlRenderingEngine::STYLESHEET_INLINE); $rendering = $renderer->render($doc->getDocumentComponent()); $rendering->formatOutput = true; echo $rendering->saveXML(); if ($separate === true) { echo "\n\nSeparate Stylesheets:\n"; echo "----------------------\n\n"; $stylesheets = $renderer->getStylesheets(); echo $stylesheets->ownerDocument->saveXML($stylesheets) . "\n"; }
<?php use qtism\common\datatypes\String; use qtism\common\enums\BaseType; use qtism\common\enums\Cardinality; use qtism\runtime\common\TemplateVariable; use qtism\runtime\common\State; use qtism\data\storage\xml\XmlDocument; use qtism\runtime\rendering\markup\xhtml\XhtmlRenderingEngine; require_once dirname(__FILE__) . '/../../qtism/qtism.php'; $doc = new XmlDocument(); $doc->load('../samples/rendering/printedvariable_1.xml'); $renderer = new XhtmlRenderingEngine(); $state = new State(); $state->setVariable(new TemplateVariable('TPL_H', Cardinality::SINGLE, BaseType::STRING, new String('Bubble Gum'))); $state->setVariable(new TemplateVariable('TPL_He', Cardinality::SINGLE, BaseType::STRING, new String('Bacta'))); $state->setVariable(new TemplateVariable('TPL_C', Cardinality::SINGLE, BaseType::STRING, new String('Cola'))); $state->setVariable(new TemplateVariable('TPL_O', Cardinality::SINGLE, BaseType::STRING, new String('Meat'))); $state->setVariable(new TemplateVariable('TPL_N', Cardinality::SINGLE, BaseType::STRING, new String('Potatoes'))); $state->setVariable(new TemplateVariable('TPL_Cl', Cardinality::SINGLE, BaseType::STRING, new String('Candies'))); if (isset($argv[1]) && trim(strtolower($argv[1])) === 'context_aware') { $renderer->setPrintedVariablePolicy(XhtmlRenderingEngine::CONTEXT_AWARE); $renderer->setState($state); } else { if (isset($argv[1]) && trim(strtolower($argv[1])) === 'template_oriented') { $renderer->setPrintedVariablePolicy(XhtmlRenderingEngine::TEMPLATE_ORIENTED); $renderer->setState($state); } else { $renderer->setPrintedVariablePolicy(XhtmlRenderingEngine::CONTEXT_STATIC); } }
<?php use qtism\data\storage\xml\XmlDocument; use qtism\runtime\rendering\markup\xhtml\XhtmlRenderingEngine; require_once dirname(__FILE__) . '/../../vendor/autoload.php'; $doc = new XmlDocument(); $doc->load(dirname(__FILE__) . '/../samples/rendering/orderinteraction_1.xml'); $renderer = new XhtmlRenderingEngine(); if (isset($argv[1]) && $argv[1] === 'shuffle') { $renderer->setShufflingPolicy(XhtmlRenderingEngine::CONTEXT_AWARE); } $rendering = $renderer->render($doc->getDocumentComponent()); $rendering->formatOutput = true; echo $rendering->saveHTML();
/** * Instantiate an appropriate Rendering Engine. * * The instantiated Rendering Engine implementation will depend on the "flavour" * CLI argument. * * @return \qtism\runtime\rendering\markup\AbstractMarkupRenderingEngine */ private function instantiateEngine() { $arguments = $this->getArguments(); $engine = null; switch (strtolower($arguments['flavour'])) { case 'goldilocks': $engine = new GoldilocksRenderingEngine(); break; case 'xhtml': $engine = new XhtmlRenderingEngine(); break; } if ($arguments['xmlbase'] === 'process') { $engine->setXmlBasePolicy(AbstractMarkupRenderingEngine::XMLBASE_PROCESS); } elseif ($arguments['xmlbase'] === 'keep') { $engine->setXmlBasePolicy(AbstractMarkupRenderingEngine::XMLBASE_KEEP); } elseif ($arguments['xmlbase'] === 'ignore') { $engine->setXmlBasePolicy(AbstractMarkupRenderingEngine::XMLBASE_IGNORE); } if ($arguments['document'] === true) { $engine->setStylesheetPolicy(AbstractMarkupRenderingEngine::STYLESHEET_SEPARATE); } if ($arguments['csshierarchy'] === true) { $engine->setCssClassPolicy(AbstractMarkupRenderingEngine::CSSCLASS_ABSTRACT); } return $engine; }
<?php use qtism\runtime\rendering\markup\AbstractMarkupRenderingEngine; use qtism\data\View; use qtism\data\ViewCollection; use qtism\data\storage\xml\XmlDocument; use qtism\runtime\rendering\markup\xhtml\XhtmlRenderingEngine; require_once dirname(__FILE__) . '/../../qtism/qtism.php'; $doc = new XmlDocument(); $doc->load('../samples/rendering/rubricblock_4.xml'); $renderer = new XhtmlRenderingEngine(); $renderer->setViewPolicy(XhtmlRenderingEngine::TEMPLATE_ORIENTED); $rendering = $renderer->render($doc->getDocumentComponent()); $rendering->formatOutput = true; echo $rendering->saveXML();
<?php use qtism\common\datatypes\Identifier; use qtism\runtime\common\State; use qtism\runtime\rendering\markup\AbstractMarkupRenderingEngine; use qtism\common\enums\BaseType; use qtism\common\enums\Cardinality; use qtism\runtime\common\TemplateVariable; use qtism\data\storage\xml\XmlDocument; use qtism\runtime\rendering\markup\xhtml\XhtmlRenderingEngine; require_once dirname(__FILE__) . '/../../vendor/autoload.php'; $doc = new XmlDocument(); $doc->load(dirname(__FILE__) . '/../samples/rendering/choiceinteraction_1.xml'); $renderer = new XhtmlRenderingEngine(); $renderer->setChoiceShowHidePolicy(AbstractMarkupRenderingEngine::TEMPLATE_ORIENTED); $renderer->setShufflingPolicy(AbstractMarkupRenderingEngine::TEMPLATE_ORIENTED); $rendering = $renderer->render($doc->getDocumentComponent()); $rendering->formatOutput = true; echo $rendering->saveXML();
<?php use qtism\data\storage\xml\XmlDocument; use qtism\runtime\rendering\markup\xhtml\XhtmlRenderingEngine; use qtism\runtime\common\State; use qtism\runtime\common\TemplateVariable; use qtism\common\enums\BaseType; use qtism\common\enums\Cardinality; use qtism\common\datatypes\QtiString; require_once dirname(__FILE__) . '/../../vendor/autoload.php'; $doc = new XmlDocument(); $doc->load(dirname(__FILE__) . '/../samples/rendering/math_3.xml'); $tpl_E = new TemplateVariable('TPL_E', Cardinality::SINGLE, BaseType::STRING, new QtiString('E')); $tpl_m = new TemplateVariable('TPL_m', Cardinality::SINGLE, BaseType::STRING, new QtiString('m')); $tpl_c = new TemplateVariable('TPL_c', Cardinality::SINGLE, BaseType::STRING, new QtiString('c')); $renderer = new XhtmlRenderingEngine(); $renderer->setState(new State(array($tpl_E, $tpl_m, $tpl_c))); $renderer->setPrintedVariablePolicy(XhtmlRenderingEngine::TEMPLATE_ORIENTED); $rendering = $renderer->render($doc->getDocumentComponent()); $rendering->formatOutput = true; echo $rendering->saveXML();
<?php use qtism\runtime\common\State; use qtism\runtime\rendering\markup\AbstractMarkupRenderingEngine; use qtism\common\enums\BaseType; use qtism\common\enums\Cardinality; use qtism\runtime\common\TemplateVariable; use qtism\data\storage\xml\XmlDocument; use qtism\runtime\rendering\markup\xhtml\XhtmlRenderingEngine; require_once dirname(__FILE__) . '/../../qtism/qtism.php'; $doc = new XmlDocument(); $doc->load('../samples/rendering/choiceinteraction_1.xml'); $renderer = new XhtmlRenderingEngine(); $shuffle = false; if (isset($argv[1]) && $argv[1] === 'shuffle') { $renderer->setShuffle(true); $shuffle = true; } if (isset($argv[1]) && $shuffle === true && isset($argv[2]) || isset($argv[1]) && $shuffle === false) { $templateVariable = new TemplateVariable('SHOWBLACK', Cardinality::SINGLE, BaseType::IDENTIFIER); if ($shuffle === true) { $templateVariable->setValue($argv[2]); } else { $templateVariable->setValue($argv[1]); } $renderer->setChoiceShowHidePolicy(AbstractMarkupRenderingEngine::CONTEXT_AWARE); $state = new State(array($templateVariable)); $renderer->setState($state); } $rendering = $renderer->render($doc->getDocumentComponent()); $rendering->formatOutput = true;
<?php /** * I don't even understand how it is correctly parsed... * But it's safe! */ use qtism\data\storage\xml\XmlDocument; use qtism\runtime\rendering\markup\xhtml\XhtmlRenderingEngine; require_once dirname(__FILE__) . '/../../qtism/qtism.php'; $doc = new XmlDocument(); $doc->load('../samples/rendering/php_highjacking_3.xml', true); $renderer = new XhtmlRenderingEngine(); $rendering = $renderer->render($doc->getDocumentComponent()); $rendering->formatOutput = true; echo $rendering->saveXML();
<?php use qtism\data\storage\xml\XmlDocument; use qtism\runtime\rendering\markup\xhtml\XhtmlRenderingEngine; require_once dirname(__FILE__) . '/../../vendor/autoload.php'; $doc = new XmlDocument(); $doc->load(dirname(__FILE__) . '/../samples/rendering/itemwithfullfeedback_1.xml'); $renderer = new XhtmlRenderingEngine(); $renderer->setFeedbackShowHidePolicy(XhtmlRenderingEngine::TEMPLATE_ORIENTED); $rendering = $renderer->render($doc->getDocumentComponent()); $rendering->formatOutput = true; echo $rendering->saveXML();