Sort agencies by name
Sort agencies by name


Former-commit-id: ad638754aa81ca62d33df2408835b34141d27876

file:a/about.php -> file:b/about.php
Organisational Data Sources <?php
  include_once('include/common.inc.php');
  include_header();
  ?>
  <div class="foundation-header">
  <h1><a href="about.php">About/FAQ</a></h1>
  <h4 class="subheader">Lorem ipsum.</h4>
  </div>
  <h2> What is this? </h2>
  Disclosr is a project to monitor Australian Federal Government agencies
  compliance with their <a href="http://www.oaic.gov.au/publications/other_operational/foi_policy_frequently_asked_questions.html#_Toc291837571">"proactive disclosure requirements"</a>.
  OGRE (Open Government Realization Evaluation) is a ranking of compliance with these requirements.
  Prometheus is the agent which polls agency websites to assess compliance.
   
  <h2> Open everything </h2>
  all documents released CC-BY 3 AU
  Open source git @
   
  <h2>Organisational Data Sources</h2>
   
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. view-source:https://www.tenders.gov.au/?event=public.advancedsearch.home is great for the suspended/active status
   
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 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. 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. 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).
   
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
  and individual annual reports.
   
Open Government Scoring 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:
  An empty FOI disclosure log counts, a page outlining what the FOI Act is does not.
  A disclosure log in PDF or Word format counts :(
  An empty File/Record list counts (although that's very minimalistic that you have no files, electronic or paper)
  Only a current information publication scheme page counts, not a s.9 FOI Act page or an organisation chart.
  If there isn't a page easily listing all current and past Annual Reports, the most current one (html, pdf) counts.
  Consultancy contracts might not need it's own webpage (if in Annual Report), grants/appointments might not apply to all organisations but Legal Services Expenditure (and all other obligations) does need a webpage.
   
  <h2>Open Government Scoring</h2>
+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
   
  Don't like this? Make your own score, suggest a better scoring mechanism.
   
  <?php
  include_footer();
  ?>
file:a/common.inc.php (deleted)
<?php  
 
function createAgencyDesignDoc() {  
global $db;  
$obj = new stdClass();  
$obj->_id = "_design/" . urlencode("app");  
$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); };";  
$obv->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>Welcome to Foundation</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>  
 
</body>  
</html>  
 
<?php } ?>  
 
 
 
<?php <?php
   
include_once('common.inc.php'); include_once('include/common.inc.php');
include_header(); include_header();
   
  function displayValue($key, $value, $mode) {
  if ($mode == "view") {
  if (is_array($value)) {
  echo "<tr><td>$key</td><td><ol>";
  foreach ($value as $subkey => $subvalue) {
  echo "<li>$subvalue</li>";
  }
  echo "</ol></td></tr>";
  } else {
  echo "<tr><td>$key</td><td>$value</td></tr>";
  }
  }
  if ($mode == "edit") {
  if (is_array($value)) {
  echo '<div class="row">
  <div class="seven columns">
  <fieldset>
  <h5>' . $key . '</h5>';
  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 "</fieldset>
  </div>
  </div>";
  } else {
  if (strpos($key, "_") === 0) {
  echo"<input type='hidden' id='$key' name='$key' value='$value'/>";
  } if (strpos($key, "has") === 0) {
  echo "<label for='$key'><input type='checkbox' id='$key' name='$key' checked='$value'> $key</label>";
  } else {
  echo "<label>$key</label><input class='input-text' type='text' id='$key' name='$key' value='$value'/>";
  if ((strpos($key,"URL") > 0 || $key == 'website')&& $value != "") {
  echo "<a href='$value'>view</a>";
  }
  if ($key == 'abn') {
  echo "<a href='http://www.abr.business.gov.au/SearchByAbn.aspx?SearchText=$value'>view abn</a>";
  }
  }
  }
  }
  //
  }
   
  function addDefaultFields($row) {
  $defaultFields = Array("name","orgType","parentOrg");
  foreach ($defaultFields as $defaultField) {
  if (!isset($row[$defaultField]))
  $row[$defaultField] = "";
  }
  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);
echo '<table width="100%">'; if (sizeof($_POST) > 0) {
echo '<tr> <td colspan="2"><h3>' . $row->name . "</h3></td></tr>"; //print_r($_POST);
echo "<tr><th>Field Name</th><th>Field Value</th></tr>"; if (isset($_POST['_id']) && $db->get_rev($_POST['_id']) == $_POST['_rev']) {
foreach ($row as $key => $value) { echo "Edited version was latest version, continue saving";
if (is_a($value, 'stdClass')) { $newdoc = $_POST;
echo "<tr><td>$key</td><td>" . var_dump($value, true) . "</td></tr>"; $newdoc['metadata']['lastModified'] = time();
} else $row = $db->save($newdoc);
echo "<tr><td>$key</td><td>$value</td></tr>"; } else {
  echo "ALERT doc revised by someone else while editing.";
  }
} }
   
echo "</table>"; $mode = "edit";
} else { $row = addDefaultFields(object_to_array($row));
  if ($mode == "view") {
  echo '<table width="100%">';
  echo '<tr> <td colspan="2"><h3>' . $row['name'] . "</h3></td></tr>";
  echo "<tr><th>Field Name</th><th>Field Value</th></tr>";
  }
  if ($mode == "edit") {
  ?>
  <input id="addfield" type="button" value="Add Field"/>
  <script>
  window.onload = function() {
  $(document).ready(function() {
  // put all your jQuery goodness in here.
  // http://charlie.griefer.com/blog/2009/09/17/jquery-dynamically-adding-form-elements/
  $('#addfield').click(function() {
  var field_name=window.prompt("fieldname?","");
  if (field_name !="") {
  $('#submitbutton').before($('<span></span>')
  .append("<label>"+field_name+"</label>")
  .append("<input class='input-text' type='text' id='"+field_name+"' name='"+field_name+"'/>")
  );
  }
  });
  });
  };
  </script>
  <form id="editform" class="nice" method="post">
  <?php
   
$rows = $db->get_view("app", "showNamesABNs")->rows; }
//print_r($rows); foreach ($row as $key => $value) {
foreach ($rows as $row) { echo displayValue($key, $value, $mode);
// print_r($row); }
echo '<li><a href="getAgency.php?id=' . $row->key . '">' . if ($mode == "view") {
(isset($row->value->name) && $row->value->name != "" ? $row->value->name : "NO NAME " . $row->value->abn) echo "</table>";
  }
  if ($mode == "edit") {
  echo '<input id="submitbutton" type="submit"/></form>';
  }
  } else {
   
  try {
  /*$rows = $db->get_view("app", "showNamesABNs")->rows;
  //print_r($rows);
  foreach ($rows as $row) {
  // print_r($row);
  echo '<li><a href="getAgency.php?id=' . $row->key . '">' .
  (isset($row->value->name) && $row->value->name != "" ? $row->value->name : "NO NAME " . $row->value->abn)
. '</a></li>'; . '</a></li>';
  }*/
  $rows = $db->get_view("app", "byName")->rows;
  //print_r($rows);
  foreach ($rows as $row) {
  // print_r($row);
  echo '<li><a href="getAgency.php?id=' . $row->value . '">' .
  $row->key
  . '</a></li>';
  }
  } catch (SetteeRestClientException $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;'; $