Skip to content

Commit

Permalink
Create function to search pool by name
Browse files Browse the repository at this point in the history
  • Loading branch information
myname committed Nov 6, 2023
1 parent 4024413 commit 5b26661
Show file tree
Hide file tree
Showing 2 changed files with 81 additions and 39 deletions.
106 changes: 69 additions & 37 deletions ext/pools/main.php
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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 = [];

Expand All @@ -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);
Expand Down Expand Up @@ -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) {

Check failure on line 368 in ext/pools/main.php

View workflow job for this annotation

GitHub Actions / Static Analysis

Caught class Shimmie2\Exception not found.
$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(
Expand Down Expand Up @@ -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)
Expand Down Expand Up @@ -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;

Expand All @@ -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)
Expand Down
14 changes: 12 additions & 2 deletions ext/pools/theme.php
Original file line number Diff line number Diff line change
Expand Up @@ -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 = [];
Expand Down Expand Up @@ -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);
}

/*
Expand Down Expand Up @@ -119,9 +122,16 @@ private function display_top(?Pool $pool, string $heading, bool $check_all = fal
BR(),
SHM_A("pool/updated", "Pool Changes")
);

$search = "<form action='".make_link('pool/list')."' method='GET'>
<input name='search' type='text' style='width:75%'>
<input type='submit' value='Go' style='width:20%'>
<input type='hidden' name='q' value='pool/list'>
</form>";

$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
Expand Down

0 comments on commit 5b26661

Please sign in to comment.