summaryrefslogtreecommitdiff
path: root/modules/comment/controllers
diff options
context:
space:
mode:
Diffstat (limited to 'modules/comment/controllers')
-rw-r--r--modules/comment/controllers/admin_comments.php121
-rw-r--r--modules/comment/controllers/admin_manage_comments.php133
-rw-r--r--modules/comment/controllers/comments.php9
3 files changed, 161 insertions, 102 deletions
diff --git a/modules/comment/controllers/admin_comments.php b/modules/comment/controllers/admin_comments.php
index 68794638..fda3873c 100644
--- a/modules/comment/controllers/admin_comments.php
+++ b/modules/comment/controllers/admin_comments.php
@@ -18,116 +18,35 @@
* 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
- db::build()
- ->delete("comments")
- ->where("state", "IN", array("deleted", "spam"))
- ->where("updated", "<", "UNIX_TIMESTAMP() - 86400 * 7")
- ->execute();
-
- // Redirect to the appropriate queue
- url::redirect("admin/comments/queue/unpublished");
- }
-
- public function menu_labels() {
- $menu = $this->_menu($this->_counts());
- print json_encode(array((string) $menu->get("unpublished")->label,
- (string) $menu->get("published")->label,
- (string) $menu->get("spam")->label,
- (string) $menu->get("deleted")->label));
- }
-
- public function queue($state) {
- $page = max(Input::instance()->get("page"), 1);
-
$view = new Admin_View("admin.html");
- $view->page_title = t("Manage comments");
+ $view->page_title = t("Comment settings");
$view->content = new View("admin_comments.html");
- $view->content->counts = $this->_counts();
- $view->content->menu = $this->_menu($view->content->counts);
- $view->content->state = $state;
- $view->content->comments = ORM::factory("comment")
- ->order_by("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"));
-
+ $view->content->form = $this->_get_admin_form();
print $view;
}
- private function _menu($counts) {
- return Menu::factory("root")
- ->append(Menu::factory("link")
- ->id("unpublished")
- ->label(t2("Awaiting Moderation (%count)",
- "Awaiting Moderation (%count)",
- $counts->unpublished))
- ->url(url::site("admin/comments/queue/unpublished")))
- ->append(Menu::factory("link")
- ->id("published")
- ->label(t2("Approved (%count)",
- "Approved (%count)",
- $counts->published))
- ->url(url::site("admin/comments/queue/published")))
- ->append(Menu::factory("link")
- ->id("spam")
- ->label(t2("Spam (%count)",
- "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)",
- $counts->deleted))
- ->url(url::site("admin/comments/queue/deleted")));
- }
-
- private function _counts() {
- $counts = new stdClass();
- $counts->unpublished = 0;
- $counts->published = 0;
- $counts->spam = 0;
- $counts->deleted = 0;
- foreach (db::build()
- ->select("state")
- ->select(array("c" => 'COUNT("*")'))
- ->from("comments")
- ->group_by("state")
- ->execute() as $row) {
- $counts->{$row->state} = $row->c;
- }
- return $counts;
- }
-
- public function set_state($id, $state) {
+ public function save() {
access::verify_csrf();
-
- $comment = ORM::factory("comment", $id);
- $orig = clone $comment;
- if ($comment->loaded()) {
- $comment->state = $state;
- $comment->save();
- }
+ $form = $this->_get_admin_form();
+ $form->validate();
+ module::set_var("comment", "access_permissions",
+ $form->comment_settings->access_permissions->value);
+ message::success(t("Comment settings updated"));
+ url::redirect("admin/comments");
}
- public function delete_all_spam() {
- access::verify_csrf();
-
- db::build()
- ->delete("comments")
- ->where("state", "=", "spam")
- ->execute();
- url::redirect("admin/comments/queue/spam");
+ private function _get_admin_form() {
+ $form = new Forge("admin/comments/save", "", "post",
+ array("id" => "g-comments-admin-form"));
+ $comment_settings = $form->group("comment_settings")->label(t("Permissions"));
+ $comment_settings->dropdown("access_permissions")
+ ->label(t("Who can leave comments?"))
+ ->options(array("everybody" => t("Everybody"),
+ "registered_users" => t("Only registered users")))
+ ->selected(module::get_var("comment", "access_permissions"));
+ $comment_settings->submit("save")->value(t("Save"));
+ return $form;
}
}
diff --git a/modules/comment/controllers/admin_manage_comments.php b/modules/comment/controllers/admin_manage_comments.php
new file mode 100644
index 00000000..bc1c9e64
--- /dev/null
+++ b/modules/comment/controllers/admin_manage_comments.php
@@ -0,0 +1,133 @@
+<?php defined("SYSPATH") or die("No direct script access.");
+/**
+ * Gallery - a web based photo album viewer and editor
+ * Copyright (C) 2000-2010 Bharat Mediratta
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or (at
+ * your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+class Admin_Manage_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
+ db::build()
+ ->delete("comments")
+ ->where("state", "IN", array("deleted", "spam"))
+ ->where("updated", "<", "UNIX_TIMESTAMP() - 86400 * 7")
+ ->execute();
+
+ // Redirect to the appropriate queue
+ url::redirect("admin/manage_comments/queue/unpublished");
+ }
+
+ public function menu_labels() {
+ $menu = $this->_menu($this->_counts());
+ print json_encode(array((string) $menu->get("unpublished")->label,
+ (string) $menu->get("published")->label,
+ (string) $menu->get("spam")->label,
+ (string) $menu->get("deleted")->label));
+ }
+
+ public function queue($state) {
+ $page = max(Input::instance()->get("page"), 1);
+
+ $view = new Admin_View("admin.html");
+ $view->page_title = t("Manage comments");
+ $view->content = new View("admin_manage_comments.html");
+ $view->content->counts = $this->_counts();
+ $view->content->menu = $this->_menu($view->content->counts);
+ $view->content->state = $state;
+ $view->content->comments = ORM::factory("comment")
+ ->order_by("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)",
+ $counts->unpublished))
+ ->url(url::site("admin/manage_comments/queue/unpublished")))
+ ->append(Menu::factory("link")
+ ->id("published")
+ ->label(t2("Approved (%count)",
+ "Approved (%count)",
+ $counts->published))
+ ->url(url::site("admin/manage_comments/queue/published")))
+ ->append(Menu::factory("link")
+ ->id("spam")
+ ->label(t2("Spam (%count)",
+ "Spam (%count)",
+ $counts->spam))
+ ->url(url::site("admin/manage_comments/queue/spam")))
+ ->append(Menu::factory("link")
+ ->id("deleted")
+ ->label(t2("Recently Deleted (%count)",
+ "Recently Deleted (%count)",
+ $counts->deleted))
+ ->url(url::site("admin/manage_comments/queue/deleted")));
+ }
+
+ private function _counts() {
+ $counts = new stdClass();
+ $counts->unpublished = 0;
+ $counts->published = 0;
+ $counts->spam = 0;
+ $counts->deleted = 0;
+ foreach (db::build()
+ ->select("state")
+ ->select(array("c" => 'COUNT("*")'))
+ ->from("comments")
+ ->group_by("state")
+ ->execute() as $row) {
+ $counts->{$row->state} = $row->c;
+ }
+ return $counts;
+ }
+
+ 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();
+ }
+ }
+
+ public function delete_all_spam() {
+ access::verify_csrf();
+
+ db::build()
+ ->delete("comments")
+ ->where("state", "=", "spam")
+ ->execute();
+ url::redirect("admin/manage_comments/queue/spam");
+ }
+}
+
diff --git a/modules/comment/controllers/comments.php b/modules/comment/controllers/comments.php
index 9e0f86d2..c42ad24e 100644
--- a/modules/comment/controllers/comments.php
+++ b/modules/comment/controllers/comments.php
@@ -24,6 +24,9 @@ class Comments_Controller extends Controller {
public function create($id) {
$item = ORM::factory("item", $id);
access::required("view", $item);
+ if (!comment::can_comment()) {
+ access::forbidden();
+ }
$form = comment::get_add_form($item);
try {
@@ -58,6 +61,7 @@ class Comments_Controller extends Controller {
"view" => (string) $view,
"form" => (string) comment::get_add_form($item)));
} else {
+ $form = comment::prefill_add_form($form);
print json_encode(array("result" => "error", "form" => (string) $form));
}
}
@@ -68,7 +72,10 @@ class Comments_Controller extends Controller {
public function form_add($item_id) {
$item = ORM::factory("item", $item_id);
access::required("view", $item);
+ if (!comment::can_comment()) {
+ access::forbidden();
+ }
- print comment::get_add_form($item);
+ print comment::prefill_add_form(comment::get_add_form($item));
}
}