diff options
author | Jozef Selesi <jozefs@users.sourceforge.net> | 2008-11-23 12:41:41 +0000 |
---|---|---|
committer | Jozef Selesi <jozefs@users.sourceforge.net> | 2008-11-23 12:41:41 +0000 |
commit | 7485740d9741021b2016df80b225ae4d82b892d0 (patch) | |
tree | 9363326a831141fde66c31665af4fb2bacdec3db /modules | |
parent | bdbb115296f4002186ee3a99fadc13988dd1509f (diff) |
Changed and extended the Atom library a little so that the code for creating entries and feeds has been considerably simplified and reduced.
Diffstat (limited to 'modules')
-rw-r--r-- | modules/atom/libraries/Atom_Entry.php | 7 | ||||
-rw-r--r-- | modules/atom/libraries/Atom_Feed.php | 11 | ||||
-rw-r--r-- | modules/atom/libraries/Gallery_Atom_Entry.php | 39 | ||||
-rw-r--r-- | modules/atom/libraries/Gallery_Atom_Feed.php | 39 | ||||
-rw-r--r-- | modules/atom/libraries/Gallery_Atom_Link.php | 45 | ||||
-rw-r--r-- | modules/comment/controllers/comments.php | 3 | ||||
-rw-r--r-- | modules/comment/helpers/comment.php | 81 |
7 files changed, 155 insertions, 70 deletions
diff --git a/modules/atom/libraries/Atom_Entry.php b/modules/atom/libraries/Atom_Entry.php index 345755c2..70bc6e3a 100644 --- a/modules/atom/libraries/Atom_Entry.php +++ b/modules/atom/libraries/Atom_Entry.php @@ -24,8 +24,9 @@ class Atom_Entry_Core extends Atom_Base { return $this; } - public function updated($updated) { - $this->element->appendChild($this->dom->createElement("updated", $updated)); + public function updated($timestamp) { + $this->element->appendChild( + $this->dom->createElement("updated", atom::unix_to_internet_timestamp($timestamp))); return $this; } @@ -35,7 +36,7 @@ class Atom_Entry_Core extends Atom_Base { } public function content($text, $type="html") { - $content = $this->dom->createElement("content", $text); + $content = $this->dom->createElement("content", html::specialchars($text)); $content->setAttribute("type", $type); $this->element->appendChild($content); return $this; diff --git a/modules/atom/libraries/Atom_Feed.php b/modules/atom/libraries/Atom_Feed.php index 8efeb4f2..9625f951 100644 --- a/modules/atom/libraries/Atom_Feed.php +++ b/modules/atom/libraries/Atom_Feed.php @@ -25,12 +25,14 @@ class Atom_Feed_Core extends Atom_Base { } public function title($title) { + /* @todo Add optional type argument that defaults to "text" */ $this->element->appendChild($this->dom->createElement("title", $title)); return $this; } - public function updated($updated) { - $this->element->appendChild($this->dom->createElement("updated", $updated)); + public function updated($timestamp) { + $this->element->appendChild( + $this->dom->createElement("updated", atom::unix_to_internet_timestamp($timestamp))); return $this; } @@ -42,9 +44,4 @@ class Atom_Feed_Core extends Atom_Base { /* Create new empty entry. */ return $this->add_child("Atom_Entry", "entry"); } - - public function append_entry($atom_entry) { - /* Append an exising entry. */ - $this->element->appendChild($atom_entry->get_element()); - } } diff --git a/modules/atom/libraries/Gallery_Atom_Entry.php b/modules/atom/libraries/Gallery_Atom_Entry.php new file mode 100644 index 00000000..4b035eed --- /dev/null +++ b/modules/atom/libraries/Gallery_Atom_Entry.php @@ -0,0 +1,39 @@ +<?php defined("SYSPATH") or die("No direct script access."); +/** + * Gallery - a web based photo album viewer and editor + * Copyright (C) 2000-2008 Bharat Mediratta + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or (at + * your option) any later version. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. + */ + +/** + * This class implements Gallery's specific needs for Atom entries. + * + */ +class Gallery_Atom_Entry_Core extends Atom_Entry { + function __construct() { + parent::__construct("entry"); + + /* Set feed ID and self link. */ + $this->id(atom::get_absolute_url()); + $this->link() + ->rel("self") + ->href(atom::get_absolute_url()); + } + + public function link() { + return $this->add_child("Gallery_Atom_Link", "link"); + } +} diff --git a/modules/atom/libraries/Gallery_Atom_Feed.php b/modules/atom/libraries/Gallery_Atom_Feed.php new file mode 100644 index 00000000..31f93ec6 --- /dev/null +++ b/modules/atom/libraries/Gallery_Atom_Feed.php @@ -0,0 +1,39 @@ +<?php defined("SYSPATH") or die("No direct script access."); +/** + * Gallery - a web based photo album viewer and editor + * Copyright (C) 2000-2008 Bharat Mediratta + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or (at + * your option) any later version. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. + */ + +/** + * This class implements Gallery's specific needs for Atom feeds. + * + */ +class Gallery_Atom_Feed_Core extends Atom_Feed { + function __construct() { + parent::__construct("feed"); + + /* Set feed ID and self link. */ + $this->id(atom::get_absolute_url()); + $this->link() + ->rel("self") + ->href(atom::get_absolute_url()); + } + + public function link() { + return $this->add_child("Gallery_Atom_Link", "link"); + } +} diff --git a/modules/atom/libraries/Gallery_Atom_Link.php b/modules/atom/libraries/Gallery_Atom_Link.php new file mode 100644 index 00000000..abcd3bc9 --- /dev/null +++ b/modules/atom/libraries/Gallery_Atom_Link.php @@ -0,0 +1,45 @@ +<?php defined("SYSPATH") or die("No direct script access."); +/** + * Gallery - a web based photo album viewer and editor + * Copyright (C) 2000-2008 Bharat Mediratta + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or (at + * your option) any later version. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. + */ + +class Gallery_Atom_Link_Core extends Atom_Link { + public function related_atom($relative_uri, $title="") { + if (empty($title)) { + $title = _("Get related meta data"); + } + + $this->rel("related") + ->type(rest::ATOM) + ->title($title) + ->href(sprintf("%s%s", atom::get_base_url(), $relative_uri)); + return $this; + } + + public function related_image($relative_uri, $title="", $image_type="jpeg") { + if (empty($title)) { + $title = _("Get related image"); + } + + $this->rel("related") + ->type("image/" . $image_type) + ->title($title) + ->href(sprintf("%s%s", atom::get_base_url(), $relative_uri)); + return $this; + } +} diff --git a/modules/comment/controllers/comments.php b/modules/comment/controllers/comments.php index 989ad177..8b2e5155 100644 --- a/modules/comment/controllers/comments.php +++ b/modules/comment/controllers/comments.php @@ -62,7 +62,8 @@ class Comments_Controller extends REST_Controller { * @see Rest_Controller::_show($resource) */ public function _show($comment) { - switch (rest::output_format()) { + $output_format = rest::output_format(); + switch ($output_format) { case "xml": rest::http_content_type(rest::XML); print xml::to_xml($comment->as_array(), array("comment")); diff --git a/modules/comment/helpers/comment.php b/modules/comment/helpers/comment.php index 2e4b732a..e150bbda 100644 --- a/modules/comment/helpers/comment.php +++ b/modules/comment/helpers/comment.php @@ -108,7 +108,7 @@ class comment_Core { // @todo Set proper Content-Type in a central place (REST_Controller::dispatch?). static function get_comments($item_id) { $comments = ORM::factory('comment')->where('item_id', $item_id) - ->orderby('datetime', 'asc') + ->orderby('datetime', 'desc') ->find_all(); if (!$comments->count()) { @@ -147,84 +147,47 @@ class comment_Core { } public static function get_atom_entry($comment) { - $base_url = atom::get_base_url(); - $absolute_url = atom::get_absolute_url(); - - $feed = new Atom_Entry("entry"); - $feed->id($absolute_url) - ->updated(atom::unix_to_internet_timestamp($comment->datetime)) + $feed = new Gallery_Atom_Entry(); + $feed->updated($comment->datetime) ->title(sprintf(_("Comment #%d"), $comment->id)) - ->content($comment->text, "html") + ->content($comment->text) ->author() ->name($comment->author) ->email($comment->email) - ->uri(sprintf("%susers/%s", $base_url, $comment->id)); - $feed->link() - ->rel("self") - ->href($absolute_url); - $feed->link() - ->rel("related") - ->type("application/atom+xml") - ->title(_("Get photo meta data")) - ->href(sprintf("%sphotos/%s", $base_url, $comment->item_id)); - $feed->link() - ->rel("related") - ->type("image/jpeg") - ->title("Download photo") - ->href(sprintf("%sphotos/%s", $base_url, $comment->item_id)); + ->uri(sprintf("%susers/%s", atom::get_base_url(), $comment->id)); + $feed->link()->related_atom(sprintf("photos/%s", $comment->item_id)); + $feed->link()->related_image(sprintf("photos/%s", $comment->item_id)); return $feed->as_xml(); } /* - * This is way too complicated and needs lots of cleanup, but it provides a valid feed. - * @todo Fix double slashes in some URIs. - * @todo Abstract away as much code as possible. * @todo Show photo title instead of photo ID. - * @todo Show comment numbers relative to current item, not its database ID. * @todo Put proper user ID into author URI. */ public static function get_atom_feed($comments) { - $latest_comment = 0; - $base_url = atom::get_base_url(); - $absolute_url = atom::get_absolute_url(); - - $feed = new Atom_Feed("feed"); - $feed->link() - ->rel("self") - ->href($absolute_url); - - foreach ($comments as $comment) { - if ($comment->datetime > $latest_comment) { - $latest_comment = $comment->datetime; - } - + $latest_comment = $comments[0]->datetime; + $item_id = $comments[0]->item_id; + + /* Set up feed header. */ + $feed = new Gallery_Atom_Feed(); + $feed->title(sprintf(_("Comments on photo %d"), $item_id)); + $feed->updated($latest_comment); + $feed->link()->related_atom(sprintf("photos/%s", $item_id)); + $feed->link()->related_image(sprintf("photos/%s", $item_id)); + + /* Add individual comments. */ + foreach ($comments as $id => $comment) { $feed->entry() ->id(sprintf("%scomments/%s", atom::get_base_url(), $comment->id)) - ->updated(atom::unix_to_internet_timestamp($comment->datetime)) - ->title(sprintf(_("Comment #%d"), $comment->id)) - ->content($comment->text, "html") + ->updated($comment->datetime) + ->title(sprintf(_("Comment #%d"), $comments->count() - $id)) + ->content($comment->text) ->author() ->name($comment->author) ->email($comment->email) ->uri(sprintf("%susers/%s", atom::get_base_url(), $comment->id)); } - $item_id = $comment->item_id; - - $feed->id($absolute_url) - ->title(sprintf(_("Comments on photo %d"), $item_id), "text") - ->updated(atom::unix_to_internet_timestamp($latest_comment)); - $feed->link() - ->rel("related") - ->type("application/atom+xml") - ->title(_("Get photo meta data")) - ->href(sprintf("%sphotos/%s", atom::get_base_url(), $item_id)); - $feed->link() - ->rel("related") - ->type("image/jpeg") - ->title("Download photo") - ->href(sprintf("%sphotos/%s", atom::get_base_url(), $item_id)); - return $feed->as_xml(); } |