Better graph, include social media in schema for agencies
[disclosr.git] / graph.php
blob:a/graph.php -> blob:b/graph.php
--- a/graph.php
+++ b/graph.php
@@ -1,31 +1,74 @@
 <?php
 include_once('include/common.inc.php');
 //include_header();
-?>
-<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"></script>
-<script src="lib/springy/springy.js"></script>
-<script src="lib/springy/springyui.js"></script>
-<script>
-    var graph = new Graph();
-    var nodes = [];
-<?php
+$format = "html";
+if (isset($_REQUEST['format'])) {
+    $format = $_REQUEST['format'];
+}
+
+function add_node($id, $label, $parent="") {
+    global $format;
+    if ($format == "html") {
+       // echo "nodes[\"$id\"] = graph.newNode({label: \"$label\"});" . PHP_EOL;
+    }
+     if ($format == "dot" && $label != "") {
+         echo "$id [label=\"$label\"];". PHP_EOL;
+     }
+      if ($format == "gexf") {
+          echo "<node id='$id' label=\"".htmlentities($label,ENT_XML1)."\" ".($parent != ""? "pid='$parent'><viz:size value='1'/>":"><viz:size value='2'/>")
+              ."<viz:color b='".rand(0,255)."' g='".rand(0,255)."' r='".rand(0,255)."'/>"
+                  ."</node>". PHP_EOL;
+      }
+}
+
+function add_edge($from, $to, $color) {
+    global $format;
+    if ($format == "html") {
+     //   echo "graph.newEdge(nodes[\"$from\"], nodes['$to'], {color: '$color'});" . PHP_EOL;
+    }
+    if ($format == "dot") {
+        echo "$from -> $to ".($color != ""? "[color=$color]":"").";". PHP_EOL;
+    }
+     if ($format == "gexf") {
+          echo "<edge id='$from$to' source='$from' target='$to' />". PHP_EOL;
+      }
+}
+if ($format == "gexf") {
+    //header('Content-Type: text/xml');
+     header('Content-Type: application/gexf+xml');
+echo '<?xml version="1.0" encoding="UTF-8"?>
+<gexf xmlns="http://www.gexf.net/1.2draft" xmlns:viz="http://www.gexf.net/1.2draft/viz" version="1.2">
+    <meta lastmodifieddate="2009-03-20">
+        <creator>Gexf.net</creator>
+        <description>A hello world! file</description>
+    </meta>
+    <graph mode="static" defaultedgetype="directed">
+        <nodes>'. PHP_EOL;
+}
+
+if ($format == "dot") {
+    echo 'digraph g {'. PHP_EOL;
+}
 $db = $server->get_db('disclosr-agencies');
-echo "nodes[\"fedg\"] = graph.newNode({label: \"Federal Government - Commonwealth of Australia\"});" . PHP_EOL;
+ add_node("fedg","Federal Government - Commonwealth of Australia");
 try {
     $rows = $db->get_view("app", "byCanonicalName", null, true)->rows;
-    //print_r($rows);
+//print_r($rows);
     foreach ($rows as $row) {
-        echo "nodes[\"{$row->value}\"] = graph.newNode({label: \"{$row->key}\"});" . PHP_EOL;
+        add_node($row->id, $row->key);
     }
 } catch (SetteeRestClientException $e) {
     setteErrorHandler($e);
 }
-
+if ($format == "gexf") {
+echo '</nodes>
+        <edges>'. PHP_EOL;
+}
 try {
     $rows = $db->get_view("app", "byDeptStateName", null, true)->rows;
-    //print_r($rows);
+//print_r($rows);
     foreach ($rows as $row) {
-        echo "graph.newEdge(nodes[\"fedg\"], nodes['{$row->value}'], {color: '#00A0B0'});" . PHP_EOL;
+        add_edge("fedg", $row->value, 'yellow');
     }
 } catch (SetteeRestClientException $e) {
     setteErrorHandler($e);
@@ -33,25 +76,68 @@
 
 try {
     $rows = $db->get_view("app", "parentOrgs", null, true)->rows;
-    //   print_r($rows);
+//   print_r($rows);
     foreach ($rows as $row) {
-        echo "graph.newEdge(nodes[\"{$row->key}\"], nodes['{$row->value}'], {color: '#FFA0B0'});" . PHP_EOL;
+        add_edge($row->key, $row->value, 'blue');
     }
 } catch (SetteeRestClientException $e) {
     setteErrorHandler($e);
 }
-?>
-    window.onload = function() {
-        $(document).ready(function() {
-            var springy = $('#springydemo').springy({
-                graph: graph
-            });
-        });
-    };
+if ($format == "html") {
+    ?>
+ <div id="sigma-example" width="960" style="min-height:800px;background-color: #333;"></div>
+  <script src="js/sigma.min.js"></script>
+  <script src="js/sigma/plugins/sigma.parseGexf.js"></script>
+  <script src="js/sigma/plugins/sigma.forceatlas2.js"></script>
+  <script type="text/javascript">function init() {
+  // Instanciate sigma.js and customize rendering :
+  var sigInst = sigma.init(document.getElementById('sigma-example')).drawingProperties({
+    defaultLabelColor: '#fff',
+    defaultLabelSize: 14,
+    defaultLabelBGColor: '#fff',
+    defaultLabelHoverColor: '#000',
+    labelThreshold: 6,
+    defaultEdgeType: 'curve'
+  }).graphProperties({
+    minNodeSize: 0.5,
+    maxNodeSize: 5,
+    minEdgeSize: 5,
+    maxEdgeSize: 5
+  }).mouseProperties({
+    maxRatio: 32
+  });
+
+  // Parse a GEXF encoded file to fill the graph
+  // (requires "sigma.parseGexf.js" to be included)
+  sigInst.parseGexf('graph.php?format=gexf');
+ sigInst.bind('downnodes',function(event){
+    var nodes = event.content;
+ });
+  // Start the ForceAtlas2 algorithm
+  // (requires "sigma.forceatlas2.js" to be included)
+  sigInst.startForceAtlas2();
+  
+  // Draw the graph :
+  sigInst.draw();
+}
+
+if (document.addEventListener) {
+  document.addEventListener("DOMContentLoaded", init, false);
+} else {
+  window.onload = init;
+}
 </script>
 
-<canvas id="springydemo" width="1260" height="680" />
-<?php
+    <?php
+}
+if ($format == "dot") {
+    echo "}";
+}
+if ($format == "gexf") {
+echo ' </edges>
+    </graph>
+</gexf>'. PHP_EOL;
+}
 //include_footer();
 ?>