diff options
author | Tim Almdal <tnalmdal@shaw.ca> | 2009-11-25 08:05:21 -0800 |
---|---|---|
committer | Tim Almdal <tnalmdal@shaw.ca> | 2009-11-25 08:12:50 -0800 |
commit | 4c3b9e363ab1501bf3169d92f5606abf464c2d5e (patch) | |
tree | 1be0d88b900558895b0e7e1bb5f513fbff6b1348 | |
parent | 82ee5f9d338017c69331b2907f37a468ced8c66e (diff) |
Refactor the comment module as part of ticket: #917 "Remove Rest Controller"
* Remove the methods create, update, delete, get_edit_form as there are not used
* Change the return when a comment is created to return the html for the new comment.
This saves a second get request to down load the comment.
-rw-r--r-- | modules/comment/controllers/comments.php | 129 | ||||
-rw-r--r-- | modules/comment/helpers/comment.php | 26 | ||||
-rw-r--r-- | modules/comment/js/comment.js | 21 | ||||
-rw-r--r-- | modules/comment/views/comment.html.php | 4 | ||||
-rw-r--r-- | modules/gallery/tests/controller_auth_data.txt | 1 |
5 files changed, 20 insertions, 161 deletions
diff --git a/modules/comment/controllers/comments.php b/modules/comment/controllers/comments.php index 74e0c974..068152a2 100644 --- a/modules/comment/controllers/comments.php +++ b/modules/comment/controllers/comments.php @@ -17,49 +17,12 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ -class Comments_Controller extends REST_Controller { - protected $resource_type = "comment"; - - /** - * Display comments based on criteria. - * @see REST_Controller::_index() - */ - public function _index() { - $item = ORM::factory("item", $this->input->get('item_id')); - access::required("view", $item); - - $comments = ORM::factory("comment") - ->where("item_id", $item->id) - ->where("state", "published") - ->orderby("created", "DESC") - ->find_all(); - - switch (rest::output_format()) { - case "json": - foreach ($comments as $comment) { - $data[] = array( - "id" => $comment->id, - "author_name" => html::clean($comment->author_name()), - "created" => $comment->created, - "text" => nl2br(html::purify($comment->text))); - } - print json_encode($data); - break; - - case "html": - $view = new Theme_View("comments.html", "other", "comment"); - $view->comments = $comments; - print $view; - break; - } - } - +class Comments_Controller extends Controller { /** * Add a new comment to the collection. - * @see REST_Controller::_create($resource) */ - public function _create($comment) { - $item = ORM::factory("item", $this->input->post("item_id")); + public function create($id) { + $item = ORM::factory("item", $id); access::required("view", $item); $form = comment::get_add_form($item); @@ -96,105 +59,27 @@ class Comments_Controller extends REST_Controller { } $form->add_comment->text->value(""); - print json_encode( - array("result" => "success", - "resource" => ($comment->state == "published" - ? url::site("comments/{$comment->id}") - : null), - "form" => $form->__toString())); - } else { - print json_encode( - array("result" => "error", - "form" => $form->__toString())); - } - } - - /** - * Display an existing comment. - * @todo Set proper Content-Type in a central place (REST_Controller::dispatch?). - * @see REST_Controller::_show($resource) - */ - public function _show($comment) { - $item = ORM::factory("item", $comment->item_id); - access::required("view", $item); - if ($comment->state != "published") { - return; - } - - if (rest::output_format() == "json") { - print json_encode( - array("result" => "success", - "data" => array( - "id" => $comment->id, - "author_name" => html::clean($comment->author_name()), - "created" => $comment->created, - "text" => nl2br(html::purify($comment->text))))); - } else { $view = new Theme_View("comment.html", "other", "comment-fragment"); $view->comment = $comment; - print $view; - } - } - - /** - * Change an existing comment. - * @see REST_Controller::_update($resource) - */ - public function _update($comment) { - $item = ORM::factory("item", $comment->item_id); - access::required("view", $item); - access::required("edit", $item); - - $form = comment::get_edit_form($comment); - if ($form->validate()) { - $comment->guest_name = $form->edit_comment->inputs["name"]->value; - $comment->guest_email = $form->edit_comment->email->value; - $comment->url = $form->edit_comment->url->value; - $comment->text = $form->edit_comment->text->value; - $comment->save(); print json_encode( array("result" => "success", - "resource" => url::site("comments/{$comment->id}"))); + "view" => $view->__toString(), + "form" => $form->__toString())); } else { print json_encode( array("result" => "error", - "html" => $form->__toString())); + "form" => $form->__toString())); } } /** - * Delete existing comment. - * @see REST_Controller::_delete($resource) - */ - public function _delete($comment) { - $item = ORM::factory("item", $comment->item_id); - access::required("view", $item); - access::required("edit", $item); - - $comment->delete(); - print json_encode(array("result" => "success")); - } - - /** * Present a form for adding a new comment to this item or editing an existing comment. - * @see REST_Controller::form_add($resource) */ - public function _form_add($item_id) { + public function form_add($item_id) { $item = ORM::factory("item", $item_id); access::required("view", $item); print comment::get_add_form($item); } - - /** - * Present a form for editing an existing comment. - * @see REST_Controller::form_edit($resource) - */ - public function _form_edit($comment) { - if (!identity::active_user()->admin) { - access::forbidden(); - } - print comment::get_edit_form($comment); - } } diff --git a/modules/comment/helpers/comment.php b/modules/comment/helpers/comment.php index 35685d8c..1e1e7d2f 100644 --- a/modules/comment/helpers/comment.php +++ b/modules/comment/helpers/comment.php @@ -65,7 +65,7 @@ class comment_Core { } static function get_add_form($item) { - $form = new Forge("comments", "", "post", array("id" => "g-comment-form")); + $form = new Forge("comments/create/{$item->id}", "", "post", array("id" => "g-comment-form")); $group = $form->group("add_comment")->label(t("Add comment")); $group->input("name") ->label(t("Name")) ->id("g-author"); $group->input("email") ->label(t("Email (hidden)")) ->id("g-email"); @@ -87,29 +87,5 @@ class comment_Core { return $form; } - - static function get_edit_form($comment) { - $form = new Forge("comments/{$comment->id}?_method=put", "", "post", - array("id" => "g-edit-comment-form")); - $group = $form->group("edit_comment")->label(t("Edit comment")); - $group->input("name") ->label(t("Author")) ->id("g-author"); - $group->input("email") ->label(t("Email (hidden)")) ->id("g-email"); - $group->input("url") ->label(t("Website (hidden)"))->id("g-url"); - $group->textarea("text")->label(t("Comment")) ->id("g-text"); - $group->submit("")->value(t("Edit")); - - $group->text = $comment->text; - $author = $comment->author(); - if ($author->guest) { - $group->inputs["name"]->value = $comment->guest_name; - $group->email = $comment->guest_email; - $group->url = $comment->guest_url; - } else { - $group->inputs["name"]->value($author->full_name)->disabled("disabled"); - $group->email->value($author->email)->disabled("disabled"); - $group->url->value($author->url)->disabled("disabled"); - } - return $form; - } } diff --git a/modules/comment/js/comment.js b/modules/comment/js/comment.js index 3f058062..bb204b78 100644 --- a/modules/comment/js/comment.js +++ b/modules/comment/js/comment.js @@ -28,17 +28,16 @@ function ajaxify_comment_form() { $("#g-comments form").ajaxForm({ dataType: "json", success: function(data) { - if (data.form) { - $("#g-comments form").replaceWith(data.form); - ajaxify_comment_form(); - } - if (data.result == "success" && data.resource) { - $.get(data.resource, function(data, textStatus) { - $("#g-comments .g-block-content ul:first").append("<li>"+data+"</li>"); - $("#g-comments .g-block-content ul:first li:last").effect("highlight", {color: "#cfc"}, 8000); - $("#g-comment-form").hide(2000).remove(); - $("#g-no-comments-yet").hide(2000); - }); + if (data.result == "success") { + $("#g-comments #g-comment-detail ul").append(data.view); + $("#g-comments #g-comment-detail ul li:last").effect("highlight", {color: "#cfc"}, 8000); + $("#g-comment-form").hide(2000).remove(); + $("#g-no-comments-yet").hide(2000); + } else { + if (data.form) { + $("#g-comments form").replaceWith(data.form); + ajaxify_comment_form(); + } } } }); diff --git a/modules/comment/views/comment.html.php b/modules/comment/views/comment.html.php index c7957c15..2c485b53 100644 --- a/modules/comment/views/comment.html.php +++ b/modules/comment/views/comment.html.php @@ -8,9 +8,9 @@ width="40" height="40" /> </a> - <?= t("on %date_time, %author_name said", + <?= t("on %date_time, <a href=\"#\">%name</a> said", array("date_time" => gallery::date_time($comment->created), - "author_name" => html::clean($comment->author_name()))) ?> + "name" => html::clean($comment->author_name()))) ?> </p> <div> <?= nl2br(html::purify($comment->text)) ?> diff --git a/modules/gallery/tests/controller_auth_data.txt b/modules/gallery/tests/controller_auth_data.txt index 30102538..c06ddcbf 100644 --- a/modules/gallery/tests/controller_auth_data.txt +++ b/modules/gallery/tests/controller_auth_data.txt @@ -1,5 +1,4 @@ modules/comment/controllers/admin_comments.php queue DIRTY_CSRF -modules/comment/controllers/comments.php _index DIRTY_CSRF modules/comment/helpers/comment_rss.php feed DIRTY_AUTH modules/digibug/controllers/digibug.php print_proxy DIRTY_CSRF|DIRTY_AUTH modules/digibug/controllers/digibug.php close_window DIRTY_AUTH |