Spamworldpro Mini Shell
Spamworldpro


Server : Apache
System : Linux server2.corals.io 4.18.0-348.2.1.el8_5.x86_64 #1 SMP Mon Nov 15 09:17:08 EST 2021 x86_64
User : corals ( 1002)
PHP Version : 7.4.33
Disable Function : exec,passthru,shell_exec,system
Directory :  /home/corals/cartforge.co/app/code/StripeIntegration/Payments/Model/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Current File : /home/corals/cartforge.co/app/code/StripeIntegration/Payments/Model/SubscriptionProduct.php
<?php

namespace StripeIntegration\Payments\Model;

use StripeIntegration\Payments\Exception\InvalidSubscriptionProduct;
use Magento\Store\Model\StoreManagerInterface;
use Magento\Directory\Model\CurrencyFactory;

class SubscriptionProduct
{
    private $product = null;
    private $subscriptionDetails = null;
    private $subscriptionHelper;
    private $storeManager;
    private $currencyFactory;
    private $productHelper;
    private $checkoutSessionHelper;

    public function __construct(
        \StripeIntegration\Payments\Helper\Product $productHelper,
        \StripeIntegration\Payments\Helper\Subscriptions $subscriptionHelper,
        \StripeIntegration\Payments\Helper\CheckoutSession $checkoutSessionHelper,
        StoreManagerInterface $storeManager,
        CurrencyFactory $currencyFactory
    )
    {
        $this->productHelper = $productHelper;
        $this->subscriptionHelper = $subscriptionHelper;
        $this->checkoutSessionHelper = $checkoutSessionHelper;
        $this->storeManager = $storeManager;
        $this->currencyFactory = $currencyFactory;
    }

    public function fromQuoteItem($item)
    {
        if (empty($item) || !$item->getProduct())
            throw new InvalidSubscriptionProduct("Invalid quote item.");

        $product = $this->productHelper->getProduct($item->getProduct()->getId());
        if ($this->_isSubscriptionProduct($product))
        {
            $this->product = $product;
            $this->subscriptionDetails = $this->subscriptionHelper->getSubscriptionOptionDetails($product->getId());
        }

        return $this;
    }

    public function fromOrderItem($orderItem)
    {
        if (empty($orderItem) || !$orderItem->getProductId())
            throw new InvalidSubscriptionProduct("Invalid order item.");

        $product = $this->productHelper->getProduct($orderItem->getProductId());
        if ($this->_isSubscriptionProduct($product))
        {
            $this->product = $product;
            $this->subscriptionDetails = $this->subscriptionHelper->getSubscriptionOptionDetails($product->getId());
        }

        return $this;
    }

    public function fromProductId($productId)
    {
        if (empty($productId))
            throw new InvalidSubscriptionProduct("Invalid product ID.");

        $product = $this->productHelper->getProduct($productId);
        if ($this->_isSubscriptionProduct($product))
        {
            $this->product = $product;
            $this->subscriptionDetails = $this->subscriptionHelper->getSubscriptionOptionDetails($product->getId());
        }

        return $this;
    }

    public function getIsSalable()
    {
        return $this->getProduct()->getIsSalable();
    }

    public function hasStartDate()
    {
        if (!$this->product)
            return false;

        $subscriptionOptions = $this->subscriptionDetails;

        if (!$subscriptionOptions ||
            empty($subscriptionOptions->getStartOnSpecificDate()) ||
            empty($subscriptionOptions->getStartDate()) ||
            !is_string($subscriptionOptions->getStartDate()) ||
            !preg_match('/^\d{4}-\d{2}-\d{2}$/', $subscriptionOptions->getStartDate()))
        {
            return false;
        }

        return true;
    }

    public function startsOnOrderDate()
    {
        return $this->hasStartDate() && $this->subscriptionDetails->getFirstPayment() == "on_order_date";
    }

    public function startsOnStartDate()
    {
        return $this->hasStartDate() && $this->subscriptionDetails->getFirstPayment() == "on_start_date";
    }

    public function hasZeroInitialOrderPrice()
    {
        if ($this->hasTrialPeriod())
        {
            return true;
        }

        if ($this->startsOnStartDate() && !$this->startDateIsToday())
        {
            return true;
        }

        if ($this->checkoutSessionHelper->isSubscriptionUpdate())
        {
            return true;
        }

        return false;
    }

    public function startDateIsToday()
    {
        if (!$this->hasStartDate())
            return false;

        $startDate = strtotime($this->subscriptionDetails->getStartDate());

        return (date("d") == date("d", $startDate));
    }

    public function getProduct()
    {
        if (!$this->product)
        {
            throw new InvalidSubscriptionProduct("Invalid subscription product.");
        }

        return $this->product;
    }

    public function getProductId()
    {
        if (!$this->product)
        {
            throw new InvalidSubscriptionProduct("Invalid subscription product.");
        }

        return $this->product->getId();
    }

