naa import update
[disclosr.git] / admin / time.php
blob:a/admin/time.php -> blob:b/admin/time.php
  <?php
   
   
  // https://github.com/jadell/neo4jphp
  spl_autoload_register(function ($className) {
  $libPath = '../lib/neo4jphp/lib/';
  $classFile = str_replace('\\',DIRECTORY_SEPARATOR,$className).'.php';
  $classPath = $libPath.$classFile;
  if (file_exists($classPath)) {
  require($classPath);
  }
  });
   
  $nodes = "";
  $edges = "";
  $description = "";
  $nodeList = Array();
   
  function add_node($node) {
  global $nodes,$nodeList;
  if (!in_array($node->getId(),$nodeList)) {
  $start = $node->getProperty("start_date") . $node->getProperty("date");
  $end = $node->getProperty("end_date");
  $nodes.= "<node id='".urlencode($node->getId())."'". ' label="'.htmlentities($node->getProperty("name")).'" '
  . ($start != ""? 'start="'.$start.'" ' : ""). ($end != ""? 'end="'.$end.'" ' : "").'>'
  ."<viz:color b='".rand(0,255)."' g='".rand(0,255)."' r='".rand(0,255)."'/>"
  ."</node>". PHP_EOL;
  $nodeList[] = $node->getId();
  }
  }
   
  function add_edge($rel) {
  global $edges;
  $start = $rel->getProperty("start_date");
  $end = $rel->getProperty("end_date");
  $edges.= "<edge id='".urlencode($rel->getId())."' source='".urlencode($rel->getStartNode()->getId())."' target='".urlencode($rel->getEndNode()->getId())."' ".($start != ""? 'start="'.$start.'" ' : ""). ($end != ""? 'end="'.$end.'" ' : "")."/>". PHP_EOL;
   
  }
   
  function expandNode($node) {
  //global $description;
  //$description .= ($description == ""? "" : " and ").$node->getProperty("name");
  add_node($node);
   
  foreach ($node->getProperties() as $key => $value) {
  // echo "$key: $value\n";
  }
  foreach ($node->getRelationships() as $rel) {
  //echo($rel->getStartNode()->getId()." -> ".$rel->getEndNode()->getId()."<br>");
  add_edge($rel);
  add_node($rel->getStartNode());
  add_node($rel->getEndNode());
  }
  }
   
  //$ids = (isset($_REQUEST['ids']) ? $_REQUEST['ids'] : "");
   
  // Connecting to the default port 7474 on localhost
  $client = new Everyman\Neo4j\Client();
  //$client = new Everyman\Neo4j\Client('192.168.1.127');
  //print_r($client->getServerInfo());
   
  //https://github.com/jadell/neo4jphp/wiki/Caching
  $plugin = new Everyman\Neo4j\Cache\Variable();
  $client->getEntityCache()->setCache($plugin);
   
  /*$memcached = new Memcached();
  $memcached->addServer('localhost', 11211);
   
  $plugin = new Everyman\Neo4j\Cache\Memcached($memcached);
  $client->getEntityCache()->setCache($plugin);*/
   
  /*$requests = explode(";",$ids);
   
   
  foreach ($requests as $request) {
   
  // Array("type" => "path", from=>"1234", to=>"4321","options" => Array())
   
  $parts = explode("-",$request);
   
  $requestType = $parts[0];
  $requestId = $parts[1];
  if ($requestType == 'node') {
  expandNode($client->getNode($requestId));
  } else {
  findNode($requestType,$requestId);
  }
  }
   
  function findNode($type,$id) {
  global $client;
  $typeMapping = Array (
  "agency" => Array("label" => "Agency", "id" => "agencyID")
  );
   
  $queryString =
  "MATCH (n:".$typeMapping[$type]["label"].")".
  "WHERE n.".$typeMapping[$type]["id"]." = {nodeId}".
  "RETURN n";
   
  $query = new Everyman\Neo4j\Cypher\Query($client, $queryString, array('nodeId' => $id));
  $result = $query->getResultSet();
   
  foreach ($result as $row) {
  expandNode( $row[0]);
   
  }
   
  } */
   
  // https://github.com/jadell/neo4jphp/wiki/Paths
   
  /* https://github.com/jadell/neo4jphp/wiki/Traversals
  * $traversal = new Everyman\Neo4j\Traversal($client);
  $traversal->addRelationship('KNOWS', Relationship::DirectionOut)
  ->setPruneEvaluator(Traversal::PruneNone)
  ->setReturnFilter(Traversal::ReturnAll)
  ->setMaxDepth(4);
   
  $nodes = $traversal->getResults($startNode, Traversal::ReturnTypeNode);
   
  */
   
  /*https://github.com/jadell/neo4jphp/wiki/Cypher-and-gremlin-queries
  $queryString = "START n=node({nodeId}) ".
  "MATCH (n)<-[:KNOWS]-(x)".
  "WHERE x.name = {name}".
  "RETURN x";
  $query = new Everyman\Neo4j\Cypher\Query($client, $queryString, array('nodeId' => 1, 'name' => 'Bob'));
  $result = $query->getResultSet();
  foreach ($result as $row) {
  echo $row['x']->getProperty('name') . "\n";
  }*/
   
  $queryString =
  "MATCH (n) WHERE has(n.start_date) and n.start_date < 18870000 RETURN n";
  $description = '1887';
  $query = new Everyman\Neo4j\Cypher\Query($client, $queryString);
  $result = $query->getResultSet();
   
  foreach ($result as $row) {
  expandNode( $row[0]);
   
  }
   
  if (!isset($_REQUEST['debug'])) {
  header('Content-Type: application/gexf+xml');
  header('Content-Disposition: attachment; filename="'.urlencode(str_replace(" ","_",strtolower($description))).'.gexf"');
  }
  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>lobbyist.disclosurelo.gs</creator>
  <description>'. $description. '</description>
  </meta>
  <graph mode="dynamic" defaultedgetype="directed" timeformat="date">
   
  <nodes>'. $nodes. '</nodes>
  <edges>'. $edges.' </edges>
  </graph>
  </gexf>'. PHP_EOL;
   
  ?>