by date/agency beginnings
by date/agency beginnings


Former-commit-id: 52ef8009c9c04d5a57236f891da3b720090014ae

<?php <?php
   
/** /**
* Databaase class. * Databaase class.
*/ */
class SetteeDatabase { class SetteeDatabase {
   
/** /**
* Base URL of the CouchDB REST API * Base URL of the CouchDB REST API
*/ */
private $conn_url; private $conn_url;
/** /**
* HTTP REST Client instance * HTTP REST Client instance
*/ */
protected $rest_client; protected $rest_client;
/** /**
* Name of the database * Name of the database
*/ */
private $dbname; private $dbname;
/** /**
* Default constructor * Default constructor
*/ */
function __construct($conn_url, $dbname) { function __construct($conn_url, $dbname) {
$this->conn_url = $conn_url; $this->conn_url = $conn_url;
$this->dbname = $dbname; $this->dbname = $dbname;
$this->rest_client = SetteeRestClient::get_instance($this->conn_url); $this->rest_client = SetteeRestClient::get_instance($this->conn_url);
} }
   
   
/** /**
* Get UUID from CouchDB * Get UUID from CouchDB
* *
* @return * @return
* CouchDB-generated UUID string * CouchDB-generated UUID string
* *
*/ */
function gen_uuid() { function gen_uuid() {
$ret = $this->rest_client->http_get('_uuids'); $ret = $this->rest_client->http_get('_uuids');
return $ret['decoded']->uuids[0]; // should never be empty at this point, so no checking return $ret['decoded']->uuids[0]; // should never be empty at this point, so no checking
} }
   
/** /**
* Create or update a document database * Create or update a document database
* *
* @param $document * @param $document
* PHP object, a PHP associative array, or a JSON String representing the document to be saved. PHP Objects and arrays are JSON-encoded automatically. * PHP object, a PHP associative array, or a JSON String representing the document to be saved. PHP Objects and arrays are JSON-encoded automatically.
* *
* <p>If $document has a an "_id" property set, it will be used as document's unique id (even for "create" operation). * <p>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 "_id" is missing, CouchDB will be used to generate a UUID.
* *
* <p>If $document has a "_rev" property (revision), document will be updated, rather than creating a new document. * <p>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 * 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 * 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. * not provide "_id" since that is an invalid input.
* *
* @param $allowRevAutoDetection * @param $allowRevAutoDetection
* Default: false. When true and _rev is missing from the document, save() function will auto-detect latest revision * 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 * 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. * therefore can make save() operation slightly slower if such auto-detection is not required.
* *
* @return * @return
* document object with the database id (uuid) and revision attached; * document object with the database id (uuid) and revision attached;
* *
* @throws SetteeCreateDatabaseException * @throws SetteeCreateDatabaseException
*/ */
function save($document, $allowRevAutoDetection = false) { function save($document, $allowRevAutoDetection = false) {
if (is_string($document)) { if (is_string($document)) {
$document = json_decode($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) // Allow passing of $document as an array (for syntactic simplicity and also because in JSON world it does not matter)
if(is_array($document)) { if(is_array($document)) {
$document = (object) $document; $document = (object) $document;
} }
   
if (empty($document->_id) && empty($document->_rev)) { if (empty($document->_id) && empty($document->_rev)) {
$id = $this->gen_uuid(); $id = $this->gen_uuid();
} }
elseif (empty($document->_id) && !empty($document->_rev)) { elseif (empty($document->_id) && !empty($document->_rev)) {
throw new SetteeWrongInputException("Error: You can not save a document with a revision provided, but missing id"); throw new SetteeWrongInputException("Error: You can not save a document with a revision provided, but missing id");
} }
else { else {
$id = $document->_id; $id = $document->_id;
   
if ($allowRevAutoDetection) { if ($allowRevAutoDetection) {
try { try {
$rev = $this->get_rev($id); $rev = $this->get_rev($id);
} catch (SetteeRestClientException $e) { } catch (SetteeRestClientException $e) {
// auto-detection may fail legitimately, if a document has never been saved before (new doc), so skipping error // auto-detection may fail legitimately, if a document has never been saved before (new doc), so skipping error
} }
if (!empty($rev)) { if (!empty($rev)) {
$document->_rev = $rev; $document->_rev = $rev;
} }
} }
} }
$full_uri = $this->dbname . "/" . $this->safe_urlencode($id); $full_uri = $this->dbname . "/" . $this->safe_urlencode($id);
$document_json = json_encode($document, JSON_NUMERIC_CHECK); $document_json = json_encode($document, JSON_NUMERIC_CHECK);
$ret = $this->rest_client->http_put($full_uri, $document_json); $ret = $this->rest_client->http_put($full_uri, $document_json);
   
$document->_id = $ret['decoded']->id; $document->_id = $ret['decoded']->id;
$document->_rev = $ret['decoded']->rev; $document->_rev = $ret['decoded']->rev;
   
return $document; return $document;
} }
   
/** /**
* @param $doc * @param $doc
* @param $name * @param $name
* @param $content * @param $content
* Content of the attachment in a string-buffer format. This function will automatically base64-encode content for * 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. * you, so you don't have to do it.
* @param $mime_type * @param $mime_type
* Optional. Will be auto-detected if not provided * Optional. Will be auto-detected if not provided
* @return void * @return void
*/ */
public function add_attachment($doc, $name, $content, $mime_type = null) { public function add_attachment($doc, $name, $content, $mime_type = null) {
if (empty($doc->_attachments) || !is_object($doc->_attachments)) { if (empty($doc->_attachments) || !is_object($doc->_attachments)) {
$doc->_attachments = new stdClass(); $doc->_attachments = new stdClass();
} }
   
if (empty($mime_type)) { if (empty($mime_type)) {
$mime_type = $this->rest_client->content_mime_type($content); $mime_type = $this->rest_client->content_mime_type($content);
} }
   
$doc->_attachments->$name = new stdClass(); $doc->_attachments->$name = new stdClass();
$doc->_attachments->$name->content_type = $mime_type; $doc->_attachments->$name->content_type = $mime_type;
$doc->_attachments->$name->data = base64_encode($content); $doc->_attachments->$name->data = base64_encode($content);
} }
   
/** /**
* @param $doc * @param $doc
* @param $name * @param $name
* @param $file * @param $file
* Full path to a file (e.g. as returned by PHP's realpath function). * Full path to a file (e.g. as returned by PHP's realpath function).
* @param $mime_type * @param $mime_type
* Optional. Will be auto-detected if not provided * Optional. Will be auto-detected if not provided
* @return void * @return void
*/ */
public function add_attachment_file($doc, $name, $file, $mime_type = null) { public function add_attachment_file($doc, $name, $file, $mime_type = null) {
$content = file_get_contents($file); $content = file_get_contents($file);
$this->add_attachment($doc, $name, $content, $mime_type); $this->add_attachment($doc, $name, $content, $mime_type);
} }
   
/** /**
* *
* Retrieve a document from CouchDB * Retrieve a document from CouchDB
* *
* @throws SetteeWrongInputException * @throws SetteeWrongInputException
* *
* @param $id * @param $id
* Unique ID (usually: UUID) of the document to be retrieved. * Unique ID (usually: UUID) of the document to be retrieved.
* @return * @return
* database document in PHP object format. * database document in PHP object format.
*/ */
function get($id) { function get($id) {
if (empty($id)) { if (empty($id)) {
throw new SetteeWrongInputException("Error: Can't retrieve a document without a uuid."); throw new SetteeWrongInputException("Error: Can't retrieve a document without a uuid.");
} }
   
$full_uri = $this->dbname . "/" . $this->safe_urlencode($id); $full_uri = $this->dbname . "/" . $this->safe_urlencode($id);
$full_uri = str_replace("%3Frev%3D","?rev=",$full_uri); $full_uri = str_replace("%3Frev%3D","?rev=",$full_uri);
$ret = $this->rest_client->http_get($full_uri); $ret = $this->rest_client->http_get($full_uri);
return $ret['decoded']; return $ret['decoded'];
} }
   
/** /**
* *
* Get the latest revision of a document with document id: $id in CouchDB. * Get the latest revision of a document with document id: $id in CouchDB.
* *
* @throws SetteeWrongInputException * @throws SetteeWrongInputException
* *
* @param $id * @param $id
* Unique ID (usually: UUID) of the document to be retrieved. * Unique ID (usually: UUID) of the document to be retrieved.
* @return * @return
* database document in PHP object format. * database document in PHP object format.
*/ */
function get_rev($id) { function get_rev($id) {
if (empty($id)) { if (empty($id)) {
throw new SetteeWrongInputException("Error: Can't query a document without a uuid."); throw new SetteeWrongInputException("Error: Can't query a document without a uuid.");
} }
   
$full_uri = $this->dbname . "/" . $this->safe_urlencode($id); $full_uri = $this->dbname . "/" . $this->safe_urlencode($id);
$headers = $this->rest_client->http_head($full_uri); $headers = $this->rest_client->http_head($full_uri);
if (empty($headers['Etag'])) { if (empty($headers['Etag'])) {
throw new SetteeRestClientException("Error: could not retrieve revision. Server unexpectedly returned empty Etag"); throw new SetteeRestClientException("Error: could not retrieve revision. Server unexpectedly returned empty Etag");
} }
$etag = str_replace('"', '', $headers['Etag']); $etag = str_replace('"', '', $headers['Etag']);
return $etag; return $etag;
} }
/** /**
* Delete a document * Delete a document
* *
* @param $document * @param $document
* a PHP object or JSON representation of the document that has _id and _rev fields. * a PHP object or JSON representation of the document that has _id and _rev fields.
* *
* @return void * @return void
*/ */
function delete($document) { function delete($document) {
if (!is_object($document)) { if (!is_object($document)) {
$document = json_decode($document); $document = json_decode($document);
} }
   
$full_uri = $this->dbname . "/" . $this->safe_urlencode($document->_id) . "?rev=" . $document->_rev; $full_uri = $this->dbname . "/" . $this->safe_urlencode($document->_id) . "?rev=" . $document->_rev;
$this->rest_client->http_delete($full_uri); $this->rest_client->http_delete($full_uri);
} }
   
/*----------------- View-related functions --------------*/ /*----------------- View-related functions --------------*/
   
/** /**
* Create a new view or update an existing one. * Create a new view or update an existing one.
* *
* @param $design_doc * @param $design_doc
* @param $view_name * @param $view_name
* @param $map_src * @param $map_src
* Source code of the map function in Javascript * Source code of the map function in Javascript
* @param $reduce_src * @param $reduce_src
* Source code of the reduce function in Javascript (optional) * Source code of the reduce function in Javascript (optional)
* @return void * @return void
*/ */
function save_view($design_doc, $view_name, $map_src, $reduce_src = null) { function save_view($design_doc, $view_name, $map_src, $reduce_src = null) {
$obj = new stdClass(); $obj = new stdClass();
$obj->_id = "_design/" . urlencode($design_doc); $obj->_id = "_design/" . urlencode($design_doc);
$view_name = urlencode($view_name); $view_name = urlencode($view_name);
$obj->views->$view_name->map = $map_src; $obj->views->$view_name->map = $map_src;
if (!empty($reduce_src)) { if (!empty($reduce_src)) {
$obj->views->$view_name->reduce = $reduce_src; $obj->views->$view_name->reduce = $reduce_src;
} }
   
// allow safe updates (even if slightly slower due to extra: rev-detection check). // allow safe updates (even if slightly slower due to extra: rev-detection check).
return $this->save($obj, true); return $this->save($obj, true);
} }
   
/** /**
* Create a new view or update an existing one. * Create a new view or update an existing one.
* *
* @param $design_doc * @param $design_doc
* @param $view_name * @param $view_name
* @param $key * @param $key
* key parameter to a view. Can be a single value or an array (for a range). If passed an array, function assumes * 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. * that first element is startkey, second: endkey.
* @param $descending * @param $descending
* return results in descending order. Please don't forget that if you are using a startkey/endkey, when you change * 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! * order you also need to swap startkey and endkey values!
* *
* @return void * @return void
*/ */
function get_view($design_doc, $view_name, $key = null, $descending = false, $limit = false) { function get_view($design_doc, $view_name, $key = null, $descending = false, $limit = false, $reduce=false) {
$id = "_design/" . urlencode($design_doc); $id = "_design/" . urlencode($design_doc);
$view_name = urlencode($view_name); $view_name = urlencode($view_name);
$id .= "/_view/$view_name"; $id .= "/_view/$view_name";
   
$data = array(); $data = array();
if (!empty($key)) { if (!empty($key)) {
if (is_string($key)) { if (is_string($key)) {
$data = "key=" . '"' . $key . '"'; $data = "key=" . '"' . $key . '"';
} }
elseif (is_array($key)) { elseif (is_array($key)) {
list($startkey, $endkey) = $key; list($startkey, $endkey) = $key;
$data = "startkey=" . '"' . $startkey . '"&' . "endkey=" . '"' . $endkey . '"'; $data = "startkey=" . '"' . $startkey . '"&' . "endkey=" . '"' . $endkey . '"';
} }
   
if ($descending) { if ($descending) {
$data .= "&descending=true"; $data .= "&descending=true";
} }
  if ($reduce) {
  $data .= "&reduce=true";
  } else {
  $data .= "&reduce=false";
  }
if ($limit) { if ($limit) {
$data .= "&limit=".$limit; $data .= "&limit=".$limit;
} }
} }
   
   
   
if (empty($id)) { if (empty($id)) {
throw new SetteeWrongInputException("Error: Can't retrieve a document without a uuid."); throw new SetteeWrongInputException("Error: Can't retrieve a document without a uuid.");
} }
   
$full_uri = $this->dbname . "/" . $this->safe_urlencode($id); $full_uri = $this->dbname . "/" . $this->safe_urlencode($id);
   
$full_uri = str_replace("%253Fgroup%253D","?group=",$full_uri); $full_uri = str_replace("%253Fgroup%253D","?group=",$full_uri);
$full_uri = str_replace("%253Flimit%253D","?limit=",$full_uri); $full_uri = str_replace("%253Flimit%253D","?limit=",$full_uri);
$ret = $this->rest_client->http_get($full_uri, $data); $ret = $this->rest_client->http_get($full_uri, $data);
  //$ret['decoded'] = str_replace("?k","&k",$ret['decoded']);
return $ret['decoded']; return $ret['decoded'];
} }
   
/** /**
* @param $id * @param $id
* @return * @return
* return a properly url-encoded id. * return a properly url-encoded id.
*/ */
private function safe_urlencode($id) { private function safe_urlencode($id) {
//-- System views like _design can have "/" in their URLs. //-- System views like _design can have "/" in their URLs.
$id = rawurlencode($id); $id = rawurlencode($id);
if (substr($id, 0, 1) == '_') { if (substr($id, 0, 1) == '_') {
$id = str_replace('%2F', '/', $id); $id = str_replace('%2F', '/', $id);
} }
return $id; return $id;
} }
/** Getter for a database name */ /** Getter for a database name */
function get_name() { function get_name() {
return $this->dbname; return $this->dbname;
} }
   
} }
  <?php
  include('template.inc.php');
  include_once('../include/common.inc.php');
  $agenciesdb = $server->get_db('disclosr-agencies');
 
