summaryrefslogtreecommitdiff
path: root/modules/rss
diff options
context:
space:
mode:
Diffstat (limited to 'modules/rss')
-rw-r--r--modules/rss/controllers/rss.php49
-rw-r--r--modules/rss/helpers/rss.php36
-rw-r--r--modules/rss/helpers/rss_theme.php19
-rw-r--r--modules/rss/views/feed.mrss.php18
-rw-r--r--modules/rss/views/rss_block.html.php4
5 files changed, 58 insertions, 68 deletions
diff --git a/modules/rss/controllers/rss.php b/modules/rss/controllers/rss.php
index 80803dfd..e9dd9fff 100644
--- a/modules/rss/controllers/rss.php
+++ b/modules/rss/controllers/rss.php
@@ -18,42 +18,45 @@
* Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.
*/
class Rss_Controller extends Controller {
- public static $page_size = 30;
+ public static $page_size = 20;
- public function feed($method, $id=null) {
+ public function feed($module_id, $feed_id, $id=null) {
$page = $this->input->get("page", 1);
- $feed_uri = "rss/feed/$method" . (empty($id) ? "" : "/$id");
if ($page < 1) {
- url::redirect($feed_uri);
+ url::redirect(url::merge(array("page" => 1)));
}
- $feed = rss::feed_data($method, ($page - 1) * self::$page_size, self::$page_size, $id);
- $max_pages = $feed["max_pages"];
- if ($max_pages && $page > $max_pages) {
- url::redirect("$feed_uri?page={$max_pages}");
+ // Run the appropriate feed callback
+ if (module::is_active($module_id)) {
+ $class_name = "{$module_id}_rss";
+ if (method_exists($class_name, "feed")) {
+ $feed = call_user_func(
+ array($class_name, "feed"), $feed_id,
+ ($page - 1) * self::$page_size, self::$page_size, $id);
+ }
}
- unset($feed["max_pages"]);
-
- $view = new View(empty($feed["view"]) ? "feed.mrss" : $feed["view"]);
- unset($feed["view"]);
-
- foreach ($feed as $field => $value) {
- $view->$field = $value;
+ if (empty($feed)) {
+ Kohana::show_404();
}
- $view->feed_link = url::abs_site($feed_uri);
- if ($page > 1) {
- $previous_page = $page - 1;
- $view->previous_page_link = url::site("$feed_uri?page={$previous_page}");
+ if ($feed->max_pages && $page > $feed->max_pages) {
+ url::redirect(url::merge(array("page" => $feed->max_pages)));
}
- if ($page < $max_pages) {
- $next_page = $page + 1;
- $view->next_page_link = url::site("$feed_uri?page={$next_page}");
- }
+ $view = new View(empty($feed->view) ? "feed.mrss" : $feed->view);
+ unset($feed->view);
+ $view->feed = $feed;
$view->pub_date = date("D, d M Y H:i:s T");
+ $feed->uri = url::abs_site(Router::$current_uri);
+ if ($page > 1) {
+ $feed->previous_page_uri = url::abs_site(url::merge(array("page" => $page - 1)));
+ }
+ if ($page < $feed->max_pages) {
+ $feed->next_page_uri = url::abs_site(url::merge(array("page" => $page + 1)));
+ }
+
rest::http_content_type(rest::RSS);
print $view;
}
diff --git a/modules/rss/helpers/rss.php b/modules/rss/helpers/rss.php
index 403ee225..81ff175f 100644
--- a/modules/rss/helpers/rss.php
+++ b/modules/rss/helpers/rss.php
@@ -19,36 +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) {
- if ($feed["type"] == "block") {
- $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($feed, $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;
+ }
}
}
diff --git a/modules/rss/views/feed.mrss.php b/modules/rss/views/feed.mrss.php
index 0beebbcf..447179a5 100644
--- a/modules/rss/views/feed.mrss.php
+++ b/modules/rss/views/feed.mrss.php
@@ -6,21 +6,21 @@
xmlns:fh="http://purl.org/syndication/history/1.0">
<channel>
<generator>gallery3</generator>
- <title><?= p::clean($title) ?></title>
- <link><?= $link ?></link>
- <description><?= p::clean($description) ?></description>
+ <title><?= p::clean($feed->title) ?></title>
+ <link><?= $feed->uri ?></link>
+ <description><?= p::clean($feed->description) ?></description>
<language>en-us</language>
- <atom:link rel="self" href="<?= $feed_link ?>" type="application/rss+xml" />
+ <atom:link rel="self" href="<?= $feed->uri ?>" type="application/rss+xml" />
<fh:complete/>
- <? if (!empty($previous_page_link)): ?>
- <atom:link rel="previous" href="<?= $previous_page_link ?>" type="application/rss+xml" />
+ <? if (!empty($feed->previous_page_uri)): ?>
+ <atom:link rel="previous" href="<?= $feed->previous_page_uri ?>" type="application/rss+xml" />
<? endif ?>
- <? if (!empty($next_page_link)): ?>
- <atom:link rel="next" href="<?= $next_page_link ?>" type="application/rss+xml" />
+ <? if (!empty($feed->next_page_uri)): ?>
+ <atom:link rel="next" href="<?= $feed->next_page_uri ?>" type="application/rss+xml" />
<? endif ?>
<pubDate><?= $pub_date ?></pubDate>
<lastBuildDate><?= $pub_date ?></lastBuildDate>
- <? foreach ($children as $child): ?>
+ <? foreach ($feed->children as $child): ?>
<item>
<title><?= p::clean($child->title) ?></title>
<link><?= url::abs_site("{$child->type}s/{$child->id}") ?></link>
diff --git a/modules/rss/views/rss_block.html.php b/modules/rss/views/rss_block.html.php
index f964329c..39921d7d 100644
--- a/modules/rss/views/rss_block.html.php
+++ b/modules/rss/views/rss_block.html.php
@@ -1,9 +1,9 @@
<?php defined("SYSPATH") or die("No direct script access.") ?>
<ul id="gFeeds">
-<? foreach($feeds as $title => $url): ?>
+<? foreach($feeds as $url => $title): ?>
<li style="clear: both;">
<span class="ui-icon-left">
- <a href="<?= $url ?>">
+ <a href="<?= rss::url($url) ?>">
<span class="ui-icon ui-icon-signal-diag"></span>
<?= $title ?>
</a>