changeset 2287:0141cbd1169b

Analysis get raw data uses filtered not global request. get_filtered_score.php returns XML, JSON and CSV
author Nicholas Jillings <nicholas.jillings@mail.bcu.ac.uk>
date Fri, 22 Apr 2016 11:38:41 +0100
parents e59327ebdb15
children 878ef0a69d5d 505290c327cb 138f002fb8f5
files analysis/analysis.js php/get_filtered_score.php
diffstat 2 files changed, 144 insertions(+), 34 deletions(-) [+]
line wrap: on
line diff
--- a/analysis/analysis.js	Fri Apr 22 10:15:12 2016 +0100
+++ b/analysis/analysis.js	Fri Apr 22 11:38:41 2016 +0100
@@ -625,6 +625,66 @@
     this.getDataButton.button.textContent = "Get Filtered Data";
     this.getDataButton.button.addEventListener("click",this.getDataButton);
     
+    this.getRawScoreData = {
+        root: document.createElement("div"),
+        csvDOM: document.createElement("button"),
+        jsonDOM: document.createElement("button"),
+        xmlDOM: document.createElement("button"),
+        presentDOM: document.createElement("div"),
+        parent: this,
+        XHR: new XMLHttpRequest(),
+        handleEvent: function(event) {
+            this.presentDOM.innerHTML = null;
+            var url = "../php/get_filtered_score.php"+this.parent.getFilterString();
+            this.XHR.open("GET",url+"&format="+event.currentTarget.textContent,true);
+            switch(event.currentTarget.textContent) {
+                case "CSV":
+                    this.XHR.onload = function() {
+                        var file = [this.response];
+                        var bb = new Blob(file,{type: 'text/csv'});
+                        this.parent.presentDOM.appendChild( this.parent.generateLink(bb,"scores.csv") );
+                    }
+                    break;
+                case "JSON":
+                    this.XHR.onload = function() {
+                        var file = [this.response];
+                        var bb = new Blob(file,{type: 'application/json'});
+                        this.parent.presentDOM.appendChild( this.parent.generateLink(bb,"scores.json") );
+                    }
+                    break;
+                case "XML":
+                    this.XHR.onload = function() {
+                        var file = [this.response];
+                        var bb = new Blob(file,{type: 'text/xml'});
+                        this.parent.presentDOM.appendChild( this.parent.generateLink(bb,"scores.xml") );
+                    }
+                    break;
+            }
+            this.XHR.send();
+        },
+        generateLink: function(blob,filename) {
+            var dnlk = window.URL.createObjectURL(blob);
+            var a = document.createElement("a");
+            a.hidden = '';
+            a.href = dnlk;
+            a.download = filename;
+            a.textContent = "Save File";
+            return a;
+        }
+    }
+    
+    this.getRawScoreData.root.appendChild(this.getRawScoreData.csvDOM);
+    this.getRawScoreData.root.appendChild(this.getRawScoreData.jsonDOM);
+    this.getRawScoreData.root.appendChild(this.getRawScoreData.xmlDOM);
+    this.getRawScoreData.root.appendChild(this.getRawScoreData.presentDOM);
+    this.getRawScoreData.XHR.parent = this.getRawScoreData;
+    this.getRawScoreData.csvDOM.textContent = 'CSV';
+    this.getRawScoreData.csvDOM.addEventListener('click',this.getRawScoreData);
+    this.getRawScoreData.jsonDOM.textContent = 'JSON';
+    this.getRawScoreData.jsonDOM.addEventListener('click',this.getRawScoreData);
+    this.getRawScoreData.xmlDOM.textContent = 'XML';
+    this.getRawScoreData.xmlDOM.addEventListener('click',this.getRawScoreData);
+    
     this.testSaves = {
         json: null,
         selectedURL: null,
@@ -796,6 +856,7 @@
         }
         document.getElementById("test-saved").appendChild(this.filterDOM);
         document.getElementById("test-saved").appendChild(this.getDataButton.button);
+        document.getElementById("test-saved").appendChild(this.getRawScoreData.root);
     }
     this.getFilterString = function() {
         var pairs = [];
--- a/php/get_filtered_score.php	Fri Apr 22 10:15:12 2016 +0100
+++ b/php/get_filtered_score.php	Fri Apr 22 11:38:41 2016 +0100
@@ -42,7 +42,13 @@
     }
 }
 
-
+$requestFormat = 'JSON';
+if (isset($_GET["format"])) {
+    $requestFormat = $_GET["format"];
+    if ($requestFormat != "CSV" && $requestFormat != "JSON" && $requestFormat != "XML") {
+        return "Invalid format parameter in get request. Must be CSV, JSON or XML";
+    }
+}
 $request = "http://".$_SERVER['SERVER_NAME'] . $_SERVER['REQUEST_URI'];
 $request = explode("get_filtered_score.php",$request);
 $request = implode("get_filtered_count.php",$request);
@@ -103,44 +109,87 @@
         }
     }
 }
-$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++)
+switch($requestFormat) {
+    case "JSON":
+        $doc_root = '{ "pages": [';
+        for ($pageIndex = 0; $pageIndex < $root->num; $pageIndex++)
         {
-            $axis = $element->nest[$axisIndex];
-            $doc_axis = '{ "name": "'.$axis->id.'", "values": [';
-            for ($valueIndex = 0; $valueIndex < $axis->num; $valueIndex++)
+            $page = $root->nest[$pageIndex];
+            $doc_page = '{ "id": "'.$page->id.'", "elements": [';
+            for($elementIndex = 0; $elementIndex < $page->num; $elementIndex++)
             {
-                $doc_axis = $doc_axis."".strval($axis->nest[$valueIndex]);
-                if ($valueIndex < $axis->num-1) {
-                    $doc_axis = $doc_axis.', ';
+                $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 "XML":
+        $xml_root = new SimpleXMLElement('<waetprocess/>');
+        for ($pageIndex=0; $pageIndex < $root->num; $pageIndex++) {
+            $page = $root->nest[$pageIndex];
+            $xml_page = $xml_root->addChild("page");
+            $xml_page->addAttribute("id",$page->id);
+            for($elementIndex = 0; $elementIndex < $page->num; $elementIndex++)
+            {
+                $element = $page->nest[$elementIndex];
+                $xml_element = $xml_page->addChild("audioelement");
+                $xml_element->addAttribute("id", $element->id);
+                for($axisIndex = 0; $axisIndex < $element->num; $axisIndex++)
+                {
+                    $axis = $element->nest[$axisIndex];
+                    $xml_axis = $xml_element->addChild("axis");
+                    $xml_axis->addAttribute("name",$axis->id);
+                    for ($valueIndex = 0; $valueIndex < $axis->num; $valueIndex++)
+                    {
+                        $xml_value = $xml_axis->addChild("value",strval($axis->nest[$valueIndex]));
+                    }
                 }
             }
-            $doc_axis = $doc_axis.']}';
-            if ($axisIndex < $element->num-1) {
-                $doc_axis = $doc_axis.', ';
+        }
+        echo $xml_root->asXML();
+        break;
+    case "CSV":
+        $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."\r\n";
+                    }
+                }
             }
-            $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;
 ?>
\ No newline at end of file