|
<?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; |
|
|
|
?> |