Roll comment functionality into the three_nids controllers and
helpers.
This commit is contained in:
parent
fbe35b1658
commit
2080cc531e
@ -1,186 +0,0 @@
|
||||
<?php defined("SYSPATH") or die("No direct script access.");
|
||||
/**
|
||||
* Gallery - a web based photo album viewer and editor
|
||||
* Copyright (C) 2000-2009 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 Comments_three_nids_Controller extends Items_Controller {
|
||||
|
||||
public function _index() {
|
||||
$item_id = $this->input->get('item_id');
|
||||
$item = ORM::factory("item", $item_id);
|
||||
access::required("view", $item);
|
||||
|
||||
$comments = ORM::factory("comment")
|
||||
->where("item_id", $item->id)
|
||||
->where("state", "published")
|
||||
->orderby("created", "ASC")
|
||||
->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", "page");
|
||||
$view->comments = $comments;
|
||||
$view->item_id = $item_id;
|
||||
$view->thumb = $item->thumb_url();
|
||||
print $view;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 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"));
|
||||
access::required("view", $item);
|
||||
|
||||
$form = comment_three_nids::get_add_form($item);
|
||||
$valid = $form->validate();
|
||||
if ($valid) {
|
||||
if (user::active()->guest && !$form->add_comment->inputs["name"]->value) {
|
||||
$form->add_comment->inputs["name"]->add_error("missing", 1);
|
||||
$valid = false;
|
||||
}
|
||||
|
||||
if (!$form->add_comment->text->value) {
|
||||
$form->add_comment->text->add_error("missing", 1);
|
||||
$valid = false;
|
||||
}
|
||||
}
|
||||
|
||||
if ($valid) {
|
||||
$comment = comment::create(
|
||||
$item, user::active(),
|
||||
$form->add_comment->text->value,
|
||||
$form->add_comment->inputs["name"]->value,
|
||||
$form->add_comment->email->value,
|
||||
$form->add_comment->url->value);
|
||||
|
||||
$active = user::active();
|
||||
if ($active->guest) {
|
||||
$form->add_comment->inputs["name"]->value("");
|
||||
$form->add_comment->email->value("");
|
||||
$form->add_comment->url->value("");
|
||||
} else {
|
||||
$form->add_comment->inputs["name"]->value($active->full_name);
|
||||
$form->add_comment->email->value($active->email);
|
||||
$form->add_comment->url->value($active->url);
|
||||
}
|
||||
}
|
||||
url::redirect(url::site("comments_three_nids?item_id=".$item->id));
|
||||
}
|
||||
/**
|
||||
* 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", "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_three_nids::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}")));
|
||||
} else {
|
||||
print json_encode(
|
||||
array("result" => "error",
|
||||
"html" => $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) {
|
||||
$item = ORM::factory("item", $item_id);
|
||||
access::required("view", $item);
|
||||
|
||||
print comment_three_nids::get_add_form($item);
|
||||
}
|
||||
|
||||
/**
|
||||
* Present a form for editing an existing comment.
|
||||
* @see REST_Controller::form_edit($resource)
|
||||
*/
|
||||
public function _form_edit($comment) {
|
||||
if (!user::active()->admin) {
|
||||
access::forbidden();
|
||||
}
|
||||
print comment_three_nids::get_edit_form($comment);
|
||||
}
|
||||
}
|
36
themes/three_nids/controllers/three_nids.php
Normal file
36
themes/three_nids/controllers/three_nids.php
Normal file
@ -0,0 +1,36 @@
|
||||
<?php defined("SYSPATH") or die("No direct script access.");
|
||||
/**
|
||||
* Gallery - a web based photo album viewer and editor
|
||||
* Copyright (C) 2000-2009 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 Three_Nids_Controller extends Controller {
|
||||
public function show_comments($id) {
|
||||
$item = ORM::factory("item", $id);
|
||||
access::required("view", $item);
|
||||
|
||||
$comments = ORM::factory("comment")
|
||||
->where("item_id", $item->id)
|
||||
->where("state", "published")
|
||||
->orderby("created", "ASC")
|
||||
->find_all();
|
||||
|
||||
$v = new Theme_View("comments.html", "other", "comment-fragment");
|
||||
$v->comments = $comments;
|
||||
$v->item = $item;
|
||||
print $v;
|
||||
}
|
||||
}
|
@ -1,128 +0,0 @@
|
||||
<?php defined("SYSPATH") or die("No direct script access.");
|
||||
/**
|
||||
* Gallery - a web based photo album viewer and editor
|
||||
* Copyright (C) 2000-2009 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 is the API for handling comments.
|
||||
*
|
||||
* Note: by design, this class does not do any permission checking.
|
||||
*/
|
||||
class comment_three_nids_Core {
|
||||
|
||||
public function count($item) {
|
||||
access::required("view", $item);
|
||||
|
||||
$comments = ORM::factory("comment")
|
||||
->where("item_id", $item->id)
|
||||
->where("state", "published")
|
||||
->orderby("created", "DESC")
|
||||
->find_all();
|
||||
|
||||
return $comments->count();
|
||||
}
|
||||
|
||||
/**
|
||||
* Create a new comment.
|
||||
* @param Item_MOdel $item the parent item
|
||||
* @param User_Model $author the author User_Model
|
||||
* @param string $text comment body
|
||||
* @param string $guest_name guest's name (if the author is a guest user, default empty)
|
||||
* @param string $guest_email guest's email (if the author is a guest user, default empty)
|
||||
* @param string $guest_url guest's url (if the author is a guest user, default empty)
|
||||
* @return Comment_Model
|
||||
*/
|
||||
static function create($item, $author, $text, $guest_name=null,
|
||||
$guest_email=null, $guest_url=null) {
|
||||
$comment = ORM::factory("comment");
|
||||
$comment->author_id = $author->id;
|
||||
$comment->guest_email = $guest_email;
|
||||
$comment->guest_name = $guest_name;
|
||||
$comment->guest_url = $guest_url;
|
||||
$comment->item_id = $item->id;
|
||||
$comment->text = $text;
|
||||
$comment->state = "published";
|
||||
|
||||
// These values are useful for spam fighting, so save them with the comment.
|
||||
$input = Input::instance();
|
||||
$comment->server_http_accept = substr($input->server("HTTP_ACCEPT"), 0, 128);
|
||||
$comment->server_http_accept_charset = substr($input->server("HTTP_ACCEPT_CHARSET"), 0, 64);
|
||||
$comment->server_http_accept_encoding = substr($input->server("HTTP_ACCEPT_ENCODING"), 0, 64);
|
||||
$comment->server_http_accept_language = substr($input->server("HTTP_ACCEPT_LANGUAGE"), 0, 64);
|
||||
$comment->server_http_connection = substr($input->server("HTTP_CONNECTION"), 0, 64);
|
||||
$comment->server_http_host = substr($input->server("HTTP_HOST"), 0, 64);
|
||||
$comment->server_http_referer = substr($input->server("HTTP_REFERER"), 0, 255);
|
||||
$comment->server_http_user_agent = substr($input->server("HTTP_USER_AGENT"), 0, 128);
|
||||
$comment->server_query_string = substr($input->server("QUERY_STRING"), 0, 64);
|
||||
$comment->server_remote_addr = substr($input->server("REMOTE_ADDR"), 0, 32);
|
||||
$comment->server_remote_host = substr($input->server("REMOTE_HOST"), 0, 64);
|
||||
$comment->server_remote_port = substr($input->server("REMOTE_PORT"), 0, 16);
|
||||
$comment->save();
|
||||
|
||||
return $comment;
|
||||
}
|
||||
|
||||
static function get_add_form($item) {
|
||||
$form = new Forge("comments_three_nids?item_id=".$item->id, "", "post", array("id" => "gAddCommentForm"));
|
||||
$group = $form->group("add_comment")->label(t("Add comment"));
|
||||
$group->input("name") ->label(t("Name")) ->id("gAuthor");
|
||||
$group->input("email") ->label(t("Email (hidden)")) ->id("gEmail");
|
||||
$group->input("url") ->label(t("Website (hidden)"))->id("gUrl");
|
||||
$group->textarea("text")->label(t("Comment")) ->id("gText");
|
||||
$group->hidden("item_id")->value($item->id);
|
||||
module::event("comment_add_form", $form);
|
||||
$group->submit("")->value(t("Add")) ->class("gButtonLink ui-corner-all ui-icon-left ui-state-default");
|
||||
|
||||
$active = user::active();
|
||||
if (!$active->guest) {
|
||||
$group->inputs["name"]->value($active->full_name)->disabled("disabled");
|
||||
$group->email->value($active->email)->disabled("disabled");
|
||||
$group->url->value($active->url)->disabled("disabled");
|
||||
} else {
|
||||
$group->inputs["name"]->error_messages("missing", t("You must provide a name"));
|
||||
}
|
||||
$group->text->error_messages("missing", t("You must provide a comment"));
|
||||
|
||||
return $form;
|
||||
}
|
||||
|
||||
static function get_edit_form($comment) {
|
||||
$form = new Forge("comments/{$comment->id}?_method=put", "", "post",
|
||||
array("id" => "gEditCommentForm"));
|
||||
$group = $form->group("edit_comment")->label(t("Edit comment"));
|
||||
$group->input("name") ->label(t("Author")) ->id("gAuthor");
|
||||
$group->input("email") ->label(t("Email (hidden)")) ->id("gEmail");
|
||||
$group->input("url") ->label(t("Website (hidden)"))->id("gUrl");
|
||||
$group->textarea("text")->label(t("Comment")) ->id("gText");
|
||||
$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;
|
||||
}
|
||||
}
|
||||
|
@ -64,8 +64,8 @@ class three_nids_Core {
|
||||
$fancymodule .= "exif::" . url::site("exif/show/{$item->id}") . ";;";
|
||||
}
|
||||
if (module::is_active("comment")) {
|
||||
$fancymodule .= "comment::" . url::site("comments_three_nids?item_id={$item->id}") .
|
||||
";;comment_count::" . comment_three_nids::count($item) . ";;";
|
||||
$fancymodule .= "comment::" . url::site("three_nids/show_comments/{$item->id}") .
|
||||
";;comment_count::" . three_nids::comment_count($item) . ";;";
|
||||
}
|
||||
if ($item->is_photo()){
|
||||
$link .= "<a href=\"" . url::site("photos/{$item->id}") ."/?w=" . $width .
|
||||
@ -102,8 +102,8 @@ class three_nids_Core {
|
||||
if (($item->is_photo() || $item->is_movie()) && $display_comment &&
|
||||
module::is_active("comment")) {
|
||||
$link .= "<ul class=\"g-metadata\"><li><a href=\"" .
|
||||
url::site("comments_three_nids?item_id={$item->id}") .
|
||||
"\" class=\"iframe fancyclass g-hidden\">" . comment_three_nids::count($item) .
|
||||
url::site("three_nids/show_comments/{$item->id}") .
|
||||
"\" class=\"iframe fancyclass g-hidden\">" . three_nids::comment_count($item) .
|
||||
" " . t("comments") . "</a></li></ul>";
|
||||
}
|
||||
} else {
|
||||
@ -111,5 +111,15 @@ class three_nids_Core {
|
||||
}
|
||||
return $link;
|
||||
}
|
||||
|
||||
public function comment_count($item) {
|
||||
access::required("view", $item);
|
||||
|
||||
return ORM::factory("comment")
|
||||
->where("item_id", $item->id)
|
||||
->where("state", "published")
|
||||
->orderby("created", "DESC")
|
||||
->count_all();
|
||||
}
|
||||
}
|
||||
?>
|
@ -30,9 +30,9 @@
|
||||
</head>
|
||||
<body class="g-fancy-iframe-body">
|
||||
<div class="g-comment-thumb">
|
||||
<img src="<?=$thumb?>"/>
|
||||
<?= $item->thumb_img() ?>
|
||||
</div>
|
||||
<a href="<?= url::site("form/add/comments_three_nids/{$item_id}") ?>" id="g-admin-comment-button"
|
||||
<a href="<?= url::site("form/add/comments/{$item->id}") ?>" id="g-admin-comment-button"
|
||||
class="g-button ui-corner-all ui-icon-left ui-state-default right">
|
||||
<span class="ui-icon ui-icon-comment"></span>
|
||||
<?= t("Add a comment") ?>
|
||||
|
Reference in New Issue
Block a user