includes/nav cleanup
includes/nav cleanup


Former-commit-id: 814e610d82c2640010ae9ead51310519574f6adb

file:a/about.php -> file:b/about.php
   
Organisational Data Sources Organisational Data Sources
   
http://www.comlaw.gov.au/Browse/Results/ByTitle/AdministrativeArrangementsOrders/Current/Ad/0 defines departments 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 http://www.finance.gov.au/publications/flipchart/docs/FMACACFlipchart.pdf summarises these
   
When defining the hierachy, this system is designed towards monitoring accountablity. Thus large agencies that have registered their own ABN 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. 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. 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 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. 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.
   
Statistical information from http://www.apsc.gov.au/stateoftheservice/1011/statsbulletin/section1.html#t2total https://www.apsedii.gov.au/apsedii/CustomQueryx33.shtml Statistical information from http://www.apsc.gov.au/stateoftheservice/1011/statsbulletin/section1.html#t2total https://www.apsedii.gov.au/apsedii/CustomQueryx33.shtml
   
Open Government Scoring Open Government Scoring
+1 point for every true Has... attribute +1 point for every true Has... attribute
-1 point for every false Has... (ie. Has Not) attribute -1 point for every false Has... (ie. Has Not) attribute
   
   
file:a/common.inc.php (deleted)
<?php  
 
function createAgencyDesignDoc() {  
global $db;  
$obj = new stdClass();  
$obj->_id = "_design/" . urlencode("app");  
$obj->language = "javascript";  
$obj->views->byABN->map = "function(doc) { emit(doc.abn, doc); };";  
$obj->views->byName->map = "function(doc) { emit(doc.name, 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->showNamesABNs->map = "function(doc) { emit(doc._id, {name: doc.name, abn: doc.abn}); };";  
// allow safe updates (even if slightly slower due to extra: rev-detection check).  
return $db->save($obj, true);  
}  
 
require (realpath(dirname(__FILE__) . '/couchdb/settee/src/settee.php'));  
 
$server = new SetteeServer('http://127.0.0.1:5984');  
 
function setteErrorHandler($e) {  
echo $e->getMessage() . "<br>" . PHP_EOL;  
}  
 
function include_header() {  
?>  
<!DOCTYPE html>  
 
<!-- paulirish.com/2008/conditional-stylesheets-vs-css-hacks-answer-neither/ -->  
<!--[if lt IE 7]> <html class="no-js lt-ie9 lt-ie8 lt-ie7" lang="en"> <![endif]-->  
<!--[if IE 7]> <html class="no-js lt-ie9 lt-ie8" lang="en"> <![endif]-->  
<!--[if IE 8]> <html class="no-js lt-ie9" lang="en"> <![endif]-->  
<!--[if gt IE 8]><!--> <html lang="en"> <!--<![endif]-->  
<head>  
<meta charset="utf-8" />  
 
<!-- Set the viewport width to device width for mobile -->  
<meta name="viewport" content="width=device-width" />  
 
<title>Disclosr</title>  
 
<!-- Included CSS Files -->  
<link rel="stylesheet" href="stylesheets/foundation.css">  
<link rel="stylesheet" href="stylesheets/app.css">  
 
<!--[if lt IE 9]>  
<link rel="stylesheet" href="stylesheets/ie.css">  
<![endif]-->  
 
 
<!-- IE Fix for HTML5 Tags -->  
<!--[if lt IE 9]>  
<script src="http://html5shiv.googlecode.com/svn/trunk/html5.js"></script>  
<![endif]-->  
 
</head>  
<body>  
 
<!-- navBar -->  
<div id="navbar" class="container">  
<div class="row">  
<div class="four columns">  
<h1><a href="/">Disclosr</a></h1>  
</div>  
<div class="eight columns hide-on-phones">  
<strong class="right">  
<a href="../grid.php">Features</a>  
<a href="../case-soapbox.php">Case Studies</a>  
<a href="index.php">Documentation</a>  
<a href="http://github.com/navb/foundation">Github</a>  
<a href="../files/foundation-download-2.1.4.zip" class="small blue nice button src-download">Download</a>  
 
</strong>  
</div>  
</div>  
</div>  
<!-- /navBar -->  
 
<!-- container -->  
<div class="container">  
<?php }  
 
