Added atom feed to the builds page
This commit is contained in:
126
feed.php
Normal file
126
feed.php
Normal file
@@ -0,0 +1,126 @@
|
||||
<?php
|
||||
|
||||
define("SITE_ROOT", realpath(dirname(__file__)));
|
||||
require_once SITE_ROOT . "/lib/init.php";
|
||||
|
||||
function parse_email($email)
|
||||
{
|
||||
$ret = array("name" => $email, "email" => "");
|
||||
if (preg_match("|([^\<]*)<([^>]*)>|", $email, $m)) {
|
||||
$ret["name"] = trim($m[1]);
|
||||
$ret["email"] = trim($m[2]);
|
||||
}
|
||||
return $ret;
|
||||
}
|
||||
|
||||
|
||||
function sort_by_date($a, $b)
|
||||
{
|
||||
if ($a["time"] < $b["time"]) {
|
||||
return 1;
|
||||
} else if ($a["time"] > $b["time"]) {
|
||||
return -1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
function print_changeset($row)
|
||||
{
|
||||
$author = parse_email($row["author"]);
|
||||
$gid = md5($author["email"]);
|
||||
$avatar = (USE_SSL ? "https://secure.gravatar.com" : "http://www.gravatar.com") .
|
||||
"/avatar/$gid?r=x&d=mm&s=48";
|
||||
return '<tr><td valign="top" align="center"><img src="' . $avatar . '" alt="Avatar"/><br/>'
|
||||
. htmlspecialchars($author["name"]) . '</td>'
|
||||
. '<td valign="top"><a href="https://github.com/siana/SingularityViewer/commit/' . htmlspecialchars($row["hash"]) . '">' . htmlspecialchars($row["hash"]) . '</a><br/>'
|
||||
. htmlspecialchars($row["time"]). "<br/><br/>\n\n<pre>"
|
||||
. htmlspecialchars($row["message"]) . '</pre></td>';
|
||||
}
|
||||
|
||||
function print_changes($current, $next)
|
||||
{
|
||||
global $DB;
|
||||
|
||||
$ret = "";
|
||||
|
||||
$revs = array();
|
||||
if (!($res = $DB->query(kl_str_sql("select revisions from changes where build<=!i and build>!i order by build desc", $current->nr, $next->nr)))) {
|
||||
return $ret;
|
||||
} else {
|
||||
while ($row = $DB->fetchRow($res)) {
|
||||
$revs = array_merge($revs, explode(",", $row["revisions"]));
|
||||
}
|
||||
}
|
||||
|
||||
if ($res = $DB->query("select * from revs where hash in ('" . implode("','", $revs) . "')")) {
|
||||
$ret .= '<table width="100%">';
|
||||
|
||||
$changesets = array();
|
||||
|
||||
while ($row = $DB->fetchRow($res)) {
|
||||
$changesets[] = $row;
|
||||
}
|
||||
|
||||
usort($changesets, "sort_by_date");
|
||||
|
||||
foreach ($changesets as $change) {
|
||||
$ret .= print_changeset($change);
|
||||
}
|
||||
|
||||
$ret .= '</table>';
|
||||
}
|
||||
|
||||
return $ret;
|
||||
}
|
||||
|
||||
$buildFeed = new FeedWriter(ATOM);
|
||||
$buildFeed->setTitle('Singularity Automatic Development Builds');
|
||||
$buildFeed->setLink('http://files.streamgrid.net/singularity/');
|
||||
$buildFeed->setDescription('Latest automated build of the Singularity Viewer project');
|
||||
// $buildFeed->setImage('Testing the RSS writer class',
|
||||
// 'http://www.ajaxray.com/projects/rss',
|
||||
// 'http://www.rightbrainsolution.com/images/logo.gif');
|
||||
|
||||
$chan = "SingularityAlpha";
|
||||
|
||||
$pageSize = 20;
|
||||
|
||||
$builds = array();
|
||||
|
||||
if ($res = $DB->query(kl_str_sql("select * from builds where chan=!s order by nr desc limit !i", $chan, $pageSize + 1))) {
|
||||
while ($row = $DB->fetchRow($res)) {
|
||||
|
||||
$build = new stdClass;
|
||||
$DB->loadFromDbRow($build, $res, $row);
|
||||
$builds[] = $build;
|
||||
}
|
||||
}
|
||||
|
||||
$nrBuilds = count($builds);
|
||||
|
||||
if ($nrBuilds) {
|
||||
for ($i = 0; $i < $pageSize; $i++) {
|
||||
if (!isset($builds[$i])) continue;
|
||||
$newItem = $buildFeed->createNewItem();
|
||||
$newItem->setTitle("Singularity Alpha build " . $builds[$i]->nr);
|
||||
$newItem->setLink("http://files.streamgrid.net/singularity/?build_id=" . $builds[$i]->nr);
|
||||
$newItem->setDate($builds[$i]->modified);
|
||||
if (isset($builds[$i+1])) {
|
||||
$newItem->setDescription(print_changes($builds[$i], $builds[$i + 1]));
|
||||
}
|
||||
$buildFeed->addItem($newItem);
|
||||
}
|
||||
|
||||
$buildFeed->genarateFeed();
|
||||
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* Local variables:
|
||||
* tab-width: 4
|
||||
* c-basic-offset: 4
|
||||
* End:
|
||||
* vim600: noet sw=4 ts=4 fdm=marker
|
||||
* vim<600: noet sw=4 ts=4
|
||||
*/
|
||||
25
index.php
25
index.php
@@ -17,9 +17,11 @@ function print_changeset($row)
|
||||
{
|
||||
$author = parse_email($row["author"]);
|
||||
$gid = md5($author["email"]);
|
||||
$avatar = (USE_SSL ? "https://secure.gravatar.com" : "http://www.gravatar.com") .
|
||||
"/avatar/$gid?r=x&d=mm&s=48";
|
||||
print '
|
||||
<tr>
|
||||
<td rowspan="2" style="text-align: center;"><img src="http://www.gravatar.com/avatar/' . $gid . '?r=x&d=mm&s=48" alt="Avatar"/><br />' .
|
||||
<td rowspan="2" style="text-align: center;"><img src="' . $avatar . '" alt="Avatar"/><br />' .
|
||||
htmlspecialchars($author["name"]) . '</td>
|
||||
<td><a href="https://github.com/siana/SingularityViewer/commit/' . htmlspecialchars($row["hash"]) . '">' . htmlspecialchars($row["hash"]) . '</a></td>
|
||||
<td>' . htmlspecialchars($row["time"]).
|
||||
@@ -71,11 +73,11 @@ function print_changes($current, $next)
|
||||
}
|
||||
}
|
||||
|
||||
Function print_build($current, $next)
|
||||
Function print_build($current, $next, $buildNr)
|
||||
{
|
||||
print "
|
||||
<tr style=\"background-color: #303030;\">
|
||||
<th><a href=\"javascript:void(0)\" onclick=\"javascript:toggleChanges({$current->nr})\">Build " . htmlspecialchars($current->nr). "</a></th>
|
||||
<th><a href=\"" . URL_ROOT ."?build_id={$current->nr}\">Build " . htmlspecialchars($current->nr). "</a></th>
|
||||
<th>" . htmlspecialchars($current->modified). " (" . Layout::since(strtotime($current->modified)) . " ago)</th>
|
||||
<th>" . htmlspecialchars($current->chan). "</th>
|
||||
<th><a href='" . URL_ROOT . "/" . $current->file . "'>Windows Installer <img src=\"" . IMG_ROOT . "/dl.gif\" alt=\"Download\"/></a>
|
||||
@@ -83,7 +85,9 @@ Function print_build($current, $next)
|
||||
</tr>";
|
||||
if ($next) {
|
||||
print '<tr><td colspan="4">
|
||||
<a href="javascript:void(0)" id="toggle_link_'. $current->nr . '" onclick="javascript:toggleChanges('. $current->nr . ')">Show changes >></a><div style="display: none;" id="changes_' . $current->nr . '">';
|
||||
<a href="javascript:void(0)" id="toggle_link_'. $current->nr . '" onclick="javascript:toggleChanges('. $current->nr . ')">' .
|
||||
($buildNr ? 'Hide changes <<' : 'Show changes >>') .
|
||||
'</a><div ' . ($buildNr ? '' : 'style="display: none;"') . ' id="changes_' . $current->nr . '">';
|
||||
print_changes($current, $next);
|
||||
print "</div></td></tr>";
|
||||
}
|
||||
@@ -98,7 +102,16 @@ $pageSize = 20;
|
||||
|
||||
$builds = array();
|
||||
|
||||
if ($res = $DB->query(kl_str_sql("select * from builds where chan=!s order by nr desc limit !i", $chan, $pageSize + 1))) {
|
||||
$buildNr = 0;
|
||||
$where = "";
|
||||
|
||||
if (isset($_GET["build_id"])) {
|
||||
$buildNr = (int)$_GET["build_id"];
|
||||
$pageSize = 1;
|
||||
$where = kl_str_sql(" and nr <= !i ", $buildNr);
|
||||
}
|
||||
|
||||
if ($res = $DB->query(kl_str_sql("select * from builds where chan=!s $where order by nr desc limit !i", $chan, $pageSize + 1))) {
|
||||
while ($row = $DB->fetchRow($res)) {
|
||||
|
||||
$build = new stdClass;
|
||||
@@ -115,7 +128,7 @@ if ($nrBuilds) {
|
||||
|
||||
for ($i = 0; $i < $pageSize; $i++) {
|
||||
if (!isset($builds[$i])) continue;
|
||||
print_build($builds[$i], $builds[$i + 1]);
|
||||
print_build($builds[$i], $builds[$i + 1], $buildNr);
|
||||
}
|
||||
|
||||
print '</table>';
|
||||
|
||||
167
lib/FeedItem.php
Normal file
167
lib/FeedItem.php
Normal file
@@ -0,0 +1,167 @@
|
||||
<?php
|
||||
/**
|
||||
* Univarsel Feed Writer
|
||||
*
|
||||
* FeedItem class - Used as feed element in FeedWriter class
|
||||
*
|
||||
* @package UnivarselFeedWriter
|
||||
* @author Anis uddin Ahmad <anisniit@gmail.com>
|
||||
* @link http://www.ajaxray.com/projects/rss
|
||||
*/
|
||||
class FeedItem
|
||||
{
|
||||
private $elements = array(); //Collection of feed elements
|
||||
private $version;
|
||||
|
||||
/**
|
||||
* Constructor
|
||||
*
|
||||
* @param contant (RSS1/RSS2/ATOM) RSS2 is default.
|
||||
*/
|
||||
function __construct($version = RSS2)
|
||||
{
|
||||
$this->version = $version;
|
||||
}
|
||||
|
||||
/**
|
||||
* Add an element to elements array
|
||||
*
|
||||
* @access public
|
||||
* @param srting The tag name of an element
|
||||
* @param srting The content of tag
|
||||
* @param array Attributes(if any) in 'attrName' => 'attrValue' format
|
||||
* @return void
|
||||
*/
|
||||
public function addElement($elementName, $content, $attributes = null)
|
||||
{
|
||||
$this->elements[$elementName]['name'] = $elementName;
|
||||
$this->elements[$elementName]['content'] = $content;
|
||||
$this->elements[$elementName]['attributes'] = $attributes;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set multiple feed elements from an array.
|
||||
* Elements which have attributes cannot be added by this method
|
||||
*
|
||||
* @access public
|
||||
* @param array array of elements in 'tagName' => 'tagContent' format.
|
||||
* @return void
|
||||
*/
|
||||
public function addElementArray($elementArray)
|
||||
{
|
||||
if(! is_array($elementArray)) return;
|
||||
foreach ($elementArray as $elementName => $content)
|
||||
{
|
||||
$this->addElement($elementName, $content);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Return the collection of elements in this feed item
|
||||
*
|
||||
* @access public
|
||||
* @return array
|
||||
*/
|
||||
public function getElements()
|
||||
{
|
||||
return $this->elements;
|
||||
}
|
||||
|
||||
// Wrapper functions ------------------------------------------------------
|
||||
|
||||
/**
|
||||
* Set the 'dscription' element of feed item
|
||||
*
|
||||
* @access public
|
||||
* @param string The content of 'description' element
|
||||
* @return void
|
||||
*/
|
||||
public function setDescription($description)
|
||||
{
|
||||
$tag = ($this->version == ATOM)? 'summary' : 'description';
|
||||
$this->addElement($tag, $description);
|
||||
}
|
||||
|
||||
/**
|
||||
* @desc Set the 'title' element of feed item
|
||||
* @access public
|
||||
* @param string The content of 'title' element
|
||||
* @return void
|
||||
*/
|
||||
public function setTitle($title)
|
||||
{
|
||||
$this->addElement('title', $title);
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the 'date' element of feed item
|
||||
*
|
||||
* @access public
|
||||
* @param string The content of 'date' element
|
||||
* @return void
|
||||
*/
|
||||
public function setDate($date)
|
||||
{
|
||||
if(! is_numeric($date))
|
||||
{
|
||||
$date = strtotime($date);
|
||||
}
|
||||
|
||||
if($this->version == ATOM)
|
||||
{
|
||||
$tag = 'updated';
|
||||
$value = date(DATE_ATOM, $date);
|
||||
}
|
||||
elseif($this->version == RSS2)
|
||||
{
|
||||
$tag = 'pubDate';
|
||||
$value = date(DATE_RSS, $date);
|
||||
}
|
||||
else
|
||||
{
|
||||
$tag = 'dc:date';
|
||||
$value = date("Y-m-d", $date);
|
||||
}
|
||||
|
||||
$this->addElement($tag, $value);
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the 'link' element of feed item
|
||||
*
|
||||
* @access public
|
||||
* @param string The content of 'link' element
|
||||
* @return void
|
||||
*/
|
||||
public function setLink($link)
|
||||
{
|
||||
if($this->version == RSS2 || $this->version == RSS1)
|
||||
{
|
||||
$this->addElement('link', $link);
|
||||
}
|
||||
else
|
||||
{
|
||||
$this->addElement('link','',array('href'=>$link));
|
||||
$this->addElement('id', FeedWriter::uuid($link,'urn:uuid:'));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the 'encloser' element of feed item
|
||||
* For RSS 2.0 only
|
||||
*
|
||||
* @access public
|
||||
* @param string The url attribute of encloser tag
|
||||
* @param string The length attribute of encloser tag
|
||||
* @param string The type attribute of encloser tag
|
||||
* @return void
|
||||
*/
|
||||
public function setEncloser($url, $length, $type)
|
||||
{
|
||||
$attributes = array('url'=>$url, 'length'=>$length, 'type'=>$type);
|
||||
$this->addElement('enclosure','',$attributes);
|
||||
}
|
||||
|
||||
} // end of class FeedItem
|
||||
?>
|
||||
430
lib/FeedWriter.php
Normal file
430
lib/FeedWriter.php
Normal file
@@ -0,0 +1,430 @@
|
||||
<?php
|
||||
// RSS 0.90 Officially obsoleted by 1.0
|
||||
// RSS 0.91, 0.92, 0.93 and 0.94 Officially obsoleted by 2.0
|
||||
// So, define constants for RSS 1.0, RSS 2.0 and ATOM
|
||||
|
||||
define('RSS1', 'RSS 1.0', true);
|
||||
define('RSS2', 'RSS 2.0', true);
|
||||
define('ATOM', 'ATOM', true);
|
||||
|
||||
/**
|
||||
* Univarsel Feed Writer class
|
||||
*
|
||||
* Genarate RSS 1.0, RSS2.0 and ATOM Feed
|
||||
*
|
||||
* @package UnivarselFeedWriter
|
||||
* @author Anis uddin Ahmad <anisniit@gmail.com>
|
||||
* @link http://www.ajaxray.com/projects/rss
|
||||
*/
|
||||
class FeedWriter
|
||||
{
|
||||
private $channels = array(); // Collection of channel elements
|
||||
private $items = array(); // Collection of items as object of FeedItem class.
|
||||
private $data = array(); // Store some other version wise data
|
||||
private $CDATAEncoding = array(); // The tag names which have to encoded as CDATA
|
||||
|
||||
private $version = null;
|
||||
|
||||
/**
|
||||
* Constructor
|
||||
*
|
||||
* @param constant the version constant (RSS1/RSS2/ATOM).
|
||||
*/
|
||||
function __construct($version = RSS2)
|
||||
{
|
||||
$this->version = $version;
|
||||
|
||||
// Setting default value for assential channel elements
|
||||
$this->channels['title'] = $version . ' Feed';
|
||||
$this->channels['link'] = 'http://www.ajaxray.com/blog';
|
||||
|
||||
//Tag names to encode in CDATA
|
||||
$this->CDATAEncoding = array('description', 'content:encoded', 'summary');
|
||||
}
|
||||
|
||||
// Start # public functions ---------------------------------------------
|
||||
|
||||
/**
|
||||
* Set a channel element
|
||||
* @access public
|
||||
* @param srting name of the channel tag
|
||||
* @param string content of the channel tag
|
||||
* @return void
|
||||
*/
|
||||
public function setChannelElement($elementName, $content)
|
||||
{
|
||||
$this->channels[$elementName] = $content ;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set multiple channel elements from an array. Array elements
|
||||
* should be 'channelName' => 'channelContent' format.
|
||||
*
|
||||
* @access public
|
||||
* @param array array of channels
|
||||
* @return void
|
||||
*/
|
||||
public function setChannelElementsFromArray($elementArray)
|
||||
{
|
||||
if(! is_array($elementArray)) return;
|
||||
foreach ($elementArray as $elementName => $content)
|
||||
{
|
||||
$this->setChannelElement($elementName, $content);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Genarate the actual RSS/ATOM file
|
||||
*
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
public function genarateFeed()
|
||||
{
|
||||
header("Content-type: text/xml");
|
||||
|
||||
$this->printHead();
|
||||
$this->printChannels();
|
||||
$this->printItems();
|
||||
$this->printTale();
|
||||
}
|
||||
|
||||
/**
|
||||
* Create a new FeedItem.
|
||||
*
|
||||
* @access public
|
||||
* @return object instance of FeedItem class
|
||||
*/
|
||||
public function createNewItem()
|
||||
{
|
||||
$Item = new FeedItem($this->version);
|
||||
return $Item;
|
||||
}
|
||||
|
||||
/**
|
||||
* Add a FeedItem to the main class
|
||||
*
|
||||
* @access public
|
||||
* @param object instance of FeedItem class
|
||||
* @return void
|
||||
*/
|
||||
public function addItem($feedItem)
|
||||
{
|
||||
$this->items[] = $feedItem;
|
||||
}
|
||||
|
||||
|
||||
// Wrapper functions -------------------------------------------------------------------
|
||||
|
||||
/**
|
||||
* Set the 'title' channel element
|
||||
*
|
||||
* @access public
|
||||
* @param srting value of 'title' channel tag
|
||||
* @return void
|
||||
*/
|
||||
public function setTitle($title)
|
||||
{
|
||||
$this->setChannelElement('title', $title);
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the 'description' channel element
|
||||
*
|
||||
* @access public
|
||||
* @param srting value of 'description' channel tag
|
||||
* @return void
|
||||
*/
|
||||
public function setDescription($desciption)
|
||||
{
|
||||
$this->setChannelElement('description', $desciption);
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the 'link' channel element
|
||||
*
|
||||
* @access public
|
||||
* @param srting value of 'link' channel tag
|
||||
* @return void
|
||||
*/
|
||||
public function setLink($link)
|
||||
{
|
||||
$this->setChannelElement('link', $link);
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the 'image' channel element
|
||||
*
|
||||
* @access public
|
||||
* @param srting title of image
|
||||
* @param srting link url of the imahe
|
||||
* @param srting path url of the image
|
||||
* @return void
|
||||
*/
|
||||
public function setImage($title, $link, $url)
|
||||
{
|
||||
$this->setChannelElement('image', array('title'=>$title, 'link'=>$link, 'url'=>$url));
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the 'about' channel element. Only for RSS 1.0
|
||||
*
|
||||
* @access public
|
||||
* @param srting value of 'about' channel tag
|
||||
* @return void
|
||||
*/
|
||||
public function setChannelAbout($url)
|
||||
{
|
||||
$this->data['ChannelAbout'] = $url;
|
||||
}
|
||||
|
||||
/**
|
||||
* Genarates an UUID
|
||||
* @author Anis uddin Ahmad <admin@ajaxray.com>
|
||||
* @param string an optional prefix
|
||||
* @return string the formated uuid
|
||||
*/
|
||||
public function uuid($key = null, $prefix = '')
|
||||
{
|
||||
$key = ($key == null)? uniqid(rand()) : $key;
|
||||
$chars = md5($key);
|
||||
$uuid = substr($chars,0,8) . '-';
|
||||
$uuid .= substr($chars,8,4) . '-';
|
||||
$uuid .= substr($chars,12,4) . '-';
|
||||
$uuid .= substr($chars,16,4) . '-';
|
||||
$uuid .= substr($chars,20,12);
|
||||
|
||||
return $prefix . $uuid;
|
||||
}
|
||||
// End # public functions ----------------------------------------------
|
||||
|
||||
// Start # private functions ----------------------------------------------
|
||||
|
||||
/**
|
||||
* Prints the xml and rss namespace
|
||||
*
|
||||
* @access private
|
||||
* @return void
|
||||
*/
|
||||
private function printHead()
|
||||
{
|
||||
$out = '<?xml version="1.0" encoding="utf-8"?>' . "\n";
|
||||
|
||||
if($this->version == RSS2)
|
||||
{
|
||||
$out .= '<rss version="2.0"
|
||||
xmlns:content="http://purl.org/rss/1.0/modules/content/"
|
||||
xmlns:wfw="http://wellformedweb.org/CommentAPI/"
|
||||
>' . PHP_EOL;
|
||||
}
|
||||
elseif($this->version == RSS1)
|
||||
{
|
||||
$out .= '<rdf:RDF
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns="http://purl.org/rss/1.0/"
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
>' . PHP_EOL;;
|
||||
}
|
||||
else if($this->version == ATOM)
|
||||
{
|
||||
$out .= '<feed xmlns="http://www.w3.org/2005/Atom">' . PHP_EOL;;
|
||||
}
|
||||
echo $out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Closes the open tags at the end of file
|
||||
*
|
||||
* @access private
|
||||
* @return void
|
||||
*/
|
||||
private function printTale()
|
||||
{
|
||||
if($this->version == RSS2)
|
||||
{
|
||||
echo '</channel>' . PHP_EOL . '</rss>';
|
||||
}
|
||||
elseif($this->version == RSS1)
|
||||
{
|
||||
echo '</rdf:RDF>';
|
||||
}
|
||||
else if($this->version == ATOM)
|
||||
{
|
||||
echo '</feed>';
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates a single node as xml format
|
||||
*
|
||||
* @access private
|
||||
* @param srting name of the tag
|
||||
* @param mixed tag value as string or array of nested tags in 'tagName' => 'tagValue' format
|
||||
* @param array Attributes(if any) in 'attrName' => 'attrValue' format
|
||||
* @return string formatted xml tag
|
||||
*/
|
||||
private function makeNode($tagName, $tagContent, $attributes = null)
|
||||
{
|
||||
$nodeText = '';
|
||||
$attrText = '';
|
||||
|
||||
if(is_array($attributes))
|
||||
{
|
||||
foreach ($attributes as $key => $value)
|
||||
{
|
||||
$attrText .= " $key=\"$value\" ";
|
||||
}
|
||||
}
|
||||
|
||||
if(is_array($tagContent) && $this->version == RSS1)
|
||||
{
|
||||
$attrText = ' rdf:parseType="Resource"';
|
||||
}
|
||||
|
||||
|
||||
$attrText .= (in_array($tagName, $this->CDATAEncoding) && $this->version == ATOM)? ' type="html" ' : '';
|
||||
$nodeText .= (in_array($tagName, $this->CDATAEncoding))? "<{$tagName}{$attrText}><![CDATA[" : "<{$tagName}{$attrText}>";
|
||||
|
||||
if(is_array($tagContent))
|
||||
{
|
||||
foreach ($tagContent as $key => $value)
|
||||
{
|
||||
$nodeText .= $this->makeNode($key, $value);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
$nodeText .= (in_array($tagName, $this->CDATAEncoding))? $tagContent : htmlentities($tagContent);
|
||||
}
|
||||
|
||||
$nodeText .= (in_array($tagName, $this->CDATAEncoding))? "]]></$tagName>" : "</$tagName>";
|
||||
|
||||
return $nodeText . PHP_EOL;
|
||||
}
|
||||
|
||||
/**
|
||||
* @desc Print channels
|
||||
* @access private
|
||||
* @return void
|
||||
*/
|
||||
private function printChannels()
|
||||
{
|
||||
//Start channel tag
|
||||
switch ($this->version)
|
||||
{
|
||||
case RSS2:
|
||||
echo '<channel>' . PHP_EOL;
|
||||
break;
|
||||
case RSS1:
|
||||
echo (isset($this->data['ChannelAbout']))? "<channel rdf:about=\"{$this->data['ChannelAbout']}\">" : "<channel rdf:about=\"{$this->channels['link']}\">";
|
||||
break;
|
||||
}
|
||||
|
||||
//Print Items of channel
|
||||
foreach ($this->channels as $key => $value)
|
||||
{
|
||||
if($this->version == ATOM && $key == 'link')
|
||||
{
|
||||
// ATOM prints link element as href attribute
|
||||
echo $this->makeNode($key,'',array('href'=>$value));
|
||||
//Add the id for ATOM
|
||||
echo $this->makeNode('id',$this->uuid($value,'urn:uuid:'));
|
||||
}
|
||||
else
|
||||
{
|
||||
echo $this->makeNode($key, $value);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
//RSS 1.0 have special tag <rdf:Seq> with channel
|
||||
if($this->version == RSS1)
|
||||
{
|
||||
echo "<items>" . PHP_EOL . "<rdf:Seq>" . PHP_EOL;
|
||||
foreach ($this->items as $item)
|
||||
{
|
||||
$thisItems = $item->getElements();
|
||||
echo "<rdf:li resource=\"{$thisItems['link']['content']}\"/>" . PHP_EOL;
|
||||
}
|
||||
echo "</rdf:Seq>" . PHP_EOL . "</items>" . PHP_EOL . "</channel>" . PHP_EOL;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Prints formatted feed items
|
||||
*
|
||||
* @access private
|
||||
* @return void
|
||||
*/
|
||||
private function printItems()
|
||||
{
|
||||
foreach ($this->items as $item)
|
||||
{
|
||||
$thisItems = $item->getElements();
|
||||
|
||||
//the argument is printed as rdf:about attribute of item in rss 1.0
|
||||
echo $this->startItem($thisItems['link']['content']);
|
||||
|
||||
foreach ($thisItems as $feedItem )
|
||||
{
|
||||
echo $this->makeNode($feedItem['name'], $feedItem['content'], $feedItem['attributes']);
|
||||
}
|
||||
echo $this->endItem();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Make the starting tag of channels
|
||||
*
|
||||
* @access private
|
||||
* @param srting The vale of about tag which is used for only RSS 1.0
|
||||
* @return void
|
||||
*/
|
||||
private function startItem($about = false)
|
||||
{
|
||||
if($this->version == RSS2)
|
||||
{
|
||||
echo '<item>' . PHP_EOL;
|
||||
}
|
||||
elseif($this->version == RSS1)
|
||||
{
|
||||
if($about)
|
||||
{
|
||||
echo "<item rdf:about=\"$about\">" . PHP_EOL;
|
||||
}
|
||||
else
|
||||
{
|
||||
die('link element is not set .\n It\'s required for RSS 1.0 to be used as about attribute of item');
|
||||
}
|
||||
}
|
||||
else if($this->version == ATOM)
|
||||
{
|
||||
echo "<entry>" . PHP_EOL;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Closes feed item tag
|
||||
*
|
||||
* @access private
|
||||
* @return void
|
||||
*/
|
||||
private function endItem()
|
||||
{
|
||||
if($this->version == RSS2 || $this->version == RSS1)
|
||||
{
|
||||
echo '</item>' . PHP_EOL;
|
||||
}
|
||||
else if($this->version == ATOM)
|
||||
{
|
||||
echo "</entry>" . PHP_EOL;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
// End # private functions ----------------------------------------------
|
||||
|
||||
} // end of class FeedWriter
|
||||
|
||||
@@ -36,6 +36,7 @@ class Layout
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
|
||||
<link rel="stylesheet" type="text/css" href="<?php print URL_ROOT ?>/buildsite.css"/>
|
||||
<link href="<?php print URL_ROOT ?>/feed.php" rel="alternate" title="Singularity Automatic Development Builds" type="application/atom+xml" />
|
||||
<link rel="shortcut icon" href="<?php print IMG_ROOT ?>/favicon.ico" type="image/x-icon" />
|
||||
<title>Singularity Viewer Automated Build System</title>
|
||||
|
||||
@@ -67,7 +68,7 @@ class Layout
|
||||
<div id="everything">
|
||||
<div id="page-wrapper">
|
||||
<div id="header"></div>
|
||||
<div class="container"><p style="font-size: 20px;">Automated Build System</p>
|
||||
<div class="container"><a href="<?php print URL_ROOT ?>" style="font-size: 20px;">Automated Build System</a><br/><br/>
|
||||
|
||||
|
||||
<?php
|
||||
|
||||
@@ -25,6 +25,7 @@ define('REL_DIR', 'singularity');
|
||||
if (!defined('URL_ROOT')) {
|
||||
$init_port = "";
|
||||
$init_ssl = strlen($_SERVER["HTTPS"]) > 0 ? true:false;
|
||||
define('USE_SSL', $init_ssl);
|
||||
|
||||
$init_url = $init_ssl ? "https://" : "http://";
|
||||
|
||||
|
||||
Reference in New Issue
Block a user