Рефакторинг, очистка, работа над ошибками, связанными с базой, отказ от глобальной переменной $user во многих файлах.
Singleton в некоторых местах вместо решения #42. Новые шаги для решения #16 и #52. Closes #42. Closes #32. Closes #31.
This commit is contained in:
+33
-32
@@ -2,104 +2,105 @@
|
||||
# Date: 23.08.2021 (23:05)
|
||||
namespace Battles;
|
||||
|
||||
use Battles\Database\DBPDO;
|
||||
use Battles\Database\Db;
|
||||
|
||||
class Clan
|
||||
{
|
||||
private DBPDO $db;
|
||||
private User $user;
|
||||
private static ?self $_instance = null;
|
||||
private $clan;
|
||||
public static Clan $current;
|
||||
|
||||
public function __construct()
|
||||
private function __construct()
|
||||
{
|
||||
$this->db = DBPDO::$db;
|
||||
$this->user = User::$current;
|
||||
$this->clan = $this->db->ofetch('select * from clans where owner_id = ?', $this->user->getId());
|
||||
$this->clan = Db::getInstance()->ofetch('select * from clans where owner_id = ?', User::getInstance()->getId());
|
||||
}
|
||||
|
||||
public static function getInstance(): self
|
||||
{
|
||||
if (is_null(self::$_instance)) {
|
||||
self::$_instance = new self();
|
||||
}
|
||||
return self::$_instance;
|
||||
}
|
||||
|
||||
public function addMember(string $login): string
|
||||
{
|
||||
$target = new User($login);
|
||||
$error = null;
|
||||
if (!$this->getProverka($target->getId())) {
|
||||
if (!$this->getProverka(User::getInstance($login)->getId())) {
|
||||
$error .= '<br>Нет проверки!';
|
||||
}
|
||||
if ($target->getClan()) {
|
||||
if (User::getInstance($login)->getClan()) {
|
||||
$error .= '<br>Персонаж уже состоит в клане!';
|
||||
}
|
||||
if ($target->getLevel() < 1) {
|
||||
if (User::getInstance($login)->getLevel() < 1) {
|
||||
$error .= '<br>Персонаж 0 уровня не может быть принят!';
|
||||
}
|
||||
if ($this->user->getMoney() < GameConfigs::CLAN['add_member_cost']) {
|
||||
if (User::getInstance()->getMoney() < GameConfigs::CLAN['add_member_cost']) {
|
||||
$error .= '<br>Недостаточно денег!';
|
||||
}
|
||||
if ($error) {
|
||||
return $error;
|
||||
}
|
||||
$this->user->setMoney($this->user->getMoney() - GameConfigs::CLAN['add_member_cost']);
|
||||
$this->user->saveMoney();
|
||||
$target->setClan($this->user->getClan());
|
||||
User::getInstance()->setMoney(User::getInstance()->getMoney() - GameConfigs::CLAN['add_member_cost']);
|
||||
User::getInstance()->saveMoney();
|
||||
User::getInstance($login)->setClan(User::getInstance()->getClan());
|
||||
return "Персонаж «{$login}» успешно принят в клан.";
|
||||
}
|
||||
|
||||
public function removeMember(string $login): string
|
||||
{
|
||||
$target = new User($login);
|
||||
$error = null;
|
||||
if ($this->user->getMoney() < GameConfigs::CLAN['remove_member_cost']) {
|
||||
if (User::getInstance()->getMoney() < GameConfigs::CLAN['remove_member_cost']) {
|
||||
$error .= '<br>Недостаточно денег!';
|
||||
}
|
||||
if ($target->getId() === $this->user->getId()) {
|
||||
if (User::getInstance($login)->getId() === User::getInstance()->getId()) {
|
||||
$error .= '<br>Себя выгонять нельзя!';
|
||||
}
|
||||
if ($target->getClan() !== $this->user->getClan()) {
|
||||
if (User::getInstance($login)->getClan() !== User::getInstance()->getClan()) {
|
||||
$error .= '<br>Персонаж не состоит в этом клане!';
|
||||
}
|
||||
if ($error) {
|
||||
return $error;
|
||||
}
|
||||
$this->user->setMoney($this->user->getMoney() - GameConfigs::CLAN['remove_member_cost']);
|
||||
$this->user->saveMoney();
|
||||
$target->setClan(null);
|
||||
User::getInstance()->setMoney(User::getInstance()->getMoney() - GameConfigs::CLAN['remove_member_cost']);
|
||||
User::getInstance()->saveMoney();
|
||||
User::getInstance($login)->setClan(null);
|
||||
return "Персонаж «{$login}» покинул клан.";
|
||||
}
|
||||
|
||||
public function changeOwner(string $login): string
|
||||
{
|
||||
$target = new User($login);
|
||||
$error = null;
|
||||
if ($target->getId() === $this->user->getId()) {
|
||||
if (User::getInstance($login)->getId() === User::getInstance()->getId()) {
|
||||
$error .= '<br>Самоудовлетворяетесь? ;)';
|
||||
}
|
||||
if ($target->getClan() !== $this->user->getClan()) {
|
||||
if (User::getInstance($login)->getClan() !== User::getInstance()->getClan()) {
|
||||
$error .= '<br>Персонаж не состоит в этом клане!';
|
||||
}
|
||||
if ($error) {
|
||||
return $error;
|
||||
}
|
||||
$this->db->execute('update clans set owner_id = ? where owner_id = ?', [$target->getId(), $this->user->getId()]);
|
||||
Db::getInstance()->execute('update clans set owner_id = ? where owner_id = ?', [User::getInstance($login)->getId(), User::getInstance()->getId()]);
|
||||
return 'Вы передали управление кланом персонажу «' . $login . '».';
|
||||
}
|
||||
|
||||
public function setClanInfo(string $text): string
|
||||
{
|
||||
$check = $this->db->ofetch('select id from users where clan = (select short_name from clans where owner_id = ?)', $this->user->getId());
|
||||
if ($check->id !== $this->user->getId()) {
|
||||
$checkId = Db::getInstance()->fetchColumn('select id from users where clan = (select short_name from clans where owner_id = ?)', User::getInstance()->getId());
|
||||
if ($checkId !== User::getInstance()->getId()) {
|
||||
return 'Ошибка доступа!';
|
||||
}
|
||||
$this->db->execute('update clans set info = ? where owner_id = ?', [$text, $check->id]);
|
||||
Db::getInstance()->execute('update clans set info = ? where owner_id = ?', [$text, $checkId]);
|
||||
return 'Описание клана изменено!';
|
||||
}
|
||||
|
||||
public function getMemberlist(): array
|
||||
{
|
||||
return $this->db->ofetchAll('select id, (select 1 from clans where short_name = clan and owner_id = id) as clan_owner, room from users where clan = ? order by clan_owner desc, room, login', $this->user->getClan());
|
||||
return Db::getInstance()->fetchAll('select id, (select 1 from clans where short_name = clan and owner_id = id) as clan_owner, room from users where clan = ? order by clan_owner desc, room, login', User::getInstance()->getClan());
|
||||
}
|
||||
|
||||
private function getProverka($user_id)
|
||||
{
|
||||
return $this->db->fetch('select 1 from users_effects where type = 20 and owner_id = ?', $user_id);
|
||||
return Db::getInstance()->fetchColumn('select count(*) from users_effects where type = 20 and owner_id = ?', $user_id);
|
||||
}
|
||||
|
||||
public function getClanOwnerId(): ?int
|
||||
|
||||
Reference in New Issue
Block a user