function include_footer() { ?>  
</div>  
<!-- container -->  
 
 
 
 
<!-- Included JS Files -->  
<script src="javascripts/foundation.js"></script>  
<script src="javascripts/app.js"></script>  
<script src="http://code.jquery.com/jquery-1.7.1.min.js"></script>  
 
</body>  
</html>  
 
<?php }  
 
# Convert a stdClass to an Array. http://www.php.net/manual/en/language.types.object.php#102735  
function object_to_array(stdClass $Class){  
# Typecast to (array) automatically converts stdClass -> array.  
$Class = (array)$Class;  
 
# Iterate through the former properties looking for any stdClass properties.  
# Recursively apply (array).  
foreach($Class as $key => $value){  
if(is_object($value)&&get_class($value)==='stdClass'){  
$Class[$key] = object_to_array($value);  
}  
}  
return $Class;  
}  
 
# Convert an Array to stdClass. http://www.php.net/manual/en/language.types.object.php#102735  
function array_to_object(array $array){  
# Iterate through our array looking for array values.  
# If found recurvisely call itself.  
foreach($array as $key => $value){  
if(is_array($value)){  
$array[$key] = array_to_object($value);  
}  
}  
 
# Typecast to (object) will automatically convert array -> stdClass  
return (object)$array;  
}  
 
 
?>  
 
 
 
<?php <?php
   
include_once('common.inc.php'); include_once('include/common.inc.php');
include_header(); include_header();
   
function displayValue($key, $value, $mode) { function displayValue($key, $value, $mode) {
if ($mode == "view") { if ($mode == "view") {
if (is_array($value)) { if (is_array($value)) {
echo "<tr><td>$key</td><td><ol>"; echo "<tr><td>$key</td><td><ol>";
foreach ($value as $subkey => $subvalue) { foreach ($value as $subkey => $subvalue) {
echo "<li>$subvalue</li>"; echo "<li>$subvalue</li>";
} }
echo "</ol></td></tr>"; echo "</ol></td></tr>";
} else { } else {
echo "<tr><td>$key</td><td>$value</td></tr>"; echo "<tr><td>$key</td><td>$value</td></tr>";
} }
} }
if ($mode == "edit") { if ($mode == "edit") {
if (is_array($value)) { if (is_array($value)) {
echo '<div class="row"> echo '<div class="row">
<div class="seven columns"> <div class="seven columns">
<fieldset> <fieldset>
<h5>' . $key . '</h5>'; <h5>' . $key . '</h5>';
foreach ($value as $subkey => $subvalue) { foreach ($value as $subkey => $subvalue) {
echo "<label>$subkey</label><input class='input-text' type='text' id='$key$subkey' name='$key" . '[' . $subkey . "]' value='$subvalue'/></tr>"; echo "<label>$subkey</label><input class='input-text' type='text' id='$key$subkey' name='$key" . '[' . $subkey . "]' value='$subvalue'/></tr>";
} }
echo "</fieldset> echo "</fieldset>
</div> </div>
</div>"; </div>";
} else { } else {
if (strpos($key, "_") === 0) { if (strpos($key, "_") === 0) {
echo"<input type='hidden' id='$key' name='$key' value='$value'/>"; echo"<input type='hidden' id='$key' name='$key' value='$value'/>";
} if (strpos($key, "has") === 0) { } if (strpos($key, "has") === 0) {
echo "<label for='$key'><input type='checkbox' id='$key' name='$key' value='$value'> $key</label>"; echo "<label for='$key'><input type='checkbox' id='$key' name='$key' value='$value'> $key</label>";
} else { } else {
echo "<label>$key</label><input class='input-text' type='text' id='$key' name='$key' value='$value'/></tr>"; echo "<label>$key</label><input class='input-text' type='text' id='$key' name='$key' value='$value'/></tr>";
} }
} }
} }
// //
} }
   
