diff options
Diffstat (limited to 'modules/comment/controllers/admin_comments.php')
| -rw-r--r-- | modules/comment/controllers/admin_comments.php | 131 | 
1 files changed, 59 insertions, 72 deletions
| diff --git a/modules/comment/controllers/admin_comments.php b/modules/comment/controllers/admin_comments.php index c1a30bd2..48a9bf72 100644 --- a/modules/comment/controllers/admin_comments.php +++ b/modules/comment/controllers/admin_comments.php @@ -18,104 +18,91 @@   * Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA  02110-1301, USA.   */  class Admin_Comments_Controller extends Admin_Controller { +  private static $items_per_page = 20; + +  public function index() { +    // Get rid of old deleted/spam comments once in a while +    Database::instance()->query( +      "DELETE FROM {comments} " . +      "WHERE state IN ('deleted', 'spam') " . +      "AND unix_timestamp(now()) - updated > 86400 * 7"); + +    // Redirect to the appropriate queue +    url::redirect("admin/comments/queue/unpublished"); +  } + +  public function menu_labels() { +    $menu = $this->_menu($this->_counts()); +    print json_encode(array($menu->get("unpublished")->label, +                            $menu->get("published")->label, +                            $menu->get("spam")->label, +                            $menu->get("deleted")->label)); +  } + +  public function queue($state) { +    $page = max(Input::instance()->get("page"), 1); -  private function _get_base_view() {      $view = new Admin_View("admin.html");      $view->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") +    $view->content->counts = $this->_counts(); +    $view->content->menu = $this->_menu($view->content->counts); +    $view->content->state = $state; +    $view->content->comments = ORM::factory("comment") +      ->orderby("created", "DESC") +      ->where("state", $state) +      ->limit(self::$items_per_page, ($page - 1) * self::$items_per_page) +      ->find_all(); +    $view->content->pager = new Pagination(); +    $view->content->pager->initialize( +      array("query_string" => "page", +            "total_items" => $view->content->counts->$state, +            "items_per_page" => self::$items_per_page, +            "style" => "classic")); + +    print $view; +  } + +  private function _menu($counts) { +    return Menu::factory("root")        ->append(Menu::factory("link")                 ->id("unpublished")                 ->label(t2("Awaiting Moderation (%count)",                            "Awaiting Moderation (%count)", -                          $view->content->unpublished->count())) +                          $counts->unpublished))                 ->url(url::site("admin/comments/queue/unpublished")))        ->append(Menu::factory("link")                 ->id("published")                 ->label(t2("Approved (%count)",                            "Approved (%count)", -                          $view->content->published->count())) +                          $counts->published))                 ->url(url::site("admin/comments/queue/published")))        ->append(Menu::factory("link")                 ->id("spam")                 ->label(t2("Spam (%count)",                            "Spam (%count)", -                          $view->content->spam->count())) +                          $counts->spam))                 ->url(url::site("admin/comments/queue/spam")))        ->append(Menu::factory("link")                 ->id("deleted")                 ->label(t2("Recently Deleted (%count)",                            "Recently Deleted (%count)", -                          $view->content->deleted->count())) +                          $counts->deleted))                 ->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); +  private function _counts() { +    $counts->unpublished = 0; +    $counts->published = 0; +    $counts->spam = 0; +    $counts->deleted = 0; +    foreach (Database::instance() +             ->select("state", "count(*) as c") +             ->from("comments") +             ->groupby("state") +             ->get() as $row) { +      $counts->{$row->state} = $row->c;      } -    return $query->find_all(); +    return $counts;    }    public function set_state($id, $state) { | 
