mirror of
https://github.com/openvk/openvk
synced 2024-12-23 17:12:01 +03:00
137 lines
4 KiB
PHP
137 lines
4 KiB
PHP
<?php declare(strict_types=1);
|
|
namespace openvk\Web\Presenters;
|
|
use openvk\Web\Models\Entities\User;
|
|
use openvk\Web\Models\Repositories\{Users, Clubs};
|
|
|
|
final class AdminPresenter extends OpenVKPresenter
|
|
{
|
|
private $users;
|
|
private $clubs;
|
|
|
|
function __construct(Users $users, Clubs $clubs)
|
|
{
|
|
$this->users = $users;
|
|
$this->clubs = $clubs;
|
|
|
|
parent::__construct();
|
|
}
|
|
|
|
private function searchResults(object $repo, &$count)
|
|
{
|
|
$query = $this->queryParam("q") ?? "";
|
|
$page = (int) ($this->queryParam("p") ?? 1);
|
|
|
|
$count = $repo->find($query)->size();
|
|
return $repo->find($query)->page($page, 20);
|
|
}
|
|
|
|
function onStartup(): void
|
|
{
|
|
parent::onStartup();
|
|
|
|
$this->assertPermission("admin", "access", -1);
|
|
}
|
|
|
|
function renderIndex(): void
|
|
{
|
|
|
|
}
|
|
|
|
function renderUsers(): void
|
|
{
|
|
$this->template->users = $this->searchResults($this->users, $this->template->count);
|
|
}
|
|
|
|
function renderUser(int $id): void
|
|
{
|
|
$user = $this->users->get($id);
|
|
if(!$user)
|
|
$this->notFound();
|
|
|
|
$this->template->user = $user;
|
|
|
|
if($_SERVER["REQUEST_METHOD"] !== "POST")
|
|
return;
|
|
|
|
switch($_POST["act"] ?? "info") {
|
|
default:
|
|
case "info":
|
|
$user->setFirst_Name($this->postParam("first_name"));
|
|
$user->setLast_Name($this->postParam("last_name"));
|
|
$user->setPseudo($this->postParam("nickname"));
|
|
$user->setStatus($this->postParam("status"));
|
|
$user->setVerified(empty($this->postParam("verify") ? 0 : 1));
|
|
if($user->onlineStatus() != $this->postParam("online")) $user->setOnline(intval($this->postParam("online")));
|
|
$user->save();
|
|
break;
|
|
|
|
|
|
}
|
|
}
|
|
|
|
function renderClubs(): void
|
|
{
|
|
$this->template->clubs = $this->searchResults($this->clubs, $this->template->count);
|
|
}
|
|
|
|
function renderClub(int $id): void
|
|
{
|
|
$club = $this->clubs->get($id);
|
|
if(!$club)
|
|
$this->notFound();
|
|
|
|
$this->template->mode = in_array($this->queryParam("act"), ["main", "ban", "followers"]) ? $this->queryParam("act") : "main";
|
|
|
|
$this->template->club = $club;
|
|
|
|
$this->template->followers = $this->template->club->getFollowers((int) ($this->queryParam("p") ?? 1));
|
|
|
|
if($_SERVER["REQUEST_METHOD"] !== "POST")
|
|
return;
|
|
|
|
switch($this->queryParam("act")) {
|
|
default:
|
|
case "main":
|
|
$club->setOwner($this->postParam("id_owner"));
|
|
$club->setName($this->postParam("name"));
|
|
$club->setAbout($this->postParam("about"));
|
|
$club->setShortCode($this->postParam("shortcode"));
|
|
$club->setVerified(empty($this->postParam("verify") ? 0 : 1));
|
|
$club->save();
|
|
break;
|
|
case "ban":
|
|
$club->setBlock_reason($this->postParam("ban_reason"));
|
|
$club->save();
|
|
break;
|
|
}
|
|
}
|
|
|
|
function renderFiles(): void
|
|
{
|
|
|
|
}
|
|
|
|
function renderQuickBan(int $id): void
|
|
{
|
|
$this->assertNoCSRF();
|
|
|
|
$user = $this->users->get($id);
|
|
if(!$user)
|
|
exit(json_encode([ "error" => "User does not exist" ]));
|
|
|
|
$user->ban($this->queryParam("reason"));
|
|
exit(json_encode([ "reason" => $this->queryParam("reason") ]));
|
|
}
|
|
|
|
function renderQuickWarn(int $id): void
|
|
{
|
|
$this->assertNoCSRF();
|
|
|
|
$user = $this->users->get($id);
|
|
if(!$user)
|
|
exit(json_encode([ "error" => "User does not exist" ]));
|
|
|
|
$user->adminNotify("⚠️ " . $this->queryParam("message"));
|
|
exit(json_encode([ "message" => $this->queryParam("message") ]));
|
|
}
|
|
}
|