Mercurial > hg > webaudioevaluationtool
view php/pool.php @ 2988:d5c20bd0eb62
Preliminary fixes re robustness against 'repeated pages' (repeatCount)
author | Brecht De Man <brecht.deman@bcu.ac.uk> |
---|---|
date | Wed, 25 Apr 2018 15:19:46 +0200 |
parents | 464c6c6692d6 |
children | 53d701288da5 |
line wrap: on
line source
<?php header("Cache-Control: no-store, no-cache, must-revalidate, max-age=0"); header("Cache-Control: post-check=0, pre-check=0", false); header("Pragma: no-cache"); // This works out the pool of pages to force the browser to use from the master pool set by 'modifying' the XML file // // This scripts lists all participated pages and ranks them by lowest occurence first // The script then removes from the list any pages which have been completed more times than the lowest occuring test page // If the number of pages left is less than the number of pages requested from the poolSize, then those that were // selected will have the alwaysInclude attribute set to true to ensure the next iteration will be selected. Then the next // least occuring pages are re-added. This continues until number of testPages >= poolSize. // The reference will always point to the original master XML file. include 'rel2abs.php'; // MODIFY THE FOLLOWING LINE TO POINT TO YOUR TEST FILE $master_file = "../tests/pool.xml"; // Note this is relative to the PHP location // First set up the store with all the test page key nodes $pages = array(); $master_xml = simplexml_load_string(file_get_contents($master_file, FILE_TEXT)); if ($master_xml) { if (!isset($master_xml->setup["poolSize"])) { echo file_get_contents($master_file, FILE_TEXT); return; } $poolSize = $master_xml->setup["poolSize"]; foreach($master_xml->page as $pageInstance) { $id = (string)$pageInstance['id']; $pages[$id] = 0; } } $waet_url = rel2abs("pool.php","http://".$_SERVER['SERVER_NAME'] . $_SERVER['REQUEST_URI']); $saves = glob("../saves/*.xml"); if (is_array($saves)) { foreach($saves as $filename) { $xml_object = simplexml_load_string(file_get_contents($filename, FILE_TEXT)); if($xml_object) { // First we must check the saves match the master URL $waet = $xml_object->waet[0]; if (urldecode($waet["url"])==$waet_url) { // This save is a save from the master XML // Count which pages have been added foreach($xml_object->page as $page) { $id = (string)$page['ref']; $pages[$id] = $pages[$id] + 1; } } } } } // Now we have a list of pages, sorted from low to high // Create the new prototype tree $orig_doc = new DOMDocument; $orig_doc->loadXML(file_get_contents($master_file, FILE_TEXT)); $orig_doc->schemaValidate("../xml/test-schema.xsd"); $new_doc = new DOMDocument; $new_doc->formatOutput = true; //<waet xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="test-schema.xsd"> $root = $new_doc->createElement('waet'); $root->setAttribute("xmlns:xsi","http://www.w3.org/2001/XMLSchema-instance"); $root->setAttribute("xsi:noNamespaceSchemaLocation","test-schema.xsd"); $root = $new_doc->appendChild($root); // Copy over the <setup> node $dom_setup = $new_doc->importNode(dom_import_simplexml($master_xml->setup),true); $root->appendChild($dom_setup); // We must now extract the number which have been performed the least $rot_pages = array(); foreach($pages as $key => $var) if(array_key_exists($var,$rot_pages)) { array_push($rot_pages[$var],$key); } else { $rot_pages[$var] = array($key); } ksort($rot_pages); $Keys = array_keys($rot_pages); // Pages are grouped into an array based on the number of page initiations ($rot_pages) // $Keys is an array of the sorted key maps $pageList = $new_doc->getElementsByTagName("page"); $iter = 0; while ($pageList->length < $poolSize) { if ($iter > 0) { // We are adding more than one set of pages, make all current always include foreach($pageList as $page) { $page->setAttribute("alwaysInclude","true"); } } foreach($rot_pages[$Keys[$iter]] as $pageId) { // We have the pages to add as a $pageId // Now COPY $dom_page = $orig_doc->getElementById($pageId); $dom_page = $new_doc->importNode($dom_page,true); $root->appendChild($dom_page); } $iter++; $pageList = $new_doc->getElementsByTagName("page"); } echo $new_doc->saveXML(); ?>