Рефакторинг, очистка, работа над ошибками, связанными с базой, отказ от глобальной переменной $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
+17 -18
View File
@@ -2,7 +2,7 @@
namespace Battles;
use Battles\Database\DBPDO;
use Battles\Database\Db;
use Battles\Models\PresentsModel;
use Exceptions\GameException;
@@ -137,8 +137,8 @@ SQL;
public static function buyItem($id, User $buyer)
{
$check = DBPDO::$db->ofetch("select * from trade_offers where offer_id = ?", $id);
$item = new Item(DBPDO::$db->fetch('select * from items where id = ?', $check->shop_item_id));
$check = Db::getInstance()->ofetch("select * from trade_offers where offer_id = ?", $id);
$item = new Item(Db::getInstance()->fetch('select * from items where id = ?', $check->shop_item_id));
$price = $item->calculateItemCost();
if (
@@ -149,7 +149,7 @@ SQL;
return;
}
DBPDO::$db->execute(self::BUY_QUERY, [$buyer->getId(), $check->shop_item_id]);
Db::getInstance()->execute(self::BUY_QUERY, [$buyer->getId(), $check->shop_item_id]);
$deloText = $buyer->getLogin() . " купил товар «" . $item->name . "» id:(" . $check->shop_item_id . ") в магазине за " . $price . ".";
GameLogs::addUserLog($buyer->getId(), $deloText);
self::$status = "Предмет " . $item->name . " куплен за " . $price . ".";
@@ -162,7 +162,7 @@ SQL;
}
$allowItemRemove = true;
foreach (json_decode($json_list) as $item) {
$row = DBPDO::$db->ofetch('select sum(1) as s from inventory where name = ? and owner_id = ?', [Item::getItemById($item->item_id)->name, $user_id]);
$row = Db::getInstance()->ofetch('select sum(1) as s from inventory where name = ? and owner_id = ?', [Item::getItemById($item->item_id)->name, $user_id]);
if ($row->s < $item->quantity) {
$allowItemRemove = false;
}
@@ -174,20 +174,20 @@ SQL;
foreach (json_decode($json_list) as $item) {
$query = 'delete from inventory where name = ? and owner_id = ? limit ' . (int)$item->quantity;
// У-у-у, сука! https://phpdelusions.net/pdo#limit
DBPDO::$db->execute($query, [Item::getItemById($item->item_id)->name, $user_id]);
Db::getInstance()->execute($query, [Item::getItemById($item->item_id)->name, $user_id]);
}
return true;
}
private static function checkAndPayTheBills(int $price, User $user): bool
{
if ($user->getMoney() > $price) {
$user->setMoney($user->getMoney() - $price);
$user->saveMoney();
if (User::getInstance()->getMoney() > $price) {
User::getInstance()->setMoney(User::getInstance()->getMoney() - $price);
User::getInstance()->saveMoney();
return true;
}
try {
$bank = new Bank($user->getId());
$bank = new Bank(User::getInstance()->getId());
$bank->withdrawMoney($price);
return true;
} catch (GameException $e) {
@@ -205,24 +205,23 @@ SQL;
if ($current_quantity === -1) {
return true;
}
DBPDO::$db->execute("update trade_offers set shop_item_quantity = shop_item_quantity -1 where shop_item_quantity != -1 and shop_item_id = ? ", $item_id);
Db::getInstance()->execute("update trade_offers set shop_item_quantity = shop_item_quantity -1 where shop_item_quantity != -1 and shop_item_id = ? ", $item_id);
return true;
}
public static function sellItem($id, User $seller, $bankTrade = 0)
{
$db = new DBPDO();
$item = $db->ofetch('select * from inventory where item_id = ?', $id);
$item = Db::getInstance()->ofetch('select * from inventory where item_id = ?', $id);
$sellingItemName = $item->name;
// Продажа за цену от нуля до половины стоимости.
$sellingPrice = $item->price > 1 ? mt_rand(0, $item->price / 2) : mt_rand(0, 1);
$db->execute('delete from inventory where item_id = ?', $id);
Db::getInstance()->execute('delete from inventory where item_id = ?', $id);
if ($bankTrade) {
$bank = new Bank($seller->getId());
$bank->setMoney($bank->getMoney() + $sellingPrice);
Bank::setBankMoney($bank->getMoney(), $seller->getId(), 'sellShop');
} else {
$db->execute('update users set money = money - ? where id = ?', [$sellingPrice, $_SESSION['uid']]);
Db::getInstance()->execute('update users set money = money - ? where id = ?', [$sellingPrice, $_SESSION['uid']]);
}
$deloText = "{$seller->getLogin()} продал товар «{$sellingItemName}» id:($id) в магазине за $sellingPrice кр.";
GameLogs::addUserLog($seller->getId(), $deloText);
@@ -280,12 +279,12 @@ FORM;
*/
public static function giveNewItem(int $item_id, int $to): array
{
$check = DBPDO::$db->ofetch('select 1 from items where id = ?', $item_id);
$check = Db::getInstance()->ofetch('select 1 from items where id = ?', $item_id);
if (!$check) {
return [];
}
DBPDO::$db->execute(self::BUY_QUERY, [$to, $item_id]);
$return = DBPDO::$db->ofetch('select image, name from inventory where item_id = ?', DBPDO::$db->lastInsertId());
Db::getInstance()->execute(self::BUY_QUERY, [$to, $item_id]);
$return = Db::getInstance()->ofetch('select image, name from inventory where item_id = ?', Db::getInstance()->lastInsertId());
return [
'img' => $return->image,
'name' => $return->name,