One more patch: a php file to generate rss feeds for pecl4win releases.
It can list all files or all files for a given php branch.
The base rss code is taken from pecl rss.
It assumes that for every extension and php branch, there is only one
file in the db (ie. not many builds corresponding to different php
versions).
Bye
Gaetano
ps: sorry for spamming the list. Is there some other place I should post
this?
<?php
/**
+----------------------------------------------------------------------+
| PECL4WIN Web site |
+----------------------------------------------------------------------+
| Copyright (c) 2007 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 2.02 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
| available at through the world-wide-web at |
| http://www.php.net/license/3_01.txt. |
| If you did not receive a copy of the PHP license and are unable to |
| obtain it through the world-wide-web, please send a note to |
| [EMAIL PROTECTED] so we can mail you a copy immediately. |
+----------------------------------------------------------------------+
@author Pierre-Alain Joye <[EMAIL PROTECTED]>
@author G. Giunta
@version $Id: $
@todo use a better xml-escaping filter than htmlspecialchars
@todo shall we return a specific error if user asks for inexisting
extension?
*/
if (!defined("SITE_ROOT")) {
define("SITE_ROOT", dirname(__FILE__));
}
include SITE_ROOT."/lib/includes/init.php";
function rss_bailout() {
header('HTTP/1.0 404 Not Found');
echo "<h1>The requested URL " . (($_SERVER['REQUEST_URI'])) . " was
not found on this server.</h1>";
exit();
}
/* if file is given, the file will be used to store the rss feed */
function rss_create($items, $channel_title, $channel_description,
$dest_file=false) {
if (is_array($items) /*&& count($items)>0*/) {
$rss_top = <<<EOT
<?xml version="1.0" encoding="iso-8859-1"?>
<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/">
<channel rdf:about="http://pecl4win.php.net/">
<link>http://pecl4win.php.net/</link>
<dc:creator>[EMAIL PROTECTED]</dc:creator>
<dc:publisher>[EMAIL PROTECTED]</dc:publisher>
<dc:language>en-us</dc:language>
EOT;
$items_xml = "<items>
<rdf:Seq>";
$item_entries = '';
foreach ($items as $item) {
$date = date("Y-m-d\TH:i:s-05:00",
strtotime($item['releasedate']));
/* allows to override the default link */
if (!isset($item['link'])) {
$url = 'http://pecl4win.php.net/download.php/ext/' .
$item['branch'] . '/' . $item['version'] . '/' . $item['name'];
} else {
$url = $item['link'];
}
if (!empty($item['branch'])) {
$title = $item['name'] . ' (' . $item['branch'] . '
branch)';
} else {
$title = $item['name'];
}
//$node = $this->newItem($title, $url,
$item['releasenotes'], $date);
$items_xml .= '<rdf:li rdf:resource="' . $url . '"/>' . "\n";
$item_entries .= "<item rdf:about=" . '"' .$url . '"' . ">
<title>$title</title>
<link>$url</link>
<description>" . $item['releasenotes'] ."
</description>
<dc:date>$date</dc:date>
</item>";
$item_entries .= "";
}
$items_xml .= "</rdf:Seq>
</items>\n";
$rss_feed = $rss_top . $items_xml ."
<title>$channel_title</title>
<description>$channel_description</description>
</channel>
$item_entries
</rdf:RDF>";
/* lock free write, thx rasmus for the tip */
if($dest_file && (!file_exists($dest_file) ||
filemtime($dest_file) < (time()-$timeout))) {
$stream = fopen($url,'r');
$tmpf = tempnam('/tmp','YWS');
// Note the direct write from the stream here
file_put_contents($tmpf, $stream);
fclose($stream);
rename($tmpf, $dest_file);
}
header("Content-Type: text/xml; charset=iso-8859-1");
echo $rss_feed;
} else {
rss_bailout();
}
}
$channel_title = 'PECL4WIN: Latest releases';
$channel_description = 'The latest releases in PECL4WIN.';
$q = "select fname, branch, pversion, filesize, updated from ext";
$args = isset($_SERVER['PATH_INFO']) ? explode("/",
$_SERVER['PATH_INFO']) : '';
if (count($args) > 1 && $args[1] != '') {
//$branch = $args[1];
$channel_title .= ' for branch '.htmlspecialchars($args[1]);
$q .= safe_sql_str(" where branch=!s", $args[1]);
}
else {
//$branch = '';
}
$q .= " order by updated desc";
$res = $DB->query($q);
$i = 0;
$items = array();
while ($row = $DB->fetchRow($res)) {
$file = new stdClass;
$DB->loadFromDbRow($file, $res, $row);
$items[] = array(
'name' => $file->fname,
'branch' => $file->branch,
'releasedate' => $file->updated,
'version' => $file->pversion,
'releasenotes' => 'Size: ' . $file->filesize . " KB - Last
build: " . date('Y-m-d H:i:s', $file->updated)
);
/// @todo move select limit from here unto query for bette resource
usage
if (++$i > 10) {
break;
}
}
// we do not use yet static files. It will be activated with the new
backends.
// $file = dirname(__FILE__) . '/' . $type . '_' . $argument . '.rss';
$file = false;
rss_create($items, $channel_title, $channel_description, $file);
--
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: http://www.php.net/unsub.php