beginning semantic markup
beginning semantic markup


Former-commit-id: a5eba7337e3796c4f37731406127e5df85c440fa

<?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 //Use wrapper functions for common channelelements
$TestFeed->setTitle('Last Modified - All'); $TestFeed->setTitle('Last Modified - All');
$TestFeed->setLink('http://disclosurelo.gs/rss.xml.php'); $TestFeed->setLink('http://disclosurelo.gs/rss.xml.php');
$TestFeed->setDescription('Latest entries'); $TestFeed->setDescription('Latest entries');
$TestFeed->setChannelElement('language', 'en-us'); $TestFeed->setChannelElement('language', 'en-us');
$TestFeed->setChannelElement('pubDate', date(DATE_RSS, time())); $TestFeed->setChannelElement('pubDate', date(DATE_RSS, time()));
   
//Retriving informations from database //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; $rows = $foidocsdb->get_view("app", "byDate", Array('9999-99-99','0000-00-00', 50), true)->rows;
//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("view.php?id=".$row->value->_id); $newItem->setLink("view.php?id=".$row->value->_id);
$newItem->setDate(date("c", strtotime($row->value->date))); $newItem->setDate(date("c", strtotime($row->value->date)));
$newItem->setDescription(displayLogEntry($row,$idtoname)); $newItem->setDescription(displayLogEntry($row,$idtoname));
  $newItem->setAuthor($idtoname[$row->value->agencyID]);
