HEX
Server: Apache
System: Linux efa57bbe-abb1-400d-2985-3b056fbc2701.secureserver.net 6.1.147-1.el9.elrepo.x86_64 #1 SMP PREEMPT_DYNAMIC Thu Jul 24 12:33:32 EDT 2025 x86_64
User: root (0)
PHP: 8.0.30.4
Disabled: NONE
Upload Files
File: /var/www/wp-content/mu-plugins/vendor/godaddy/mwc-core/src/WooCommerce/Models/Coupon.php
<?php

namespace GoDaddy\WordPress\MWC\Core\WooCommerce\Models;

use GoDaddy\WordPress\MWC\Common\Events\Events;
use GoDaddy\WordPress\MWC\Common\Models\Coupon as CommonCoupon;

/**
 * Core coupon object.
 */
class Coupon extends CommonCoupon
{
    /** @var string the unique URL that a customer can visit to have this coupon applied to their cart */
    protected $uniqueUrl = '';

    /** @var int the ID of the page to redirect the customer to after applying the coupon */
    protected $redirectPageId;

    /** @var string the type of page to redirect the customer to after applying the coupon */
    protected $redirectPageType;

    /** @var array products that are added to the cart when the coupon is applied */
    protected $productsToAddToCart = false;

    /** @var bool whether to defer applying the coupon until the customer's cart meets the coupon's requirements */
    protected $deferApply = false;

    /**
     * Gets the coupon unique URL.
     *
     * @return string
     */
    public function getUniqueUrl() : string
    {
        return $this->uniqueUrl;
    }

    /**
     * Sets the coupon unique URL.
     *
     * @param string $value
     * @return self
     */
    public function setUniqueUrl(string $value) : Coupon
    {
        $this->uniqueUrl = $value;

        return $this;
    }

    /**
     * Gets the coupon redirect page ID.
     *
     * @return int|null
     */
    public function getRedirectPageId()
    {
        return $this->redirectPageId;
    }

    /**
     * Sets the coupon redirect page ID.
     *
     * @param int $value
     * @return self
     */
    public function setRedirectPageId(int $value) : Coupon
    {
        $this->redirectPageId = $value;

        return $this;
    }

    /**
     * Gets the coupon redirect page type.
     *
     * @return string|null
     */
    public function getRedirectPageType()
    {
        return $this->redirectPageType;
    }

    /**
     * Sets the coupon redirect page type.
     *
     * @param string $value
     * @return self
     */
    public function setRedirectPageType(string $value) : Coupon
    {
        $this->redirectPageType = $value;

        return $this;
    }

    /**
     * Gets the products to add to the cart when the coupon is applied.
     *
     * @return array
     */
    public function getProductsToAddToCart()
    {
        return $this->productsToAddToCart;
    }

    /**
     * Sets the products to add to the cart when the coupon is applied.
     *
     * @param array $values
     * @return self
     */
    public function setProductsToAddToCart(array $values) : Coupon
    {
        $this->productsToAddToCart = $values;

        return $this;
    }

    /**
     * Gets whether to defer applying the coupon until the customer's cart meets the coupon's requirements.
     *
     * @return bool
     */
    public function getDeferApply() : bool
    {
        return $this->deferApply;
    }

    /**
     * Sets whether to defer applying the coupon until the customer's cart meets the coupon's requirements.
     *
     * @param bool $value
     * @return self
     */
    public function setDeferApply(bool $value) : Coupon
    {
        $this->deferApply = $value;

        return $this;
    }

    /**
     * Gets the redirect page URL based on its ID and type.
     *
     * @return string
     */
    public function getRedirectPageUrl()
    {
        /* @phpstan-ignore function.alreadyNarrowedType */
        if (! function_exists('wc_url_coupons') || empty($this->redirectPageId)) {
            return '';
        }

        return wc_url_coupons()->get_object_url((int) $this->redirectPageId, $this->redirectPageType);
    }

    /**
     * Updates the coupon.
     *
     * This method also broadcast model events.
     *
     * @return self
     */
    public function update() : Coupon
    {
        parent::update();

        Events::broadcast($this->buildEvent('coupon', 'update'));

        return $this;
    }

    /**
     * Saves a new coupon.
     *
     * This method also broadcast model events.
     *
     * @return self
     */
    public function save() : Coupon
    {
        parent::save();

        Events::broadcast($this->buildEvent('coupon', 'create'));

        return $this;
    }

    /**
     * Converts all model data properties to an array.
     *
     * @return array
     */
    public function toArray() : array
    {
        $data = parent::toArray();

        unset($data['redirectPageId'], $data['redirectPageType']);

        $data['redirectPage'] = $this->getRedirectPageUrl();

        return $data;
    }
}