Mercurial > hg > webaudioevaluationtool
view php/score_parser.php @ 2376:c41caaa96633
Some fixes for #90. Also a failsafe loop if the server never responds with meaningul information from saves (for instance, running only on apache or basic http servers). More changes to pythonServer for python 3.5. Please check if still valid on 2.7
author | Nicholas Jillings <nicholas.jillings@mail.bcu.ac.uk> |
---|---|
date | Thu, 19 May 2016 10:44:19 +0100 |
parents | 760719986df3 |
children | d26623bd65e0 |
line wrap: on
line source
<?php // Value parser for WAET XML // testPage --> axis --> element --> value class nestedObject { function __construct($id) { $this->id = $id; $this->nest = array(); $this->type = null; $this->num = 0; } function addNewChild($id) { if ($this->type == null) { $this->type = "nest"; } if ($this->type == "nest") { $obj = new nestedObject($id); array_push($this->nest,$obj); $this->num = count($this->nest); return $this->nest[$this->num-1]; } return null; } function findChild($checkId) { if ($this->type == "nest"){ foreach($this->nest as $child) { if (strcmp($checkId,$child->id) == 0) { return $child; } } } return null; } function addValue($val) { if ($this->type == null) { $this->type = "value"; } if ($this->type == "value") { array_push($this->nest,$val); $this->num = count($this->nest); return $this->nest[$this->num-1]; } return null; } } // Build the root nest object to hold the testPages $root = new nestedObject("root"); // XML Saves location - assumes it will be saves/ $saves = glob("../saves/*.xml"); if (is_array($saves)) { foreach($saves as $filename) { $xml_string = file_get_contents($filename, FILE_TEXT); $xml_object = simplexml_load_string($xml_string); if ($xml_object == false) { echo "<h1>FATAL</h1> <span>could not parse file ".$filename.": </span>"; foreach(libxml_get_errors() as $error) { echo "<br>", $error->message; } } else { // Iterate over each $page node foreach($xml_object->page as $pageInstance) { // Find in the nest $pageInstanceId = $pageInstance['ref']; $page_nest = $root->findChild($pageInstanceId); if ($page_nest == null) { $page_nest = $root->addNewChild($pageInstanceId); } // Iterate over each $element node foreach($pageInstance->audioelement as $element) { // Find our specific element tag $elementId = null; if (isset($element['name'])) { $elementId = $element['name']; } else { $elementId = $element['ref']; } $element_nest = $page_nest->findChild($elementId); if ($element_nest == null) { $element_nest = $page_nest->addNewChild($elementId); } // Now get the <value> tags foreach($element->value as $value) { $axis_nest = null; $axisName = "default"; if (isset($value['interface-name'])) { // Find the axis nest $axisName = $value['interface-name']; } $axis_nest = $element_nest->findChild($axisName); if ($axis_nest == null) { $axis_nest = $element_nest->addNewChild($axisName); } // Now push our value $axis_nest->addValue($value); } } } } } // We now have a structure in $root. EXPORT IT switch($_GET['format']) { case "XML": // Convert to XML $doc_root = new SimpleXMLElement('<waetprocess/>'); foreach($root->nest as $page) { $doc_page = $doc_root->addChild("page"); $doc_page->addAttribute("id",$page->id); foreach($page->nest as $element) { $doc_element = $doc_page->addChild("audioelement"); $doc_element->addAttribute("id",$element->id); foreach($element->nest as $axis) { $doc_axis = $doc_element->addChild("interface"); $doc_axis->addAttribute("name",$axis->id); foreach($axis->nest as $value) { $doc_axis->addChild("value",$value); } } } } echo $doc_root->asXML(); break; case "JSON": // Convert to JSON $doc_root = '{ "pages": ['; for ($pageIndex = 0; $pageIndex < $root->num; $pageIndex++) { $page = $root->nest[$pageIndex]; $doc_page = '{ "id": "'.$page->id.'", "elements": ['; for($elementIndex = 0; $elementIndex < $page->num; $elementIndex++) { $element = $page->nest[$elementIndex]; $doc_element = '{ "id": "'.$element->id.'", "axis": ['; for($axisIndex = 0; $axisIndex < $element->num; $axisIndex++) { $axis = $element->nest[$axisIndex]; $doc_axis = '{ "name": "'.$axis->id.'", "values": ['; for ($valueIndex = 0; $valueIndex < $axis->num; $valueIndex++) { $doc_axis = $doc_axis."".strval($axis->nest[$valueIndex]); if ($valueIndex < $axis->num-1) { $doc_axis = $doc_axis.', '; } } $doc_axis = $doc_axis.']}'; if ($axisIndex < $element->num-1) { $doc_axis = $doc_axis.', '; } $doc_element = $doc_element.$doc_axis; } $doc_element = $doc_element.']}'; if ($elementIndex < $page->num-1) { $doc_element = $doc_element.', '; } $doc_page = $doc_page.$doc_element; } $doc_page = $doc_page.']}'; if ($pageIndex < $root->num-1) { $doc_page = $doc_page.', '; } $doc_root = $doc_root.$doc_page; } $doc_root = $doc_root.']}'; echo $doc_root; break; case "CSV": // Convert to CSV // CSV Columts: page, axis, element, value $doc_string = "page,element,axis,value"."\r\n"; foreach($root->nest as $page){ foreach($page->nest as $element) { foreach($element->nest as $axis) { foreach($axis->nest as $value) { $doc_string = $doc_string.$page->id.','; $doc_string = $doc_string.$element->id.','; $doc_string = $doc_string.$axis->id.','; $doc_string = $doc_string.$value; $doc_string = $doc_string."\r\n"; } } } } echo $doc_string; } } else { echo "FATAL - No saved XML files discovered"; } ?>