$newItem->addElement('guid', $row->value->_id,array('isPermaLink'=>'true')); $newItem->addElement('guid', $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
   
function include_header_documents($title) { function include_header_documents($title) {
header('X-UA-Compatible: IE=edge,chrome=1'); header('X-UA-Compatible: IE=edge,chrome=1');
?> ?>
<!doctype html> <!doctype html>
<!-- paulirish.com/2008/conditional-stylesheets-vs-css-hacks-answer-neither/ --> <!-- 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 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 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 IE 8]> <html class="no-js lt-ie9" lang="en"> <![endif]-->
<!-- Consider adding a manifest.appcache: h5bp.com/d/Offline --> <!-- Consider adding a manifest.appcache: h5bp.com/d/Offline -->
<!--[if gt IE 8]><!--> <html class="no-js" lang="en"> <!--<![endif]--> <!--[if gt IE 8]><!--> <html class="no-js" lang="en"> <!--<![endif]-->
<head> <head>
<meta charset="utf-8"> <meta charset="utf-8">
   
<title>Australian Disclosure Logs<?php if ($title != "") echo " - $title";?></title> <title>Australian Disclosure Logs<?php if ($title != "") echo " - $title"; ?></title>
<meta name="description" content=""> <meta name="description" content="">
   
<!-- Mobile viewport optimized: h5bp.com/viewport --> <!-- Mobile viewport optimized: h5bp.com/viewport -->
<meta name="viewport" content="width=device-width"> <meta name="viewport" content="width=device-width">
<link rel="alternate" type="application/rss+xml" title="Latest Disclosure Log Entries" href="rss.xml.php" /> <link rel="alternate" type="application/rss+xml" title="Latest Disclosure Log Entries" href="rss.xml.php" />
<!-- Place favicon.ico and apple-touch-icon.png in the root directory: mathiasbynens.be/notes/touch-icons --> <!-- Place favicon.ico and apple-touch-icon.png in the root directory: mathiasbynens.be/notes/touch-icons -->
<meta name="google-site-verification" content="jkknX5g2FCpQvrW030b1Nq2hyoa6mb3EDiA7kCoHNj8" /> <meta name="google-site-verification" content="jkknX5g2FCpQvrW030b1Nq2hyoa6mb3EDiA7kCoHNj8" />
   
<!-- Le styles --> <!-- Le styles -->
<link href="css/bootstrap.min.css" rel="stylesheet"> <link href="css/bootstrap.min.css" rel="stylesheet">
<style type="text/css"> <style type="text/css">
body { body {
padding-top: 60px; padding-top: 60px;
padding-bottom: 40px; padding-bottom: 40px;
} }
.sidebar-nav { .sidebar-nav {
padding: 9px 0; padding: 9px 0;
} }
</style> </style>
<link href="css/bootstrap-responsive.min.css" rel="stylesheet"> <link href="css/bootstrap-responsive.min.css" rel="stylesheet">
   
<!-- HTML5 shim, for IE6-8 support of HTML5 elements --> <!-- HTML5 shim, for IE6-8 support of HTML5 elements -->
<!--[if lt IE 9]> <!--[if lt IE 9]>
<script src="http://html5shim.googlecode.com/svn/trunk/html5.js"></script> <script src="http://html5shim.googlecode.com/svn/trunk/html5.js"></script>
<![endif]--> <![endif]-->
<!-- More ideas for your <head> here: h5bp.com/d/head-Tips --> <!-- More ideas for your <head> here: h5bp.com/d/head-Tips -->
   
<!-- All JavaScript at the bottom, except this Modernizr build. <!-- All JavaScript at the bottom, except this Modernizr build.
Modernizr enables HTML5 elements & feature detects for optimal performance. Modernizr enables HTML5 elements & feature detects for optimal performance.
Create your own custom Modernizr build: www.modernizr.com/download/ Create your own custom Modernizr build: www.modernizr.com/download/
<script src="js/libs/modernizr-2.5.3.min.js"></script>--> <script src="js/libs/modernizr-2.5.3.min.js"></script>-->
<script src="js/jquery.js"></script> <script src="js/jquery.js"></script>
<script type="text/javascript" src="js/flotr2.min.js"></script> <script type="text/javascript" src="js/flotr2.min.js"></script>
   
</head>  
<body>  
<div class="navbar navbar-inverse navbar-fixed-top">  
<div class="navbar-inner">  
<div class="container-fluid">  
<a class="btn btn-navbar" data-toggle="collapse" data-target=".nav-collapse">  
<span class="icon-bar"></span>  
<span class="icon-bar"></span>  
<span class="icon-bar"></span>  
</a>  
<a class="brand" href="#">Australian Disclosure Logs</a>  
<div class="nav-collapse collapse">  
<p class="navbar-text pull-right">  
Check out our subsites on:  
<a href="http://orgs.disclosurelo.gs">Government Agencies</a>  
• <a href="http://lobbyists.disclosurelo.gs">Political Lobbyists</a>  
• <a href="http://contracts.disclosurelo.gs">Government Contracts and Spending</a>  
   
</p> </head>
<ul class="nav"> <body>
<li><a href="index.php">Home</a></li> <div class="navbar navbar-inverse navbar-fixed-top">
<li><a href="disclogsList.php">List of Disclosure Logs</a></li> <div class="navbar-inner">
<li><a href="about.php">About</a></li> <div class="container-fluid">
  <a class="btn btn-navbar" data-toggle="collapse" data-target=".nav-collapse">
</ul> <span class="icon-bar"></span>
</div><!--/.nav-collapse --> <span class="icon-bar"></span>
</div> <span class="icon-bar"></span>
</div> </a>
</div> <a class="brand" href="#">Australian Disclosure Logs</a>
<div class="container"> <div class="nav-collapse collapse">
<?php <p class="navbar-text pull-right">
} Check out our subsites on:
function include_footer_documents() { <a href="http://orgs.disclosurelo.gs">Government Agencies</a>
?> • <a href="http://lobbyists.disclosurelo.gs">Political Lobbyists</a>
</div> <!-- /container --> • <a href="http://contracts.disclosurelo.gs">Government Contracts and Spending</a>
<hr>  
   
<footer> </p>
<p>Not affiliated with or endorsed by any government agency.</p> <ul class="nav">
</footer> <li><a href="index.php">Home</a></li>
<script type="text/javascript"> <li><a href="disclogsList.php">List of Disclosure Logs</a></li>
  <li><a href="about.php">About</a></li>
   
var _gaq = _gaq || []; </ul>
_gaq.push(['_setAccount', 'UA-12341040-4']); </div><!--/.nav-collapse -->
_gaq.push(['_setDomainName', 'disclosurelo.gs']); </div>
_gaq.push(['_setAllowLinker', true]); </div>
_gaq.push(['_trackPageview']); </div>
  <div class="container">
  <?php
  }
   
(function() { function include_footer_documents() {
var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true; ?>
ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js'; </div> <!-- /container -->
var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s); <hr>
})();  
   
</script> <footer>
<!-- Le javascript <p>Not affiliated with or endorsed by any government agency.</p>
================================================== --> </footer>
<!-- Placed at the end of the document so the pages load faster --> <script type="text/javascript">
<!--  
<script src="js/bootstrap-transition.js"></script> var _gaq = _gaq || [];
<script src="js/bootstrap-alert.js"></script> _gaq.push(['_setAccount', 'UA-12341040-4']);
<script src="js/bootstrap-modal.js"></script> _gaq.push(['_setDomainName', 'disclosurelo.gs']);
<script src="js/bootstrap-dropdown.js"></script> _gaq.push(['_setAllowLinker', true]);
<script src="js/bootstrap-scrollspy.js"></script> _gaq.push(['_trackPageview']);
<script src="js/bootstrap-tab.js"></script>  
<script src="js/bootstrap-tooltip.js"></script> (function() {
<script src="js/bootstrap-popover.js"></script> var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
<script src="js/bootstrap-button.js"></script> ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
<script src="js/bootstrap-collapse.js"></script> var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
<script src="js/bootstrap-carousel.js"></script> })();
<script src="js/bootstrap-typeahead.js"></script>-->  
  </script>
  <!-- Le javascript
  ================================================== -->
  <!-- Placed at the end of the document so the pages load faster -->
  <!--
  <script src="js/bootstrap-transition.js"></script>
  <script src="js/bootstrap-alert.js"></script>
  <script src="js/bootstrap-modal.js"></script>
  <script src="js/bootstrap-dropdown.js"></script>
  <script src="js/bootstrap-scrollspy.js"></script>
  <script src="js/bootstrap-tab.js"></script>
  <script src="js/bootstrap-tooltip.js"></script>
  <script src="js/bootstrap-popover.js"></script>
  <script src="js/bootstrap-button.js"></script>
  <script src="js/bootstrap-collapse.js"></script>
  <script src="js/bootstrap-carousel.js"></script>
  <script src="js/bootstrap-typeahead.js"></script>-->
   
   
</body> </body>
</html> </html>
<?php <?php
} }
function truncate($string, $length, $stopanywhere=false) {  
  function truncate($string, $length, $stopanywhere = false) {
//truncates a string to a certain char length, stopping on a word if not specified otherwise. //truncates a string to a certain char length, stopping on a word if not specified otherwise.
if (strlen($string) > $length) { if (strlen($string) > $length) {
//limit hit! //limit hit!
$string = substr($string,0,($length -3)); $string = substr($string, 0, ($length - 3));
if ($stopanywhere) { if ($stopanywhere) {
//stop anywhere //stop anywhere
$string .= '...'; $string .= '...';
} else{ } else {
//stop on a word. //stop on a word.
$string = substr($string,0,strrpos($string,' ')).'...'; $string = substr($string, 0, strrpos($string, ' ')) . '...';
} }
} }
return $string; return $string;
} }
   
