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/Analytics/Adapters/OrderEventAdapter.php
<?php

namespace GoDaddy\WordPress\MWC\Core\Analytics\Adapters;

use GoDaddy\WordPress\MWC\Common\Exceptions\AdapterException;
use GoDaddy\WordPress\MWC\Common\Repositories\WooCommerceRepository;
use GoDaddy\WordPress\MWC\Common\Traits\CanGetNewInstanceTrait;
use GoDaddy\WordPress\MWC\Core\Analytics\Adapters\Contracts\AnalyticsEventAdapterContract;
use GoDaddy\WordPress\MWC\Core\Analytics\Adapters\Traits\ConvertsProductsFromSourceTrait;
use GoDaddy\WordPress\MWC\Core\Analytics\DataObjects\EventData;
use GoDaddy\WordPress\MWC\Core\Analytics\DataObjects\Product;
use GoDaddy\WordPress\MWC\Core\WooCommerce\Adapters\OrderAdapter;
use GoDaddy\WordPress\MWC\Core\WooCommerce\Models\Orders\Order;
use WC_Order;

/**
 * Order event adapter class.
 *
 * @method static static getNewInstance(WC_Order $wcOrder)
 */
class OrderEventAdapter implements AnalyticsEventAdapterContract
{
    use CanGetNewInstanceTrait;
    use ConvertsProductsFromSourceTrait;

    /** @var WC_Order */
    protected WC_Order $source;

    /**
     * Constructor.
     *
     * @param WC_Order $wcOrder
     */
    public function __construct(WC_Order $wcOrder)
    {
        $this->source = $wcOrder;
    }

    /**
     * Converts a WC_Order object to an {@see EventData} object.
     *
     * @throws AdapterException
     */
    public function convertFromSource() : EventData
    {
        $coreOrder = OrderAdapter::getNewInstance($this->source)->convertFromSource();

        return EventData::getNewInstance()
            ->setTotalAmount($coreOrder->getTotalAmount())
            ->setTaxAmount($coreOrder->getTaxAmount())
            ->setShippingAmount($coreOrder->getShippingAmount())
            ->setProducts($this->convertProducts($coreOrder));
    }

    /**
     * Converts the orders line items into product objects.
     *
     * @param Order $order
     * @return Product[]
     */
    protected function convertProducts(Order $order) : array
    {
        $currency = WooCommerceRepository::getCurrency();
        $products = [];

        foreach ($order->getLineItems() as $lineItem) {
            if (! $wcProduct = $lineItem->getProduct()) {
                continue;
            }

            $products[] = $this->convertProductFromSource($wcProduct, $currency, $lineItem->getQuantity());
        }

        return $products;
    }

    /**
     * {@inheritDoc}
     */
    public function convertToSource()
    {
        // not implemented
        return null;
    }
}