From 310ef22fd996a21642cc63b33829cc1f397269d7 Mon Sep 17 00:00:00 2001 From: Evan Prodromou Date: Thu, 22 May 2008 07:29:54 -0400 Subject: abstract out RSS 1.0 generation to allow multiple streams darcs-hash:20080522112954-84dde-aa5087977298f5169148383e82e22241e613b1f2.gz --- lib/action.php | 12 +++++ lib/rssaction.php | 133 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 145 insertions(+) create mode 100644 lib/rssaction.php (limited to 'lib') diff --git a/lib/action.php b/lib/action.php index c346c7513..67eaf9ed7 100644 --- a/lib/action.php +++ b/lib/action.php @@ -46,4 +46,16 @@ class Action { // lawsuit $this->args[$k] = ($strip) ? stripslashes($v) : $v; } } + + function boolean($key, $def=false) { + $arg = $this->arg($key); + return (is_null($arg)) ? $def : + (strcasecmp($arg, 'true')) ? true : + (strcasecmp($arg, 'yes')) ? true : + (strcasecmp($arg, '1')) ? true : + (strcasecmp($arg, 'false')) ? false : + (strcasecmp($arg, 'no')) ? false : + (strcasecmp($arg, '0')) ? false : + $def; + } } diff --git a/lib/rssaction.php b/lib/rssaction.php new file mode 100644 index 000000000..9d4066ee5 --- /dev/null +++ b/lib/rssaction.php @@ -0,0 +1,133 @@ +. + */ + +if (!defined('LACONICA')) { exit(1); } + +class Rss10Action extends Action { + + function handle($args) { + parent::handle($args); + + $limit = (int) $this->trimmed('limit'); + + $this->show_rss($limit); + } + + function init() { + return true; + } + + function get_notices() { + return array(); + } + + function get_channel() { + return array('url' => '', + 'title' => '', + 'link' => '', + 'description' => ''); + } + + function get_image() { + return NULL; + } + + function show_rss($limit=0) { + + if (!$this->init()) { + return; + } + + $notices = $this->get_notices($limit); + + $this->init_rss(); + $this->show_channel($notices); + $this->show_image(); + + foreach ($notices as $n) { + $this->show_item($n); + } + + $this->end_rss(); + } + + function show_channel($notices) { + + $channel = $this->get_channel(); + $image = $this->get_image(); + + common_element_start('channel', array('rdf:about' => $channel['url'])); + common_element('title', NULL, $channel['title']); + common_element('link', NULL, $channel['link']); + common_element('description', NULL, $channel['description']); + + if ($image) { + common_element('image', array('rdf:resource' => $image)); + } + + common_element_start('items'); + common_element_start('rdf:Seq'); + foreach ($notices as $n) { + common_element('rdf:li', array('rdf:resource' => + common_local_url('shownotice', + array('notice' => $n->id)))); + } + + common_element_end('rdf:Seq'); + common_element_end('items'); + common_element_end('channel'); + } + + function show_image() { + $image = $this->get_image(); + if ($image) { + $channel = $this->get_channel(); + common_element_start('image', array('rdf:about' => $image)); + common_element('title', NULL, $channel['title']); + common_element('link', NULL, $channel['link']); + common_element('url', NULL, $image); + common_element_end('image'); + } + } + + function show_item($notice) { + $nurl = common_local_url('shownotice', array('notice' => $notice->id)); + common_element_start('item', array('rdf:about' => $nurl)); + common_element('title', NULL, $notice->created); + common_element('link', NULL, $nurl); + common_element('description', NULL, common_render_content($notice->content)); + common_element('dc:date', NULL, common_date_w3dtf($notice->created)); + common_element_end('item'); + } + + function init_rss() { + header('Content-Type: application/rdf+xml'); + + common_start_xml(); + common_element_start('rdf:RDF', array('xmlns:rdf' => + 'http://www.w3.org/1999/02/22-rdf-syntax-ns#', + 'xmlns:dc' => + 'http://purl.org/dc/elements/1.1/', + 'xmlns' => 'http://purl.org/rss/1.0/')); + } + + function end_rss() { + common_element_end('rdf:RDF'); + } +} \ No newline at end of file -- cgit v1.2.3-54-g00ecf