Delete Models\PM\PRnd

This commit is contained in:
Visman 2021-03-27 16:08:13 +07:00
parent 5435a1cd51
commit 3b53122aa1

View file

@ -1,190 +0,0 @@
<?php
/**
* This file is part of the ForkBB <https://github.com/forkbb>.
*
* @copyright (c) Visman <mio.visman@yandex.ru, https://github.com/MioVisman>
* @license The MIT License (MIT)
*/
declare(strict_types=1);
namespace ForkBB\Models\PM;
use ForkBB\Core\Container;
use ForkBB\Models\Model;
use ForkBB\Models\PM\Cnst;
use ForkBB\Models\User\Model as User;
use InvalidArgumentException;
use RuntimeException;
class PRnd extends Model
{
/**
* Соотвествие между номерами в топике и пользователями
* @var array
*/
protected $numToUser;
/**
* Соотвествие между id пользователей и их номерами в топике
* @var array
*/
protected $idToNum;
/**
* @var array
*/
protected $tmpList;
/**
* $this->list = ....
*/
protected function setlist(array $list): void
{
foreach ($list as $cur) {
$this->list($cur['user_number'], $cur);
}
}
protected function list(int $number, /* User|array*/ $data): void
{
if ($data instanceof User) {
$user = $data;
$data = [
'user_number' => $number,
'user_id' => $data->id,
'username' => $data->username,
'pt_status' => Cnst::PT_START,
'pt_visit' => 0,
];
} else {
$user = null;
}
if (isset($data['user_number'], $data['user_id'], $data['username'], $data['pt_status'], $data['pt_visit'])) {
if ($number !== $data['user_number']) {
throw new RuntimeException('Invalid serial number');
}
} else {
throw new RuntimeException('No all required data');
}
$list = $this->getAttr('list', []);
$list[$number] = $data;
$this->setAttr('list', $list);
$this->idToNum[$data['user_id']] = $number;
$this->numToUser[$number] = $user;
}
/**
* Устанавливает отправителя
*/
public function setSender(User $user): self
{
if (isset($this->list[0])) {
throw new RuntimeException('Sender already set');
} elseif (isset($this->$idToNum[$user->id])) {
throw new RuntimeException('Sender already specified in the recipient');
}
$this->list(0, $user);
return $this;
}
/**
* Добавляет получателя
*/
public function addRecipient(User $user): self
{
if (isset($this->$idToNum[$user->id])) {
throw new RuntimeException('This recipient is already set');
}
$next = 1 + \max(\array_keys($this->list));
$this->list($next, $user);
return $this;
}
/**
* Возвращает пользователя по номеру в топике
*/
public function userByNum(int $number): User
{
if (isset($numToUser[$number])) {
return $numToUser[$number];
} elseif (isset($this->list[$number])) {
$data = $this->list[$number];
$user = $this->c->users->load($data['user_id']);
if (
! $user instanceof User
&& 1 !== $data['user_id'] // ???? может сменить id гостя?
) {
$user = $this->c->users->load(1);
}
if (! $user instanceof User) {
throw new RuntimeException("No user data in post number {$data['user_id']}");
} elseif ($user->isGuest) {
$user = clone $user;
$user->__username = $data['username'];
}
return $numToUser[$number] = $user;
} else {
throw new RuntimeException("No user of the number {$number}");
}
}
protected function setstatus(int $status): void
{
if (! isset($this->$idToNum[$this->c->user->id])) {
throw new RuntimeException('Someone else\'s private topic');
}
$number = $this->$idToNum[$this->c->user->id];
$this->tmpList = $this->getAttr('list', []);
if (0 === $number) {
switch ($status) {
case Cnst::PT_NORMAL:
case Cnst::PT_DELETED:
$this->stFromStNs($status);
break;
case Cnst::PT_ARCHIVE:
$this->stFromStNs(Cnst::PT_NOTSENT);
break;
case Cnst::PT_NOTSENT:
default:
throw new InvalidArgumentException("Bad status: {$status}");
}
}
$this->tmpList[$number]['pt_status'] = $status;
$this->setAttr('list', $this->tmpList);
}
/**
* Из PT_START и PT_NOTSENT в $new
*/
protected function stFromStNs(int $new): void
{
\array_walk($this->tmpList, function (&$cur, $key, $new) {
switch ($cur['pt_status']) {
case Cnst::PT_START:
case Cnst::PT_NOTSENT:
$cur['pt_status'] = $new;
}
}, $new);
}
}