function displayLogEntry($row, $idtoname) { function displayLogEntry($row, $idtoname) {
$result = ""; $result = "";
$result .= "<div><h2>".$row->value->date.": ".truncate($row->value->title, 120)." (".$idtoname[$row->value->agencyID].")</h2>"; $result .= '<div itemscope itemtype="http://schema.org/Article">';
$result .= "<p> Title".$row->value->title."<br/>".str_replace("\n","<br>",$row->value->description); $result .= '<h2> <span itemprop="datePublished">' . $row->value->date . "</span>: <span itemprop='name headline'>" . truncate($row->value->title, 120)."</span>";
if (isset($row->value->notes)) { $result .= '(<span itemprop="author publisher creator">' . $idtoname[$row->value->agencyID] . '</span>)</h2>';
$result .= " <br>Note: ".$row->value->notes; $result .= "<p itemprop='description articleBody text'> Title" . $row->value->title . "<br/>" . str_replace("\n", "<br>", $row->value->description);
} if (isset($row->value->notes)) {
$result .= "</p>"; $result .= " <br>Note: " . $row->value->notes;
  }
  $result .= "</p>";
   
if (isset($row->value->links)){ if (isset($row->value->links)) {
$result .= "<h3>Links/Documents</h3><ul>"; $result .= '<h3>Links/Documents</h3><ul itemprop="associatedMedia">';
foreach ($row->value->links as $link) { foreach ($row->value->links as $link) {
$result .= "<li><a href='$link'>".urlencode($link)."</a></li>"; $result .= '<li itemscope itemtype="http://schema.org/MediaObject"><a href='.$link.' itemprop="url contentURL">' . urlencode($link) . "</a></li>";
  }
   
  $result .= "</ul>";
  }
  $result .= "<small><A itemprop='url' href='" . $row->value->url . "'>View original source...</a> ID: " . strip_tags($row->value->docID) . "</small>";
  $result .= "</div>";
  return $result;
} }
   
$result .= "</ul>";  
}  
$result .= "<small><A href='".$row->value->url."'>View original source...</a> ID: ".strip_tags($row->value->docID)."</small>";  
$result .= "</div>";  
return $result;  
}  
   
directory:b/lib/FeedWriter (new)