    public function getTrialDays()
    {
        $product = $this->product;

        if (!$product)
        {
            throw new InvalidSubscriptionProduct("Invalid subscription product.");
        }

        if (!$this->subscriptionDetails)
        {
            throw new InvalidSubscriptionProduct("Subscription details not found.");
        }

        if ($this->hasStartDate())
            return null;

        $trialDays = $this->subscriptionDetails->getSubTrial();
        if (!$trialDays || !is_numeric($trialDays) || $trialDays < 1)
            return null;

        return $trialDays;
    }

    public function hasTrialPeriod()
    {
        $trialDays = $this->getTrialDays();
        if (!is_numeric($trialDays))
            return false;

        return true;
    }

    public function canChangeShipping()
    {
        if ($this->product && $this->product->getTypeId() == "simple")
        {
            return true;
        }

        return false;
    }

    public function isSubscriptionProduct()
    {
        return !empty($this->product);
    }

    private function _isSubscriptionProduct(
        \Magento\Catalog\Api\Data\ProductInterface $product
    )
    {
        if (!$product || !$product->getId())
            return false;

        if (!in_array($product->getTypeId(), ["simple", "virtual"]))
            return false;

        $subscriptionOptionDetails = $this->subscriptionHelper->getSubscriptionOptionDetails($product->getId());

        if (!$subscriptionOptionDetails || !$subscriptionOptionDetails->getSubEnabled()) {
            return false;
        }

        $interval = $subscriptionOptionDetails->getSubInterval();
        $intervalCount = (int)$subscriptionOptionDetails->getSubIntervalCount();

        if (!$interval)
            return false;

        if ($intervalCount && !is_numeric($intervalCount))
            return false;

        if ($intervalCount < 0)
            return false;

        return true;
    }

    public function isSimpleProduct()
    {
        $product = $this->product;

        if (!$product || !$product->getId())
        {
            return false;
        }

        if ($product->getTypeId() != "simple")
        {
            return false;
        }

        return true;
    }

    public function isVirtualProduct()
    {
        $product = $this->product;

        if (!$product || !$product->getId())
        {
            return false;
        }

        if ($product->getTypeId() != "virtual")
        {
            return false;
        }

        return true;
    }

    public function getSubscriptionDetails()
    {
        if (!$this->subscriptionDetails)
        {
            throw new InvalidSubscriptionProduct("Subscription details not found.");
        }

        return $this->subscriptionDetails;
    }

    public function canChangeSubscription()
    {
        return ($this->getSubscriptionDetails()->getUpgradesDowngrades());
    }

    public function useProrationsForUpgrades()
    {
        if (!$this->canChangeSubscription())
            return false;

        return ($this->getSubscriptionDetails()->getProrateUpgrades());
    }

    public function useProrationsForDowngrades()
    {
        if (!$this->canChangeSubscription())
            return false;

        return ($this->getSubscriptionDetails()->getProrateDowngrades());
    }

    public function getFormattedInterval()
    {
        $subscriptionDetails = $this->getSubscriptionDetails();

        $intervalCount = $subscriptionDetails->getSubIntervalCount();
        $interval = ucfirst($subscriptionDetails->getSubInterval());
        $plural = ($intervalCount > 1 ? 's' : '');

        return "$intervalCount $interval$plural";
    }

    public function getBaseInitialFeeAmount()
    {
        $subscriptionOptionDetails = $this->getSubscriptionDetails();

        $subInitialFee = $subscriptionOptionDetails->getSubInitialFee();

        if (!is_numeric($subInitialFee) || $subInitialFee < 0)
            return 0;

        return $subInitialFee;
    }

    public function getInterval()
    {
        if (!$this->subscriptionDetails)
        {
            throw new InvalidSubscriptionProduct("Subscription details not found.");
        }

        return $this->subscriptionDetails->getSubInterval();
    }

    public function getIntervalCount()
    {
        if (!$this->subscriptionDetails)
        {
            throw new InvalidSubscriptionProduct("Subscription details not found.");
        }

        return $this->subscriptionDetails->getSubIntervalCount();
    }

    public function getInitialFeeAmount($qty = 1, $rate = null, $currencyCode = null)
    {
        $baseInitialFee = $this->getBaseInitialFeeAmount() * $qty;

        if ($baseInitialFee <= 0)
            return 0;

        if ($rate == 1)
            return $baseInitialFee;

        if (!$rate)
        {
            $store = $this->storeManager->getStore();
            $baseCurrencyCode = $store->getBaseCurrency()->getCode();

            if ($currencyCode)
            {
                $currentCurrencyCode = $currencyCode;
            }
            else
            {
                $currentCurrencyCode = $store->getCurrentCurrency()->getCode();
            }

            if (!$baseCurrencyCode || !$currentCurrencyCode)
                return $baseInitialFee;

            if ($baseCurrencyCode == $currentCurrencyCode)
                return $baseInitialFee;

            $baseCurrency = $this->currencyFactory->create()->load($baseCurrencyCode);
            $rate = $baseCurrency->getRate($currentCurrencyCode);

            if (!$rate) {
                return $baseInitialFee;
            }
        }

        return round(floatval($baseInitialFee * $rate), 2);
    }
}

Spamworldpro Mini