summaryrefslogtreecommitdiff
path: root/modules/comment/controllers
diff options
context:
space:
mode:
authorBharat Mediratta <bharat@menalto.com>2009-01-08 02:50:23 +0000
committerBharat Mediratta <bharat@menalto.com>2009-01-08 02:50:23 +0000
commit8bf388a6f671faba94f46ad9e982139c211378ee (patch)
tree5298fd100ff25a24e07a177d6fc7835a0ae0d39d /modules/comment/controllers
parent3d4cf6f27eb11ec3168fcc173a50de297006c7a8 (diff)
Incremental improvement in comment moderation:
1) Akismet now detects when we change a comment's published state and submits info back to akismet.com as appropriate 2) We now show 4 different queues (all / approved / unapproved / spam) and let you move messages between the queues 3) We track and display "spam caught" stats. 4) You can delete comments entirely.
Diffstat (limited to 'modules/comment/controllers')
-rw-r--r--modules/comment/controllers/admin_comments.php107
1 files changed, 85 insertions, 22 deletions
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");
}
}