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