From 5a8df90fd9a0e815443bf3a771c0c43e841c554c Mon Sep 17 00:00:00 2001 From: Shish Date: Sat, 26 Sep 2015 19:14:11 +0100 Subject: [PATCH] splitting up huge functions in ext/comment --- ext/comment/main.php | 280 +++++++++++++++++++++++-------------------- 1 file changed, 152 insertions(+), 128 deletions(-) diff --git a/ext/comment/main.php b/ext/comment/main.php index 1ad9bf99..b0959a1c 100644 --- a/ext/comment/main.php +++ b/ext/comment/main.php @@ -76,7 +76,11 @@ class Comment { */ public static function count_comments_by_user($user) { global $database; - return $database->get_one("SELECT COUNT(*) AS count FROM comments WHERE owner_id=:owner_id", array("owner_id"=>$user->id)); + return $database->get_one(" + SELECT COUNT(*) AS count + FROM comments + WHERE owner_id=:owner_id + ", array("owner_id"=>$user->id)); } /** @@ -89,6 +93,9 @@ class Comment { } class CommentList extends Extension { + /** @var CommentListTheme $theme */ + var $theme; + public function onInitExt(InitExtEvent $event) { global $config, $database; $config->set_default_int('comment_window', 5); @@ -147,78 +154,100 @@ class CommentList extends Extension { } public function onPageRequest(PageRequestEvent $event) { - global $page, $user, $database; if($event->page_matches("comment")) { if($event->get_arg(0) === "add") { - if(isset($_POST['image_id']) && isset($_POST['comment'])) { - try { - $i_iid = int_escape($_POST['image_id']); - $cpe = new CommentPostingEvent($_POST['image_id'], $user, $_POST['comment']); - send_event($cpe); - $page->set_mode("redirect"); - $page->set_redirect(make_link("post/view/$i_iid#comment_on_$i_iid")); - } - catch(CommentPostingException $ex) { - $this->theme->display_error(403, "Comment Blocked", $ex->getMessage()); - } - } + $this->onPageRequest_add(); } else if($event->get_arg(0) === "delete") { - if($user->can("delete_comment")) { - // FIXME: post, not args - if($event->count_args() === 3) { - send_event(new CommentDeletionEvent($event->get_arg(1))); - flash_message("Deleted comment"); - $page->set_mode("redirect"); - if(!empty($_SERVER['HTTP_REFERER'])) { - $page->set_redirect($_SERVER['HTTP_REFERER']); - } - else { - $page->set_redirect(make_link("post/view/".$event->get_arg(2))); - } - } - } - else { - $this->theme->display_permission_denied(); - } + $this->onPageRequest_delete($event); } else if($event->get_arg(0) === "bulk_delete") { - if($user->can("delete_comment") && !empty($_POST["ip"])) { - $ip = $_POST['ip']; - - $cids = $database->get_col("SELECT id FROM comments WHERE owner_ip=:ip", array("ip"=>$ip)); - $num = count($cids); - log_warning("comment", "Deleting $num comments from $ip"); - foreach($cids as $cid) { - send_event(new CommentDeletionEvent($cid)); - } - flash_message("Deleted $num comments"); - - $page->set_mode("redirect"); - $page->set_redirect(make_link("admin")); - } - else { - $this->theme->display_permission_denied(); - } + $this->onPageRequest_bulk_delete(); } else if($event->get_arg(0) === "list") { - $page_num = int_escape($event->get_arg(1)); - $this->build_page($page_num); + $this->onPageRequest_list($event); } else if($event->get_arg(0) === "beta-search") { - $search = $event->get_arg(1); - $page_num = int_escape($event->get_arg(2)); - $duser = User::by_name($search); - $i_comment_count = Comment::count_comments_by_user($duser); - $com_per_page = 50; - $total_pages = ceil($i_comment_count/$com_per_page); - $page_num = $this->sanity_check_pagenumber($page_num, $total_pages); - $comments = $this->get_user_comments($duser->id, $com_per_page, ($page_num-1) * $com_per_page); - $this->theme->display_all_user_comments($comments, $page_num, $total_pages, $duser); + $this->onPageRequest_beta_search($event); } } } + private function onPageRequest_add() { + global $user, $page; + if (isset($_POST['image_id']) && isset($_POST['comment'])) { + try { + $i_iid = int_escape($_POST['image_id']); + $cpe = new CommentPostingEvent($_POST['image_id'], $user, $_POST['comment']); + send_event($cpe); + $page->set_mode("redirect"); + $page->set_redirect(make_link("post/view/$i_iid#comment_on_$i_iid")); + } catch (CommentPostingException $ex) { + $this->theme->display_error(403, "Comment Blocked", $ex->getMessage()); + } + } + } + + private function onPageRequest_delete(PageRequestEvent $event) { + global $user, $page; + if ($user->can("delete_comment")) { + // FIXME: post, not args + if ($event->count_args() === 3) { + send_event(new CommentDeletionEvent($event->get_arg(1))); + flash_message("Deleted comment"); + $page->set_mode("redirect"); + if (!empty($_SERVER['HTTP_REFERER'])) { + $page->set_redirect($_SERVER['HTTP_REFERER']); + } else { + $page->set_redirect(make_link("post/view/" . $event->get_arg(2))); + } + } + } else { + $this->theme->display_permission_denied(); + } + } + + private function onPageRequest_bulk_delete() { + global $user, $database, $page; + if ($user->can("delete_comment") && !empty($_POST["ip"])) { + $ip = $_POST['ip']; + + $comment_ids = $database->get_col(" + SELECT id + FROM comments + WHERE owner_ip=:ip + ", array("ip" => $ip)); + $num = count($comment_ids); + log_warning("comment", "Deleting $num comments from $ip"); + foreach($comment_ids as $cid) { + send_event(new CommentDeletionEvent($cid)); + } + flash_message("Deleted $num comments"); + + $page->set_mode("redirect"); + $page->set_redirect(make_link("admin")); + } else { + $this->theme->display_permission_denied(); + } + } + + private function onPageRequest_list(PageRequestEvent $event) { + $page_num = int_escape($event->get_arg(1)); + $this->build_page($page_num); + } + + private function onPageRequest_beta_search(PageRequestEvent $event) { + $search = $event->get_arg(1); + $page_num = int_escape($event->get_arg(2)); + $duser = User::by_name($search); + $i_comment_count = Comment::count_comments_by_user($duser); + $com_per_page = 50; + $total_pages = ceil($i_comment_count / $com_per_page); + $page_num = $this->sanity_check_pagenumber($page_num, $total_pages); + $comments = $this->get_user_comments($duser->id, $com_per_page, ($page_num - 1) * $com_per_page); + $this->theme->display_all_user_comments($comments, $page_num, $total_pages, $duser); + } + public function onAdminBuilding(AdminBuildingEvent $event) { $this->theme->display_admin_block(); } @@ -264,7 +293,10 @@ class CommentList extends Extension { public function onCommentDeletion(CommentDeletionEvent $event) { global $database; - $database->Execute("DELETE FROM comments WHERE id=:comment_id", array("comment_id"=>$event->comment_id)); + $database->Execute(" + DELETE FROM comments + WHERE id=:comment_id + ", array("comment_id"=>$event->comment_id)); log_info("comment", "Deleting Comment #{$event->comment_id}"); } @@ -329,37 +361,30 @@ class CommentList extends Extension { $database->cache->set("comment_pages", $total_pages, 600); } - if(is_null($current_page) || $current_page <= 0) { - $current_page = 1; - } $current_page = $this->sanity_check_pagenumber($current_page, $total_pages); $threads_per_page = 10; $start = $threads_per_page * ($current_page - 1); - $get_threads = " + $result = $database->Execute(" SELECT image_id,MAX(posted) AS latest FROM comments $where GROUP BY image_id ORDER BY latest DESC LIMIT :limit OFFSET :offset - "; - $result = $database->Execute($get_threads, array("limit"=>$threads_per_page, "offset"=>$start)); + ", array("limit"=>$threads_per_page, "offset"=>$start)); - if(ext_is_live("Ratings")) { - $user_ratings = Ratings::get_user_privs($user); - } else { - $user_ratings = ""; - } + $user_ratings = ext_is_live("Ratings") ? Ratings::get_user_privs($user) : ""; $images = array(); while($row = $result->fetch()) { $image = Image::by_id($row["image_id"]); - if(ext_is_live("Ratings") && !is_null($image)) { - if(strpos($user_ratings, $image->rating) === FALSE) { - $image = null; // this is "clever", I may live to regret it - } + if( + ext_is_live("Ratings") && !is_null($image) && + strpos($user_ratings, $image->rating) === FALSE + ) { + $image = null; // this is "clever", I may live to regret it } if(!is_null($image)) { $comments = $this->get_comments($image->id); @@ -373,22 +398,13 @@ class CommentList extends Extension { // get comments {{{ /** - * @param int $count + * @param string $query + * @param array $args * @return array */ - private function get_recent_comments($count) { + private function get_generic_comments($query, $args) { global $database; - $rows = $database->get_all(" - SELECT - users.id as user_id, users.name as user_name, users.email as user_email, users.class as user_class, - comments.comment as comment, comments.id as comment_id, - comments.image_id as image_id, comments.owner_ip as poster_ip, - comments.posted as posted - FROM comments - LEFT JOIN users ON comments.owner_id=users.id - ORDER BY comments.id DESC - LIMIT :limit - ", array("limit"=>$count)); + $rows = $database->get_all($query, $args); $comments = array(); foreach($rows as $row) { $comments[] = new Comment($row); @@ -396,6 +412,24 @@ class CommentList extends Extension { return $comments; } + /** + * @param int $count + * @return array + */ + private function get_recent_comments($count) { + return $this->get_generic_comments(" + SELECT + users.id as user_id, users.name as user_name, users.email as user_email, users.class as user_class, + comments.comment as comment, comments.id as comment_id, + comments.image_id as image_id, comments.owner_ip as poster_ip, + comments.posted as posted + FROM comments + LEFT JOIN users ON comments.owner_id=users.id + ORDER BY comments.id DESC + LIMIT :limit + ", array("limit"=>$count)); + } + /** * @param int $user_id * @param int $count @@ -403,24 +437,18 @@ class CommentList extends Extension { * @return array */ private function get_user_comments(/*int*/ $user_id, /*int*/ $count, /*int*/ $offset=0) { - global $database; - $rows = $database->get_all(" - SELECT + return $this->get_generic_comments(" + SELECT users.id as user_id, users.name as user_name, users.email as user_email, users.class as user_class, comments.comment as comment, comments.id as comment_id, comments.image_id as image_id, comments.owner_ip as poster_ip, comments.posted as posted - FROM comments - LEFT JOIN users ON comments.owner_id=users.id - WHERE users.id = :user_id - ORDER BY comments.id DESC - LIMIT :limit OFFSET :offset - ", array("user_id"=>$user_id, "offset"=>$offset, "limit"=>$count)); - $comments = array(); - foreach($rows as $row) { - $comments[] = new Comment($row); - } - return $comments; + FROM comments + LEFT JOIN users ON comments.owner_id=users.id + WHERE users.id = :user_id + ORDER BY comments.id DESC + LIMIT :limit OFFSET :offset + ", array("user_id"=>$user_id, "offset"=>$offset, "limit"=>$count)); } /** @@ -428,24 +456,17 @@ class CommentList extends Extension { * @return array */ private function get_comments(/*int*/ $image_id) { - global $database; - $i_image_id = int_escape($image_id); - $rows = $database->get_all(" - SELECT + return $this->get_generic_comments(" + SELECT users.id as user_id, users.name as user_name, users.email as user_email, users.class as user_class, comments.comment as comment, comments.id as comment_id, comments.image_id as image_id, comments.owner_ip as poster_ip, comments.posted as posted - FROM comments - LEFT JOIN users ON comments.owner_id=users.id - WHERE comments.image_id=:image_id - ORDER BY comments.id ASC - ", array("image_id"=>$i_image_id)); - $comments = array(); - foreach($rows as $row) { - $comments[] = new Comment($row); - } - return $comments; + FROM comments + LEFT JOIN users ON comments.owner_id=users.id + WHERE comments.image_id=:image_id + ORDER BY comments.id ASC + ", array("image_id"=>$image_id)); } // }}} @@ -463,9 +484,11 @@ class CommentList extends Extension { else $window_sql = "interval '$window minute'"; // window doesn't work as an SQL param because it's inside quotes >_< - $result = $database->get_all("SELECT * FROM comments WHERE owner_ip = :remote_ip ". - "AND posted > now() - $window_sql", - Array("remote_ip"=>$_SERVER['REMOTE_ADDR'])); + $result = $database->get_all(" + SELECT * + FROM comments + WHERE owner_ip = :remote_ip AND posted > now() - $window_sql + ", array("remote_ip"=>$_SERVER['REMOTE_ADDR'])); return (count($result) >= $max); } @@ -537,7 +560,11 @@ class CommentList extends Extension { */ private function is_dupe(/*int*/ $image_id, /*string*/ $comment) { global $database; - return ($database->get_row("SELECT * FROM comments WHERE image_id=:image_id AND comment=:comment", array("image_id"=>$image_id, "comment"=>$comment))); + return $database->get_row(" + SELECT * + FROM comments + WHERE image_id=:image_id AND comment=:comment + ", array("image_id"=>$image_id, "comment"=>$comment)); } // do some checks @@ -546,15 +573,12 @@ class CommentList extends Extension { * @param int $maxpage * @return int */ - private function sanity_check_pagenumber(/*int*/ $pagenum, /*int*/ $maxpage){ - if (!is_numeric($pagenum)){ - $pagenum=1; + private function sanity_check_pagenumber(/*int*/ $pagenum, /*int*/ $maxpage) { + if(!is_numeric($pagenum) || $pagenum <= 0) { + $pagenum = 1; } - if ($pagenum>$maxpage){ - $pagenum=$maxpage; - } - if ($pagenum<=0){ - $pagenum=1; + if($pagenum > $maxpage) { + $pagenum = $maxpage; } return $pagenum; }