annotate php/get_tests.php @ 2224:760719986df3

Tidy up file locations.
author Nicholas Jillings <nicholas.jillings@mail.bcu.ac.uk>
date Thu, 14 Apr 2016 13:54:24 +0100
parents
children 169f08dc9634
rev   line source
nicholas@2224 1 <?php
nicholas@2224 2 /*
nicholas@2224 3 Get Tests
nicholas@2224 4
nicholas@2224 5 This script returns the XML test names available, plus the number of tests
nicholas@2224 6 */
nicholas@2224 7
nicholas@2224 8 //http://stackoverflow.com/questions/4444475/transfrom-relative-path-into-absolute-url-using-php
nicholas@2224 9 function rel2abs($rel, $base)
nicholas@2224 10 {
nicholas@2224 11 /* return if already absolute URL */
nicholas@2224 12 if (parse_url($rel, PHP_URL_SCHEME) != '' || substr($rel, 0, 2) == '//') return $rel;
nicholas@2224 13
nicholas@2224 14 /* queries and anchors */
nicholas@2224 15 if ($rel[0]=='#' || $rel[0]=='?') return $base.$rel;
nicholas@2224 16
nicholas@2224 17 /* parse base URL and convert to local variables:
nicholas@2224 18 $scheme, $host, $path */
nicholas@2224 19 extract(parse_url($base));
nicholas@2224 20
nicholas@2224 21 /* remove non-directory element from path */
nicholas@2224 22 $path = preg_replace('#/[^/]*$#', '', $path);
nicholas@2224 23
nicholas@2224 24 /* destroy path if relative url points to root */
nicholas@2224 25 if ($rel[0] == '/') $path = '';
nicholas@2224 26
nicholas@2224 27 /* dirty absolute URL */
nicholas@2224 28 $abs = "$host$path/$rel";
nicholas@2224 29
nicholas@2224 30 /* replace '//' or '/./' or '/foo/../' with '/' */
nicholas@2224 31 $re = array('#(/\.?/)#', '#/(?!\.\.)[^/]+/\.\./#');
nicholas@2224 32 for($n=1; $n>0; $abs=preg_replace($re, '/', $abs, -1, $n)) {}
nicholas@2224 33
nicholas@2224 34 /* absolute URL is ready! */
nicholas@2224 35 return $scheme.'://'.$abs;
nicholas@2224 36 }
nicholas@2224 37
nicholas@2224 38 // XML Saves location - assumes it will be saves/
nicholas@2224 39 $data = [];
nicholas@2224 40 $saves = glob("../saves/*.xml");
nicholas@2224 41 if (is_array($saves))
nicholas@2224 42 {
nicholas@2224 43 foreach($saves as $filename) {
nicholas@2224 44 $xml_string = file_get_contents($filename, FILE_TEXT);
nicholas@2224 45 $xml_object = simplexml_load_string($xml_string);
nicholas@2224 46 if ($xml_object) {
nicholas@2224 47 $filename = rel2abs($filename,"http://".$_SERVER['SERVER_NAME'] . $_SERVER['REQUEST_URI']);
nicholas@2224 48 $waet = $xml_object->waet[0];
nicholas@2224 49 $testName = urldecode($waet["url"]);
nicholas@2224 50 if(array_key_exists($testName,$data)) {
nicholas@2224 51 // Key exists
nicholas@2224 52 array_push($data[$testName],$filename);
nicholas@2224 53 } else {
nicholas@2224 54 // Key does not exist
nicholas@2224 55 $data[$testName] = [$filename];
nicholas@2224 56 }
nicholas@2224 57 }
nicholas@2224 58 }
nicholas@2224 59 }
nicholas@2224 60
nicholas@2224 61 // Now read the format response
nicholas@2224 62 $format = "JSON";
nicholas@2224 63 if (array_key_exists("format",$_GET)) {
nicholas@2224 64 $format = $_GET["format"];
nicholas@2224 65 }
nicholas@2224 66 switch($format) {
nicholas@2224 67 case "JSON":
nicholas@2224 68 // Return JSON
nicholas@2224 69 $doc_root = '{"tests": [';
nicholas@2224 70 $keys = array_keys($data);
nicholas@2224 71 $numTests = count($data);
nicholas@2224 72 for ($testIndex = 0; $testIndex < $numTests; $testIndex++) {
nicholas@2224 73 $test_root = '{"testName": "'.$keys[$testIndex].'", "files": [';
nicholas@2224 74 $numFiles = count($data[$keys[$testIndex]]);
nicholas@2224 75 for ($countIndex=0; $countIndex < $numFiles; $countIndex++) {
nicholas@2224 76 $test_root = $test_root.'"'.$data[$keys[$testIndex]][$countIndex].'"';
nicholas@2224 77 if ($countIndex == $numFiles-1) {
nicholas@2224 78 $test_root = $test_root.']}';
nicholas@2224 79 } else {
nicholas@2224 80 $test_root = $test_root.',';
nicholas@2224 81 }
nicholas@2224 82 }
nicholas@2224 83 $doc_root = $doc_root.$test_root;
nicholas@2224 84 if ($testIndex == $numTests-1) {
nicholas@2224 85 $doc_root = $doc_root.']}';
nicholas@2224 86 } else {
nicholas@2224 87 $doc_root = $doc_root.',';
nicholas@2224 88 }
nicholas@2224 89 }
nicholas@2224 90 echo $doc_root;
nicholas@2224 91 break;
nicholas@2224 92 default:
nicholas@2224 93 echo '{"error": "format can only be JSON"}';
nicholas@2224 94 }
nicholas@2224 95
nicholas@2224 96 ?>