  $idtoname = Array();
  foreach ($agenciesdb->get_view("app", "byCanonicalName")->rows as $row) {
  $idtoname[$row->id] = trim($row->value->name);
  }
  $foidocsdb = $server->get_db('disclosr-foidocuments');
 
  include_header_documents((isset($_REQUEST['id']) ? $idtoname[$_REQUEST['id']] : 'Entries by Agency'));
  $endkey = (isset($_REQUEST['end_key']) ? $_REQUEST['end_key'] : '9999-99-99');
  ?>
  <div class="headline">Read all the information released by Australian Federal Government agencies under the FOI Act in one place!</div>
  <a style='float:right' href="rss.xml.php"><img src="img/feed-icon-14x14.png" alt="RSS Icon"/> All Agencies RSS Feed</a><br>
  <?php
  try {
  if ($_REQUEST['id']) {
  $rows = $foidocsdb->get_view("app", "byAgencyID", $_REQUEST['id'], false, false, false)->rows;
  foreach ($rows as $row) {
  //print_r($rows);
  echo displayLogEntry($row, $idtoname);
  if (!isset($startkey))
  $startkey = $row->key;
  $endkey = $row->key;
  }
  } else {
  $rows = $foidocsdb->get_view("app", "byAgencyID?group=true", null, false, false, true)->rows;
  if ($rows) {
  foreach ($rows as $row) {
  echo '<a href="agency.php?id=' . $row->key . '">' . $idtoname[$row->key] . " (" . $row->value . " records)</a> <br>\n";
  }
  }
  }
  } catch (SetteeRestClientException $e) {
  setteErrorHandler($e);
  }
  echo "<a class='btn btn-large btn-primary' href='?end_key=$endkey' style='float:right;'>next page <i class='icon-circle-arrow-right icon-white'></i></a>";
  include_footer_documents();
  ?>
<?php <?php
include('template.inc.php'); include('template.inc.php');
include_header_documents("Charts"); include_header_documents("Charts");
include_once('../include/common.inc.php'); include_once('../include/common.inc.php');
$agenciesdb = $server->get_db('disclosr-agencies'); $agenciesdb = $server->get_db('disclosr-agencies');
   
$idtoname = Array(); $idtoname = Array();
foreach ($agenciesdb->get_view("app", "byCanonicalName")->rows as $row) { foreach ($agenciesdb->get_view("app", "byCanonicalName")->rows as $row) {
$idtoname[$row->id] = trim($row->value->name); $idtoname[$row->id] = trim($row->value->name);
} }
$foidocsdb = $server->get_db('disclosr-foidocuments'); $foidocsdb = $server->get_db('disclosr-foidocuments');
   
?> ?>
<div class="foundation-header"> <div class="foundation-header">
<h1><a href="about.php">Charts</a></h1> <h1><a href="about.php">Charts</a></h1>
<h4 class="subheader">Lorem ipsum.</h4> <h4 class="subheader">Lorem ipsum.</h4>
</div> </div>
<div id="bydate" style="width:1000px;height:300px;"></div> <div id="bydate" style="width:1000px;height:300px;"></div>
<div id="byagency" style="width:1200px;height:300px;"></div> <div id="byagency" style="width:1200px;height:300px;"></div>
<script id="source"> <script id="source">
window.onload = function() { window.onload = function() {
$(document).ready(function() { $(document).ready(function() {
var var
d1 = [], d1 = [],
options1, options1,
o1; o1;
   
<?php <?php
try { try {
$rows = $foidocsdb->get_view("app", "byDateMonthYear?group=true")->rows; $rows = $foidocsdb->get_view("app", "byDateMonthYear?group=true",null, false,false,true)->rows;
   
   
$dataValues = Array(); $dataValues = Array();
foreach ($rows as $row) { foreach ($rows as $row) {
$dataValues[$row->key] = $row->value; $dataValues[$row->key] = $row->value;
} }
$i = 0; $i = 0;
ksort($dataValues); ksort($dataValues);
foreach ($dataValues as $key => $value) { foreach ($dataValues as $key => $value) {
$date = date_create_from_format('Y-m-d', $key); $date = date_create_from_format('Y-m-d', $key);
if (date_format($date, 'U') != "") { if (date_format($date, 'U') != "") {
echo " d1.push([".date_format($date, 'U')."000, $value]);" . PHP_EOL; echo " d1.push([".date_format($date, 'U')."000, $value]);" . PHP_EOL;
// echo " emplabels.push('$key');" . PHP_EOL; // echo " emplabels.push('$key');" . PHP_EOL;
$i++; $i++;
} }
} }
} catch (SetteeRestClientException $e) { } catch (SetteeRestClientException $e) {
setteErrorHandler($e); setteErrorHandler($e);
} }
?> ?>
   
   
options1 = { options1 = {
xaxis : { xaxis : {
mode : 'time', mode : 'time',
labelsAngle : 45 labelsAngle : 45
}, },
selection : { selection : {
mode : 'x' mode : 'x'
}, },
HtmlText : false, HtmlText : false,
title : 'Time' title : 'Time'
}; };
// Draw graph with default options, overwriting with passed options // Draw graph with default options, overwriting with passed options
function drawGraph (opts) { function drawGraph (opts) {
   
// Clone the options, so the 'options' variable always keeps intact. // Clone the options, so the 'options' variable always keeps intact.
o1 = Flotr._.extend(Flotr._.clone(options1), opts || {}); o1 = Flotr._.extend(Flotr._.clone(options1), opts || {});
   
// Return a new graph. // Return a new graph.
return Flotr.draw( return Flotr.draw(
document.getElementById("bydate"), document.getElementById("bydate"),
[ d1 ], [ d1 ],
o1 o1
); );
} }
   
graph = drawGraph(); graph = drawGraph();
Flotr.EventAdapter.observe(document.getElementById("bydate"), 'flotr:select', function(area){ Flotr.EventAdapter.observe(document.getElementById("bydate"), 'flotr:select', function(area){
// Draw selected area // Draw selected area
graph = drawGraph({ graph = drawGraph({
xaxis : { min : area.x1, max : area.x2, mode : 'time', labelsAngle : 45 }, xaxis : { min : area.x1, max : area.x2, mode : 'time', labelsAngle : 45 },
yaxis : { min : area.y1, max : area.y2 } yaxis : { min : area.y1, max : area.y2 }
}); });
}); });
// When graph is clicked, draw the graph with default area. // When graph is clicked, draw the graph with default area.
Flotr.EventAdapter.observe(document.getElementById("bydate"), 'flotr:click', function () { graph = drawGraph(); }); Flotr.EventAdapter.observe(document.getElementById("bydate"), 'flotr:click', function () { graph = drawGraph(); });
   
}); });
}; };
   
var d2 = []; var d2 = [];
var agencylabels = []; var agencylabels = [];
function agencytrackformatter(obj) { function agencytrackformatter(obj) {
return agencylabels[Math.floor(obj.x)] +" = "+obj.y; return agencylabels[Math.floor(obj.x)] +" = "+obj.y;
} }
function agencytickformatter(val, axis) { function agencytickformatter(val, axis) {
if (agencylabels[Math.floor(val)]) { if (agencylabels[Math.floor(val)]) {
return '<p style="margin-top:8em;-webkit-transform:rotate(-90deg);">'+(agencylabels[Math.floor(val)])+"</b>"; return '<p style="margin-top:8em;-webkit-transform:rotate(-90deg);">'+(agencylabels[Math.floor(val)])+"</b>";
} else { } else {
return ""; return "";
} }
} }
<?php <?php
try { try {
$rows = $foidocsdb->get_view("app", "byAgencyID?group=true")->rows; $rows = $foidocsdb->get_view("app", "byAgencyID?group=true",null, false,false,true)->rows;
   
   
$dataValues = Array(); $dataValues = Array();
$i = 0; $i = 0;
foreach ($rows as $row) { foreach ($rows as $row) {
echo " d2.push([".$i.", $row->value]);" . PHP_EOL; echo " d2.push([".$i.", $row->value]);" . PHP_EOL;
echo " agencylabels.push(['".str_replace("'","",$idtoname[$row->key])."']);" . PHP_EOL; echo " agencylabels.push(['".str_replace("'","",$idtoname[$row->key])."']);" . PHP_EOL;
$i++; $i++;
} }
} catch (SetteeRestClientException $e) { } catch (SetteeRestClientException $e) {
setteErrorHandler($e); setteErrorHandler($e);
} }
?> ?>
// Draw the graph // Draw the graph
Flotr.draw( Flotr.draw(
document.getElementById("byagency"), document.getElementById("byagency"),
[d2], [d2],
{ {
bars : { bars : {
show : true, show : true,
horizontal : false, horizontal : false,
shadowSize : 0, shadowSize : 0,
barWidth : 0.5 barWidth : 0.5
}, },
mouse : { mouse : {
track : true, track : true,
relative : true, relative : true,
trackFormatter: agencytrackformatter trackFormatter: agencytrackformatter
}, },
yaxis : { yaxis : {
min : 0, min : 0,
autoscaleMargin : 1 autoscaleMargin : 1
}, },
xaxis: { xaxis: {
minorTickFreq: 1, minorTickFreq: 1,
noTicks: agencylabels.length, noTicks: agencylabels.length,
showMinorLabels: true, showMinorLabels: true,
tickFormatter: agencytickformatter tickFormatter: agencytickformatter
}, },
legend: { legend: {
show: false show: false
} }
} }
); );
</script> </script>
   
<?php <?php
include_footer_documents(); include_footer_documents();
?> ?>
   
   
  <?php
 
