Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Pool search #969

Merged
merged 3 commits into from
Nov 7, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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 @@
{
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 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 @@

// 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 @@
}
}
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 @@
$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 list_pools(Page $page, int $pageNumber)
private function list_pools(Page $page, int $pageNumber, $search)
{
global $config, $database;

Expand All @@ -620,18 +647,23 @@
$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
18 changes: 14 additions & 4 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 Expand Up @@ -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])
)
);

Expand Down
2 changes: 1 addition & 1 deletion ext/relationships/theme.php
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@ public function get_parent_editor_html(Image $image): HTMLElement
return SHM_POST_INFO(
"Parent",
!$user->is_anonymous(),
$image->parent_id ?: "None",
strval($image->parent_id) ?: "None",
INPUT(["type"=>"number", "name"=>"tag_edit__parent", "value"=>$image->parent_id])
);
}
Expand Down
1 change: 0 additions & 1 deletion themes/danbooru2/view.theme.php
Original file line number Diff line number Diff line change
Expand Up @@ -72,7 +72,6 @@ protected function build_navigation(Image $image): string
<input name='search' type='text' style='width:75%'>
<input type='submit' value='Go' style='width:20%'>
<input type='hidden' name='q' value='/post/list'>
<input type='submit' value='Find' style='display: none;'>
</form>
";

Expand Down
Loading