function addDefaultFields($row) { function addDefaultFields($row) {
$defaultFields = Array("name"); $defaultFields = Array("name");
foreach ($defaultFields as $defaultField) { foreach ($defaultFields as $defaultField) {
if (!isset($row[$defaultField])) if (!isset($row[$defaultField]))
$row[$defaultField] = ""; $row[$defaultField] = "";
} }
return $row; return $row;
} }
   
$db = $server->get_db('disclosr-agencies'); $db = $server->get_db('disclosr-agencies');
   
if (isset($_REQUEST['id'])) { 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" // by name = startkey="Ham"&endkey="Ham\ufff0"
// edit? // edit?
   
$row = $db->get($_REQUEST['id']); $row = $db->get($_REQUEST['id']);
//print_r($row); //print_r($row);
if (sizeof($_POST) > 0) { if (sizeof($_POST) > 0) {
//print_r($_POST); //print_r($_POST);
if (isset($_POST['_id']) && $db->get_rev($_POST['_id']) == $_POST['_rev']) { if (isset($_POST['_id']) && $db->get_rev($_POST['_id']) == $_POST['_rev']) {
echo "Edited version was latest version, continue saving"; echo "Edited version was latest version, continue saving";
$row = $db->save($_POST); $row = $db->save($_POST);
} else { } else {
echo "ALERT doc revised by someone else while editing."; echo "ALERT doc revised by someone else while editing.";
} }
} }
   
$mode = "edit"; $mode = "edit";
$row = addDefaultFields(object_to_array($row)); $row = addDefaultFields(object_to_array($row));
if ($mode == "view") { if ($mode == "view") {
echo '<table width="100%">'; echo '<table width="100%">';
echo '<tr> <td colspan="2"><h3>' . $row['name'] . "</h3></td></tr>"; echo '<tr> <td colspan="2"><h3>' . $row['name'] . "</h3></td></tr>";
echo "<tr><th>Field Name</th><th>Field Value</th></tr>"; echo "<tr><th>Field Name</th><th>Field Value</th></tr>";
} }
if ($mode == "edit") { if ($mode == "edit") {
?> ?>
<input id="addfield" type="button" value="Add Field"/> <input id="addfield" type="button" value="Add Field"/>
<script> <script>
window.onload = function() { window.onload = function() {
$(document).ready(function() { $(document).ready(function() {
// put all your jQuery goodness in here. // put all your jQuery goodness in here.
// http://charlie.griefer.com/blog/2009/09/17/jquery-dynamically-adding-form-elements/ // http://charlie.griefer.com/blog/2009/09/17/jquery-dynamically-adding-form-elements/
$('#addfield').click(function() { $('#addfield').click(function() {
var field_name=window.prompt("What is your name?",""); var field_name=window.prompt("fieldname?","");
if (field_name !="") { if (field_name !="") {
$('#submitbutton').before($('<span></span>') $('#submitbutton').before($('<span></span>')
.append("<label>"+field_name+"</label>") .append("<label>"+field_name+"</label>")
.append("<input class='input-text' type='text' id='"+field_name+"' name='"+field_name+"'/>") .append("<input class='input-text' type='text' id='"+field_name+"' name='"+field_name+"'/>")
); );
} }
}); });
}); });
}; };
</script> </script>
<form id="editform" class="nice" method="post"> <form id="editform" class="nice" method="post">
<?php <?php
   
} }
foreach ($row as $key => $value) { foreach ($row as $key => $value) {
echo displayValue($key, $value, $mode); echo displayValue($key, $value, $mode);
} }
if ($mode == "view") { if ($mode == "view") {
echo "</table>"; echo "</table>";
} }
if ($mode == "edit") { if ($mode == "edit") {
echo '<input id="submitbutton" type="submit"/></form>'; echo '<input id="submitbutton" type="submit"/></form>';
} }
} else { } else {
   
try { try {
$rows = $db->get_view("app", "showNamesABNs")->rows; $rows = $db->get_view("app", "showNamesABNs")->rows;
//print_r($rows); //print_r($rows);
foreach ($rows as $row) { foreach ($rows as $row) {
// print_r($row); // print_r($row);
echo '<li><a href="getAgency.php?id=' . $row->key . '">' . echo '<li><a href="getAgency.php?id=' . $row->key . '">' .
(isset($row->value->name) && $row->value->name != "" ? $row->value->name : "NO NAME " . $row->value->abn) (isset($row->value->name) && $row->value->name != "" ? $row->value->name : "NO NAME " . $row->value->abn)
. '</a></li>'; . '</a></li>';
} }
} catch (SetteeRestClientException $e) { } catch (SetteeRestClientException $e) {
setteErrorHandler($e); setteErrorHandler($e);
} }
} }
include_footer(); include_footer();
  ?>
