$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 '
 '
. htmlspecialchars($author["name"]) . ' | '
. '' . htmlspecialchars($row["hash"]) . ' '
. htmlspecialchars($row["time"]). "
\n\n"
. htmlspecialchars($row["message"]) . ' | ';
}
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 .= '';
$changesets = array();
while ($row = $DB->fetchRow($res)) {
$changesets[] = $row;
}
usort($changesets, "sort_by_date");
foreach ($changesets as $change) {
$ret .= print_changeset($change);
}
$ret .= '
';
}
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
*/