diff options
-rw-r--r-- | modules/media_rss/controllers/media_rss.php | 67 | ||||
-rw-r--r-- | modules/media_rss/helpers/media_rss_block.php | 10 | ||||
-rw-r--r-- | modules/media_rss/views/feed.mrss.php | 21 |
3 files changed, 77 insertions, 21 deletions
diff --git a/modules/media_rss/controllers/media_rss.php b/modules/media_rss/controllers/media_rss.php index 1ec90766..336501ca 100644 --- a/modules/media_rss/controllers/media_rss.php +++ b/modules/media_rss/controllers/media_rss.php @@ -20,7 +20,7 @@ class Media_RSS_Controller extends Controller { public static $page_size = 10; - public function feed($id) { + public function albums($id) { $item = ORM::factory("item", $id)->find(); if (!$item->loaded) { return Kohana::show_404(); @@ -28,22 +28,75 @@ class Media_RSS_Controller extends Controller { $page = $this->input->get("page", 1); if ($page < 1) { - url::redirect("media_rss/feed/{$item->id}"); + url::redirect("media_rss/photos/{$item->id}"); } $children = $item->descendants(self::$page_size, ($page - 1) * self::$page_size, "photo"); - $count = $item->descendants_count("photo"); $max_pages = ceil($item->descendants_count("photo") / self::$page_size); if ($page > $max_pages) { - url::redirect("media_rss/feed/{$item->id}?page=$max_pages"); + url::redirect("media_rss/photos/{$item->id}?page=$max_pages"); } $view = new View("feed.mrss"); - $view->item = $item; + $view->title = $item->title; + $view->link = url::abs_site("albums/{$item->id}"); + $view->description = $item->description; + $view->feed_link = url::abs_site("media_rss/albums/{$item->id}"); $view->children = $children; - $view->previous_page = $page > 1 ? $page - 1 : null; - $view->next_page = $page < $max_pages ? $page + 1 : null; + + if ($page > 1) { + $previous_page = $page - 1; + $view->previous_page_link = + url::abs_site("media_rss/albums/{$item->id}?page={$previous_page}"); + } + + if ($page < $max_pages) { + $next_page = $page + 1; + $view->next_page_link = url::abs_site("media_rss/albums/{$item->id}?page={$next_page}"); + } + + // @todo do we want to add an upload date to the items table? + $view->pub_date = date("D, d M Y H:i:s T"); + + rest::http_content_type(rest::RSS); + print $view; + } + + public function tags($id) { + $tag = ORM::factory("tag", $id)->find(); + if (!$tag->loaded) { + return Kohana::show_404(); + } + + $page = $this->input->get("page", 1); + if ($page < 1) { + url::redirect("media_rss/tags/{$tag->id}"); + } + + $children = $tag->items(self::$page_size, ($page - 1) * self::$page_size, "photo"); + $max_pages = ceil($tag->count / self::$page_size); + + if ($page > $max_pages) { + url::redirect("media_rss/tags/{$tag->id}?page=$max_pages"); + } + + $view = new View("feed.mrss"); + $view->title = $tag->name; + $view->link = url::abs_site("tags/{$tag->id}"); + $view->description = sprintf(_("Photos related to %s"), $tag->name); + $view->feed_link = url::abs_site("media_rss/tags/{$tag->id}"); + $view->children = $children; + + if ($page > 1) { + $previous_page = $page - 1; + $view->previous_page_link = url::abs_site("media_rss/tags/{$tag->id}?page={$previous_page}"); + } + + if ($page < $max_pages) { + $next_page = $page + 1; + $view->next_page_link = url::abs_site("media_rss/tags/{$tag->id}?page={$next_page}"); + } // @todo do we want to add an upload date to the items table? $view->pub_date = date("D, d M Y H:i:s T"); diff --git a/modules/media_rss/helpers/media_rss_block.php b/modules/media_rss/helpers/media_rss_block.php index 2e9cd866..e19ceef7 100644 --- a/modules/media_rss/helpers/media_rss_block.php +++ b/modules/media_rss/helpers/media_rss_block.php @@ -20,8 +20,16 @@ class media_rss_block_Core { public static function head($theme) { if ($theme->item()) { - $url = url::site("media_rss/feed/{$theme->item()->id}"); + if ($theme->item()->type == "album") { + $url = url::site("media_rss/albums/{$theme->item()->id}"); + } else { + $url = url::site("media_rss/albums/{$theme->item()->parent_id}"); + } + } else if ($theme->tag()) { + $url = url::site("media_rss/tags/{$theme->tag()->id}"); + } + if (!empty($url)) { return "<link rel=\"alternate\" type=\"" . rest::RSS . "\" href=\"$url\" />"; } } diff --git a/modules/media_rss/views/feed.mrss.php b/modules/media_rss/views/feed.mrss.php index b3f44a17..8af189be 100644 --- a/modules/media_rss/views/feed.mrss.php +++ b/modules/media_rss/views/feed.mrss.php @@ -3,21 +3,16 @@ <rss version="2.0" xmlns:media="http://search.yahoo.com/mrss/" xmlns:atom="http://www.w3.org/2005/Atom"> <channel> - <title><?= $item->title ?></title> - <link><?= url::abs_site("albums/{$item->id}") ?></link> - <description><?= $item->description ?></description> + <title><? $title ?></title> + <link><?= $link ?></link> + <description><?= $description ?></description> <language>en-us</language> - <atom:link rel="self" href="<?= url::abs_site("media_rss/feed/{$item->id}") ?>" - type="application/rss+xml" /> - <? if ($previous_page): ?> - <atom:link rel="previous" - href="<?= url::abs_site("media_rss/feed/{$item->id}?page=$previous_page") ?>" - type="application/rss+xml" /> + <atom:link rel="self" href="<?= $feed_link ?>" type="application/rss+xmlml" /> + <? if (!empty($previous_page_link)): ?> + <atom:link rel="previous" href="<?= $previous_page_link ?>" type="application/rss+xml" /> <? endif ?> - <? if ($next_page): ?> - <atom:link rel="next" - href="<?= url::abs_site("media_rss/feed/{$item->id}?page=$next_page") ?>" - type="application/rss+xml" /> + <? if (!empty($next_page_link)): ?> + <atom:link rel="next" href="<?= $next_page_link ?>" type="application/rss+xml" /> <? endif ?> <pubDate><?= $pub_date ?></pubDate> <lastBuildDate><?= $pub_date ?></lastBuildDate> |