Mercurial > hg > webaudioevaluationtool
view php/comment_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 // Comment Parser for PHP class audioElement { function __construct($id) { $this->id = $id; $this->comments = array(); } function addComment($str) { array_push($this->comments,$str); } } class testPage { function __construct($id) { $this->id = $id; $this->elements = array(); } } // XML Saves location - assumes it will be saves/ $saves = glob("../saves/*.xml"); $comment_struct = array(); 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 audioHolder node foreach($xml_object->page as $pageInstance) { // Find the page in the comment_struct $page_struct = null; if($pageInstance['state'] == "complete") { foreach($comment_struct as $comment_struct_page) { if ($pageInstance['ref'] == $comment_struct_page->id) { $page_struct = $comment_struct_page; break; } } if ($page_struct == null) { array_push($comment_struct,new testPage($pageInstance['ref'])); $page_struct = $comment_struct[count($comment_struct)-1]; } // Get the audioelements of the page foreach($pageInstance->audioelement as $fragment) { // Find the page in the comment_struct $element_struct = null; foreach($page_struct->elements as $page_struct_element) { if ($fragment['name'] == $page_struct_element->id) { $element_struct = $page_struct_element; break; } } if ($element_struct == null) { array_push($page_struct->elements,new audioElement($fragment['name'])); $element_struct = $page_struct->elements[count($page_struct->elements)-1]; } $element_struct->addComment($fragment->comment->response); } } } } } // Now we have a structure containing all comment data switch($_GET['format']) { case "XML": // Convert to an XML $doc_struct = new SimpleXMLElement('<waetprocess/>'); foreach($comment_struct as $page_struct) { $doc_page = $doc_struct->addChild("page"); $doc_page->addAttribute("id",$page_struct->id); foreach($page_struct->elements as $element_struct) { $doc_element = $doc_page->addChild("audioelement"); $doc_element->addAttribute("id",$element_struct->id); foreach($element_struct->comments as $comment) { $doc_comment = $doc_element->addChild("comment",$comment); } } } echo $doc_struct->asXML(); break; case "JSON": // Convert to JSON $doc_string = '{ "pages": ['; for($page_index = 0; $page_index < count($comment_struct); $page_index++ ) { $page_struct = $comment_struct[$page_index]; $doc_page = '{"id": "'.$page_struct->id.'", "elements": ['; for($element_index = 0; $element_index < count($page_struct->elements); $element_index++ ) { $element_struct = $page_struct->elements[$element_index]; $doc_element = '{"id": "'.$element_struct->id.'", "comments": ['; for($comment_index = 0; $comment_index < count($element_struct->comments); $comment_index++ ) { $doc_comment = '"'.$element_struct->comments[$comment_index].'"'; if ($comment_index < count($element_struct->comments)-1) { $doc_comment = $doc_comment.','; } $doc_element = $doc_element.$doc_comment; } $doc_element = $doc_element.']}'; if ($element_index < count($page_struct->elements)-1) { $doc_element = $doc_element.','; } $doc_page = $doc_page.$doc_element; } $doc_page = $doc_page.']}'; if ($page_index < count($comment_struct)-1) { $doc_page = $doc_page.','; } $doc_string = $doc_string.$doc_page; } $doc_string = $doc_string."]}"; echo $doc_string; break; case "CSV": // Conver to CSV // The CSV has three columns: page, element, comment $doc_string = "page,element,comment"."\r\n"; foreach($comment_struct as $page_struct) { foreach($page_struct->elements as $element_struct) { foreach($element_struct->comments as $comment) { $doc_string = $doc_string.$page_struct->id.",".$element_struct->id.",".$comment."\r\n"; } } } echo $doc_string; } } else { echo "FATAL - No saved XML files discovered"; } ?>