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.

Signed-off-by:  <unostar@danalan.info>
This commit is contained in:
Bharat Mediratta
2009-06-15 12:51:54 +08:00
committed by
parent 0204a5c9e8
commit 0051c2c89b
9 changed files with 162 additions and 145 deletions

View File

@@ -19,48 +19,60 @@
*/
class comment_rss_Core {
static function available_feeds($item) {
return array(array("description" => t("All new comments"),
"uri" => "comments"),
array("description" => sprintf(t("Comments on %s"), $item->title),
"uri" => "comments/{$item->id}"));
static function available_feeds($item, $tag) {
$feeds["comment/newest"] = t("All new comments");
if ($item) {
$feeds["comment/item/$item->id"] =
t("Comments on %title", array("title" => p::clean($item->title)));
}
return $feeds;
}
static function comments($offset, $limit, $id) {
$comments = ORM::factory("comment")
->where("state", "published")
->orderby("created", "DESC");
if ($id) {
$comments->where("item_id", $id);
static function feed($feed_id, $offset, $limit, $id) {
switch ($feed_id) {
case "newest":
$comments = ORM::factory("comment")
->where("state", "published")
->orderby("created", "DESC");
$all_comments = ORM::factory("comment")
->where("state", "published")
->orderby("created", "DESC");
break;
case "item":
$comments = ORM::factory("comment")
->where("state", "published")
->orderby("created", "DESC")
->where("item_id", $id);
$all_comments = ORM::factory("comment")
->where("state", "published")
->where("item_id", $id);
}
$feed->view = "comment.mrss";
$comments = $comments->find_all($limit, $offset);
$feed->children = array();
foreach ($comments as $comment) {
$item = $comment->item();
$feed->children[] = new ArrayObject(
array("pub_date" => date("D, d M Y H:i:s T", $comment->created),
"text" => $comment->text,
"thumb_url" => $item->thumb_url(),
"thumb_height" => $item->thumb_height,
"thumb_width" => $item->thumb_width,
"item_uri" => url::abs_site("{$item->type}s/$item->id"),
"title" => $item->title,
"author" => $comment->author_name()),
ArrayObject::ARRAY_AS_PROPS);
if (!empty($comments)) {
$feed->view = "comment.mrss";
$comments = $comments->find_all($limit, $offset);
$feed->children = array();
foreach ($comments as $comment) {
$item = $comment->item();
$feed->children[] = new ArrayObject(
array("pub_date" => date("D, d M Y H:i:s T", $comment->created),
"text" => $comment->text,
"thumb_url" => $item->thumb_url(),
"thumb_height" => $item->thumb_height,
"thumb_width" => $item->thumb_width,
"item_uri" => url::abs_site("{$item->type}s/$item->id"),
"title" => $item->title,
"author" => $comment->author_name()),
ArrayObject::ARRAY_AS_PROPS);
}
$feed->max_pages = ceil($all_comments->find_all()->count() / $limit);
$feed->title = htmlspecialchars(t("Recent Comments"));
$feed->uri = url::abs_site("albums/" . (empty($id) ? "1" : $id));
$feed->description = t("Recent Comments");
return $feed;
}
$all_comments = ORM::factory("comment")->where("state", "published");
if ($id) {
$all_comments->where("item_id", $id);
}
$feed->max_pages = ceil($all_comments->find_all()->count() / $limit);
$feed->title = htmlspecialchars(t("Recent Comments"));
$feed->uri = url::abs_site("albums/" . (empty($id) ? "1" : $id));
$feed->description = t("Recent Comments");
return $feed;
}
}