diff options
Diffstat (limited to 'modules/comment')
-rw-r--r-- | modules/comment/controllers/comments.php | 22 | ||||
-rw-r--r-- | modules/comment/helpers/comment.php | 135 | ||||
-rw-r--r-- | modules/comment/helpers/comment_installer.php | 27 | ||||
-rw-r--r-- | modules/comment/js/comment.js | 2 | ||||
-rw-r--r-- | modules/comment/models/comment.php | 37 | ||||
-rw-r--r-- | modules/comment/views/admin_comments.html.php | 22 | ||||
-rw-r--r-- | modules/comment/views/comment.html.php | 8 | ||||
-rw-r--r-- | modules/comment/views/comments.html.php | 10 |
8 files changed, 149 insertions, 114 deletions
diff --git a/modules/comment/controllers/comments.php b/modules/comment/controllers/comments.php index 1bf1a9e2..998ed1ac 100644 --- a/modules/comment/controllers/comments.php +++ b/modules/comment/controllers/comments.php @@ -60,11 +60,12 @@ class Comments_Controller extends REST_Controller { $form = comment::get_add_form($item); if ($form->validate()) { - $comment = comment::create($this->input->post("author"), - $this->input->post("email"), - $this->input->post("text"), - $this->input->post("item_id"), - $this->input->post("url")); + $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); print json_encode( array("result" => "success", @@ -111,11 +112,12 @@ class Comments_Controller extends REST_Controller { $form = comment::get_edit_form($comment); if ($form->validate()) { - $comment = comment::update($comment, - $this->input->post("author"), - $this->input->post("email"), - $this->input->post("text"), - $this->input->post("url")); + $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(); + module::event("comment_updated", $comment); print json_encode( array("result" => "success", diff --git a/modules/comment/helpers/comment.php b/modules/comment/helpers/comment.php index 3b6c0240..2adbc218 100644 --- a/modules/comment/helpers/comment.php +++ b/modules/comment/helpers/comment.php @@ -24,102 +24,95 @@ * Note: by design, this class does not do any permission checking. */ class comment_Core { - const SECONDS_IN_A_MINUTE = 60; - const SECONDS_IN_AN_HOUR = 3600; - const SECONDS_IN_A_DAY = 86400; - const SECONDS_IN_A_MONTH = 2629744; - const SECONDS_IN_A_YEAR = 31556926; - /** * Create a new comment. - * @param string $author author's name - * @param string $email author's email - * @param string $text comment body - * @param integer $item_id id of parent item - * @param string $url author's url + * @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($author, $email, $text, $item_id, $url=null) { + static function create($item, $author, $text, $guest_name=null, + $guest_email=ull, $guest_url=null) { $comment = ORM::factory("comment"); - $comment->author = $author; - $comment->email = $email; - $comment->text = $text; - $comment->item_id = $item_id; - $comment->url = $url; - $comment->ip_addr = Input::instance()->ip_address(); - $comment->user_agent = Kohana::$user_agent; + $comment->author_id = $author->id; $comment->created = time(); - - // @todo Figure out how to mock up the test of the spam_filter - if (module::is_installed("spam_filter") && TEST_MODE == 0) { - try { - SpamFilter::instance()->check_comment($comment); - } catch (Exception $e) { - Kohana::log("error", print_r($e, 1)); - $comment->state = "unpublished"; - } - } else { - $comment->state = "published"; - } - - $comment->save(); - module::event("comment_created", $comment); - - return $comment; - } - - /** - * Update an existing comment. - * @param Comment_Model $comment - * @param string $author author's name - * @param string $email author's email - * @param string $text comment body - * @param string $url author's url - * @return Comment_Model - */ - static function update($comment, $author, $email, $text, $url) { - $comment->author = $author; - $comment->email = $email; + $comment->guest_email = $guest_email; + $comment->guest_name = $guest_name; + $comment->guest_url = $guest_url; + $comment->item_id = $item->id; $comment->text = $text; - $comment->url = $url; - $comment->ip_addr = Input::instance()->ip_address(); - $comment->user_agent = Kohana::$user_agent; + $comment->state = "published"; - // @todo Figure out how to mock up the test of the spam_filter - if (module::is_installed("spam_filter") && TEST_MODE == 0) { - SpamFilter::instance()->check_comment($comment); - } + // These values are useful for spam fighting, so save them with the comment. + $input = Input::instance(); + $comment->server_http_accept = $input->server("HTTP_ACCEPT"); + $comment->server_http_accept_charset = $input->server("SERVER_HTTP_ACCEPT_CHARSET"); + $comment->server_http_accept_encoding = $input->server("HTTP_ACCEPT_ENCODING"); + $comment->server_http_accept_language = $input->server("HTTP_ACCEPT_LANGUAGE"); + $comment->server_http_connection = $input->server("HTTP_CONNECTION"); + $comment->server_http_host = $input->server("HTTP_HOST"); + $comment->server_http_referer = $input->server("HTTP_REFERER"); + $comment->server_http_user_agent = $input->server("HTTP_USER_AGENT"); + $comment->server_query_string = $input->server("QUERY_STRING"); + $comment->server_remote_addr = $input->server("REMOTE_ADDR"); + $comment->server_remote_host = $input->server("REMOTE_HOST"); + $comment->server_remote_port = $input->server("REMOTE_PORT"); $comment->save(); - if ($comment->saved) { - module::event("comment_updated", $comment); - } - + module::event("comment_created", $comment); return $comment; } static function get_add_form($item) { $form = new Forge("comments", "", "post"); $group = $form->group("add_comment")->label(t("Add comment")); - $group->input("author") ->label(t("Author")) ->id("gAuthor"); - $group->input("email") ->label(t("Email")) ->id("gEmail"); - $group->input("url") ->label(t("Website (hidden)"))->id("gUrl"); - $group->textarea("text") ->label(t("Text")) ->id("gText"); + $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); $group->submit(t("Add")); - $form->add_rules_from(ORM::factory("comment")); + + // Forge will try to reload any pre-seeded values upon validation if it's a post request, so + // force validation before seeding values. + // @todo make that an option in Forge + if (request::method() == "post") { + $form->validate(); + } + + $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"); + } + return $form; } static function get_edit_form($comment) { $form = new Forge("comments/{$comment->id}?_method=put", "", "post"); $group = $form->group("edit_comment")->label(t("Edit comment")); - $group->input("author") ->label(t("Author")) ->id("gAuthor")->value($comment->author); - $group->input("email") ->label(t("Email")) ->id("gEmail") ->value($comment->email); - $group->input("url") ->label(t("Website (hidden)"))->id("gUrl") ->value($comment->url); - $group->textarea("text")->label(t("Text")) ->id("gText") ->value($comment->text); + $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(t("Edit")); - $form->add_rules_from($comment); + + $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/helpers/comment_installer.php b/modules/comment/helpers/comment_installer.php index 08be8c29..30c8874d 100644 --- a/modules/comment/helpers/comment_installer.php +++ b/modules/comment/helpers/comment_installer.php @@ -24,18 +24,27 @@ class comment_installer { if ($version == 0) { $db->query("CREATE TABLE IF NOT EXISTS `comments` ( - `id` int(9) NOT NULL auto_increment, - `author` varchar(128) default NULL, - `email` varchar(128) default NULL, - `text` text, + `author_id` int(9) default NULL, `created` int(9) NOT NULL, + `guest_email` varchar(128) default NULL, + `guest_name` varchar(128) default NULL, + `guest_url` varchar(255) default NULL, + `id` int(9) NOT NULL auto_increment, `item_id` int(9) NOT NULL, - `url` varchar(255) default NULL, + `server_http_accept_charset` varchar(64) default NULL, + `server_http_accept_encoding` varchar(64) default NULL, + `server_http_accept_language` varchar(64) default NULL, + `server_http_accept` varchar(64) default NULL, + `server_http_connection` varchar(64) default NULL, + `server_http_host` varchar(64) default NULL, + `server_http_referer` varchar(255) default NULL, + `server_http_user_agent` varchar(64) default NULL, + `server_query_string` varchar(64) default NULL, + `server_remote_addr` varchar(32) default NULL, + `server_remote_host` varchar(64) default NULL, + `server_remote_port` varchar(16) default NULL, `state` char(15) default 'unpublished', - `ip_addr` char(15) default NULL, - `user_agent` varchar(255) default NULL, - `spam_signature` varchar(255) default NULL, - `spam_type` char(15) default NULL, + `text` text, PRIMARY KEY (`id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8;"); diff --git a/modules/comment/js/comment.js b/modules/comment/js/comment.js index c5b14636..2cf6a576 100644 --- a/modules/comment/js/comment.js +++ b/modules/comment/js/comment.js @@ -15,7 +15,7 @@ function ajaxify_comment_form() { $("#gComments .gBlockContent ul:first").append("<li>"+data+"</li>"); $("#gComments .gBlockContent ul:first li:last").hide().slideDown(); }); - $("#gComments form").clearForm(); + $("#gComments form").resetForm(); } } }); diff --git a/modules/comment/models/comment.php b/modules/comment/models/comment.php index cd7a5d07..c83b2721 100644 --- a/modules/comment/models/comment.php +++ b/modules/comment/models/comment.php @@ -18,13 +18,38 @@ * Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ class Comment_Model extends ORM { - var $rules = array( - "author" => "required", - "email" => "valid_email", - "url" => "valid_url", - "text" => "required"); - function item() { return ORM::factory("item", $this->item_id); } + + function author() { + return user::lookup($this->author_id); + } + + function author_name() { + $author = $this->author(); + if ($author->guest) { + return $this->guest_name; + } else { + return $author->full_name; + } + } + + function author_email() { + $author = $this->author(); + if ($author->guest) { + return $this->guest_email; + } else { + return $author->email; + } + } + + function author_url() { + $author = $this->author(); + if ($author->guest) { + return $this->guest_url; + } else { + return $author->url; + } + } } diff --git a/modules/comment/views/admin_comments.html.php b/modules/comment/views/admin_comments.html.php index d2c17f71..311a27c9 100644 --- a/modules/comment/views/admin_comments.html.php +++ b/modules/comment/views/admin_comments.html.php @@ -30,11 +30,13 @@ <? if ($queue == "spam"): ?> <div> + <? if ($spam_caught > 0): ?> <p> <?= t(array("one" => "Gallery has caught {{count}} spam for you since you installed spam filtering.", "other" => "Gallery has caught {{count}} spam for you since you installed spam filtering."), array("count" => $spam_caught)) ?> </p> + <? endif ?> <p> <? if ($spam->count()): ?> <?= t(array("one" => "There is currently one comment in your spam queue. You can delete it with a single click, but there is no undo operation so you may want to check the message first to make sure that it really is spam.", @@ -51,7 +53,7 @@ </p> </div> <? endif ?> - + <form id="gBulkAction" action="#" method="post"> <label for="bulk_actions"><?= t("Bulk actions")?></label> <select id="bulk_actions"> @@ -61,7 +63,7 @@ <option><?= t("Delete")?></option> </select> <input type="submit" value="Apply" /> - + <table id="gAdminCommentsList"> <tr> <th> @@ -90,9 +92,9 @@ </td> <td> <a href="#"><img src="<?= $theme->url("images/avatar.jpg") ?>" - alt="<?= $comment->author ?>"/></a><br/> - <a href="mailto:<?= $comment->email ?>" - title="<?= $comment->email ?>"> <?= $comment->author ?> </a> + alt="<?= $comment->author_name() ?>"/></a><br/> + <a href="mailto:<?= $comment->author_email() ?>" + title="<?= $comment->author_email() ?>"> <?= $comment->author_name() ?> </a> </td> <td> <?= $comment->text ?> @@ -109,7 +111,7 @@ </a> </li> <? endif ?> - + <? if ($comment->state != "published"): ?> <li> <a href="javascript:set_state('published',<?=$comment->id?>)"> @@ -117,7 +119,7 @@ </a> </li> <? endif ?> - + <? if ($comment->state != "spam"): ?> <li> <a href="javascript:set_state('spam',<?=$comment->id?>)"> @@ -125,7 +127,7 @@ </a> </li> <? endif ?> - + <li> <a href="javascript:reply(<?=$comment->id?>)"> <?= t("Reply") ?> @@ -157,8 +159,8 @@ <? endforeach ?> </table> </form> - - + + <div class="pager"> <?= $pager ?> </div> diff --git a/modules/comment/views/comment.html.php b/modules/comment/views/comment.html.php index fc53fefa..59b00b73 100644 --- a/modules/comment/views/comment.html.php +++ b/modules/comment/views/comment.html.php @@ -1,10 +1,12 @@ <?php defined("SYSPATH") or die("No direct script access.") ?> <li id="gComment-<?= $comment->id; ?>"> <p class="gAuthor"> - <a href="#"><img src="<?= $theme->url("images/avatar.jpg") ?>" - class="gAvatar" alt="<?= $comment->author ?>" /></a> + <a href="#"> + <img src="<?= $theme->url("images/avatar.jpg") ?>" + class="gAvatar" alt="<?= $comment->author_name() ?>" /> + </a> <?= t("on ") . date("Y-M-d H:i:s", $comment->created) ?> - <a href="#"><?= $comment->author ?></a> <?= t("said") ?> + <a href="#"><?= $comment->author_name() ?></a> <?= t("said") ?> </p> <div> <?= $comment->text ?> diff --git a/modules/comment/views/comments.html.php b/modules/comment/views/comments.html.php index 6c319317..7f82241e 100644 --- a/modules/comment/views/comments.html.php +++ b/modules/comment/views/comments.html.php @@ -2,11 +2,13 @@ <a name="comments"></a> <ul id="gComments"> <? foreach ($comments as $comment): ?> - <li id="gComment-<?= $comment->id; ?>"> + <li id="gComment-<?= $comment->id ?>"> <p class="gAuthor"> - <a href="#"><img src="<?= $theme->url("images/avatar.jpg") ?>" class="gAvatar" alt="<?= $comment->author ?>" /></a> - <?= t("on ") . date("Y-M-d H:i:s", $comment->created) ?> - <a href="#"><?= $comment->author ?></a> <?= t("said") ?> + <a href="#"> + <img src="<?= $theme->url("images/avatar.jpg") ?>" + class="gAvatar" alt="<?= $comment->author_name() ?>" /> + </a> + <? printf(t("on %s <a href=#>%s</a> said"), date("Y-M-d H:i:s", $comment->created), $comment->author_name()) ?> </p> <div> <?= $comment->text ?> |