From: maxious If $document has a an "_id" property set, it will be used as document's unique id (even for "create" operation).
+ * If "_id" is missing, CouchDB will be used to generate a UUID.
+ *
+ * If $document has a "_rev" property (revision), document will be updated, rather than creating a new document.
+ * You have to provide "_rev" if you want to update an existing document, otherwise operation will be assumed to be
+ * one of creation and you will get a duplicate document exception from CouchDB. Also, you may not provide "_rev" but
+ * not provide "_id" since that is an invalid input.
+ *
+ * @param $allowRevAutoDetection
+ * Default: false. When true and _rev is missing from the document, save() function will auto-detect latest revision
+ * for a document and use it. This option is "false" by default because it involves an extra http HEAD request and
+ * therefore can make save() operation slightly slower if such auto-detection is not required.
+ *
+ * @return
+ * document object with the database id (uuid) and revision attached;
+ *
+ * @throws SetteeCreateDatabaseException
+ */
+ function save($document, $allowRevAutoDetection = false) {
+ if (is_string($document)) {
+ $document = json_decode($document);
+ }
+
+ // Allow passing of $document as an array (for syntactic simplicity and also because in JSON world it does not matter)
+ if(is_array($document)) {
+ $document = (object) $document;
+ }
+
+ if (empty($document->_id) && empty($document->_rev)) {
+ $id = $this->gen_uuid();
+ }
+ elseif (empty($document->_id) && !empty($document->_rev)) {
+ throw new SetteeWrongInputException("Error: You can not save a document with a revision provided, but missing id");
+ }
+ else {
+ $id = $document->_id;
+
+ if ($allowRevAutoDetection) {
+ try {
+ $rev = $this->get_rev($id);
+ } catch (SetteeRestClientException $e) {
+ // auto-detection may fail legitimately, if a document has never been saved before (new doc), so skipping error
+ }
+ if (!empty($rev)) {
+ $document->_rev = $rev;
+ }
+ }
+ }
+
+ $full_uri = $this->dbname . "/" . $this->safe_urlencode($id);
+ $document_json = json_encode($document, JSON_NUMERIC_CHECK);
+
+ $ret = $this->rest_client->http_put($full_uri, $document_json);
+
+ $document->_id = $ret['decoded']->id;
+ $document->_rev = $ret['decoded']->rev;
+
+ return $document;
+ }
+
+ /**
+ * @param $doc
+ * @param $name
+ * @param $content
+ * Content of the attachment in a string-buffer format. This function will automatically base64-encode content for
+ * you, so you don't have to do it.
+ * @param $mime_type
+ * Optional. Will be auto-detected if not provided
+ * @return void
+ */
+ public function add_attachment($doc, $name, $content, $mime_type = null) {
+ if (empty($doc->_attachments) || !is_object($doc->_attachments)) {
+ $doc->_attachments = new stdClass();
+ }
+
+ if (empty($mime_type)) {
+ $mime_type = $this->rest_client->content_mime_type($content);
+ }
+
+ $doc->_attachments->$name = new stdClass();
+ $doc->_attachments->$name->content_type = $mime_type;
+ $doc->_attachments->$name->data = base64_encode($content);
+ }
+
+ /**
+ * @param $doc
+ * @param $name
+ * @param $file
+ * Full path to a file (e.g. as returned by PHP's realpath function).
+ * @param $mime_type
+ * Optional. Will be auto-detected if not provided
+ * @return void
+ */
+ public function add_attachment_file($doc, $name, $file, $mime_type = null) {
+ $content = file_get_contents($file);
+ $this->add_attachment($doc, $name, $content, $mime_type);
+ }
+
+ /**
+ *
+ * Retrieve a document from CouchDB
+ *
+ * @throws SetteeWrongInputException
+ *
+ * @param $id
+ * Unique ID (usually: UUID) of the document to be retrieved.
+ * @return
+ * database document in PHP object format.
+ */
+ function get($id) {
+ if (empty($id)) {
+ throw new SetteeWrongInputException("Error: Can't retrieve a document without a uuid.");
+ }
+
+ $full_uri = $this->dbname . "/" . $this->safe_urlencode($id);
+$full_uri = str_replace("%3Frev%3D","?rev=",$full_uri);
+ $ret = $this->rest_client->http_get($full_uri);
+ return $ret['decoded'];
+ }
+
+ /**
+ *
+ * Get the latest revision of a document with document id: $id in CouchDB.
+ *
+ * @throws SetteeWrongInputException
+ *
+ * @param $id
+ * Unique ID (usually: UUID) of the document to be retrieved.
+ * @return
+ * database document in PHP object format.
+ */
+ function get_rev($id) {
+ if (empty($id)) {
+ throw new SetteeWrongInputException("Error: Can't query a document without a uuid.");
+ }
+
+ $full_uri = $this->dbname . "/" . $this->safe_urlencode($id);
+ $headers = $this->rest_client->http_head($full_uri);
+ if (empty($headers['Etag'])) {
+ throw new SetteeRestClientException("Error: could not retrieve revision. Server unexpectedly returned empty Etag");
+ }
+ $etag = str_replace('"', '', $headers['Etag']);
+ return $etag;
+ }
+
+ /**
+ * Delete a document
+ *
+ * @param $document
+ * a PHP object or JSON representation of the document that has _id and _rev fields.
+ *
+ * @return void
+ */
+ function delete($document) {
+ if (!is_object($document)) {
+ $document = json_decode($document);
+ }
+
+ $full_uri = $this->dbname . "/" . $this->safe_urlencode($document->_id) . "?rev=" . $document->_rev;
+ $this->rest_client->http_delete($full_uri);
+ }
+
+
+ /*----------------- View-related functions --------------*/
+
+ /**
+ * Create a new view or update an existing one.
+ *
+ * @param $design_doc
+ * @param $view_name
+ * @param $map_src
+ * Source code of the map function in Javascript
+ * @param $reduce_src
+ * Source code of the reduce function in Javascript (optional)
+ * @return void
+ */
+ function save_view($design_doc, $view_name, $map_src, $reduce_src = null) {
+ $obj = new stdClass();
+ $obj->_id = "_design/" . urlencode($design_doc);
+ $view_name = urlencode($view_name);
+ $obj->views->$view_name->map = $map_src;
+ if (!empty($reduce_src)) {
+ $obj->views->$view_name->reduce = $reduce_src;
+ }
+
+ // allow safe updates (even if slightly slower due to extra: rev-detection check).
+ return $this->save($obj, true);
+ }
+
+ /**
+ * Create a new view or update an existing one.
+ *
+ * @param $design_doc
+ * @param $view_name
+ * @param $key
+ * key parameter to a view. Can be a single value or an array (for a range). If passed an array, function assumes
+ * that first element is startkey, second: endkey.
+ * @param $descending
+ * return results in descending order. Please don't forget that if you are using a startkey/endkey, when you change
+ * order you also need to swap startkey and endkey values!
+ *
+ * @return void
+ */
+ function get_view($design_doc, $view_name, $key = null, $descending = false) {
+ $id = "_design/" . urlencode($design_doc);
+ $view_name = urlencode($view_name);
+ $id .= "/_view/$view_name";
+
+ $data = array();
+ if (!empty($key)) {
+ if (is_string($key)) {
+ $data = "key=" . '"' . $key . '"';
+ }
+ elseif (is_array($key)) {
+ list($startkey, $endkey) = $key;
+ $data = "startkey=" . '"' . $startkey . '"&' . "endkey=" . '"' . $endkey . '"';
+ }
+
+ if ($descending) {
+ $data .= "&descending=true";
+ }
+ }
+
+
+
+ if (empty($id)) {
+ throw new SetteeWrongInputException("Error: Can't retrieve a document without a uuid.");
+ }
+
+ $full_uri = $this->dbname . "/" . $this->safe_urlencode($id);
+$full_uri = str_replace("%253Fgroup%253Dtrue","?group=true",$full_uri);
+ $ret = $this->rest_client->http_get($full_uri, $data);
+ return $ret['decoded'];
+
+ }
+
+ /**
+ * @param $id
+ * @return
+ * return a properly url-encoded id.
+ */
+ private function safe_urlencode($id) {
+ //-- System views like _design can have "/" in their URLs.
+ $id = rawurlencode($id);
+ if (substr($id, 0, 1) == '_') {
+ $id = str_replace('%2F', '/', $id);
+ }
+ return $id;
+ }
+
+ /** Getter for a database name */
+ function get_name() {
+ return $this->dbname;
+ }
+
+}
--- /dev/null
+++ b/couchdb/couchdb-lucene-run.bat.txt
@@ -1,1 +1,18 @@
+@echo off
+set CLASSPATH="../conf;"
+Echo Cleared classpath
+
+set JAVA_OPTS="-server -Xmx1g"
+Echo set Java Opts %JAVA_OPTS%
+
+set CLASS=com.github.rnewson.couchdb.lucene.Main
+Echo set couchdb-lucene class %CLASS%
+
+setlocal ENABLEDELAYEDEXPANSION
+if defined CLASSPATH (set CLASSPATH=%CLASSPATH%;.) else (set CLASSPATH=.)
+FOR /R ..\lib %%G IN (*.jar) DO set CLASSPATH=!CLASSPATH!;%%G
+Echo The Classpath definition is %CLASSPATH%
+
+java "%JAVA_OPTS%" -cp %CLASSPATH% %CLASS%
+
--- a/getAgency.php
+++ b/getAgency.php
@@ -4,16 +4,36 @@
include_header();
function displayValue($key, $value, $mode) {
+ global $db, $schemas;
if ($mode == "view") {
+
+ echo " Open everything
-all documents released CC-BY 3 AU
+All documents released CC-BY 3 AU
Open source git @
Organisational Data Sources
http://www.comlaw.gov.au/Browse/Results/ByTitle/AdministrativeArrangementsOrders/Current/Ad/0 defines departments
-Agencies can be found in the Schedule to an Appropriation Bill (budget), Schedule to FMA Regulations and/or Public Service Act.
+Agencies can be found in the Schedule to an Appropriation Bill (budget), Schedule to FMA Regulations and/or Public Service Act.
-http://www.finance.gov.au/publications/flipchart/docs/FMACACFlipchart.pdf summarises these. view-source:https://www.tenders.gov.au/?event=public.advancedsearch.home is great for the suspended/active status
+http://www.finance.gov.au/publications/flipchart/docs/FMACACFlipchart.pdf summarises these. view-source:https://www.tenders.gov.au/?event=public.advancedsearch.home is great for the suspended/active status
+
+Fraud in gov depts by Fairfax Media http://www.smh.com.au/national/public-service-keeps-fraud-cases-private-20110923-1kpdr.html
When defining the hierachy, this system is designed towards monitoring accountablity. Thus large agencies that have registered their own ABN
-and have their own accountablity mechanisms/website recieve a seperate record as a child of their department.
-Some small agencies will choose to simply rely on their parent department's accountablity measures.
+and have their own accountablity mechanisms/website receive a seperate record as a child of their department.
+Some small agencies will choose to simply rely on their parent department's accountablity measures.
-This flows through to organisation name and other/past names. A department that accounts for an agency will list that agency as an other child name.
+This flows through to organisation name and other/past names. A department that completely accounts for an agency will list that agency as an other child name.
As agencies themselves shift between departments, there may be scope for providing time ranges but typically the newest hierarchy will be the one recorded.
-A department/agency name will be the newest active name assigned to that ABN.
+A department/agency name will be the newest active name assigned to that ABN.
ABN information is derived from the ABR. This is the definitive umpire about which former name should be linked to which current name.
For example "Department of Transport and Regional Services" became "Department of Infrastructure, Transport, Regional Development and Local Government" (same ABN)
however it later split into "Department of Infrastructure and Transport" (same ABN)
-and "Department of Regional Australia, Regional Development and Local Government" (new ABN).
+and "Department of Regional Australia, Regional Development and Local Government" (new ABN).
Statistical information from http://www.apsc.gov.au/stateoftheservice/1011/statsbulletin/section1.html#t2total https://www.apsedii.gov.au/apsedii/CustomQueryx33.shtml
-and individual annual reports.
+and individual annual reports.
+
+Webpage Assessment
+Much due care has been put into correctly recording disclosure URLs. Typically the "About", "Corporate", "Publications" and "Sitemap" sections are checked at the very least.
+Occasionally it is nessicary to use a site or Google search. In several rare cases, there is a secret "Disclosure" navigation menu you can find if you find one of the mandatory publishing obligations in that category (seriously).
+Some rules about leniency:
+
+
Open Government Scoring
-+1 point for every true Has... attribute
--1 point for every false Has... (ie. Has Not) attribute
++1 point for every true Has... attribute
+-1 point for every false Has... (ie. Has Not) attribute
-Don't like this? Make your own score, suggest a better scoring mechanism.
+Don't like this? Make your own score, suggest a better scoring mechanism.
get_db('disclosr-agencies');
+$headers = Array();
+ try {
+ $rows = $db->get_view("app", "fieldNames?group=true", null, true)->rows;
+
+ $dataValues = Array();
+ foreach ($rows as $row) {
+ $headers[] = $row->key;
+ }
+} catch (SetteeRestClientException $e) {
+ setteErrorHandler($e);
+}
+
+$fp = fopen('php://output', 'w');
+if ($fp && $db) {
+ header('Content-Type: text/csv; charset=utf-8');
+ header('Content-Disposition: attachment; filename="export.' . date("c") . '.csv"');
+ header('Pragma: no-cache');
+ header('Expires: 0');
+ fputcsv($fp, $headers);
+ try {
+ $agencies = $db->get_view("app", "byCanonicalName", null, true)->rows;
+ //print_r($rows);
+ foreach ($agencies as $agency) {
+ // print_r($agency);
+
+ if ( !isset($agency->value->status)) {
+ $row = Array();
+ $agencyArray = object_to_array($agency->value);
+ foreach ($headers as $fieldName) {
+ if (isset($agencyArray[$fieldName])) {
+ if (is_array($agencyArray[$fieldName])) {
+ $row[] = implode(";",$agencyArray[$fieldName]);
+ } else {
+ $row[] = $agencyArray[$fieldName];
+ }
+ } else {
+ $row[] = "";
+ }
+ }
+
+ fputcsv($fp, array_values($row));
+
+
+ }
+ }
+ } catch (SetteeRestClientException $e) {
+ setteErrorHandler($e);
+ }
+
+ die;
+}
+?>
+
--- /dev/null
+++ b/admin/exportEmployees.csv.php
@@ -1,1 +1,87 @@
+get_db('disclosr-agencies');
+try {
+ $rows = $db->get_view("app", "all", null, true)->rows;
+
+ $dataValues = Array();
+ foreach ($rows as $row) {
+ if (isset($row->value->statistics->employees)) {
+
+ $headers = array_unique(array_merge($headers, array_keys(object_to_array($row->value->statistics->employees))));
+
+ }
+ }
+} catch (SetteeRestClientException $e) {
+ setteErrorHandler($e);
+}
+
+$fp = fopen('php://output', 'w');
+if ($fp && $db) {
+ if ($format == "csv") {
+ header('Content-Type: text/csv; charset=utf-8');
+ header('Content-Disposition: attachment; filename="export.employeestats.' . date("c") . '.csv"');
+ }
+ header('Pragma: no-cache');
+ header('Expires: 0');
+ if ($format == "csv") {
+ fputcsv($fp, $headers);
+ } else if ($format == "json") {
+ echo '{
+ "labels" : ["' . implode('","', $headers) . '"],'.PHP_EOL;
+ }
+ try {
+ $agencies = $db->get_view("app", "all", null, true)->rows;
+ //print_r($agencies);
+ $first = true;
+ if ($format == "json") {
+ echo '"data" : ['.PHP_EOL;
+
+ }
+ foreach ($agencies as $agency) {
+
+ if (isset($agency->value->statistics->employees)) {
+ $row = Array();
+ $agencyEmployeesArray = object_to_array($agency->value->statistics->employees);
+ foreach ($headers as $i => $fieldName) {
+ if (isset($agencyEmployeesArray[$fieldName])) {
+ $row[] = '['.$i.','.$agencyEmployeesArray[$fieldName]["value"].']';
+ } else {
+ $row[] = '['.$i.',0]';
+ }
+ }
+ if ($format == "csv") {
+ fputcsv($fp, array_values($row));
+ } else if ($format == "json") {
+ if (!$first) echo ",";
+ echo '{"data" : [' . implode(",", array_values($row)) . '], "label": "'.$agency->value->name.'", "lines" : { "show" : true }, "points" : { "show" : true }}'.PHP_EOL;
+ $first = false;
+ }
+ }
+ }
+ if ($format == "json") {
+ echo ']
+ }'.PHP_EOL;
+
+ }
+ } catch (SetteeRestClientException $e) {
+ setteErrorHandler($e);
+ }
+
+ die;
+}
+?>
+
--- /dev/null
+++ b/admin/exportScore.csv.php
@@ -1,1 +1,73 @@
+get_db('disclosr-agencies');
+$format = "csv";
+//$format = "json";
+if (isset($_REQUEST['format'])) $format = $_REQUEST['format'];
+
+setlocale(LC_CTYPE, 'C');
+
+ $headers = Array();
+
+$fp = fopen('php://output', 'w');
+if ($fp && $db) {
+ if ($format == "csv") {
+ header('Content-Type: text/csv; charset=utf-8');
+ header('Content-Disposition: attachment; filename="export.score.' . date("c") . '.csv"');
+ }
+ header('Pragma: no-cache');
+ header('Expires: 0');
+
+ try {
+ $agencies = $db->get_view("score", "score", null, true)->rows;
+ //print_r($agencies);
+ $first = true;
+ if ($format == "json") {
+ echo '"data" : ['.PHP_EOL;
+
+ }
+ foreach ($agencies as $agency) {
+ $agencyArray = object_to_array($agency->value);
+ if ($first) {
+ $headers = array_keys($agencyArray);
+if ($format == "csv") {
+ fputcsv($fp, $headers);
+ } else if ($format == "json") {
+ echo '{
+ "labels" : ["' . implode('","', $headers) . '"],'.PHP_EOL;
+ }
+ }
+ $row = Array();
+
+ foreach ($headers as $i => $fieldName) {
+ if (isset($agencyArray[$fieldName])) {
+ $row[] = $agencyArray[$fieldName];
+ } else {
+ $row[] = '';
+ }
+ }
+ if ($format == "csv") {
+ fputcsv($fp, array_values($row));
+ } else if ($format == "json") {
+ if (!$first) echo ",";
+ echo '{"data" : [' . implode(",", array_values($row)) . '], "label": "'.$agency->value->name.'", "lines" : { "show" : true }, "points" : { "show" : true }}'.PHP_EOL;
+
+ }
+ $first = false;
+ }
+
+ if ($format == "json") {
+ echo ']
+ }'.PHP_EOL;
+
+ }
+ } catch (SetteeRestClientException $e) {
+ setteErrorHandler($e);
+ }
+
+ die;
+}
+?>
+
--- /dev/null
+++ b/admin/importAPSCEmployees.php
@@ -1,1 +1,55 @@
+get_db('disclosr-agencies');
+$rows = $db->get_view("app", "byName")->rows;
+$nametoid = Array();
+$sums = Array();
+foreach ($rows as $row) {
+ $nametoid[trim($row->key)] = $row->value;
+}
+$employeeCSVs = Array("2002-2003" => "0203apsemployees.csv",
+ "2003-2004" => "0304apsemployees.csv",
+ "2004-2005" => "0405apsemployees.csv",
+ "2005-2006" => "0506apsemployees.csv",
+ "2006-2007" => "0607apsemployees.csv",
+ "2007-2008" => "0708apsemployees.csv",
+ "2008-2009" => "0809apsemployees.csv",
+ "2009-2010" => "0910apsemployees.csv",
+ "2010-2011" => "1011apsemployees.csv"
+);
+foreach ($employeeCSVs as $timePeriod => $employeeCSV) {
+ echo $employeeCSV . "
" . PHP_EOL;
+ $row = 1;
+ if (($handle = fopen($employeeCSV, "r")) !== FALSE) {
+ while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
+ //print_r($data);
+ $name = trim($data[0]);
+ if (isset($nametoid[$name])) {
+ $id = $nametoid[$name];
+ //echo $id . "
" . PHP_EOL;
+ @$sums[$id][$timePeriod] += $data[1];
+ } else {
+ echo "
ERROR NAME MISSING FROM ID LIST
" . PHP_EOL;
+
+ die();
+
+ }
+ }
+ fclose($handle);
+ }
+}
+foreach ($sums as $id => $sum) {
+ echo $id. "
" . PHP_EOL;
+ $doc = $db->get($id);
+ // print_r($doc);
+ if (isset($doc->statistics)) $doc->statistics = Array();
+ foreach ($sum as $timePeriod => $value) {
+ $doc->statistics["employees"][$timePeriod] = Array("value"=>$value, "source"=>"http://apsc.gov.au/stateoftheservice/");
+ }
+ $db->save($doc);
+}
+// employees: timeperiod, source = apsc state of service, value
+?>
+
--- /dev/null
+++ b/admin/importAustraliaGovAuGov2.php
@@ -1,1 +1,61 @@
+get_db('disclosr-agencies');
+$rows = $db->get_view("app", "byName")->rows;
+$nametoid = Array();
+$accounts = Array();
+foreach ($rows as $row) {
+ $nametoid[trim($row->key)] = $row->value;
+}
+
+function extractCSVAccounts($url, $nameField, $accountField, $filter) {
+ global $accounts, $nametoid;
+ $request = Requests::get($url);
+ $Data = str_getcsv($request->body, "\n"); //parse the rows
+ $headers = Array();
+ foreach ($Data as $num => $line) {
+ $Row = str_getcsv($line, ",");
+ if ($num == 0) {
+
+ } else if ($num == 1) {
+ $headers = $Row;
+ //print_r($headers);
+ } else {
+ if (isset($Row[array_search($nameField, $headers)])) {
+ $agencyName = $Row[array_search($nameField, $headers)];
+ if (!$filter || $Row[array_search("State", $headers)] == "NAT") {
+ if (!in_array(trim($agencyName), array_keys($nametoid))) {
+ echo "$agencyName missing" . PHP_EOL;
+ } else {
+ // echo $Row[array_search($nameField, $headers)] . PHP_EOL;
+ }
+ }
+ } else {
+ //echo "error finding agency" . $line . PHP_EOL;
+ }
+ }
+ }
+}
+
+// http://agimo.govspace.gov.au/page/gov2register/
+// twitter
+//extractCSVAccounts("https://docs.google.com/spreadsheet/pub?key=0Ap1exl80wB8OdHNKVmQ5RVlvQWpibDAxNHkzcU1nV2c&single=true&gid=0&output=csv", "Agency/Body/Event", "", true);
+// RSS
+// https://docs.google.com/spreadsheet/pub?hl=en_GB&hl=en_GB&key=0Ah41IAK0HzSTdGJxandJREhLSGlWWUZfZ2xKOTNHZ0E&output=csv
+// facebook
+extractCSVAccounts("https://docs.google.com/spreadsheet/pub?hl=en_GB&hl=en_GB&key=0Ah41IAK0HzSTdGtjcW9vOXdyZ3pOV21vQU51VmhzQnc&single=true&gid=0&output=csv","Agency","Name");
+
+/*
+ * http://australia.gov.au/news-and-media/media-release-rss-feeds
+ * http://australia.gov.au/news-and-media/social-media/blogs
+ * http://australia.gov.au/news-and-media/social-media/twitter
+ * http://australia.gov.au/news-and-media/social-media/facebook
+ * http://australia.gov.au/news-and-media/social-media/youtube
+ * http://australia.gov.au/news-and-media/social-media/flickr
+ * http://australia.gov.au/news-and-media/social-media/apps http://www.harmony.gov.au/get-involved/app-downloads.htm http://www.em.gov.au/Resources/Pages/Before-the-Storm-phone-game.aspx
+ * http://australia.gov.au/news-and-media/social-media/podcasts
+ */
+?>
+
--- /dev/null
+++ b/admin/importContractDashboardAgencies.php
@@ -1,1 +1,34 @@
+create_db('disclosr-agencies');
+} catch (SetteeRestClientException $e) {
+ setteErrorHandler($e);
+}
+$db = $server->get_db('disclosr-agencies');
+createAgencyDesignDoc();
+$conn = new PDO("pgsql:dbname=contractDashboard;user=postgres;password=snmc;host=localhost");
+$namesQ = 'select agency.abn, string_agg("agencyName",\'|\') as names from agency inner join agency_nametoabn on agency.abn::text = agency_nametoabn.abn group by agency.abn;';
+$abntonames = Array();
+foreach ($conn->query($namesQ) as $row) {
+ $abntonames[$row['abn']] = explode("|", $row['names']);
+}
+$result = $conn->query("select * from agency");
+while ($agency = $result->fetch(PDO::FETCH_ASSOC)) {
+ $agency['_id'] = md5($agency['abn']);
+ $agency['otherNames'] = $abntonames[$agency['abn']];
+ if (sizeof($abntonames[$agency['abn']]) == 1)
+ $agency['name'] = $abntonames[$agency['abn']][0];
+ $agency["lastScraped"] = "1/1/1970";
+ $agency["scrapeDepth"] = 1;
+ try {
+ $doc = $db->save($agency);
+ //print_r($doc);
+ echo $agency['abn'] . " imported \n
";
+ } catch (SetteeRestClientException $e) {
+ setteErrorHandler($e);
+ }
+}
+?>
+
--- /dev/null
+++ b/admin/importDirectoryUUIDs.php
@@ -1,1 +1,37 @@
+get_db('disclosr-agencies');
+$rows = $db->get_view("app", "byName")->rows;
+$nametoid = Array();
+$sums = Array();
+foreach ($rows as $row) {
+ $nametoid[trim($row->key)] = $row->value;
+}
+
+if (file_exists('index.xml')) {
+ $xml = simplexml_load_file('index.xml');
+
+ foreach ($xml as $agency) {
+ $names = Array();
+ $names[] = "".$agency->name;
+
+ if (isset($agency->shortName)) {
+ $names[] = "".$agency->shortName;
+ }
+ foreach ($names as $name) {
+ if (!in_array($name, array_keys($nametoid))) {
+ echo "$name missing".PHP_EOL;
+ print_r($names);
+ echo $agency->dn;
+ echo PHP_EOL;
+ echo PHP_EOL;
+ }
+ }
+ }
+} else {
+ exit('Failed to open test.xml.');
+}
+?>
+
--- /dev/null
+++ b/admin/importGov2RegisterRSSFacebookTwitter.php
@@ -1,1 +1,100 @@
+get_db('disclosr-agencies');
+$rows = $db->get_view("app", "byName")->rows;
+$nametoid = Array();
+$accounts = Array();
+foreach ($rows as $row) {
+ $nametoid[trim($row->key)] = $row->value;
+}
+
+function extractHTMLAccounts($url, $accountType) {
+ global $accounts, $nametoid;
+ $request = Requests::get($url);
+ $doc = phpQuery::newDocumentHTML($request->body);
+ phpQuery::selectDocument($doc);
+ foreach (pq('tr')->elements as $tr) {
+ //echo $tr->nodeValue.PHP_EOL;
+ $agency = "";
+ $url = "";
+ foreach ($tr->childNodes as $td) {
+ $class = $td->getAttribute("class");
+ //echo "cccc $class ".$td->nodeValue.PHP_EOL;
+ if ($class == "s11" || $class == "s10" || $class == "s7") {
+ $agency = $td->nodeValue;
+ } else if ($class == "s6" || $class == "s9") {
+ $url = $td->nodeValue;
+ foreach ($td->childNodes as $a) {
+ $href = $a->getAttribute("href");
+ if ($href != "") {
+ $url = $href;
+ }
+ }
+ }
+ }
+ if ($agency != "" && $url != "") {
+ if (!in_array(trim($agency), array_keys($nametoid))) {
+ echo trim($agency) . " missing" . PHP_EOL;
+ } else {
+ // echo $agency." = ".$url.PHP_EOL;
+ $accounts[$nametoid[trim($agency)]][$accountType][] = $url;
+ }
+ }
+ }
+}
+
+function extractCSVAccounts($url, $accountType, $nameField, $accountField, $filter) {
+ global $accounts, $nametoid;
+ $request = Requests::get($url);
+ $Data = str_getcsv($request->body, "\n"); //parse the rows
+ $headers = Array();
+ foreach ($Data as $num => $line) {
+ $Row = str_getcsv($line, ",", '"');
+ if ($num == 0) {
+
+ } else if ($num == 1) {
+ $headers = $Row;
+ //print_r($headers);
+ } else {
+ if (isset($Row[array_search($nameField, $headers)])) {
+ $agencyName = $Row[array_search($nameField, $headers)];
+ if (!$filter || $Row[array_search("State", $headers)] == "NAT") {
+ if (!in_array(trim($agencyName), array_keys($nametoid))) {
+ echo trim($agencyName) . " missing" . PHP_EOL;
+ } else {
+ // echo $Row[array_search($nameField, $headers)] . PHP_EOL;
+ $accounts[$nametoid[trim($agencyName)]][$accountType][] = $Row[array_search($accountField, $headers)];
+ }
+ }
+ } else {
+ //echo "error finding agency" . $line . PHP_EOL;
+ }
+ }
+ }
+}
+
+// http://agimo.govspace.gov.au/page/gov2register/
+// twitter
+extractCSVAccounts("https://docs.google.com/spreadsheet/pub?key=0Ap1exl80wB8OdHNKVmQ5RVlvQWpibDAxNHkzcU1nV2c&single=true&gid=0&output=csv", "Twitter", "Agency/Body/Event", "", true);
+// RSS
+extractHTMLAccounts("https://docs.google.com/spreadsheet/pub?hl=en_GB&hl=en_GB&key=0Ah41IAK0HzSTdGJxandJREhLSGlWWUZfZ2xKOTNHZ0E&output=html", "RSS");
+// facebook
+extractHTMLAccounts("https://docs.google.com/spreadsheet/pub?hl=en_GB&hl=en_GB&key=0Ah41IAK0HzSTdGtjcW9vOXdyZ3pOV21vQU51VmhzQnc&single=true&gid=0&output=html", "Facebook");
+foreach ($accounts as $id => $accountTypes) {
+ echo $id . "
" . PHP_EOL;
+ $doc = object_to_array($db->get($id));
+ // print_r($doc);
+
+ foreach ($accountTypes as $accountType => $accounts) {
+ if (!isset($doc["has" . $accountType]) || !is_array($doc["has" . $accountType])) {
+ $doc["has" . $accountType] = Array();
+ }
+ $doc["has" . $accountType] = array_unique(array_merge($doc["has" . $accountType], $accounts));
+ }
+ $db->save($doc);
+}
+?>
+
--- /dev/null
+++ b/admin/index.xml
@@ -1,1 +1,2607 @@
+
+' . $row->id . '
';
+ echo "Comparing " . $row->value[0] . " and " . $row->value[1];
+ $docA = explode(",", json_encode($db->get($row->id . "?rev=" . $row->value[0])));
+ $docB = explode(",", json_encode($db->get($row->id . "?rev=" . $row->value[1])));
+ // Options for generating the diff
+ $options = array(
+ //'ignoreWhitespace' => true,
+ //'ignoreCase' => true,
+ );
+
+ // Initialize the diff class
+ $diff = new Diff($docA, $docB, $options);
+ echo $diff->Render($renderer);
+ }
+} catch (SetteeRestClientException $e) {
+ setteErrorHandler($e);
+}
+include_footer();
+?>
--- /dev/null
+++ b/admin/validation.py
@@ -1,1 +1,30 @@
+#http://packages.python.org/CouchDB/client.html
+import couchdb
+import json
+import pprint
+import re
+from tidylib import tidy_document
+couch = couchdb.Server('http://127.0.0.1:5984/')
+
+# select database
+docsdb = couch['disclosr-documents']
+
+def f(x):
+ invalid = re.compile(r"ensure|testing|flicker|updating|longdesc|Accessibility Checks|not recognized")
+ valid = re.compile(r"line")
+ return (not invalid.search(x)) and valid.search(x) and x != ''
+
+for row in docsdb.view('app/getValidationRequired'):
+ print row.id
+ html = docsdb.get_attachment(row.id,row.value.iterkeys().next()).read()
+ #print html
+ document, errors = tidy_document(html,options={'accessibility-check':1,'show-warnings':0,'markup':0},keep_doc=True)
+ #http://www.aprompt.ca/Tidy/accessibilitychecks.html
+ #print document
+ errors = '\n'.join(filter(f,errors.split('\n')))
+ #print errors
+ doc = docsdb.get(row.id)
+ doc['validation'] = errors
+ docsdb.save(doc)
+
--- /dev/null
+++ b/admin/verify.php
@@ -1,1 +1,56 @@
+get_db('disclosr-agencies');
+$docs = Array();
+try {
+ $rows = $db->get_view("app", "byABN")->rows;
+ //print_r($rows);
+ foreach ($rows as $row) {
+ $docs["a" . $row->key] = $row->value;
+ }
+} catch (SetteeRestClientException $e) {
+ setteErrorHandler($e);
+}
+//print_r($docs);
+$row = 1;
+if (($handle = fopen("cacfma.csv", "r")) !== FALSE) {
+ while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
+ $row++;
+ echo $data[0] . " " . str_replace("?", "", $data[1]) . "
\n";
+ $name = $data[0];
+ $abn = trim(str_replace("?", "", $data[1]));
+ $aabn = "a".$abn;
+ if (isset($docs[$aabn])) {
+ echo "Existing agency ABN detected
";
+ if (!in_array($name, object_to_array($docs[$aabn]->otherNames)) && $name != $docs[$aabn]->name) {
+ $docs[$aabn]->otherNames[] = $name;
+ try {
+ $docs[$aabn] = $db->save($docs[$aabn]);
+ //print_r($doc);
+ echo $abn . " additional names imported \n
";
+ } catch (SetteeRestClientException $e) {
+ setteErrorHandler($e);
+ }
+ }
+ } else {
+ echo "New agency ABN detected
";
+ $agency['_id'] = md5($aabn);
+ $agency['name'] = $name;
+ $agency["abn"] = $abn;
+ try {
+ $doc = $db->save($agency);
+ print_r($doc);
+ echo $abn . " imported \n
";
+ } catch (SetteeRestClientException $e) {
+ setteErrorHandler($e);
+ }
+ }
+ echo "
";
+ }
+ fclose($handle);
+}
+include_footer();
+?>
--- /dev/null
+++ b/alaveteli/exportAgencies.csv.php
@@ -1,1 +1,107 @@
+get_db('disclosr-agencies');
+
+$tag = Array();
+try {
+ $rows = $db->get_view("app", "byDeptStateName", null, true)->rows;
+ //print_r($rows);
+ foreach ($rows as $row) {
+ $tag[$row->id] = phrase_to_tag(dept_to_portfolio($row->key));
+ }
+} catch (SetteeRestClientException $e) {
+ setteErrorHandler($e);
+ die();
+}
+
+$foiEmail = Array();
+try {
+ $rows = $db->get_view("app", "foiEmails", null, true)->rows;
+ //print_r($rows);
+ foreach ($rows as $row) {
+ $foiEmail[$row->key] = $row->value;
+ }
+} catch (SetteeRestClientException $e) {
+ setteErrorHandler($e);
+ die();
+}
+
+$fp = fopen('php://output', 'w');
+if ($fp && $db) {
+ header('Content-Type: text/csv; charset=utf-8');
+ header('Content-Disposition: attachment; filename="export.' . date("c") . '.csv"');
+ header('Pragma: no-cache');
+ header('Expires: 0');
+ fputcsv($fp, $headers);
+ try {
+ $agencies = $db->get_view("app", "byCanonicalName", null, true)->rows;
+ //print_r($rows);
+ foreach ($agencies as $agency) {
+ // print_r($agency);
+
+ if (isset($agency->value->foiEmail) && $agency->value->foiEmail != "null" && !isset($agency->value->status)) {
+ $row = Array();
+ $row["#id"] = $agency->id;
+ $row["name"] = trim($agency->value->name);
+ if (isset($agency->value->foiEmail)) {
+ $row["request_email"] = $agency->value->foiEmail;
+ } else {
+ if ($agency->value->orgType == "FMA-DepartmentOfState") {
+ $row["request_email"] = "foi@" . GetDomain($agency->value->website);
+ } else {
+ $row["request_email"] = $foiEmail[$agency->value->parentOrg];
+ }
+ }
+ if (isset($agency->value->shortName)) {
+ $row["short_name"] = $agency->value->shortName;
+ } else {
+ $row["short_name"] = shortName($agency->value->name);
+ }
+ $row["notes"] = "";
+ $row["publication_scheme"] = (isset($agency->value->infoPublicationSchemeURL) ? $agency->value->infoPublicationSchemeURL : "");
+ $row["home_page"] = (isset($agency->value->website) ? $agency->value->website : "");
+ if ($agency->value->orgType == "FMA-DepartmentOfState") {
+ $row["tag_string"] = $tag[$agency->value->_id] . " " . $agency->value->orgType;
+ } else {
+ $row["tag_string"] = $tag[$agency->value->parentOrg] . " " . $agency->value->orgType;
+ }
+
+ fputcsv($fp, array_values($row));
+
+ if (isset($agency->value->foiBodies)) {
+ foreach ($agency->value->foiBodies as $foiBody) {
+ $row['name'] = iconv("UTF-8", "ASCII//TRANSLIT",$foiBody);
+ $row["short_name"] = shortName($foiBody);
+ fputcsv($fp, array_values($row));
+ }
+ }
+ }
+ }
+ } catch (SetteeRestClientException $e) {
+ setteErrorHandler($e);
+ }
+
+ die;
+}
+?>
+
--- /dev/null
+++ b/alaveteli/exportCategories.rb.php
@@ -1,1 +1,24 @@
+get_db('disclosr-agencies');
+
+try {
+ $rows = $db->get_view("app", "byDeptStateName", null, true)->rows;
+ //print_r($rows);
+ foreach ($rows as $row) {
+ echo ' [ "' . phrase_to_tag(dept_to_portfolio($row->key)) . '","' . dept_to_portfolio($row->key) . '","part of the ' . dept_to_portfolio($row->key) . ' portfolio" ],' . PHP_EOL;
+ }
+} catch (SetteeRestClientException $e) {
+ setteErrorHandler($e);
+}
+echo '])';
+?>
+
--- /dev/null
+++ b/charts.php
@@ -1,1 +1,133 @@
+get_db('disclosr-agencies');
+?>
+Charts
+ Lorem ipsum.
+";
+
+ echo " " . $schemas['agency']["properties"][$key]['x-title'] . "
" . $schemas['agency']["properties"][$key]['description'] . "";
if (is_array($value)) {
- echo " ";
} else {
- echo "$key ";
+ echo "
";
foreach ($value as $subkey => $subvalue) {
- echo "
";
- }
+ if (isset($schemas['agency']["properties"][$key]['x-property'])) {
+ echo '';
+ } else {
+ echo "";
+ }
+ if ((strpos($key, "URL") > 0 || $key == 'website') && $value != "") {
+ echo "view";
+ } else {
+ echo "$value";
+ }
+ }
+ echo "";
}
if ($mode == "edit") {
if (is_array($value)) {
@@ -30,27 +50,52 @@
} else {
if (strpos($key, "_") === 0) {
echo"";
- } if (strpos($key, "has") === 0) {
- echo "";
+ } else if ($key == "parentOrg") {
+ echo "";
} else {
echo "";
- if ((strpos($key,"URL") > 0 || $key == 'website')&& $value != "") {
- echo "view";
+ if ((strpos($key, "URL") > 0 || $key == 'website') && $value != "") {
+ echo "view";
}
if ($key == 'abn') {
- echo "view abn";
- }
- }
- }
- }
- //
+ echo "view abn";
+ }
+ }
+ }
+ }
+//
}
function addDefaultFields($row) {
- $defaultFields = Array("name");
+ global $schemas;
+ $defaultFields = array_keys($schemas['agency']['properties']);
foreach ($defaultFields as $defaultField) {
- if (!isset($row[$defaultField]))
- $row[$defaultField] = "";
+ if (!isset($row[$defaultField])) {
+ if ($schemas['agency']['properties'][$defaultField]['type'] == "string") {
+ $row[$defaultField] = "";
+ }
+ if ($schemas['agency']['properties'][$defaultField]['type'] == "array") {
+ $row[$defaultField] = Array("");
+ }
+ } else if ($schemas['agency']['properties'][$defaultField]['type'] == "array") {
+ if (is_array($row[$defaultField])) {
+ $row[$defaultField][] = "";
+ $row[$defaultField][] = "";
+ $row[$defaultField][] = "";
+ } else {
+ $value = $row[$defaultField];
+ $row[$defaultField] = Array($value);
+ $row[$defaultField][] = "";
+ $row[$defaultField][] = "";
+
+ }
+ }
}
return $row;
}
@@ -58,28 +103,51 @@
$db = $server->get_db('disclosr-agencies');
if (isset($_REQUEST['id'])) {
- //get an agency record as json/html, search by name/abn/id
+//get an agency record as json/html, search by name/abn/id
// by name = startkey="Ham"&endkey="Ham\ufff0"
// edit?
- $row = $db->get($_REQUEST['id']);
- //print_r($row);
+ $obj = $db->get($_REQUEST['id']);
+//print_r($row);
if (sizeof($_POST) > 0) {
- //print_r($_POST);
+//print_r($_POST);
+ foreach ($_POST as $postkey => $postvalue) {
+ if ($postvalue == "") {
+ unset($_POST[$postkey]);
+ }
+ if (is_array($postvalue)) {
+ if (count($postvalue) == 1 && $postvalue[0] == "") {
+ unset($_POST[$postkey]);
+ } else {
+ foreach ($_POST[$postkey] as $key => &$value) {
+ if ($value == "") {
+ unset($_POST[$postkey][$key]);
+ }
+ }
+ }
+ }
+ }
if (isset($_POST['_id']) && $db->get_rev($_POST['_id']) == $_POST['_rev']) {
echo "Edited version was latest version, continue saving";
$newdoc = $_POST;
$newdoc['metadata']['lastModified'] = time();
- $row = $db->save($newdoc);
+ $obj = $db->save($newdoc);
} else {
- echo "ALERT doc revised by someone else while editing.";
+ echo "ALERT doc revised by someone else while editing. Document not saved.";
}
}
$mode = "edit";
- $row = addDefaultFields(object_to_array($row));
+ $rowArray = object_to_array($obj);
+ksort($rowArray);
+ if ($mode == "edit") {
+ $row = addDefaultFields($rowArray);
+ } else {
+ $row = $rowArray;
+ }
+
if ($mode == "view") {
- echo '$key $value ';
+ echo '
";
}
if ($mode == "edit") {
echo '';
@@ -119,17 +187,29 @@
} else {
try {
- $rows = $db->get_view("app", "showNamesABNs")->rows;
+ /* $rows = $db->get_view("app", "showNamesABNs")->rows;
+ //print_r($rows);
+ foreach ($rows as $row) {
+ // print_r($row);
+ echo '';
echo '
";
+ echo " ";
echo "' . $row['name'] . "
";
}
@@ -111,7 +179,7 @@
echo displayValue($key, $value, $mode);
}
if ($mode == "view") {
- echo "Field Name Field Value ';
foreach ($rows as $row) {
// print_r($row);
- echo '
";
} catch (SetteeRestClientException $e) {
setteErrorHandler($e);
}
}
include_footer();
?>
+
--- /dev/null
+++ b/graph.php
@@ -1,1 +1,144 @@
+
";
- } catch (SetteeRestClientException $e) {
- setteErrorHandler($e);
- }
-}
-?>
-
--- a/include/common.inc.php
+++ b/include/common.inc.php
@@ -1,8 +1,19 @@
stdClass
return (object) $array;
}
-?>
+function dept_to_portfolio($deptName) {
+ return trim(str_replace("Department of", "", str_replace("Department of the", "Department of", $deptName)));
+}
+function phrase_to_tag ($phrase) {
+ return str_replace(" ","_",str_replace("'","",str_replace(",","",strtolower($phrase))));
+}
+function GetDomain($url)
+{
+$nowww = ereg_replace('www\.','',$url);
+$domain = parse_url($nowww);
+if(!empty($domain["host"]))
+ {
+ return $domain["host"];
+ } else
+ {
+ return $domain["path"];
+ }
+}
-
--- a/include/couchdb.inc.php
+++ b/include/couchdb.inc.php
@@ -1,53 +1,173 @@
_id = "_design/" . urlencode("app");
$obj->language = "javascript";
+ $obj->views->all->map = "function(doc) { emit(doc._id, doc); };";
$obj->views->byABN->map = "function(doc) { emit(doc.abn, doc); };";
- $obj->views->byName->map = "function(doc) { emit(doc.name, doc);
+ $obj->views->byCanonicalName->map = "function(doc) {
+ if (doc.parentOrg || doc.orgType == 'FMA-DepartmentOfState') {
+ emit(doc.name, doc);
+ }
+};";
+ $obj->views->byDeptStateName->map = "function(doc) {
+ if (doc.orgType == 'FMA-DepartmentOfState') {
+ emit(doc.name, doc._id);
+ }
+};";
+ $obj->views->parentOrgs->map = "function(doc) {
+ if (doc.parentOrg) {
+ emit(doc._id, doc.parentOrg);
+ }
+};";
+ $obj->views->byName->map = 'function(doc) {
+ if (typeof(doc["status"]) == "undefined" || doc["status"] != "suspended") {
+ emit(doc.name, doc._id);
+if (typeof(doc.shortName) != "undefined" && doc.shortName != doc.name) {
+ emit(doc.shortName, doc._id);
+}
for (name in doc.otherNames) {
-if (doc.otherNames[name] != '' && doc.otherNames[name] != doc.name) {
- emit(doc.otherNames[name], doc);
+if (doc.otherNames[name] != "" && doc.otherNames[name] != doc.name) {
+ emit(doc.otherNames[name], doc._id);
}
}
+ for (name in doc.foiBodies) {
+if (doc.foiBodies[name] != "" && doc.foiBodies[name] != doc.name) {
+ emit(doc.foiBodies[name], doc._id);
+}
+ }
+ }
+};';
+
+ $obj->views->foiEmails->map = "function(doc) {
+ emit(doc._id, doc.foiEmail);
};";
+
$obj->views->byLastModified->map = "function(doc) { emit(doc.metadata.lastModified, doc); }";
$obj->views->getActive->map = 'function(doc) { if (doc.status == "active") { emit(doc._id, doc); } };';
$obj->views->getSuspended->map = 'function(doc) { if (doc.status == "suspended") { emit(doc._id, doc); } };';
- $obj->views->getScrapeRequired->map = "function(doc) { emit(doc.abn, doc); };";
+ $obj->views->getScrapeRequired->map = "function(doc) {
+
+var lastScrape = Date.parse(doc.metadata.lastScraped);
+
+var today = new Date();
+
+if (!lastScrape || lastScrape.getTime() + 1000 != today.getTime()) {
+ emit(doc._id, doc);
+}
+
+};";
$obj->views->showNamesABNs->map = "function(doc) { emit(doc._id, {name: doc.name, abn: doc.abn}); };";
+ $obj->views->getConflicts->map = "function(doc) {
+ if (doc._conflicts) {
+ emit(null, [doc._rev].concat(doc._conflicts));
+ }
+}";
// http://stackoverflow.com/questions/646628/javascript-startswith
- $obj->views->score->map = 'if(!String.prototype.startsWith){
+$obj->views->score->map = 'if(!String.prototype.startsWith){
String.prototype.startsWith = function (str) {
return !this.indexOf(str);
}
}
function(doc) {
-count = 0;
+ count = 0;
+ if (doc["status"] != "suspended") {
+ for(var propName in doc) {
+ if(typeof(doc[propName]) != "undefined" && doc[propName] != "") {
+ count++;
+ }
+ }
+ portfolio = doc.parentOrg;
+ if (doc.orgType == "FMA-DepartmentOfState") {
+ portfolio = doc._id;
+ }
+ if (doc.orgType == "Court-Commonwealth" || doc.orgType == "FMA-DepartmentOfParliament") {
+ portfolio = doc.orgType;
+ }
+ emit(count+doc._id, {id:doc._id, name: doc.name, score:count, orgType: doc.orgType, portfolio:portfolio});
+ }
+}';
+ $obj->views->scoreHas->map = 'if(!String.prototype.startsWith){
+ String.prototype.startsWith = function (str) {
+ return !this.indexOf(str);
+ }
+}
+if(!String.prototype.endsWith){
+ String.prototype.endsWith = function(suffix) {
+ return this.indexOf(suffix, this.length - suffix.length) !== -1;
+ };
+}
+function(doc) {
+if (typeof(doc["status"]) == "undefined" || doc["status"] != "suspended") {
for(var propName in doc) {
- if(typeof(doc[propName]) != "undefined" && propName.startsWith("l")) {
- count++
+ if(typeof(doc[propName]) != "undefined" && (propName.startsWith("has") || propName.endsWith("URL"))) {
+ emit(propName, 1);
}
}
- emit(doc._id,{name: doc.name, score:count});
+ emit("total", 1);
+ }
}';
-
+ $obj->views->scoreHas->reduce = 'function (key, values, rereduce) {
+ return sum(values);
+}';
+ $obj->views->fieldNames->map = '
+function(doc) {
+for(var propName in doc) {
+ emit(propName, doc._id);
+ }
+
+}';
+ $obj->views->fieldNames->reduce = 'function (key, values, rereduce) {
+ return values.length;
+}';
// allow safe updates (even if slightly slower due to extra: rev-detection check).
return $db->save($obj, true);
}
-require ('couchdb/settee/src/settee.php');
+if (php_uname('n') == "vanille") {
+$serverAddr = 'http://192.168.178.21:5984/';
+
+} else
+if (php_uname('n') == "KYUUBEY") {
-$server = new SetteeServer('http://127.0.0.1:5984');
-
+ $serverAddr = 'http://192.168.1.148:5984/';
+} else {
+ $serverAddr = 'http://127.0.0.1:5984/';
+}
+ $server = new SetteeServer($serverAddr);
function setteErrorHandler($e) {
echo $e->getMessage() . "
" . PHP_EOL;
}
-?>
-
--- a/include/template.inc.php
+++ b/include/template.inc.php
@@ -1,6 +1,7 @@
@@ -18,11 +19,11 @@
"+b+" : "+d.p.globalProbes[b]()+"
";a+="LOCAL :
";for(b in d.p.localProbes)a+=""+b+" : "+d.p.localProbes[b]()+"
";d.p.dom.innerHTML= +a;return d}sigma.classes.Cascade.call(this);var d=this;this.instance=b;this.monitoring=!1;this.p={fps:40,dom:h,globalProbes:{"Time (ms)":sigma.chronos.getExecutionTime,Queue:sigma.chronos.getQueuedTasksCount,Tasks:sigma.chronos.getTasksCount,FPS:sigma.chronos.getFPS},localProbes:{"Nodes count":function(){return d.instance.graph.nodes.length},"Edges count":function(){return d.instance.graph.edges.length}}};this.activate=function(){if(!d.monitoring)d.monitoring=window.setInterval(e,1E3/d.p.fps);return d}; +this.desactivate=function(){if(d.monitoring)window.clearInterval(d.monitoring),d.monitoring=null,d.p.dom.innerHTML="";return d}}function j(b){function h(b){if(a.p.mouseEnabled&&(e(a.mouseX,a.mouseY,a.ratio*(0<(void 0!=b.wheelDelta&&b.wheelDelta||void 0!=b.detail&&-b.detail)?a.p.zoomMultiply:1/a.p.zoomMultiply)),a.p.blockScroll))b.preventDefault?b.preventDefault():b.returnValue=!1}function e(b,c,e){if(!a.isMouseDown&&(window.clearInterval(a.interpolationID),n=void 0!=e,i=a.stageX,j=b,k=a.stageY,l= +c,f=e||a.ratio,f=Math.min(Math.max(f,a.p.minRatio),a.p.maxRatio),u=a.p.directZooming?1-(n?a.p.zoomDelta:a.p.dragDelta):0,a.ratio!=f||a.stageX!=j||a.stageY!=l))d(),a.interpolationID=window.setInterval(d,50),a.dispatch("startinterpolate")}function d(){u+=n?a.p.zoomDelta:a.p.dragDelta;u=Math.min(u,1);var b=sigma.easing.quadratic.easeout(u),c=a.ratio;a.ratio=c*(1-b)+f*b;n?(a.stageX=j+(a.stageX-j)*a.ratio/c,a.stageY=l+(a.stageY-l)*a.ratio/c):(a.stageX=i*(1-b)+j*b,a.stageY=k*(1-b)+l*b);a.dispatch("interpolate"); +if(1<=u)window.clearInterval(a.interpolationID),b=a.ratio,n?(a.ratio=f,a.stageX=j+(a.stageX-j)*a.ratio/b,a.stageY=l+(a.stageY-l)*a.ratio/b):(a.stageX=j,a.stageY=l),a.dispatch("stopinterpolate")}sigma.classes.Cascade.call(this);sigma.classes.EventDispatcher.call(this);var a=this;this.p={minRatio:1,maxRatio:32,marginRatio:1,zoomDelta:0.1,dragDelta:0.3,zoomMultiply:2,directZooming:!1,blockScroll:!0,inertia:1.1,mouseEnabled:!0};var g=0,c=0,i=0,k=0,f=1,j=0,l=0,s=0,q=0,z=0,m=0,u=0,n=!1;this.stageY=this.stageX= +0;this.ratio=1;this.mouseY=this.mouseX=0;this.isMouseDown=!1;b.addEventListener("DOMMouseScroll",h,!0);b.addEventListener("mousewheel",h,!0);b.addEventListener("mousemove",function(b){a.mouseX=void 0!=b.offsetX&&b.offsetX||void 0!=b.layerX&&b.layerX||void 0!=b.clientX&&b.clientX;a.mouseY=void 0!=b.offsetY&&b.offsetY||void 0!=b.layerY&&b.layerY||void 0!=b.clientY&&b.clientY;if(a.isMouseDown){var d=a.mouseX-g+i,f=a.mouseY-c+k;if(d!=a.stageX||f!=a.stageY)q=s,m=z,s=d,z=f,a.stageX=d,a.stageY=f,a.dispatch("drag")}a.dispatch("move"); +b.preventDefault?b.preventDefault():b.returnValue=!1},!0);b.addEventListener("mousedown",function(b){if(a.p.mouseEnabled)a.isMouseDown=!0,a.dispatch("mousedown"),i=a.stageX,k=a.stageY,g=a.mouseX,c=a.mouseY,q=s=a.stageX,m=z=a.stageY,a.dispatch("startdrag"),b.preventDefault?b.preventDefault():b.returnValue=!1},!0);document.addEventListener("mouseup",function(b){if(a.p.mouseEnabled&&a.isMouseDown)a.isMouseDown=!1,a.dispatch("mouseup"),(i!=a.stageX||k!=a.stageY)&&e(a.stageX+a.p.inertia*(a.stageX-q),a.stageY+ +a.p.inertia*(a.stageY-m)),b.preventDefault?b.preventDefault():b.returnValue=!1},!0);this.checkBorders=function(){return a};this.interpolate=e}function m(b,h,e,d,a,g,c){function i(a){var b=d,c="fixed"==f.p.labelSize?f.p.defaultLabelSize:f.p.labelSizeRatio*a.displaySize;b.font=(f.p.hoverFontStyle||f.p.fontStyle||"")+" "+c+"px "+(f.p.hoverFont||f.p.font||"");b.fillStyle="node"==f.p.labelHoverBGColor?a.color||f.p.defaultNodeColor:f.p.defaultHoverLabelBGColor;b.beginPath();if(f.p.labelHoverShadow)b.shadowOffsetX= +0,b.shadowOffsetY=0,b.shadowBlur=4,b.shadowColor=f.p.labelHoverShadowColor;sigma.tools.drawRoundRect(b,Math.round(a.displayX-c/2-2),Math.round(a.displayY-c/2-2),Math.round(b.measureText(a.label).width+1.5*a.displaySize+c/2+4),Math.round(c+4),Math.round(c/2+2),"left");b.closePath();b.fill();b.shadowOffsetX=0;b.shadowOffsetY=0;b.shadowBlur=0;b.beginPath();b.fillStyle="node"==f.p.nodeBorderColor?a.color||f.p.defaultNodeColor:f.p.defaultNodeBorderColor;b.arc(Math.round(a.displayX),Math.round(a.displayY), +a.displaySize+f.p.borderSize,0,2*Math.PI,!0);b.closePath();b.fill();b.beginPath();b.fillStyle="node"==f.p.nodeHoverColor?a.color||f.p.defaultNodeColor:f.p.defaultNodeHoverColor;b.arc(Math.round(a.displayX),Math.round(a.displayY),a.displaySize,0,2*Math.PI,!0);b.closePath();b.fill();b.fillStyle="node"==f.p.labelHoverColor?a.color||f.p.defaultNodeColor:f.p.defaultLabelHoverColor;b.fillText(a.label,Math.round(a.displayX+1.5*a.displaySize),Math.round(a.displayY+c/2-3));return f}function k(a){if(isNaN(a.x)|| +isNaN(a.y))throw Error("A node's coordinate is not a number (id: "+a.id+")");return!a.hidden&&a.displayX+a.displaySize>-j/3&&a.displayX-a.displaySize<4*j/3&&a.displayY+a.displaySize>-l/3&&a.displayY-a.displaySize<4*l/3}sigma.classes.Cascade.call(this);var f=this;this.p={labelColor:"default",defaultLabelColor:"#000",labelHoverBGColor:"default",defaultHoverLabelBGColor:"#fff",labelHoverShadow:!0,labelHoverShadowColor:"#000",labelHoverColor:"default",defaultLabelHoverColor:"#000",labelActiveBGColor:"default", +defaultActiveLabelBGColor:"#fff",labelActiveShadow:!0,labelActiveShadowColor:"#000",labelActiveColor:"default",defaultLabelActiveColor:"#000",labelSize:"fixed",defaultLabelSize:12,labelSizeRatio:2,labelThreshold:6,font:"Arial",hoverFont:"",activeFont:"",fontStyle:"",hoverFontStyle:"",activeFontStyle:"",edgeColor:"source",defaultEdgeColor:"#aaa",defaultEdgeType:"line",defaultNodeColor:"#aaa",nodeHoverColor:"node",defaultNodeHoverColor:"#fff",nodeActiveColor:"node",defaultNodeActiveColor:"#fff",borderSize:0, +nodeBorderColor:"node",defaultNodeBorderColor:"#fff",edgesSpeed:200,nodesSpeed:200,labelsSpeed:200};var j=g,l=c;this.currentLabelIndex=this.currentNodeIndex=this.currentEdgeIndex=0;this.task_drawLabel=function(){for(var b=a.nodes.length,c=0;c++