From cb45529d8d773690c86f0274cd3a560f066b0a05 Mon Sep 17 00:00:00 2001 From: Evan Prodromou Date: Wed, 21 May 2008 10:33:51 -0400 Subject: rss feed plus Added an action for creating an RSS 1.0 (RDF) feed. To make this work, added a couple of helper functions to util, and changed the HTML stuff to use the helper functions. Also, changed a bit of formatting in the profile. Yeah, not a clean changeset. darcs-hash:20080521143351-84dde-d191761c399d7f014b990585c21e916e887b3401.gz --- actions/rss10.php | 130 +++++++++++++++++++++++++++++++++++++++++++++++++ actions/showstream.php | 7 +-- 2 files changed, 134 insertions(+), 3 deletions(-) create mode 100644 actions/rss10.php (limited to 'actions') diff --git a/actions/rss10.php b/actions/rss10.php new file mode 100644 index 000000000..f717f17cf --- /dev/null +++ b/actions/rss10.php @@ -0,0 +1,130 @@ +. + */ + +if (!defined('LACONICA')) { exit(1); } + +class Rss10Action extends Action { + + function handle($args) { + parent::handle($args); + + $nickname = $this->trimmed('nickname'); + + if (!$nickname) { + common_user_error(_t('No nickname provided.')); + } + + $user = User::staticGet('nickname', $nickname); + + if (!$user) { + common_user_error(_t('No such nickname.')); + } + + $limit = (int) $this->trimmed('limit'); + + $this->show_rss($user, $limit); + } + + function show_rss($user, $limit=0) { + + global $config; + + 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' => 'http://purl.org/rss/1.0/')); + + $notices = $this->get_notices($user, $limit); + $this->show_channel($user, $notices); + + foreach ($notices as $n) { + $this->show_item($n); + } + + common_element_end('rdf:RDF'); + } + + function get_notices($user, $limit=0) { + $notices = array(); + + $notice = DB_DataObject::factory('notice'); + $notice->profile_id = $user->id; # user id === profile id + $notice->orderBy('created DESC'); + if ($limit != 0) { + $notice->limit(0, $limit); + } + $notice->find(); + + while ($notice->fetch()) { + $notices[] = clone($notice); + } + + return $notices; + } + + function show_channel($user, $notices) { + + # XXX: this is kind of indirect, eh? + $profile = $user->getProfile(); + $avatar = $profile->getAvatar(AVATAR_PROFILE_SIZE); + + common_element_start('channel', array('rdf:about' => + common_local_url('rss10', + array('nickname' => + $user->nickname)))); + common_element('title', NULL, $user->nickname); + common_element('link', NULL, $profile->profileurl); + common_element('description', NULL, _t('Microblog by ') . $user->nickname); + + if ($avatar) { + common_element('image', array('rdf:resource' => $avatar->url)); + } + + 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'); + + if ($avatar) { + common_element_start('image', array('rdf:about' => $avatar->url)); + common_element('title', NULL, $user->nickname); + common_element('link', NULL, $profile->profileurl); + common_element('url', NULL, $avatar->url); + common_element_end('image'); + } + } + + function show_item($notice) { + $nurl = common_local_url('shownotice', array('notice' => $n->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_end('item'); + } +} \ No newline at end of file diff --git a/actions/showstream.php b/actions/showstream.php index b4844aabd..7e887a9d9 100644 --- a/actions/showstream.php +++ b/actions/showstream.php @@ -101,13 +101,14 @@ class ShowstreamAction extends StreamAction { 'alt' => $profile->nickname)); } if ($profile->fullname) { + common_element_start('div', 'fullname'); if ($profile->homepage) { - common_element('a', array('href' => $profile->homepage, - 'class' => 'fullname'), + common_element('a', array('href' => $profile->homepage), $profile->fullname); } else { - common_element('div', 'fullname', $profile->fullname); + common_text($profile->fullname); } + common_element_end('div'); } if ($profile->location) { common_element('div', 'location', $profile->location); -- cgit v1.2.3-54-g00ecf