/* Copyright (c) 2009 Arnaud Renevier, Inc, published under the modified BSD
license. */
-require_once ("./inc/settings.php");
-require_once ("./inc/db/mysql.php");
-require_once ("./inc/utils.php");
+function headers_callback ($output) {
+ $etag = md5 ($output);
+ if ((isset ($_SERVER ["HTTP_IF_NONE_MATCH"])) &&
+ ($_SERVER ["HTTP_IF_NONE_MATCH"] == $etag)) {
+ header ("HTTP/1.1 304 Not Modified");
+ exit ();
+ }
+
+ header ("Content-type: application/atom+xml; charset=UTF-8");
+ header ("Cache-control: must-revalidate");
+ header (sprintf ("ETag: %s", $etag));
-header ("Content-type: application/atom+xml; charset=UTF-8");
-header("Cache-control: no-cache");
+ return $output;
+}
function date3339 ($feature) {
$date = date ('Y-m-d\TH:i:s', $feature->date);
return $date;
}
+// method from http://diveintomark.org/archives/2004/05/28/howto-atom-id#other
function unique_id_from_feature ($feature) {
- // method from http://diveintomark.org/archives/2004/05/28/howto-atom-id#other
$date = date('Y-m-d', $feature->date);
$res = sprintf("tag:%s,%s:%d", gethost(), $date, $feature->id);
return $res;
}
function main ($features) {
- print "<?xml version=\"1.0\" encoding=\"utf-8\"?>
+ printf ("<?xml version=\"1.0\" encoding=\"utf-8\"?>
<feed xmlns=\"http://www.w3.org/2005/Atom\"
- xmlns:georss=\"http://www.georss.org/georss\">\n";
+ xmlns:georss=\"http://www.georss.org/georss\">\n");
printf(" <link rel=\"alternate\" type=\"text/html\" href=\"%s\"/>\n",
full_url_from_path (""));
}
if (SITETITLE) {
- printf (" <title>%s</title>\n", SITETITLE);
+ printf (" <title>%s</title>\n", htmlspecialchars (SITETITLE));
}
if (WEBMASTERMAIL) {
printf(" </author>\n");
}
- print "\n";
+ printf ("\n");
foreach ($features as $feature) {
- print (" <entry>\n");
+ printf (" <entry>\n");
if ($feature->title) {
$title = htmlspecialchars ($feature->title, ENT_QUOTES);
$contentHTML = sprintf ("<p>%s</p>", htmlspecialchars ($feature->title, ENT_QUOTES));
}
+ // FIXME: we consider thumbnail are correctly sized if gd library is
+ // installed. That may not always be true. For example if gd was installed
+ // after images were initially uploaded.
+ if (function_exists ("imagecreatefromjpeg")) {
+ if ($feature->imgpath) {
+ $imgurl = image_url_from_imgpath ($feature->imgpath);
+ $thumburl = thumb_url_from_imgpath ($feature->imgpath);
+ $contentHTML .= sprintf ('<a href="%s"><img alt="%s" src="%s"></a>', $imgurl, $alt, $thumburl);
+ }
+ }
+
if (strlen ($contentHTML) != 0) {
- printf(" <content type=\"html\">
+ printf (" <content type=\"html\">
%s
</content>\n", htmlspecialchars ($contentHTML));
}
printf(" </entry>\n\n");
}
- print '</feed>';
+ printf ("</feed>");
}
+if (!@include_once ("./inc/settings.php")) {
+ exit ("server error");
+}
+require_once ("./inc/db/" . (defined ("DBTYPE")? DBTYPE: "mysql") . ".php");
+require_once ("./inc/utils.php");
+
try {
$connection->connect (DBHOST, DBUSER, DBPWD, DBNAME, DBPREFIX);
$features = $connection->mostrecentfeatures (10);
} catch (Exception $e) {
exit ("server error");
}
+
+ob_start ("headers_callback");
main ($features);
+ob_end_flush ()
?>