content = new View("admin_comments.html"); $view->content->published = $this->_query(array("published")); $view->content->unpublished = $this->_query(array("unpublished")); $view->content->spam = $this->_query(array("spam")); $view->content->deleted = $this->_query(array("deleted")); $view->content->menu = Menu::factory("root") ->append(Menu::factory("link") ->id("unpublished") ->label(t(array("one" => "Awaiting Moderation ({{count}})", "other" => "Awaiting Moderation ({{count}})"), array("count" => $view->content->unpublished->count()))) ->url(url::site("admin/comments/queue/unpublished"))) ->append(Menu::factory("link") ->id("published") ->label(t(array("one" => "Approved ({{count}})", "other" => "Approved ({{count}})"), array("count" => $view->content->published->count()))) ->url(url::site("admin/comments/queue/published"))) ->append(Menu::factory("link") ->id("spam") ->label(t(array("one" => "Spam ({{count}})", "other" => "Spam ({{count}})"), array("count" => $view->content->spam->count()))) ->url(url::site("admin/comments/queue/spam"))) ->append(Menu::factory("link") ->id("deleted") ->label(t(array("one" => "Recently Deleted ({{count}})", "other" => "Recently Deleted ({{count}})"), array("count" => $view->content->deleted->count()))) ->url(url::site("admin/comments/queue/deleted"))); return $view; } public function index() { // Get rid of old deleted/spam comments Database::instance()->query( "DELETE FROM `comments` " . "WHERE state IN ('deleted', 'spam') " . "AND unix_timestamp(now()) - updated > 86400 * 7"); $this->queue("unpublished"); } public function menu_labels($state) { $view = $this->_get_base_view(); print json_encode(array($view->content->menu->get("unpublished")->label, $view->content->menu->get("published")->label, $view->content->menu->get("spam")->label, $view->content->menu->get("deleted")->label)); } public function queue($state) { $view = $this->_get_base_view(); switch ($state) { case "published": $view->content->comments = $view->content->published; $view->content->title = t("Approved Comments"); break; case "unpublished": $view->content->comments = $view->content->unpublished; $view->content->title = t("Comments Awaiting Moderation"); break; case "spam": $view->content->title = t("Spam Comments"); $view->content->comments = $view->content->spam; $view->content->spam_caught = module::get_var("comment", "spam_caught"); break; case "deleted": $view->content->title = t("Recently Deleted Comments"); $view->content->comments = $view->content->deleted; 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; } private function _query($states) { $query = ORM::factory("comment") ->orderby("created", "DESC"); if ($states) { $query->in("state", $states); } return $query->find_all(); } 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 delete_all_spam() { access::verify_csrf(); ORM::factory("comment") ->where("state", "spam") ->delete_all(); url::redirect("admin/comments/queue/spam"); } }