Рефакторинг, очистка, работа над ошибками, связанными с базой, отказ от глобальной переменной $user во многих файлах.

Singleton в некоторых местах вместо решения #42.
Новые шаги для решения #16 и #52.
Closes #42.
Closes #32.
Closes #31.
This commit is contained in:
Igor Barkov (iwork)
2022-01-27 01:15:33 +02:00
parent b1ba212c8c
commit 3502904656
82 changed files with 1575 additions and 2015 deletions
+25 -47
View File
@@ -1,40 +1,41 @@
<?php
namespace Battles;
use Battles\Database\Db;
/**
* Разные способы отображения строки с логином персонажа.
*/
const INVIS = '<i>невидимка</i>';
class Nick extends User
class Nick extends UserStats
{
private function getInvisibilityStatus()
private function isInvisible()
{
return self::$db->fetch('SELECT 1 FROM users_effects WHERE type = 1022 AND owner_id = ?', $this->id);
return Db::getInstance()->execute('SELECT count(*) FROM users_effects WHERE type = 1022 AND owner_id = ?', $this->id)->fetchColumn();
}
/**
* Отображение иконки склонности.
* @return string
*/
private function getAlignToNickname():?string
private function getAlignImage(): ?string
{
if ($this->align) {
return sprintf('<img src="i/align_%s.gif">', $this->align);
} else {
return null;
}
return $this->align ? "<img src='i/align_$this->align.gif' alt='Склонность'>" : null;
}
/**
* Отображение иконки клана.
* @return string
*/
private function getClanToNickname():?string
private function getClanImage(): ?string
{
if ($this->clan) {
return sprintf('<img src="i/clan/%s.png">', $this->clan);
} else {
return null;
}
return $this->clan ? "<img src='i/clan/$this->clan.png' alt='Клан'>" : null;
}
private function getInfolinkImage(): string
{
return "<a href='inf.php?$this->login' target='_blank'><img src='i/inf.gif' alt='Ссылка на профиль'></a>";
}
/**
@@ -43,7 +44,7 @@ class Nick extends User
*
* @return Nick
*/
public static function id($playerId): Nick
public static function id($playerId): self
{
return new self($playerId);
}
@@ -55,50 +56,27 @@ class Nick extends User
*
* @return string
*/
public function full($showInvisibility = 0):string
public function full(int $showInvisibility = 0): string
{
if (!$showInvisibility && $this->getInvisibilityStatus()) {
return INVIS;
}
return $this->getAlignToNickname().$this->getClanToNickname().sprintf('<b>%s</b> [%s] <a href="inf.php?%s" target="_blank"><img src="i/inf.gif" style="width:12px;height:11px"></a>', $this->login, $this->level, $this->login);
return !$showInvisibility && $this->isInvisible() ? INVIS : $this->getAlignImage() . $this->getClanImage() . " <b>$this->login</b> [$this->level] " . $this->getInfolinkImage();
}
/**
* Возвращает строку с логином или невидимым статусом.
* @param int $showInvisibility отображать логин даже если персонаж невидимка.
* Возвращает строку с логином.
* Избавиться от этого! Оставлено для совместимости.
* @return string
*/
public function short($showInvisibility = 0):string
public function short(): string
{
if (!$showInvisibility && $this->getInvisibilityStatus()) {
return INVIS;
} else {
return htmlspecialchars($this->login);
}
return $this->login;
}
/**
* Возвращает строку со склонностью, кланом, логином, уровнем, ссылкой на профиль, здоровьем.
* @return string
*/
public function battle():string
public function battle(): string
{
return $this->getAlign().$this->getClan().sprintf('<b>%s</b> [%s] <a href="inf.php?%s" target="_blank"><img src="i/inf.gif" style="width:12px;height:11px"></a> <img src="i/herz.gif" alt="HP"> _hp_/_maxhp_', $this->login, $this->level, $this->login);
}
/**
* Возвращает строку с логином и здоровьем, выделяя строку определённым стилем.
* @param $textstyle - Название стиля отображения логина персонажа (main.css) для цветового разделения команд.
*
* @return string
*/
public function battleShort($textstyle):string
{
if ($this->getInvisibilityStatus()) {
return INVIS;
}
else {
return sprintf('<span style="%s">%s</span> [_hp_/_maxhp_]', $textstyle, $this->login);
}
return $this->full() . "<img src='i/herz.gif' alt='HP'> [$this->health/$this->maxHealth]";
}
}