  include('template.inc.php');
  include_header_documents("Entries by Date");
  include_once('../include/common.inc.php');
  $endkey = (isset($_REQUEST['end_key']) ? $_REQUEST['end_key'] : '9999-99-99');
  ?>
  <div class="headline">Read all the information released by Australian Federal Government agencies under the FOI Act in one place!</div>
  <a style='float:right' href="rss.xml.php"><img src="img/feed-icon-14x14.png" alt="RSS Icon"/> All Agencies RSS Feed</a><br>
  <?php
  /*$agenciesdb = $server->get_db('disclosr-agencies');
 
  $idtoname = Array();
  foreach ($agenciesdb->get_view("app", "byCanonicalName")->rows as $row) {
  $idtoname[$row->id] = trim($row->value->name);
  }
  $foidocsdb = $server->get_db('disclosr-foidocuments');
  try {
  $rows = $foidocsdb->get_view("app", "byDate", Array($endkey, '0000-00-00'), true, 20)->rows;
  if ($rows) {
  foreach ($rows as $key => $row) {
  echo displayLogEntry($row, $idtoname);
  if (!isset($startkey)) $startkey = $row->key;
  $endkey = $row->key;
  }
  }
  } catch (SetteeRestClientException $e) {
  setteErrorHandler($e);
  }
  echo "<a class='btn btn-large btn-primary' href='?end_key=$endkey' style='float:right;'>next page <i class='icon-circle-arrow-right icon-white'></i></a>";
  */
  include_footer_documents();
  ?>
 
<?php <?php
   
// Agency X updated Y, new files, diff of plain text/link text, // Agency X updated Y, new files, diff of plain text/link text,
// feed for just one agency or all // feed for just one agency or all
// This is a minimum example of using the Universal Feed Generator Class // This is a minimum example of using the Universal Feed Generator Class
include("../lib/FeedWriter/FeedTypes.php"); include("../lib/FeedWriter/FeedTypes.php");
include_once('../include/common.inc.php'); include_once('../include/common.inc.php');
//Creating an instance of FeedWriter class. //Creating an instance of FeedWriter class.
$TestFeed = new RSS2FeedWriter(); $TestFeed = new RSS2FeedWriter();
//Setting the channel elements //Setting the channel elements
//Use wrapper functions for common channelelements ////Retriving informations from database
$TestFeed->setTitle('disclosurelo.gs Newest Entries - All');  
$TestFeed->setLink('http://disclosurelo.gs/rss.xml.php');  
$TestFeed->setDescription('disclosurelo.gs Newest Entries - All Agencies');  
$TestFeed->setChannelElement('language', 'en-us');  
$TestFeed->setChannelElement('pubDate', date(DATE_RSS, time()));  
   
//Retriving informations from database  
$idtoname = Array(); $idtoname = Array();
$agenciesdb = $server->get_db('disclosr-agencies'); $agenciesdb = $server->get_db('disclosr-agencies');
foreach ($agenciesdb->get_view("app", "byCanonicalName")->rows as $row) { foreach ($agenciesdb->get_view("app", "byCanonicalName")->rows as $row) {
$idtoname[$row->id] = trim($row->value->name); $idtoname[$row->id] = trim($row->value->name);
} }
$foidocsdb = $server->get_db('disclosr-foidocuments'); $foidocsdb = $server->get_db('disclosr-foidocuments');
$rows = $foidocsdb->get_view("app", "byDate", Array('9999-99-99', '0000-00-00', 50), true)->rows; if (isset($_REQUEST['id'])) {
  $rows = $foidocsdb->get_view("app", "byAgencyID", $_REQUEST['id'], false, false, false)->rows;
  $title = $idtoname[$_REQUEST['id']];
  } else {
  $rows = $foidocsdb->get_view("app", "byDate", Array('9999-99-99', '0000-00-00', 50), true)->rows;
  $title = 'All Agencies';
  }
  //Use wrapper functions for common channelelements
  $TestFeed->setTitle('disclosurelo.gs Newest Entries - '.$title);
  $TestFeed->setLink('http://disclosurelo.gs/rss.xml.php'.(isset($_REQUEST['id'])? '?id='.$_REQUEST['id'] : ''));
  $TestFeed->setDescription('disclosurelo.gs Newest Entries - '.$title);
  $TestFeed->setChannelElement('language', 'en-us');
  $TestFeed->setChannelElement('pubDate', date(DATE_RSS, time()));
   
   
//print_r($rows); //print_r($rows);
foreach ($rows as $row) { foreach ($rows as $row) {
//Create an empty FeedItem //Create an empty FeedItem
$newItem = $TestFeed->createNewItem(); $newItem = $TestFeed->createNewItem();
//Add elements to the feed item //Add elements to the feed item
$newItem->setTitle($row->value->title); $newItem->setTitle($row->value->title);
$newItem->setLink("http://disclosurelo.gs/view.php?id=" . $row->value->_id); $newItem->setLink("http://disclosurelo.gs/view.php?id=" . $row->value->_id);
$newItem->setDate(strtotime($row->value->date)); $newItem->setDate(strtotime($row->value->date));
$newItem->setDescription(displayLogEntry($row, $idtoname)); $newItem->setDescription(displayLogEntry($row, $idtoname));
$newItem->setAuthor($idtoname[$row->value->agencyID]); $newItem->setAuthor($idtoname[$row->value->agencyID]);
$newItem->addElement('guid', "http://disclosurelo.gs/view.php?id=" . $row->value->_id, array('isPermaLink' => 'true')); $newItem->addElement('guid', "http://disclosurelo.gs/view.php?id=" . $row->value->_id, array('isPermaLink' => 'true'));
//Now add the feed item //Now add the feed item
$TestFeed->addItem($newItem); $TestFeed->addItem($newItem);
} }
//OK. Everything is done. Now genarate the feed. //OK. Everything is done. Now genarate the feed.
$TestFeed->generateFeed(); $TestFeed->generateFeed();
?> ?>
   
<?php <?php
   
include ('../include/common.inc.php'); include ('../include/common.inc.php');
$last_updated = date('Y-m-d', @filemtime('cbrfeed.zip')); $last_updated = date('Y-m-d', @filemtime('cbrfeed.zip'));
header("Content-Type: text/xml"); header("Content-Type: text/xml");
echo "<?xml version='1.0' encoding='UTF-8'?>"; echo "<?xml version='1.0' encoding='UTF-8'?>";
echo '<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">' . "\n"; echo '<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">' . "\n";
echo " <url><loc>" . local_url() . "index.php</loc><priority>1.0</priority></url>\n"; echo " <url><loc>" . local_url() . "index.php</loc><priority>1.0</priority></url>\n";
foreach (scandir("./") as $file) { foreach (scandir("./") as $file) {
if (strpos($file, ".php") !== false && $file != "index.php" && $file != "sitemap.xml.php") if (strpos($file, ".php") !== false && $file != "index.php" && $file != "sitemap.xml.php")
echo " <url><loc>" . local_url() . "$file</loc><priority>0.6</priority></url>\n"; echo " <url><loc>" . local_url() . "$file</loc><priority>0.6</priority></url>\n";
} }
  $agenciesdb = $server->get_db('disclosr-agencies');
$db = $server->get_db('disclosr-foidocuments');  
try { try {
$rows = $db->get_view("app", "all")->rows; $rows = $agenciesdb->get_view("app", "byCanonicalName")->rows;
  foreach ($rows as $row) {
  echo '<url><loc>' . local_url() . 'agency.php?id=' . $row->value->_id . "</loc><priority>0.3</priority></url>\n";
  }
  } catch (SetteeRestClientException $e) {
  setteErrorHandler($e);
  }
  $foidocsdb = $server->get_db('disclosr-foidocuments');
  try {
  $rows = $foidocsdb->get_view("app", "all")->rows;
foreach ($rows as $row) { foreach ($rows as $row) {
echo '<url><loc>' . local_url() . 'view.php?id=' . $row->value->_id . "</loc><priority>0.3</priority></url>\n"; echo '<url><loc>' . local_url() . 'view.php?id=' . $row->value->_id . "</loc><priority>0.3</priority></url>\n";
} }
} catch (SetteeRestClientException $e) { } catch (SetteeRestClientException $e) {
setteErrorHandler($e); setteErrorHandler($e);
} }
echo '</urlset>'; echo '</urlset>';
?> ?>
   
<?php <?php
include('template.inc.php'); include('template.inc.php');
  include_once('../include/common.inc.php');
?> ?>
<?php <?php
   
   
   
$agenciesdb = $server->get_db('disclosr-agencies'); $agenciesdb = $server->get_db('disclosr-agencies');
   
$idtoname = Array(); $idtoname = Array();
foreach ($agenciesdb->get_view("app", "byCanonicalName")->rows as $row) { foreach ($agenciesdb->get_view("app", "byCanonicalName")->rows as $row) {
$idtoname[$row->id] = trim($row->value->name); $idtoname[$row->id] = trim($row->value->name);
} }
$foidocsdb = $server->get_db('disclosr-foidocuments'); $foidocsdb = $server->get_db('disclosr-foidocuments');
try { try {
$obj = new stdClass(); $obj = new stdClass();
$obj->value = $foidocsdb->get($_REQUEST['id']); $obj->value = $foidocsdb->get($_REQUEST['id']);
include_header_documents($obj->value->title); include_header_documents($obj->value->title);
include_once('../include/common.inc.php');  
echo displayLogEntry($obj,$idtoname); echo displayLogEntry($obj,$idtoname);
   
} catch (SetteeRestClientException $e) { } catch (SetteeRestClientException $e) {
setteErrorHandler($e); setteErrorHandler($e);
} }
include_footer_documents(); include_footer_documents();
?> ?>