forked from leftypol/leftypol
UserPostQueries.php: add post fetching by password
This commit is contained in:
parent
4ede43b192
commit
27b7f1c60d
1 changed files with 38 additions and 1 deletions
|
@ -118,4 +118,41 @@ class UserPostQueries {
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
/**
|
||||||
|
* Fetch a page of user posts.
|
||||||
|
*
|
||||||
|
* @param array $board_uris The uris of the boards that should be included.
|
||||||
|
* @param string $password The password of the target user.
|
||||||
|
* @param integer $page_size The Number of posts that should be fetched.
|
||||||
|
* @param string|null $cursor The directional cursor to fetch the next or previous page. Null to start from the beginning.
|
||||||
|
* @return PageFetchResult
|
||||||
|
*/
|
||||||
|
public function fetchPaginateByPassword(array $board_uris, string $password, int $page_size, ?string $cursor = null): PageFetchResult {
|
||||||
|
return $this->paginate($board_uris, $page_size, $cursor, function($uri, $cursor_type, $start_id, $page_size) use ($password) {
|
||||||
|
if ($cursor_type === null) {
|
||||||
|
$query = $this->pdo->prepare(sprintf('SELECT * FROM `posts_%s` WHERE `password` = :password ORDER BY `sticky` DESC, `id` DESC LIMIT :limit', $uri));
|
||||||
|
$query->bindValue(':password', $password);
|
||||||
|
$query->bindValue(':limit', $page_size + 1, \PDO::PARAM_INT); // Always fetch more.
|
||||||
|
$query->execute();
|
||||||
|
return $query->fetchAll(\PDO::FETCH_ASSOC);
|
||||||
|
} elseif ($cursor_type === self::CURSOR_TYPE_NEXT) {
|
||||||
|
$query = $this->pdo->prepare(sprintf('SELECT * FROM `posts_%s` WHERE `password` = :password AND `id` <= :start_id ORDER BY `sticky` DESC, `id` DESC LIMIT :limit', $uri));
|
||||||
|
$query->bindValue(':password', $password);
|
||||||
|
$query->bindValue(':start_id', $start_id, \PDO::PARAM_INT);
|
||||||
|
$query->bindValue(':limit', $page_size + 2, \PDO::PARAM_INT); // Always fetch more.
|
||||||
|
$query->execute();
|
||||||
|
return $query->fetchAll(\PDO::FETCH_ASSOC);
|
||||||
|
} elseif ($cursor_type === self::CURSOR_TYPE_PREV) {
|
||||||
|
$query = $this->pdo->prepare(sprintf('SELECT * FROM `posts_%s` WHERE `password` = :ip AND `password` >= :start_id ORDER BY `sticky` ASC, `id` ASC LIMIT :limit', $uri));
|
||||||
|
$query->bindValue(':password', $password);
|
||||||
|
$query->bindValue(':start_id', $start_id, \PDO::PARAM_INT);
|
||||||
|
$query->bindValue(':limit', $page_size + 2, \PDO::PARAM_INT); // Always fetch more.
|
||||||
|
$query->execute();
|
||||||
|
return \array_reverse($query->fetchAll(\PDO::FETCH_ASSOC));
|
||||||
|
} else {
|
||||||
|
throw new \RuntimeException("Unknown cursor type '$cursor_type'");
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue