Files
lulandia.pl/modules/paynow/models/PaynowPaymentLockData.php
2026-02-02 15:18:51 +01:00

134 lines
3.5 KiB
PHP

<?php
/**
* NOTICE OF LICENSE
*
* This source file is subject to the MIT License (MIT)
* that is bundled with this package in the file LICENSE.md.
*
* @author mElements S.A.
* @copyright mElements S.A.
* @license MIT License
*/
class PaynowPaymentLockData extends ObjectModel
{
const TABLE = 'paynow_payment_locks';
const PRIMARY_KEY = 'id';
const COUNTER_LIMIT = 6;
public $id;
public $id_order;
public $id_cart;
public $counter;
public $created_at;
public $modified_at;
public static $definition = [
'table' => self::TABLE,
'primary' => self::PRIMARY_KEY,
'fields' => [
self::PRIMARY_KEY => ['type' => self::TYPE_INT],
'id_order' => ['type' => self::TYPE_INT, 'required' => false],
'id_cart' => ['type' => self::TYPE_INT, 'required' => true],
'counter' => ['type' => self::TYPE_INT, 'required' => false],
'created_at' => ['type' => self::TYPE_DATE, 'required' => true],
'modified_at' => ['type' => self::TYPE_DATE, 'required' => true]
]
];
public static function create(
$id_order,
$id_cart
) {
$now = (new DateTime('now', new DateTimeZone(Configuration::get('PS_TIMEZONE'))))->format('Y-m-d H:i:s');
$model = new PaynowPaymentLockData();
$model->id_order = $id_order;
$model->id_cart = $id_cart;
$model->counter = 1;
$model->created_at = $now;
$model->modified_at = $now;
try {
$result = $model->save(false, false);
if (!$result) {
throw new Exception('Locks Model-save() returned false.');
}
} catch (Exception $e) {
PaynowLogger::debug(
'Can\'t create paynow lock entry',
[
'model' => (array)$model,
'exception' => $e->getMessage(),
'file' => $e->getFile(),
'line' => $e->getline(),
'DB error' => Db::getInstance()->getMsgError(),
]
);
throw $e;
}
}
/**
* @param $order_id
*
* @return PrestaShopCollection
* @throws PrestaShopException
*/
public static function findByOrderId($order_id)
{
Db::getInstance(_PS_USE_SQL_SLAVE_)->disableCache();
$queryBuilder = new PrestaShopCollection(self::class);
return $queryBuilder
->where('id_order', '=', $order_id)
->setPageSize(1)
->getFirst();
}
/**
* @param $cart_id
*
* @return PrestaShopCollection
* @throws PrestaShopException
*/
public static function findByCartId($cart_id)
{
Db::getInstance(_PS_USE_SQL_SLAVE_)->disableCache();
$queryBuilder = new PrestaShopCollection(self::class);
return $queryBuilder
->where('id_cart', '=', $cart_id)
->setPageSize(1)
->getFirst();
}
public static function checkIsCartLocked($id_cart, $id_order = 0): bool
{
Db::getInstance(_PS_USE_SQL_SLAVE_)->disableCache();
$data = PaynowPaymentLockData::findByCartId($id_cart);
if ($data) {
if ($data->counter >= self::COUNTER_LIMIT) {
return false;
}
$data->counter++;
$data->update();
return true;
} else {
self::create($id_order, $id_cart);
return true;
}
}
}