Бартер. #40.
This commit is contained in:
parent
2760e17c6b
commit
54f4c08678
@ -63,8 +63,10 @@ SQL;
|
||||
$this->price = $row->price ?? null;
|
||||
$this->shop_item_quantity = $row->shop_item_quantity ?? null;
|
||||
$this->item_id = $row->item_id ?? $row->id;
|
||||
$this->jsonBarterList = $row->barter_items_list_json;
|
||||
if ($operationType === 'buyshop') {
|
||||
$this->offerId = $row->offer_id; // Ид позиции в магазине.
|
||||
$this->jsonBarterList = $row->barter_items_list_json;
|
||||
}
|
||||
}
|
||||
|
||||
public function printInfo(): string
|
||||
@ -127,12 +129,12 @@ SQL;
|
||||
|
||||
public static function buyItem($id, User $buyer)
|
||||
{
|
||||
$check = DBPDO::$db->ofetch("select * from trade_offers where shop_item_id = ?", $id);
|
||||
$item = new Item(DBPDO::$db->fetch('select * from items where id = ?', $id));
|
||||
$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));
|
||||
$price = $item->calculateItemCost();
|
||||
|
||||
if (
|
||||
!self::checkAndRemoveBarteredItems($check->barter_item_list_json, $buyer->getId()) ||
|
||||
!self::checkAndRemoveBarteredItems($check->barter_items_list_json, $buyer->getId()) ||
|
||||
!self::checkAndPayTheBills($price, $buyer) ||
|
||||
!self::checkAndChangeRemainingItems($check->shop_item_quantity, $check->shop_item_id)
|
||||
) {
|
||||
@ -140,12 +142,12 @@ SQL;
|
||||
}
|
||||
|
||||
DBPDO::$db->execute(self::BUY_QUERY, [$buyer->getId(), $check->shop_item_id]);
|
||||
$deloText = $buyer->getLogin() . " купил товар «" . Item::getItemById($item->item_id)->name . "» id:(" . $item->item_id . ") в магазине за " . $price . ".";
|
||||
$deloText = $buyer->getLogin() . " купил товар «" . $item->name . "» id:(" . $check->shop_item_id . ") в магазине за " . $price . ".";
|
||||
GameLogs::addUserLog($buyer->getId(), $deloText);
|
||||
self::$status = "Предмет " . $item->name . " куплен за " . $price . ".";
|
||||
}
|
||||
|
||||
private static function checkAndRemoveBarteredItems(string $json_list, int $user_id): bool
|
||||
private static function checkAndRemoveBarteredItems(?string $json_list, int $user_id): bool
|
||||
{
|
||||
if (empty($json_list)) {
|
||||
return true;
|
||||
@ -162,10 +164,11 @@ SQL;
|
||||
return false;
|
||||
}
|
||||
foreach (json_decode($json_list) as $item) {
|
||||
DBPDO::$db->execute('delete from inventory where name = ? and owner_id = ? limit ?', [Item::getItemById($item->item_id)->name, $user_id, $item->quantity]);
|
||||
$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]);
|
||||
}
|
||||
return true;
|
||||
|
||||
}
|
||||
|
||||
private static function checkAndPayTheBills(int $price, User $user): bool
|
||||
@ -244,10 +247,11 @@ SQL;
|
||||
return '';
|
||||
}
|
||||
$str = $this->optype == 'setmarket' ? '<input placeholder=" ' . $this->price . ' " name="cost">' : '';
|
||||
$hiddenValue = $this->optype === 'buyshop' ? $this->offerId : $this->item_id;
|
||||
$button_name = self::BUTTON[$this->optype];
|
||||
return <<<FORM
|
||||
<form method="post">$str
|
||||
<input type="hidden" name="itemId" value="$this->offerId">
|
||||
<input type="hidden" name="itemId" value="$hiddenValue">
|
||||
<br><input type="submit" name="$this->optype" value="$button_name">
|
||||
</form>
|
||||
FORM;
|
||||
|
Loading…
Reference in New Issue
Block a user