file:a/import.php -> file:b/import.php
<?php <?php
   
require_once 'common.inc.php'; require_once 'include/common.inc.php';
try { try {
$server->create_db('disclosr-agencies'); $server->create_db('disclosr-agencies');
} catch (SetteeRestClientException $e) { } catch (SetteeRestClientException $e) {
setteErrorHandler($e); setteErrorHandler($e);
} }
$db = $server->get_db('disclosr-agencies'); $db = $server->get_db('disclosr-agencies');
createAgencyDesignDoc(); createAgencyDesignDoc();
$conn = new PDO("pgsql:dbname=contractDashboard;user=postgres;password=snmc;host=localhost"); $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;'; $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(); $abntonames = Array();
foreach ($conn->query($namesQ) as $row) { foreach ($conn->query($namesQ) as $row) {
$abntonames[$row['abn']] = explode("|", $row['names']); $abntonames[$row['abn']] = explode("|", $row['names']);
} }
$result = $conn->query("select * from agency"); $result = $conn->query("select * from agency");
while ($agency = $result->fetch(PDO::FETCH_ASSOC)) { while ($agency = $result->fetch(PDO::FETCH_ASSOC)) {
$agency['_id'] = md5($agency['abn']); $agency['_id'] = md5($agency['abn']);
$agency['otherNames'] = $abntonames[$agency['abn']]; $agency['otherNames'] = $abntonames[$agency['abn']];
if (sizeof($abntonames[$agency['abn']]) == 1) if (sizeof($abntonames[$agency['abn']]) == 1)
$agency['name'] = $abntonames[$agency['abn']][0]; $agency['name'] = $abntonames[$agency['abn']][0];
$agency["lastScraped"] = "1/1/1970"; $agency["lastScraped"] = "1/1/1970";
$agency["scrapeDepth"] = 1; $agency["scrapeDepth"] = 1;
try { try {
$doc = $db->save($agency); $doc = $db->save($agency);
//print_r($doc); //print_r($doc);
echo $agency['abn'] . " imported \n<br>"; echo $agency['abn'] . " imported \n<br>";
} catch (SetteeRestClientException $e) { } catch (SetteeRestClientException $e) {
setteErrorHandler($e); setteErrorHandler($e);
} }
} }
?> ?>
   
  <?php
 
  include_once ('couchdb.inc.php');
  include_once ('template.inc.php');
 
  # Convert a stdClass to an Array. http://www.php.net/manual/en/language.types.object.php#102735
 
  function object_to_array(stdClass $Class) {
  # Typecast to (array) automatically converts stdClass -> array.
  $Class = (array) $Class;
 
  # Iterate through the former properties looking for any stdClass properties.
  # Recursively apply (array).
  foreach ($Class as $key => $value) {
  if (is_object($value) && get_class($value) === 'stdClass') {
  $Class[$key] = object_to_array($value);
  }
  }
  return $Class;
  }
 
  # Convert an Array to stdClass. http://www.php.net/manual/en/language.types.object.php#102735
 
  function array_to_object(array $array) {
  # Iterate through our array looking for array values.
  # If found recurvisely call itself.
  foreach ($array as $key => $value) {
  if (is_array($value)) {
  $array[$key] = array_to_object($value);
  }
  }
 
  # Typecast to (object) will automatically convert array -> stdClass
  return (object) $array;
  }
  ?>
 
 
 
  <?php
  include "schemas/schemas.inc.php";
  function createAgencyDesignDoc() {
  global $db;
  $obj = new stdClass();
  $obj->_id = "_design/" . urlencode("app");
  $obj->language = "javascript";
  $obj->views->byABN->map = "function(doc) { emit(doc.abn, doc); };";
  $obj->views->byName->map = "function(doc) { emit(doc.name, 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->showNamesABNs->map = "function(doc) { emit(doc._id, {name: doc.name, abn: doc.abn}); };";
  // allow safe updates (even if slightly slower due to extra: rev-detection check).
  return $db->save($obj, true);
  }
 
  require ('couchdb/settee/src/settee.php');
 
  $server = new SetteeServer('http://127.0.0.1:5984');
 
  function setteErrorHandler($e) {
  echo $e->getMessage() . "<br>" . PHP_EOL;
  }
 
  ?>
 
  <?php
 
  function include_header() {
  ?>
  <!DOCTYPE html>
 
  <!-- paulirish.com/2008/conditional-stylesheets-vs-css-hacks-answer-neither/ -->
  <!--[if lt IE 7]> <html class="no-js lt-ie9 lt-ie8 lt-ie7" lang="en"> <![endif]-->
  <!--[if IE 7]> <html class="no-js lt-ie9 lt-ie8" lang="en"> <![endif]-->
  <!--[if IE 8]> <html class="no-js lt-ie9" lang="en"> <![endif]-->
  <!--[if gt IE 8]><!--> <html lang="en"> <!--<![endif]-->
  <head>
  <meta charset="utf-8" />
 
  <!-- Set the viewport width to device width for mobile -->
  <meta name="viewport" content="width=device-width" />
 
  <title>Disclosr</title>
 
  <!-- Included CSS Files -->
  <link rel="stylesheet" href="stylesheets/foundation.css">
  <link rel="stylesheet" href="stylesheets/app.css">
 
  <!--[if lt IE 9]>
  <link rel="stylesheet" href="stylesheets/ie.css">
  <![endif]-->
 
 
  <!-- IE Fix for HTML5 Tags -->
  <!--[if lt IE 9]>
  <script src="http://html5shiv.googlecode.com/svn/trunk/html5.js"></script>
  <![endif]-->
 
  </head>
  <body>
 
  <!-- navBar -->
  <div id="navbar" class="container">
  <div class="row">
  <div class="four columns">
  <h1><a href="/">Disclosr</a></h1>
  </div>
  <div class="eight columns hide-on-phones">
  <strong class="right">
  <a href="getAgency.php">Agencies</a>
  <a href="getAgency.php">About</a>
  </strong>
  </div>
  </div>
  </div>
  <!-- /navBar -->
 
  <!-- container -->
  <div class="container">
  <?php }
 
  function include_footer() { ?>
  </div>
  <!-- container -->
 
 
 
 
  <!-- Included JS Files -->
  <script src="javascripts/foundation.js"></script>
  <script src="javascripts/app.js"></script>
  <script src="http://code.jquery.com/jquery-1.7.1.min.js"></script>
 
  </body>
  </html>
 
  <?php }
 
  ?>
 
  <?php
 
  $schemas['agency'] = Array(
  "description" => "Representation of government agency and online transparency measures",
  "type" => "object",
  "properties" => Array(
  "name" => Array("type" => "string", "required" => true, "description" => "Agency Name, most recent and broadest"),
  "othernames" => Array("type" => "array", "required" => true, "description" => "Agency Names",
  "items" => Array("type" => "string")),
  ),
  /*"org":{"type":"object",
  "properties":{
  "organizationName":{"type":"string"},
  "organizationUnit":{"type":"string"}},
  }
  }*/
  );
  ?>
 
file:a/schemas/agency.php (deleted)
<?php  
 
$agency_schema = Array(  
"description" => "Representation of government agency and online transparency measures",  
"type" => "object",  
"properties" => Array(  
"name" => Array("type" => "string", "required" => true, "description" => "Agency Name, most recent and broadest"),  
"othernames" => Array("type" => "array", "required" => true, "description" => "Agency Names",  
"items" => Array("type" => "string")),  
),  
/*"org":{"type":"object",  
"properties":{  
"organizationName":{"type":"string"},  
"organizationUnit":{"type":"string"}},  
}  
}*/  
);  
?>  
 
  <?php
  $schemas = Array();
  include("agency.json.php")
  ?>