summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJozef Selesi <jozefs@users.sourceforge.net>2008-11-23 12:41:41 +0000
committerJozef Selesi <jozefs@users.sourceforge.net>2008-11-23 12:41:41 +0000
commit7485740d9741021b2016df80b225ae4d82b892d0 (patch)
tree9363326a831141fde66c31665af4fb2bacdec3db
parentbdbb115296f4002186ee3a99fadc13988dd1509f (diff)
Changed and extended the Atom library a little so that the code for creating entries and feeds has been considerably simplified and reduced.
-rw-r--r--modules/atom/libraries/Atom_Entry.php7
-rw-r--r--modules/atom/libraries/Atom_Feed.php11
-rw-r--r--modules/atom/libraries/Gallery_Atom_Entry.php39
-rw-r--r--modules/atom/libraries/Gallery_Atom_Feed.php39
-rw-r--r--modules/atom/libraries/Gallery_Atom_Link.php45
-rw-r--r--modules/comment/controllers/comments.php3
-rw-r--r--modules/comment/helpers/comment.php81
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();
}