2020-06-07 19:04:43 +03:00
|
|
|
<?php declare(strict_types=1);
|
|
|
|
namespace openvk\Web\Presenters;
|
2022-08-09 08:58:47 +03:00
|
|
|
use openvk\Web\Models\Entities\{User, Club};
|
2023-06-10 18:54:02 +03:00
|
|
|
use openvk\Web\Models\Repositories\{Users, Clubs, Posts, Comments, Videos, Applications, Notes};
|
2020-06-07 19:04:43 +03:00
|
|
|
use Chandler\Database\DatabaseConnection;
|
|
|
|
|
|
|
|
final class SearchPresenter extends OpenVKPresenter
|
|
|
|
{
|
|
|
|
private $users;
|
|
|
|
private $clubs;
|
2023-06-10 18:54:02 +03:00
|
|
|
private $posts;
|
|
|
|
private $comments;
|
|
|
|
private $videos;
|
|
|
|
private $apps;
|
|
|
|
private $notes;
|
2020-06-07 19:04:43 +03:00
|
|
|
|
|
|
|
function __construct(Users $users, Clubs $clubs)
|
|
|
|
{
|
2023-06-10 18:54:02 +03:00
|
|
|
$this->users = $users;
|
|
|
|
$this->clubs = $clubs;
|
|
|
|
$this->posts = new Posts;
|
|
|
|
$this->comments = new Comments;
|
|
|
|
$this->videos = new Videos;
|
|
|
|
$this->apps = new Applications;
|
|
|
|
$this->notes = new Notes;
|
2020-06-07 19:04:43 +03:00
|
|
|
|
|
|
|
parent::__construct();
|
|
|
|
}
|
|
|
|
|
|
|
|
function renderIndex(): void
|
|
|
|
{
|
|
|
|
$query = $this->queryParam("query") ?? "";
|
|
|
|
$type = $this->queryParam("type") ?? "users";
|
2023-06-10 18:54:02 +03:00
|
|
|
$sorter = $this->queryParam("sort") ?? "id";
|
|
|
|
$invert = $this->queryParam("invert") == 1 ? "ASC" : "DESC";
|
2020-06-07 19:04:43 +03:00
|
|
|
$page = (int) ($this->queryParam("p") ?? 1);
|
|
|
|
|
2022-04-04 15:10:30 +03:00
|
|
|
$this->willExecuteWriteAction();
|
|
|
|
if($query != "")
|
|
|
|
$this->assertUserLoggedIn();
|
|
|
|
|
2022-05-08 13:06:26 +03:00
|
|
|
# https://youtu.be/pSAWM5YuXx8
|
2023-06-10 18:54:02 +03:00
|
|
|
|
|
|
|
$repos = [
|
|
|
|
"groups" => "clubs",
|
|
|
|
"users" => "users",
|
|
|
|
"posts" => "posts",
|
|
|
|
"comments" => "comments",
|
|
|
|
"videos" => "videos",
|
|
|
|
"audios" => "posts",
|
|
|
|
"apps" => "apps",
|
|
|
|
"notes" => "notes"
|
|
|
|
];
|
|
|
|
|
|
|
|
switch($sorter) {
|
|
|
|
default:
|
|
|
|
case "id":
|
|
|
|
$sort = "id " . $invert;
|
|
|
|
break;
|
|
|
|
case "name":
|
|
|
|
$sort = "first_name " . $invert;
|
|
|
|
break;
|
|
|
|
case "rating":
|
|
|
|
$sort = "rating " . $invert;
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
|
|
|
|
$parameters = [
|
|
|
|
"type" => $this->queryParam("type"),
|
|
|
|
"city" => $this->queryParam("city") != "" ? $this->queryParam("city") : NULL,
|
|
|
|
"maritalstatus" => $this->queryParam("maritalstatus") != 0 ? $this->queryParam("maritalstatus") : NULL,
|
|
|
|
"with_photo" => $this->queryParam("with_photo"),
|
|
|
|
"status" => $this->queryParam("status") != "" ? $this->queryParam("status") : NULL,
|
|
|
|
"politViews" => $this->queryParam("politViews") != 0 ? $this->queryParam("politViews") : NULL,
|
|
|
|
"email" => $this->queryParam("email"),
|
|
|
|
"telegram" => $this->queryParam("telegram"),
|
|
|
|
"site" => $this->queryParam("site") != "" ? "https://".$this->queryParam("site") : NULL,
|
|
|
|
"address" => $this->queryParam("address"),
|
|
|
|
"is_online" => $this->queryParam("is_online") == 1 ? 1 : NULL,
|
|
|
|
"interests" => $this->queryParam("interests") != "" ? $this->queryParam("interests") : NULL,
|
|
|
|
"fav_mus" => $this->queryParam("fav_mus") != "" ? $this->queryParam("fav_mus") : NULL,
|
|
|
|
"fav_films" => $this->queryParam("fav_films") != "" ? $this->queryParam("fav_films") : NULL,
|
|
|
|
"fav_shows" => $this->queryParam("fav_shows") != "" ? $this->queryParam("fav_shows") : NULL,
|
|
|
|
"fav_books" => $this->queryParam("fav_books") != "" ? $this->queryParam("fav_books") : NULL,
|
|
|
|
"fav_quote" => $this->queryParam("fav_quote") != "" ? $this->queryParam("fav_quote") : NULL,
|
|
|
|
"hometown" => $this->queryParam("hometown") != "" ? $this->queryParam("hometown") : NULL,
|
|
|
|
"before" => $this->queryParam("datebefore") != "" ? strtotime($this->queryParam("datebefore")) : NULL,
|
|
|
|
"after" => $this->queryParam("dateafter") != "" ? strtotime($this->queryParam("dateafter")) : NULL,
|
|
|
|
"gender" => $this->queryParam("gender") != "" && $this->queryParam("gender") != 2 ? $this->queryParam("gender") : NULL
|
|
|
|
];
|
|
|
|
|
2020-11-22 13:29:27 +03:00
|
|
|
$repo = $repos[$type] or $this->throwError(400, "Bad Request", "Invalid search entity $type.");
|
|
|
|
|
2023-06-10 18:54:02 +03:00
|
|
|
$results = $this->{$repo}->find($query, $parameters, $sort);
|
2020-11-22 13:29:27 +03:00
|
|
|
$iterator = $results->page($page);
|
|
|
|
$count = $results->size();
|
2020-06-07 19:04:43 +03:00
|
|
|
|
|
|
|
$this->template->iterator = iterator_to_array($iterator);
|
|
|
|
$this->template->count = $count;
|
|
|
|
$this->template->type = $type;
|
|
|
|
$this->template->page = $page;
|
|
|
|
}
|
|
|
|
}
|