diff options
Diffstat (limited to 'modules')
-rw-r--r-- | modules/akismet/helpers/akismet.php | 2 | ||||
-rw-r--r-- | modules/akismet/helpers/akismet_event.php | 17 | ||||
-rw-r--r-- | modules/akismet/views/admin_akismet_stats.html.php | 15 | ||||
-rw-r--r-- | modules/comment/controllers/admin_comments.php | 107 | ||||
-rw-r--r-- | modules/comment/helpers/comment_installer.php | 1 | ||||
-rw-r--r-- | modules/comment/views/admin_comments.html.php | 74 |
6 files changed, 176 insertions, 40 deletions
diff --git a/modules/akismet/helpers/akismet.php b/modules/akismet/helpers/akismet.php index 132b9206..b34ed1ac 100644 --- a/modules/akismet/helpers/akismet.php +++ b/modules/akismet/helpers/akismet.php @@ -104,7 +104,7 @@ class akismet_Core { $comment_data["permalink"] = url::site("comments/{$comment->id}"); $comment_data["blog"] = url::base(false, "http"); $comment_data["user_agent"] = $comment->user_agent; - $comment_data["referrer"] = $_SERVER["HTTP_REFERER"]; + $comment_data["referrer"] = !empty($_SERVER["HTTP_REFERER"]) ? $_SERVER["HTTP_REFERER"] : ""; $comment_data["comment_type"] = "comment"; $comment_data["comment_author"] = $comment->author; $comment_data["comment_author_email"] = $comment->email; diff --git a/modules/akismet/helpers/akismet_event.php b/modules/akismet/helpers/akismet_event.php index 8f530faa..2a42acb3 100644 --- a/modules/akismet/helpers/akismet_event.php +++ b/modules/akismet/helpers/akismet_event.php @@ -19,9 +19,14 @@ */ class akismet_event_Core { public static function comment_created($comment) { + if (TEST_MODE) { + return; + } + switch(akismet::check_comment($comment)) { case "spam": $comment->state = "spam"; + module::incr_var("comment", "spam_caught"); break; case "ham": @@ -34,4 +39,16 @@ class akismet_event_Core { } $comment->save(); } + + public static function comment_changed($old, $new) { + if (TEST_MODE) { + return; + } + + if ($old->state != "spam" && $new->state == "spam") { + akismet::submit_spam($new); + } else if ($old->state == "spam" && $new->state != "spam") { + akismet::submit_ham($new); + } + } } diff --git a/modules/akismet/views/admin_akismet_stats.html.php b/modules/akismet/views/admin_akismet_stats.html.php index a7431a18..d82704cd 100644 --- a/modules/akismet/views/admin_akismet_stats.html.php +++ b/modules/akismet/views/admin_akismet_stats.html.php @@ -1,6 +1,11 @@ <?php defined("SYSPATH") or die("No direct script access.") ?> -<iframe width="100%" - height="100%" - style="border: 0px" - src="http://<?= $api_key ?>.web.akismet.com/1.0/user-stats.php?blog=<?= urlencode($blog_url) ?>"> -</iframe> +<script type="text/javscript"> + $(document).ready(function() { + $("#gAkismetExternalStats").css("height", "600"); + }); +</script> +<div id="gAkismetStats"> + <iframe id="gAkismetExternalStats" width="100%" height="100%" frameborder="0" + src="http://<?= $api_key ?>.web.akismet.com/1.0/user-stats.php?blog=<?= urlencode($blog_url) ?>"> + </iframe> +</div> diff --git a/modules/comment/controllers/admin_comments.php b/modules/comment/controllers/admin_comments.php index f518238f..7c88c1d9 100644 --- a/modules/comment/controllers/admin_comments.php +++ b/modules/comment/controllers/admin_comments.php @@ -19,44 +19,107 @@ */ class Admin_Comments_Controller extends Admin_Controller { - private function _get_base_view($state) { + public function index() { + $this->queue("all"); + } + + public function queue($state) { $view = new Admin_View("admin.html"); $view->content = new View("admin_comments.html"); + $view->content->all = $this->_query(array("published", "unpublished")); + $view->content->published = $this->_query(array("published")); + $view->content->unpublished = $this->_query(array("unpublished")); + $view->content->spam = $this->_query(array("spam")); $view->content->menu = Menu::factory("root") ->append(Menu::factory("link") - ->id("published") - ->label(_("Published")) - ->url(url::site("admin/comments/published"))) + ->id("all") + ->label(sprintf(_("All Comments (%d)"), + $view->content->all->count())) + ->url(url::site("admin/comments/queue/all"))) ->append(Menu::factory("link") ->id("unpublished") - ->label(_("Unpublished")) - ->url(url::site("admin/comments/unpublished"))) + ->label(sprintf(_("Awaiting Moderation (%d)"), + $view->content->unpublished->count())) + ->url(url::site("admin/comments/queue/unpublished"))) + ->append(Menu::factory("link") + ->id("published") + ->label(sprintf(_("Approved (%d)"), + $view->content->published->count())) + ->url(url::site("admin/comments/queue/published"))) ->append(Menu::factory("link") ->id("spam") - ->label(_("Spam")) - ->url(url::site("admin/comments/spam"))); - $view->content->comments = ORM::factory("comment") - ->where("state", $state) - ->orderby("created", "DESC") - ->find_all(); - - return $view; + ->label(sprintf(_("Spam (%d)"), $view->content->spam->count())) + ->url(url::site("admin/comments/queue/spam"))); + + switch ($state) { + case "all": + $view->content->comments = $view->content->all; + $view->content->title = _("All Comments"); + break; + + case "published": + $view->content->comments = $view->content->published; + $view->content->title = _("Approved Comments"); + break; + + case "unpublished": + $view->content->comments = $view->content->unpublished; + $view->content->title = _("Comments Awaiting Moderation"); + break; + + case "spam": + $view->content->title = _("Spam Comments"); + $view->content->comments = $view->content->spam; + $view->content->spam_caught = module::get_var("comment", "spam_caught"); + break; + } + + $view->content->queue = $state; + $view->content->pager = new Pagination(); + $view->content->pager->initialize( + array('query_string' => 'page', + 'total_items' => $view->content->comments->count(), + 'items_per_page' => 20, + 'style' => 'classic')); + + print $view; } - public function index() { - return $this->published(); + private function _query($states) { + $query = ORM::factory("comment") + ->orderby("created", "DESC"); + if ($states) { + $query->in("state", $states); + } + return $query->find_all(); } - public function published() { - print $this->_get_base_view("published"); + public function set_state($id, $state) { + access::verify_csrf(); + $comment = ORM::factory("comment", $id); + $orig = clone $comment; + if ($comment->loaded) { + $comment->state = $state; + $comment->save(); + module::event("comment_changed", $orig, $comment); + } } - public function unpublished() { - print $this->_get_base_view("unpublished"); + public function delete($id) { + access::verify_csrf(); + $comment = ORM::factory("comment", $id); + if ($comment->loaded) { + module::event("comment_before_delete", $comment); + $comment->delete(); + } } - public function spam() { - print $this->_get_base_view("spam"); + public function delete_all_spam() { + access::verify_csrf(); + ORM::factory("comment") + ->where("state", "spam") + ->delete_all(); + url::redirect("admin/comments/queue/spam"); } } diff --git a/modules/comment/helpers/comment_installer.php b/modules/comment/helpers/comment_installer.php index dbbb511f..08be8c29 100644 --- a/modules/comment/helpers/comment_installer.php +++ b/modules/comment/helpers/comment_installer.php @@ -39,6 +39,7 @@ class comment_installer { PRIMARY KEY (`id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8;"); + module::set_var("comment", "spam_caught", 0); module::set_version("comment", 1); } } diff --git a/modules/comment/views/admin_comments.html.php b/modules/comment/views/admin_comments.html.php index b8527a46..022b9fee 100644 --- a/modules/comment/views/admin_comments.html.php +++ b/modules/comment/views/admin_comments.html.php @@ -1,18 +1,66 @@ <?php defined("SYSPATH") or die("No direct script access.") ?> +<script type="text/javascript"> + var set_state_url = + "<?= url::site("admin/comments/set_state/__ID__/__STATE__?csrf=" . access::csrf_token()) ?>"; + function set_state(state, id) { + $.get(set_state_url.replace("__STATE__", state).replace("__ID__", id)); + $("#gComment-" + id).slideUp(); + } + + var delete_url = + "<?= url::site("admin/comments/delete/__ID__?csrf=" . access::csrf_token()) ?>"; + function delete(id) { + $.get(delete_url.replace("__ID__", id)); + $("#gComment-" + id).slideUp(); + } +</script> + <div id="gAdminComments"> - <h1> <?= _("Comments") ?> </h1> + <h1> <?= _("Manage Comments") ?> </h1> <div id="gAdminCommentsMenu"> <?= $menu ?> </div> + <!-- @todo: fix this with CSS --> + <div style="clear: both"></div> + + <h2> + <?= $title ?> + </h2> + + + <? if ($queue == "spam"): ?> + <div> + <p> + <? printf(_("Gallery has caught %d spam for you since you installed spam filtering."), $spam_caught) ?> + </p> + <p> + <? if ($spam->count()): ?> + <? printf(_("There are currently %d comments in your spam queue. You can delete them all with a single click, but there is no undo operation so you may want to check the messages first to make sure that they really are spam."), $spam->count()) ?> + </p> + <p> + <a href="<?= url::site("admin/comments/delete_all_spam?csrf=" . access::csrf_token()) ?>"> + <?= _("Delete all spam") ?> + </a> + <? else: ?> + <?= _("Your spam queue is empty!") ?> + <? endif ?> + </p> + </div> + <? endif ?> + + <div class="pager"> + <?= $pager ?> + </div> + <div id="gAdminCommentsList"> <table> <tr> <th> <?= _("Comment") ?> </th> - <th> + <th style="width: 100px"> <?= _("Date") ?> </th> <th> @@ -20,23 +68,27 @@ </th> </tr> <? foreach ($comments as $comment): ?> - <tr> + <tr id="gComment-<?= $comment->id ?>"> <td> <div> + <img src="<?= $theme->url("images/avatar.jpg") ?>"/> <b> <?= $comment->author ?> </b> </div> - <div> - <b> <?= $comment->url ?> </b> | <b> <?= $comment->email ?> </b> - </div> + <ul> + <li> <?= $comment->url ?> </li> + <li> <?= $comment->email ?> </li> + </ul> <div> <?= $comment->text ?> </div> <div> <? $item = $comment->item(); ?> + <a href="<?= $item->url() ?>"> <img src="<?= $item->thumb_url() ?>" alt="<?= $item->title ?>" <?= photo::img_dimensions($item->thumb_width, $item->thumb_height, 75) ?> /> + </a> <?= sprintf(_("Comment left on <a href=\"%s\">%s</a>"), $item->url(), $item->title) ?> </div> </td> @@ -47,7 +99,7 @@ <ul> <? if ($comment->state != "unpublished"): ?> <li> - <a href="<?= url::site("admin/comments/mark/unpublished/$comment->id?csrf=" . access::csrf_token()) ?>"> + <a href="javascript:set_state('unpublished',<?=$comment->id?>)"> <?= _("Unapprove") ?> </a> </li> @@ -55,7 +107,7 @@ <? if ($comment->state != "published"): ?> <li> - <a href="<?= url::site("admin/comments/mark/published/$comment->id?csrf=" . access::csrf_token()) ?>"> + <a href="javascript:set_state('published',<?=$comment->id?>)"> <?= _("Approve") ?> </a> </li> @@ -63,19 +115,17 @@ <? if ($comment->state != "spam"): ?> <li> - <a href="<?= url::site("admin/comments/mark/spam/$comment->id?csrf=" . access::csrf_token()) ?>"> + <a href="javascript:set_state('spam',<?=$comment->id?>)"> <?= _("Spam") ?> </a> </li> <? endif ?> - <? if ($comment->state != "spam"): ?> <li> - <a href="<?= url::site("admin/comments/mark/spam/$comment->id?csrf=" . access::csrf_token()) ?>"> + <a href="javascript:delete(<?=$comment->id?>)"> <?= _("Delete") ?> </a> </li> - <? endif ?> </ul> </td> </tr> |