diff --git a/ext/pools/main.php b/ext/pools/main.php index 34f872a1d..9b107b891 100644 --- a/ext/pools/main.php +++ b/ext/pools/main.php @@ -98,6 +98,18 @@ public static function makePool(array $row): Pool { return new Pool($row); } + + public static function get_pool_id_by_title($poolTitle): ?int + { + global $database; + $row = $database->get_row("SELECT * FROM pools WHERE title=:title", ["title" => $poolTitle]); + if ($row != null) { + return $row['id']; + } + else { + return NULL; + } + } } function _image_to_id(Image $image): int @@ -203,7 +215,23 @@ public function onPageSubNavBuilding(PageSubNavBuildingEvent $event) public function onPageRequest(PageRequestEvent $event) { global $config, $database, $page, $user; - if ($event->page_matches("pool")) { + if ($event->page_matches("pool/list")) { //index + if (isset($_GET['search']) and $_GET['search'] != null) { + $page->set_mode(PageMode::REDIRECT); + $page->set_redirect(make_link('pool/list').'/'.$_GET['search'].'/'.strval($event->try_page_num(1))); + return; + } + if (count($event->args) >= 4) { // Assume first 2 args are search and page num + $search = $event->get_arg(0); // Search is based on name comparison instead of tag search + $page_num = $event->try_page_num(1); + } + else { + $search = ""; + $page_num = $event->try_page_num(0); + } + $this->list_pools($page, $page_num, $search); + } + elseif ($event->page_matches("pool")) { $pool_id = 0; $pool = []; @@ -215,10 +243,6 @@ public function onPageRequest(PageRequestEvent $event) // What action are we trying to perform? switch ($event->get_arg(0)) { - case "list": //index - $this->list_pools($page, $event->try_page_num(1)); - break; - case "new": // Show form for new pools if (!$user->is_anonymous()) { $this->theme->new_pool_composer($page); @@ -320,35 +344,37 @@ public function onPageRequest(PageRequestEvent $event) } } break; - case "reverse": - if ($this->have_permission($user, $pool)) { - $result = $database->execute( - "SELECT image_id FROM pool_images WHERE pool_id=:pid ORDER BY image_order DESC", - ["pid" => $pool_id] - ); - $image_order = 1; - try { - $database->begin_transaction(); - while ($row = $result->fetch()) { - $database->execute( - " - UPDATE pool_images - SET image_order=:ord + case "reverse": + if ($this->have_permission($user, $pool)) { + $result = $database->execute( + "SELECT image_id FROM pool_images WHERE pool_id=:pid ORDER BY image_order DESC", + ["pid" => $pool_id] + ); + $image_order = 1; + try { + $database->begin_transaction(); + while ($row = $result->fetch()) { + $database->execute( + " + UPDATE pool_images + SET image_order=:ord WHERE pool_id = :pid AND image_id = :iid", - ["ord" => $image_order, "pid" => $pool_id, "iid" => (int)$row['image_id']] - ); - $image_order = $image_order + 1; - } - $database->commit(); - } catch (\Exception $e) { - $database->rollback(); - } - $page->set_mode(PageMode::REDIRECT); - $page->set_redirect(make_link("pool/view/" . $pool_id)); - } else { - $this->theme->display_error(403, "Permission Denied", "You do not have permission to access this page"); - } - break; + ["ord" => $image_order, "pid" => $pool_id, "iid" => (int)$row['image_id']] + ); + $image_order = $image_order + 1; + } + $database->commit(); + } + catch (Exception $e) { + $database->rollback(); + } + $page->set_mode(PageMode::REDIRECT); + $page->set_redirect(make_link("pool/view/" . $pool_id)); + } + else { + $this->theme->display_error(403, "Permission Denied", "You do not have permission to access this page"); + } + break; case "import": if ($this->have_permission($user, $pool)) { $images = Image::find_images( @@ -509,6 +535,7 @@ public function onSearchTermParse(SearchTermParseEvent $event) $poolID = str_replace("_", " ", $matches[1]); $event->add_querylet(new Querylet("images.id IN (SELECT DISTINCT image_id FROM pool_images WHERE pool_id = $poolID)")); } + } public function onTagTermCheck(TagTermCheckEvent $event) @@ -602,7 +629,7 @@ private function have_permission(User $user, Pool $pool): bool ); } - private function list_pools(Page $page, int $pageNumber) + private function list_pools(Page $page, int $pageNumber, $search) { global $config, $database; @@ -620,18 +647,23 @@ private function list_pools(Page $page, int $pageNumber) $order_by = "ORDER BY p.posts DESC"; } + $where_clause = "WHERE LOWER(title) like '%%'"; + if ($search != null) { + $where_clause = "WHERE LOWER(title) like '%".strtolower($search)."%'"; + } + $pools = array_map([Pool::class, "makePool"], $database->get_all(" SELECT p.*, u.name as user_name FROM pools AS p INNER JOIN users AS u ON p.user_id = u.id + $where_clause $order_by LIMIT :l OFFSET :o ", ["l" => $poolsPerPage, "o" => $pageNumber * $poolsPerPage])); + $totalPages = (int)ceil((int)$database->get_one("SELECT COUNT(*) FROM pools ".$where_clause) / $poolsPerPage); - $totalPages = (int)ceil((int)$database->get_one("SELECT COUNT(*) FROM pools") / $poolsPerPage); - - $this->theme->list_pools($page, $pools, $pageNumber + 1, $totalPages); + $this->theme->list_pools($page, $pools, $search, $pageNumber + 1, $totalPages); } public function onPoolCreation(PoolCreationEvent $event) diff --git a/ext/pools/theme.php b/ext/pools/theme.php index cbe04adc4..43b168aff 100644 --- a/ext/pools/theme.php +++ b/ext/pools/theme.php @@ -55,7 +55,7 @@ public function get_adder_html(Image $image, array $pools): HTMLElement /** * HERE WE SHOWS THE LIST OF POOLS. */ - public function list_pools(Page $page, array $pools, int $pageNumber, int $totalPages) + public function list_pools(Page $page, array $pools, string $search, int $pageNumber, int $totalPages) { // Build up the list of pools. $pool_rows = []; @@ -86,7 +86,10 @@ public function list_pools(Page $page, array $pools, int $pageNumber, int $total $page->add_block(new Block("Pools", $table, position: 10)); - $this->display_paginator($page, "pool/list", null, $pageNumber, $totalPages); + if ($search != "" and !str_starts_with($search, '/')) { + $search = '/'.$search; + } + $this->display_paginator($page, "pool/list".$search, null, $pageNumber, $totalPages); } /* @@ -119,9 +122,16 @@ private function display_top(?Pool $pool, string $heading, bool $check_all = fal BR(), SHM_A("pool/updated", "Pool Changes") ); + + $search = "
+ + + +
"; $page->add_block(new NavBlock()); $page->add_block(new Block("Pool Navigation", $poolnav, "left", 10)); + $page->add_block(new Block("Search", $search, "left", 10)); if (!is_null($pool)) { if ($pool->public || $user->can(Permissions::POOLS_ADMIN)) {// IF THE POOL IS PUBLIC OR IS ADMIN SHOW EDIT PANEL @@ -193,8 +203,8 @@ public function sidebar_options(Page $page, Pool $pool, bool $check_all) SHM_SUBMIT("Reverse Order", ["name"=>"edit", "id"=>"reverse_pool_order_btn"]) ), SHM_SIMPLE_FORM( - "pool/list/pool_id%3A" . $pool->id . "/1", - SHM_SUBMIT("Post/List View", ["name"=>"edit", "id"=>"postlist_pool_btn"]) + "post/list/pool_id=" . $pool->id . "/1", + SHM_SUBMIT("Post/List View", ["name"=>"edit", "id"=>$pool->id]) ) );