Рефакторинг, очистка, работа над ошибками, связанными с базой, отказ от глобальной переменной $user во многих файлах.
Singleton в некоторых местах вместо решения #42. Новые шаги для решения #16 и #52. Closes #42. Closes #32. Closes #31.
This commit is contained in:
+25
-47
@@ -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]";
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user