JEMBOT MAWOT Bypass Shell

Current Path : /home/cinepatreb/billetterie/modules/mollie/src/Handler/CartRule/
Upload File :
Current File : /home/cinepatreb/billetterie/modules/mollie/src/Handler/CartRule/CartRuleQuantityResetHandler.php

<?php
/**
 * Mollie       https://www.mollie.nl
 *
 * @author      Mollie B.V. <info@mollie.nl>
 * @copyright   Mollie B.V.
 * @license     https://github.com/mollie/PrestaShop/blob/master/LICENSE.md
 *
 * @see        https://github.com/mollie/PrestaShop
 * @codingStandardsIgnoreStart
 */

namespace Mollie\Handler\CartRule;

use Cart;
use CartRule;
use Mollie\Repository\CartRuleRepositoryInterface;
use Mollie\Repository\OrderCartRuleRepositoryInterface;
use Mollie\Repository\OrderRepositoryInterface;
use Mollie\Repository\PendingOrderCartRuleRepositoryInterface;
use Order;
use OrderCartRule;

if (!defined('_PS_VERSION_')) {
    exit;
}

class CartRuleQuantityResetHandler implements CartRuleQuantityResetHandlerInterface
{
    /**
     * @var PendingOrderCartRuleRepositoryInterface
     */
    private $pendingOrderCartRuleRepository;

    /**
     * @var OrderCartRuleRepositoryInterface
     */
    private $orderCartRuleRepository;

    /**
     * @var CartRuleRepositoryInterface
     */
    private $cartRuleRepository;

    /**
     * @var OrderRepositoryInterface
     */
    private $orderRepository;

    public function __construct(
        PendingOrderCartRuleRepositoryInterface $pendingOrderCartRuleRepository,
        OrderCartRuleRepositoryInterface $orderCartRuleRepository,
        CartRuleRepositoryInterface $cartRuleRepository,
        OrderRepositoryInterface $orderRepository
    ) {
        $this->pendingOrderCartRuleRepository = $pendingOrderCartRuleRepository;
        $this->orderCartRuleRepository = $orderCartRuleRepository;
        $this->cartRuleRepository = $cartRuleRepository;
        $this->orderRepository = $orderRepository;
    }

    /**
     * {@inheritDoc}
     */
    public function handle(Cart $cart, $cartRules = [], $paymentSuccessful = false)
    {
        /** @var Order|null $order */
        $order = $this->orderRepository->findOneByCartId($cart->id);

        if (empty($order)) {
            return;
        }

        foreach ($cartRules as $cartRuleContent) {
            /** @var CartRule|null $cartRule */
            $cartRule = $this->cartRuleRepository->findOneBy(
                ['id_cart_rule' => (int) $cartRuleContent['id_cart_rule']]
            );

            if (empty($cartRule)) {
                continue;
            }

            /** @var OrderCartRule|null $orderCartRule */
            $orderCartRule = $this->orderCartRuleRepository->findOneBy([
                'id_order' => (int) $order->id,
                'id_cart_rule' => (int) $cartRule->id,
            ]);

            if (empty($orderCartRule)) {
                continue;
            }

            /* Reseting quantities on memoization allows to duplicate cart rules by passing cart rule validation */
            $this->resetQuantities($order->id, $cartRule, $orderCartRule);
        }
    }

    /**
     * @param int $orderId
     *
     * @throws \PrestaShopDatabaseException
     * @throws \PrestaShopException
     */
    private function resetQuantities($orderId, CartRule $cartRule, OrderCartRule $orderCartRule)
    {
        $this->increaseAvailableCartRuleQuantity($cartRule);
        $this->decreaseCustomerUsedCartRuleQuantity($orderId, $cartRule, $orderCartRule);
    }

    /**
     * @param int $orderId
     *
     * @throws \PrestaShopDatabaseException
     * @throws \PrestaShopException
     */
    private function decreaseCustomerUsedCartRuleQuantity($orderId, CartRule $cartRule, OrderCartRule $orderCartRule)
    {
        $this->pendingOrderCartRuleRepository->removePreviousPendingOrderCartRule($orderId, $cartRule->id);
        $this->pendingOrderCartRuleRepository->createPendingOrderCartRule($orderId, $cartRule->id, $orderCartRule);
        $this->orderCartRuleRepository->decreaseCustomerUsedCartRuleQuantity($orderId, $cartRule->id);
    }

    /**
     * @throws \PrestaShopDatabaseException
     * @throws \PrestaShopException
     */
    private function increaseAvailableCartRuleQuantity(CartRule $cartRule)
    {
        $cartRule->quantity = $cartRule->quantity + 1;
        $cartRule->update();
    }
}

xxxxx1.0, XXX xxxx