summaryrefslogtreecommitdiff
path: root/modules/rss/helpers
diff options
context:
space:
mode:
authorBharat Mediratta <bharat@menalto.com>2009-06-14 21:51:54 -0700
committerBharat Mediratta <bharat@menalto.com>2009-06-14 21:51:54 -0700
commit32ea4406c87049b25d3d82351097e69f13168311 (patch)
tree43c12a5dcf25b3414772b0bfe88fca27318a7ed9 /modules/rss/helpers
parent00fad54c0babfb0643c2ab9da98b4b74af84d466 (diff)
Refactor the way that the rss module works so that we're not allowing
the url to dictate arbitrary static method calls. * Each xxx_rss helper has a single feed() call which takes an id as the argument * xxx_rss::available_feedS() only returns feeds when they're applicable (ie if you're viewing a tag, it won't show you an item feed). * Feed urls are now in the module/feed_id form so that we can bind a feed id to a given module * Tightened up the Rss_Controller by using url::merge and some other tricks. * Made the slideshow module express its own feed.
Diffstat (limited to 'modules/rss/helpers')
-rw-r--r--modules/rss/helpers/rss.php34
-rw-r--r--modules/rss/helpers/rss_theme.php19
2 files changed, 21 insertions, 32 deletions
diff --git a/modules/rss/helpers/rss.php b/modules/rss/helpers/rss.php
index 8a7d0c97..81ff175f 100644
--- a/modules/rss/helpers/rss.php
+++ b/modules/rss/helpers/rss.php
@@ -19,34 +19,18 @@
*/
class rss_Core {
- static function feed_link($uri) {
- $url = url::site("rss/feed/$uri");
- return "<link rel=\"alternate\" type=\"" . rest::RSS . "\" href=\"$url\" />";
- }
-
/**
- * Get all available rss feeds
+ * Convert a rss feed id into a rss feed url.
*/
- static function available_feeds($item) {
- $feeds = array();
- foreach (module::active() as $module) {
- $class_name = "{$module->name}_rss";
- if (method_exists($class_name, "available_feeds")) {
- foreach (call_user_func(array($class_name, "available_feeds"), $item) as $feed) {
- $feeds[$feed["description"]] = url::site("rss/feed/{$feed['uri']}");
- }
- }
- }
-
- return $feeds;
+ static function url($uri) {
+ return url::site("rss/feed/$uri");
}
- static function feed_data($method, $offset, $limit, $id) {
- foreach (module::active() as $module) {
- $class_name = "{$module->name}_rss";
- if (method_exists($class_name, $feed)) {
- return call_user_func(array($class_name, $feed), $offset, $limit, $id);
- }
- }
+ /**
+ * Return a <link> element for a given rss feed id.
+ */
+ static function feed_link($uri) {
+ $url = url::site("rss/feed/$uri");
+ return "<link rel=\"alternate\" type=\"" . rest::RSS . "\" href=\"$url\" />";
}
} \ No newline at end of file
diff --git a/modules/rss/helpers/rss_theme.php b/modules/rss/helpers/rss_theme.php
index 52d988bf..3d1b9a29 100644
--- a/modules/rss/helpers/rss_theme.php
+++ b/modules/rss/helpers/rss_theme.php
@@ -19,17 +19,22 @@
*/
class rss_theme_Core {
static function sidebar_blocks($theme) {
- // @todo this needs to be data driven
- if (!$theme->item()) {
- return;
- }
-
$block = new Block();
$block->css_id = "gRss";
$block->title = t("Available RSS Feeds");
$block->content = new View("rss_block.html");
- $block->content->feeds = rss::available_feeds($theme->item());
+ $block->content->feeds = array();
+ foreach (module::active() as $module) {
+ $class_name = "{$module->name}_rss";
+ if (method_exists($class_name, "available_feeds")) {
+ $block->content->feeds = array_merge(
+ $block->content->feeds,
+ call_user_func(array($class_name, "available_feeds"), $theme->item(), $theme->tag()));
+ }
+ }
- return $block;
+ if ($block->content->feeds) {
+ return $block;
+ }
}
}