91 lines
3.2 KiB
PHP
91 lines
3.2 KiB
PHP
<?php
|
||
|
||
use Core\Db;
|
||
use User\Clan;
|
||
|
||
class Present
|
||
{
|
||
const EXP_NEEDED_FOR_ADD_PRESENT_TEXT = 500000;
|
||
private array $sender;
|
||
private array $receiver;
|
||
private string $status;
|
||
private \DTO\Present $present;
|
||
private Clan $senderClan;
|
||
|
||
/**
|
||
* @param \DTO\Present $present
|
||
*/
|
||
public function __construct(\DTO\Present $present)
|
||
{
|
||
$check = Db::getValue('select count(id) from users where login in (?,?)', [$present->sender, $present->receiver]);
|
||
if ($check === 1) {
|
||
$this->status = 'Очень щедро дарить что-то самому себе 😉';
|
||
return;
|
||
}
|
||
if ($check === 0) {
|
||
$this->status = 'Ошибка: В городе нет такого персонажа!';
|
||
return;
|
||
}
|
||
$this->sender = User::getInfo($present->sender);
|
||
$this->receiver = User::getInfo($present->receiver);
|
||
$this->senderClan = new Clan($this->sender);
|
||
|
||
if ($present->anonymousSender) {
|
||
$this->sender['login'] = 'невидимки';
|
||
} elseif ($present->clanSender) {
|
||
$this->sender['login'] = 'клана ' . $this->senderClan->getName();
|
||
}
|
||
|
||
$this->present = $present;
|
||
|
||
if ($this->sender['exp'] < self::EXP_NEEDED_FOR_ADD_PRESENT_TEXT) {
|
||
$this->present->textTitle = '';
|
||
$this->present->text = '';
|
||
}
|
||
|
||
$this->send();
|
||
$this->sendResultToChat('Получен подарок от ' . $this->sender['login']);
|
||
$this->status = 'Подарок был успешно отправлен персонажу ' . $this->receiver['login'];
|
||
}
|
||
|
||
private function send()
|
||
{
|
||
$values = [
|
||
'textTitle' => strip_tags($this->present->textTitle),
|
||
'text' => strip_tags($this->present->text),
|
||
'sender' => $this->sender['login'],
|
||
'receiver' => $this->receiver['id'],
|
||
'presentId' => $this->present->itemId,
|
||
];
|
||
Db::sql('update items_users set gtxt1 = :textTitle, gtxt2 = :text, gift = :sender, time_create = unix_timestamp(), uid = :receiver where id = :presentId', $values);
|
||
$this->addDelo(['id' => $this->present->itemId, 'name' => (new ItemModel($this->present->itemId))->getName()]);
|
||
}
|
||
|
||
private function addDelo(array $item)
|
||
{
|
||
$from = 'present';
|
||
$senderLog = sprintf('Отправлен подарок к %s [id:%s]. Предмет %s [id:%s].', $this->receiver['login'], $this->receiver['id'], $item['name'], $item['id']);
|
||
$receiverLog = sprintf('Получен подарок от %s [id:%s]. Предмет %s [id:%s].', $this->sender['login'], $this->sender['id'], $item['name'], $item['id']);
|
||
Delo::add(1, $from, $this->receiver['id'], $receiverLog);
|
||
Delo::add(1, $from, $this->sender['id'], $senderLog);
|
||
}
|
||
|
||
private function sendResultToChat(string $text)
|
||
{
|
||
$msg = new ChatMessage();
|
||
$msg->setTo($this->receiver['login']);
|
||
$msg->setType(6);
|
||
$msg->setText($text);
|
||
(new Chat())->sendMsg($msg);
|
||
}
|
||
|
||
/**
|
||
* @return string
|
||
*/
|
||
public function getStatus(): string
|
||
{
|
||
return $this->status;
|
||
}
|
||
}
|
||
|