[php-blog-cvs] serendipity serendipity_lang_en.inc.php,1.44,1.45 serendipity_lang_de.inc.php,1.34,1.
A reliable, secure & extensible PHP blog | Not mainstream since 2002
Brought to you by:
garvinhicking,
jhermanns
From: <gar...@us...> - 2003-11-11 15:38:49
|
Update of /cvsroot/php-blog/serendipity In directory sc8-pr-cvs1:/tmp/cvs-serv23189 Modified Files: serendipity_lang_en.inc.php serendipity_lang_de.inc.php serendipity_sidebar_items.php rss.php Log Message: Reworked Syndication plugin to allow future embedding of new RSS-fields depending with individual content. First example is the pubDate-field for the 'channel'-context, as suggested by Justin Alcorn Index: serendipity_lang_en.inc.php =================================================================== RCS file: /cvsroot/php-blog/serendipity/serendipity_lang_en.inc.php,v retrieving revision 1.44 retrieving revision 1.45 diff -u -d -r1.44 -r1.45 --- serendipity_lang_en.inc.php 13 Oct 2003 20:35:34 -0000 1.44 +++ serendipity_lang_en.inc.php 11 Nov 2003 15:38:43 -0000 1.45 @@ -278,6 +278,8 @@ @define('SYNDICATION_PLUGIN_BANNERHEIGHT_DESC', 'in pixels, max. 400'); @define('SYNDICATION_PLUGIN_TTL', 'Field "ttl" (time-to-live)'); @define('SYNDICATION_PLUGIN_TTL_DESC', 'Amount of minutes after which your blog should not be cached any more by foreign sites/applications (empty: hidden) [RSS 2.0]'); +@define('SYNDICATION_PLUGIN_PUBDATE', 'Field "pubDate"'); +@define('SYNDICATION_PLUGIN_PUBDATE_DESC', 'Should the "pubDate"-field be embedded for a RSS-channel, to show the date of the latest entry?'); @define('CONTENT', 'Content'); @define('TYPE', 'Type'); @define('DRAFT', 'Draft'); Index: serendipity_lang_de.inc.php =================================================================== RCS file: /cvsroot/php-blog/serendipity/serendipity_lang_de.inc.php,v retrieving revision 1.34 retrieving revision 1.35 diff -u -d -r1.34 -r1.35 --- serendipity_lang_de.inc.php 13 Oct 2003 12:15:44 -0000 1.34 +++ serendipity_lang_de.inc.php 11 Nov 2003 15:38:45 -0000 1.35 @@ -279,6 +279,8 @@ @define('SYNDICATION_PLUGIN_BANNERHEIGHT_DESC', 'in Pixeln, max. 400'); @define('SYNDICATION_PLUGIN_TTL', 'Feld "ttl" (time-to-live)'); @define('SYNDICATION_PLUGIN_TTL_DESC', 'Anzahl von Minuten, nachdem Ihr Blog von fremden Seiten nicht mehr gecached werden sollte (leer: nicht verwenden) [RSS 2.0]'); +@define('SYNDICATION_PLUGIN_PUBDATE', 'Feld "pubDate"'); +@define('SYNDICATION_PLUGIN_PUBDATE_DESC', 'Soll das "pubDate"-Feld für den RSS-Kanal eingebettet werden, um das Datum des letzten Eintrags zu enthalten?'); @define('CONTENT', 'Inhalt'); @define('TYPE', 'Typ'); @define('DRAFT', 'Entwurf'); Index: serendipity_sidebar_items.php =================================================================== RCS file: /cvsroot/php-blog/serendipity/serendipity_sidebar_items.php,v retrieving revision 1.30 retrieving revision 1.31 diff -u -d -r1.30 -r1.31 --- serendipity_sidebar_items.php 20 Sep 2003 03:43:56 -0000 1.30 +++ serendipity_sidebar_items.php 11 Nov 2003 15:38:45 -0000 1.31 @@ -140,6 +140,7 @@ 'field_managingEditor', 'field_webMaster', 'field_ttl', + 'field_pubDate', 'seperator', 'bannerURL', 'bannerWidth', @@ -191,6 +192,12 @@ $propbag->add('description', SYNDICATION_PLUGIN_TTL_DESC); break; + case 'field_pubDate': + $propbag->add('type', 'boolean'); + $propbag->add('name', SYNDICATION_PLUGIN_PUBDATE); + $propbag->add('description', SYNDICATION_PLUGIN_PUBDATE_DESC); + break; + case 'bannerURL': $propbag->add('type', 'string'); $propbag->add('name', SYNDICATION_PLUGIN_BANNERURL); @@ -243,6 +250,84 @@ <a href="<?php echo $serendipity['serendipityHTTPPath']; ?>rss.php?version=2.0&type=comments"><nobr>RSS 2.0 <?php echo COMMENTS; ?></nobr></a> <?php } + } + + function generate_rss_fields(&$title, &$description, &$entries) { + global $serendipity; + // Check for a logo to use for an RSS feed. Can either be set by configuring the + // syndication plugin OR by just placing a rss_banner.png file in the pixel directory. + // If both is not set, we will display our happy own branding. :-) + + $bag = new serendipity_property_bag; + $this->introspect($bag); + $additional_fields = array(); + + if ($this->get_config('bannerURL') != '') { + $img = $this->get_config('bannerURL'); + $w = $this->get_config('bannerWidth'); + $h = $this->get_config('bannerHeight'); + $additional_fields['image'] = <<<IMAGE +<image> + <url>$img</url> + <title>RSS: $title - $description</title> + <link>{$serendipity['baseURL']}</link> + <width>$w</width> + <height>$h</height> + </image> +IMAGE; + } elseif (file_exists($serendipity['serendipityPath'] . 'pixel/rss_banner.png')) { + $i = getimagesize($serendipity['serendipityPath'] . 'pixel/rss_banner.png'); + $additional_fields['image'] = <<<IMAGE +<image> + <url>{$serendipity['baseURL']}pixel/rss_banner.png</url> + <title>RSS: $title - $description</title> + <link>{$serendipity['baseURL']}</link> + <width>{$i[0]}</width> + <height>{$i[1]}</height> + </image> +IMAGE; + } else { + $additional_fields['image'] = <<<IMAGE +<image> + <url>{$serendipity['baseURL']}pixel/s9y_banner_tiny.png</url> + <title>RSS: $title - $description</title> + <link>{$serendipity['baseURL']}</link> + <width>100</width> + <height>21</height> + </image> +IMAGE; + } + + // Now, if set, stitch together any fields that have been configured in the syndication plugin. + // First, do some sanity checks + $additional_fields['channel'] = ''; + foreach($bag->get('configuration') AS $bag_index => $bag_value) { + if (preg_match('|^field_(.*)$|', $bag_value, $match)) { + $bag_content = $this->get_config($bag_value); + + switch($match[1]) { + case 'pubDate': + if ($bag_content != 'false') { + $bag_content = date('r', $entries[0]['timestamp']); + } else { + $bag_content = ''; + } + break; + + // Each new RSS-field which needs rewrite of its content should get its own case here. + + default: + break; + } + + if ($bag_content != '') { + $additional_fields['channel'] .= '<' . $match[1] . '>' . $bag_content . '</' . $match[1] . '>' . "\n"; + } + + } + } + + return $additional_fields; } } Index: rss.php =================================================================== RCS file: /cvsroot/php-blog/serendipity/rss.php,v retrieving revision 1.14 retrieving revision 1.15 diff -u -d -r1.14 -r1.15 --- rss.php 26 Sep 2003 18:39:21 -0000 1.14 +++ rss.php 11 Nov 2003 15:38:45 -0000 1.15 @@ -40,73 +40,18 @@ include_once('serendipity_plugin_api.php'); $plugins = serendipity_plugin_api::enum_plugins(); -$plugin = false; if (is_array($plugins)) { // load each plugin to make some introspection foreach ($plugins as $plugin_data) { if (preg_match('|@serendipity_syndication_plugin|', $plugin_data['name'])) { $plugin =& serendipity_plugin_api::load_plugin($plugin_data['name']); - $bag = new serendipity_property_bag; - $plugin->introspect($bag); + $additional_fields = $plugin->generate_rss_fields($title, $description, $entries); break; } } } -// Check for a logo to use for an RSS feed. Can either be set by configuring the -// syndication plugin OR by just placing a rss_banner.png file in the pixel directory. -// If both is not set, we will display our happy own branding. :-) - -if ($plugin && is_object($plugin) && $plugin->get_config('bannerURL') != '') { - $img = $plugin->get_config('bannerURL'); - $w = $plugin->get_config('bannerWidth'); - $h = $plugin->get_config('bannerHeight'); - $image = <<<IMAGE -<image> - <url>$img</url> - <title>RSS: $title - $description</title> - <link>{$serendipity['baseURL']}</link> - <width>$w</width> - <height>$h</height> - </image> -IMAGE; -} elseif (file_exists($serendipity['serendipityPath'] . 'pixel/rss_banner.png')) { - $i = getimagesize($serendipity['serendipityPath'] . 'pixel/rss_banner.png'); - $image = <<<IMAGE -<image> - <url>{$serendipity['baseURL']}pixel/rss_banner.png</url> - <title>RSS: $title - $description</title> - <link>{$serendipity['baseURL']}</link> - <width>{$i[0]}</width> - <height>{$i[1]}</height> - </image> -IMAGE; -} else { - $image = <<<IMAGE -<image> - <url>{$serendipity['baseURL']}pixel/s9y_banner_tiny.png</url> - <title>RSS: $title - $description</title> - <link>{$serendipity['baseURL']}</link> - <width>100</width> - <height>21</height> - </image> -IMAGE; -} - -// Now, if set, stitch together any fields that have been configured in the syndication plugin. -// First, do some sanity checks -if ($plugin && $bag && is_object($plugin) && is_object($bag)) { - $additional_fields = ''; - foreach($bag->get('configuration') AS $bag_index => $bag_value) { - if (preg_match('|^field_(.*)$|', $bag_value, $match)) { - if ($plugin->get_config($bag_value) != '') { - $additional_fields.= '<' . $match[1] . '>' . $plugin->get_config($bag_value) . '</' . $match[1] . '>' . "\n"; - } - } - } -} - echo '<?xml version="1.0" encoding="utf-8" ?>'; echo "\n"; switch ($version) { @@ -119,7 +64,7 @@ <link>{$serendipity['baseURL']}</link> <description>$description</description> <language>{$serendipity['CONFIG']['lang']}</language> -$image +{$additional_fields['image']} HEAD; break; @@ -140,8 +85,8 @@ <dc:language>{$serendipity['lang']}</dc:language> <admin:errorReportsTo rdf:resource="mailto:{$serendipity['CONFIG']['email']}" /> <generator>Serendipity - http://www.s9y.org/</generator> - $additional_fields - $image + {$additional_fields['channel']} + {$additional_fields['image']} HEAD; break; |