Совместимость с новыми логами

This commit is contained in:
n1rwana 2023-08-09 23:58:30 +03:00
parent 032e34a82c
commit 79e3ff4415
No known key found for this signature in database
GPG key ID: 184A60085ABF17D8
5 changed files with 189 additions and 168 deletions

View file

@ -28,7 +28,8 @@ class ChandlerUsers
function getById(string $UUID): ?ChandlerUser
{
return new ChandlerUser($this->users->where("id", $UUID)->fetch());
$user = $this->users->where("id", $UUID)->fetch();
return $user ? new ChandlerUser($user) : NULL;
}
function getList(int $page = 1): \Traversable

View file

@ -44,9 +44,9 @@ class Users
return $alias->getUser();
}
function getByChandlerUser(ChandlerUser $user): ?User
function getByChandlerUser(?ChandlerUser $user): ?User
{
return $this->toUser($this->users->where("user", $user->getId())->fetch());
return $user ? $this->toUser($this->users->where("user", $user->getId())->fetch()) : NULL;
}
function find(string $query, array $pars = [], string $sort = "id DESC"): Util\EntityStream

View file

@ -3,7 +3,7 @@ namespace openvk\Web\Presenters;
use Chandler\Database\Log;
use Chandler\Database\Logs;
use openvk\Web\Models\Entities\{Voucher, Gift, GiftCategory, User, BannedLink};
use openvk\Web\Models\Repositories\{Bans, ChandlerGroups, ChandlerUsers, Photos, Posts, Users, Clubs, Videos, Vouchers, Gifts, BannedLinks, Logs};
use openvk\Web\Models\Repositories\{Bans, ChandlerGroups, ChandlerUsers, Photos, Posts, Users, Clubs, Videos, Vouchers, Gifts, BannedLinks};
use Chandler\Database\DatabaseConnection;
final class AdminPresenter extends OpenVKPresenter

View file

@ -7,11 +7,13 @@ use Nette\Utils\Finder;
use Chandler\Database\DatabaseConnection;
use openvk\Web\Models\Entities\Club;
use openvk\Web\Models\Entities\Comment;
use openvk\Web\Models\Entities\Log;
use Chandler\Database\Log;
use openvk\Web\Models\Entities\NoSpamLog;
use openvk\Web\Models\Entities\User;
use openvk\Web\Models\Repositories\Logs;
use openvk\Web\Models\Repositories\ChandlerUsers;
use Chandler\Database\Logs;
use openvk\Web\Models\Repositories\NoSpamLogs;
use openvk\Web\Models\Repositories\Users;
final class NoSpamPresenter extends OpenVKPresenter
{
@ -141,7 +143,7 @@ final class NoSpamPresenter extends OpenVKPresenter
$this->assertNoCSRF();
$this->willExecuteWriteAction();
function searchByAdditionalParams(?string $table = NULL, ?string $where = NULL, ?string $ip = NULL, ?string $useragent = NULL, ?int $ts = NULL, ?int $te = NULL, ?int $user = NULL)
function searchByAdditionalParams(?string $table = NULL, ?string $where = NULL, ?string $ip = NULL, ?string $useragent = NULL, ?int $ts = NULL, ?int $te = NULL, $user = NULL)
{
$db = DatabaseConnection::i()->getContext();
if ($table && ($ip || $useragent || $ts || $te || $user)) {
@ -151,16 +153,30 @@ final class NoSpamPresenter extends OpenVKPresenter
if ($useragent) $conditions[] = "`useragent` REGEXP '$useragent'";
if ($ts) $conditions[] = "`ts` < $ts";
if ($te) $conditions[] = "`ts` > $te";
if ($user) $conditions[] = "`user` = $user";
if ($user) {
$users = new Users;
$_user = $users->getByChandlerUser((new ChandlerUsers)->getById($user))
?? $users->get((int)$user)
?? $users->getByAddress($user)
?? NULL;
if ($_user) {
$conditions[] = "`user` = '" . $_user->getChandlerGUID() . "'";
}
}
$whereStart = "WHERE `object_table` = '$table'";
if ($table === "profiles") {
$whereStart .= "AND `type` = 0";
}
$logs = $db->query("SELECT * FROM `logs` $whereStart AND (" . implode(" AND ", $conditions) . ") GROUP BY `object_id`");
$conditions = count($conditions) > 0 ? "AND (" . implode(" AND ", $conditions) . ")" : "";
$response = [];
if ($conditions) {
$logs = $db->query("SELECT * FROM `ChandlerLogs` $whereStart $conditions GROUP BY `object_id`, `object_model`");
if (!$where) {
foreach ($logs as $log) {
$log = (new Logs)->get($log->id);
@ -172,7 +188,6 @@ final class NoSpamPresenter extends OpenVKPresenter
$object = $log->getObject()->unwrap();
if (!$object) continue;
//exit(var_dump(substr_replace($where, "", 0, strlen(" AND"))));
if (str_starts_with($where, " AND")) {
$where = substr_replace($where, "", 0, strlen(" AND"));
}
@ -184,6 +199,7 @@ final class NoSpamPresenter extends OpenVKPresenter
}
}
}
}
return $response;
}
@ -199,7 +215,7 @@ final class NoSpamPresenter extends OpenVKPresenter
$searchTerm = $this->postParam("q");
$ts = (int)$this->postParam("ts");
$te = (int)$this->postParam("te");
$user = (int)$this->postParam("user");
$user = $this->postParam("user");
if (!$ip && !$useragent && !$searchTerm && !$ts && !$te && !$where && !$searchTerm && !$user)
$this->returnJson(["success" => false, "error" => "Нет запроса. Заполните поле \"подстрока\" или введите запрос \"WHERE\" в поле под ним."]);
@ -254,10 +270,14 @@ final class NoSpamPresenter extends OpenVKPresenter
}
}
if (!$where) {
$rows = [];
} else {
$result = $db->query("SELECT * FROM `$table` WHERE $where");
$rows = $result->fetchAll();
}
}
}
if (!in_array((int)$this->postParam("ban"), [1, 2, 3])) {
foreach ($rows as $key => $object) {

View file

@ -58,7 +58,7 @@
<span class="nobold">Пользователь:</span>
</td>
<td>
<input type="text" name="user" placeholder="ID" id="user">
<input type="text" name="user" placeholder="Ссылка на страницу" id="user">
</td>
</tr>
<tr style="width: 129px">