annotate php/get_filtered_count.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 //http://stackoverflow.com/questions/4444475/transfrom-relative-path-into-absolute-url-using-php
nicholas@2224 3 function rel2abs($rel, $base)
nicholas@2224 4 {
nicholas@2224 5 /* return if already absolute URL */
nicholas@2224 6 if (parse_url($rel, PHP_URL_SCHEME) != '' || substr($rel, 0, 2) == '//') return $rel;
nicholas@2224 7
nicholas@2224 8 /* queries and anchors */
nicholas@2224 9 if ($rel[0]=='#' || $rel[0]=='?') return $base.$rel;
nicholas@2224 10
nicholas@2224 11 /* parse base URL and convert to local variables:
nicholas@2224 12 $scheme, $host, $path */
nicholas@2224 13 extract(parse_url($base));
nicholas@2224 14
nicholas@2224 15 /* remove non-directory element from path */
nicholas@2224 16 $path = preg_replace('#/[^/]*$#', '', $path);
nicholas@2224 17
nicholas@2224 18 /* destroy path if relative url points to root */
nicholas@2224 19 if ($rel[0] == '/') $path = '';
nicholas@2224 20
nicholas@2224 21 /* dirty absolute URL */
nicholas@2224 22 $abs = "$host$path/$rel";
nicholas@2224 23
nicholas@2224 24 /* replace '//' or '/./' or '/foo/../' with '/' */
nicholas@2224 25 $re = array('#(/\.?/)#', '#/(?!\.\.)[^/]+/\.\./#');
nicholas@2224 26 for($n=1; $n>0; $abs=preg_replace($re, '/', $abs, -1, $n)) {}
nicholas@2224 27
nicholas@2224 28 /* absolute URL is ready! */
nicholas@2224 29 return $scheme.'://'.$abs;
nicholas@2224 30 }
nicholas@2224 31
nicholas@2224 32 /*
nicholas@2224 33 This looks for files that pass the filtering response
nicholas@2224 34 The filtering system uses key-value pairs
nicholas@2224 35 The key is double encoded using a '-'. The first part is the ID of the item to filter,
nicholas@2224 36 the second is the method:
nicholas@2224 37 min - Minimum Inclusive
nicholas@2224 38 max - Maximum Inclusive
nicholas@2224 39 exclude-# - exclude, followed by a number to uniquely add, (will create a triple [], ignore the third as random)
nicholas@2224 40 */
nicholas@2224 41 $keys = [];
nicholas@2224 42 $waet_url = null;
nicholas@2224 43 foreach ($_GET as $key => $value) {
nicholas@2224 44 $key = explode("-",$key);
nicholas@2224 45 if ($key[0] == "url") {
nicholas@2224 46 $waet_url = $value;
nicholas@2224 47 } else {
nicholas@2224 48 $v_pair = [$key[1],$value];
nicholas@2224 49 if(array_key_exists($key[0],$keys)) {
nicholas@2224 50 // We have some data
nicholas@2224 51 array_push($keys[$key[0]],$v_pair);
nicholas@2224 52 } else {
nicholas@2224 53 // Create new key data
nicholas@2224 54 $keys[$key[0]] = [$v_pair];
nicholas@2224 55 }
nicholas@2224 56 }
nicholas@2224 57 }
nicholas@2224 58
nicholas@2224 59 $files = [];
nicholas@2224 60 $saves = glob("../saves/*.xml");
nicholas@2224 61 if (is_array($saves))
nicholas@2224 62 {
nicholas@2224 63 foreach($saves as $filename) {
nicholas@2224 64 $xml_string = file_get_contents($filename, FILE_TEXT);
nicholas@2224 65 $xml_object = simplexml_load_string($xml_string);
nicholas@2224 66 if ($xml_object) {
nicholas@2224 67 // First we must check the URLs match
nicholas@2224 68 $waet = $xml_object->waet[0];
nicholas@2224 69 if (urldecode($waet["url"])==$waet_url) {
nicholas@2224 70 // It is part of the dataset, so now perform checks
nicholas@2224 71 $continue = true;
nicholas@2224 72 foreach($keys as $keyId => $keyArr) {
nicholas@2224 73 $elem = $xml_object->xpath("//*[@ref='".$keyId."']");
nicholas@2224 74 $elem = $elem[0]; // Can only be one.
nicholas@2224 75 switch ($elem["type"]) {
nicholas@2224 76 case "number":
nicholas@2224 77 // Number, we must check for min/max
nicholas@2224 78 $value = (real)$elem->response;
nicholas@2224 79 foreach ($keyArr as $keyCheck) {
nicholas@2224 80 if ($keyCheck[0] == 'min' && $value < $keyCheck[1]) {
nicholas@2224 81 $continue = false;
nicholas@2224 82 break;
nicholas@2224 83 } else if ($keyCheck[0] == 'max' && $value > $keyCheck[1]) {
nicholas@2224 84 $continue = false;
nicholas@2224 85 break;
nicholas@2224 86 }
nicholas@2224 87 }
nicholas@2224 88 break;
nicholas@2224 89 case "checkbox":
nicholas@2224 90 // Will have an array of <response>
nicholas@2224 91 foreach ($elem->response as $response) {
nicholas@2224 92 foreach ($keyArr as $keyCheck) {
nicholas@2224 93 if ($response["name"] == $keyCheck[1]) {
nicholas@2224 94 if($response["checked"] == "true" && $keyCheck[0] == "exclude") {
nicholas@2224 95 $continue = false;
nicholas@2224 96 break;
nicholas@2224 97 }
nicholas@2224 98 }
nicholas@2224 99 }
nicholas@2224 100 if($continue == false) {
nicholas@2224 101 break;
nicholas@2224 102 }
nicholas@2224 103 }
nicholas@2224 104 break;
nicholas@2224 105 case "radio":
nicholas@2224 106 foreach ($keyArr as $keyCheck) {
nicholas@2224 107 if ($keyCheck[0] == "exclude" && $elem->response["name"] == $keyCheck[1]) {
nicholas@2224 108
nicholas@2224 109 $continue = false;
nicholas@2224 110 break;
nicholas@2224 111 }
nicholas@2224 112 }
nicholas@2224 113 break;
nicholas@2224 114 default:
nicholas@2224 115 break;
nicholas@2224 116 }
nicholas@2224 117 if ($continue == false) {
nicholas@2224 118 break;
nicholas@2224 119 }
nicholas@2224 120 }
nicholas@2224 121 if ($continue) {
nicholas@2224 122 array_push($files,rel2abs($filename,"http://".$_SERVER['SERVER_NAME'] . $_SERVER['REQUEST_URI']));
nicholas@2224 123 }
nicholas@2224 124 }
nicholas@2224 125 }
nicholas@2224 126 }
nicholas@2224 127 }
nicholas@2224 128 if (count($files) == 0) {
nicholas@2224 129 echo '{"urls": []}';
nicholas@2224 130 } else {
nicholas@2224 131 echo '{"urls": ["'.implode('","',$files).'"]}';
nicholas@2224 132 }
nicholas@2224 133
nicholas@2224 134 ?>