openvk/Web/Models/Entities/Traits/TSubscribable.php
mr❤️🤢 93b1202a13
feat(rate_limits) (#1353)
Добавляет возможность ограничить такие действия как отправка подарка,
заявка в друзья, джойн в группу, создание группы на время, чтобы можно
было создать только 5 групп за день итд. Находится в ветке конфига
preferences>security>rateLimits>eventsLimit. На момент написания этого
текста регулирование постинга и отправки заявки в друзья не было
продублировано в презентеры, мб так и оставить.
2025-06-29 17:11:33 +03:00

68 lines
1.7 KiB
PHP

<?php
declare(strict_types=1);
namespace openvk\Web\Models\Entities\Traits;
use openvk\Web\Models\Entities\User;
use openvk\Web\Models\Repositories\Users;
use Chandler\Database\DatabaseConnection;
trait TSubscribable
{
/*function getSubscribers(): \Traversable
{
$subs = DatabaseConnection::i()->getContext()->table("subscriptions")->where([
"model" => static::class,
"target" => $this->getId(),
]);
foreach($subs as $sub) {
$sub = (new Users)->get($sub->follower);
if(!$sub) continue;
yield $sub;
}
}*/
public function toggleSubscription(User $user): bool
{
$ctx = DatabaseConnection::i()->getContext();
$data = [
"follower" => $user->getId(),
"model" => static::class,
"target" => $this->getId(),
];
$sub = $ctx->table("subscriptions")->where($data);
if (!($sub->fetch())) {
$ctx->table("subscriptions")->insert($data);
return true;
}
$sub->delete();
return false;
}
public function changeFlags(User $user, int $flags, bool $reverse): bool
{
$ctx = DatabaseConnection::i()->getContext();
$data = [
"follower" => $reverse ? $this->getId() : $user->getId(),
"model" => static::class,
"target" => $reverse ? $user->getId() : $this->getId(),
];
$sub = $ctx->table("subscriptions")->where($data);
bdump($data);
if (!$sub) {
return false;
}
$sub->update([
'flags' => $flags,
]);
return true;
}
}