Mercurial > hg > webaudioevaluationtool
diff scripts/get_filtered_count.php @ 650:ce3d4d6d01b8 Dev_main
Major updates. Specification Nodes now own file (specification.js). Updating Analysis to allow filtering based on survey responses.
author | Nicholas Jillings <n.g.r.jillings@se14.qmul.ac.uk> |
---|---|
date | Thu, 31 Mar 2016 13:31:42 +0100 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/scripts/get_filtered_count.php Thu Mar 31 13:31:42 2016 +0100 @@ -0,0 +1,134 @@ +<?php +//http://stackoverflow.com/questions/4444475/transfrom-relative-path-into-absolute-url-using-php +function rel2abs($rel, $base) +{ + /* return if already absolute URL */ + if (parse_url($rel, PHP_URL_SCHEME) != '' || substr($rel, 0, 2) == '//') return $rel; + + /* queries and anchors */ + if ($rel[0]=='#' || $rel[0]=='?') return $base.$rel; + + /* parse base URL and convert to local variables: + $scheme, $host, $path */ + extract(parse_url($base)); + + /* remove non-directory element from path */ + $path = preg_replace('#/[^/]*$#', '', $path); + + /* destroy path if relative url points to root */ + if ($rel[0] == '/') $path = ''; + + /* dirty absolute URL */ + $abs = "$host$path/$rel"; + + /* replace '//' or '/./' or '/foo/../' with '/' */ + $re = array('#(/\.?/)#', '#/(?!\.\.)[^/]+/\.\./#'); + for($n=1; $n>0; $abs=preg_replace($re, '/', $abs, -1, $n)) {} + + /* absolute URL is ready! */ + return $scheme.'://'.$abs; +} + +/* + This looks for files that pass the filtering response + The filtering system uses key-value pairs + The key is double encoded using a '-'. The first part is the ID of the item to filter, + the second is the method: + min - Minimum Inclusive + max - Maximum Inclusive + exclude-# - exclude, followed by a number to uniquely add, (will create a triple [], ignore the third as random) +*/ +$keys = []; +$waet_url = null; +foreach ($_GET as $key => $value) { + $key = explode("-",$key); + if ($key[0] == "url") { + $waet_url = $value; + } else { + $v_pair = [$key[1],$value]; + if(array_key_exists($key[0],$keys)) { + // We have some data + array_push($keys[$key[0]],$v_pair); + } else { + // Create new key data + $keys[$key[0]] = [$v_pair]; + } + } +} + +$files = []; +$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) { + // First we must check the URLs match + $waet = $xml_object->waet[0]; + if (urldecode($waet["url"])==$waet_url) { + // It is part of the dataset, so now perform checks + $continue = true; + foreach($keys as $keyId => $keyArr) { + $elem = $xml_object->xpath("//*[@ref='".$keyId."']"); + $elem = $elem[0]; // Can only be one. + switch ($elem["type"]) { + case "number": + // Number, we must check for min/max + $value = (real)$elem->response; + foreach ($keyArr as $keyCheck) { + if ($keyCheck[0] == 'min' && $value < $keyCheck[1]) { + $continue = false; + break; + } else if ($keyCheck[0] == 'max' && $value > $keyCheck[1]) { + $continue = false; + break; + } + } + break; + case "checkbox": + // Will have an array of <response> + foreach ($elem->response as $response) { + foreach ($keyArr as $keyCheck) { + if ($response["name"] == $keyCheck[1]) { + if($response["checked"] == "true" && $keyCheck[0] == "exclude") { + $continue = false; + break; + } + } + } + if($continue == false) { + break; + } + } + break; + case "radio": + foreach ($keyArr as $keyCheck) { + if ($keyCheck[0] == "exclude" && $elem->response["name"] == $keyCheck[1]) { + + $continue = false; + break; + } + } + break; + default: + break; + } + if ($continue == false) { + break; + } + } + if ($continue) { + array_push($files,rel2abs($filename,"http://".$_SERVER['SERVER_NAME'] . $_SERVER['REQUEST_URI'])); + } + } + } + } +} +if (count($files) == 0) { + echo '{"urls": []}'; +} else { + echo '{"urls": ["'.implode('","',$files).'"]}'; +} + +?> \ No newline at end of file