MOON
Server: Apache
System: Linux server.royaltuning.hu 4.18.0-425.13.1.el8_7.x86_64 #1 SMP Tue Feb 21 04:20:52 EST 2023 x86_64
User: royaltuning (1001)
PHP: 8.2.32
Disabled: exec,passthru,shell_exec,system
Upload Files
File: //var/www/html/Modules/Checkout/Http/Controllers/CheckoutController.php
<?php

namespace Modules\Checkout\Http\Controllers;

use EonVisualMedia\LaravelKlaviyo\Klaviyo;
use EonVisualMedia\LaravelKlaviyo\TrackEvent;
use Exception;
use Illuminate\Support\Facades\Auth;
use Modules\Support\Country;
use Modules\Cart\Facades\Cart;
use Modules\Page\Entities\Page;
use Illuminate\Routing\Controller;
use Modules\Payment\Facades\Gateway;
use Modules\User\Services\CustomerService;
use Modules\Checkout\Services\OrderService;
use Modules\Address\Entities\DefaultAddress;
use Modules\Cart\Http\Middleware\CheckCartStock;
use Modules\Order\Http\Requests\StoreOrderRequest;
use Modules\Cart\Http\Middleware\CheckCouponUsageLimit;
use Modules\Cart\Http\Middleware\RedirectIfCartIsEmpty;

class CheckoutController extends Controller
{
    /**
     * Create a new controller instance.
     *
     * @return void
     */
    public function __construct()
    {
        $this->middleware([
            RedirectIfCartIsEmpty::class,
            CheckCartStock::class,
            CheckCouponUsageLimit::class,
        ]);
    }

    /**
     * Show the form for creating a new resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function create()
    {
        Gateway::all();


        $user = Auth::user();
        $cart = Cart::toArray();

        //dd($cart);

        if (isset($user->email)) {

            //dd($user);

            $data = self::getDatas($cart);

            Klaviyo::track(TrackEvent::make(
                'Started Checkout',
                $data,
                [
                    '$email' => $user->email,
                    '$first_name' => $user->first_name,
                    '$last_name' => $user->last_name
                ],
            ));
        }


        return view('public.checkout.create', [
            'cart' => Cart::instance(),
            'countries' => Country::supported(),
            'gateways' => Gateway::all(),
            'defaultAddress' => auth()->user()->defaultAddress ?? new DefaultAddress,
            'addresses' => $this->getAddresses(),
            'termsPageURL' => Page::urlForPage(setting('storefront_terms_page')),
        ]);
    }

    public function getDatas($cart)
    {

        $data = [];

        $data["Currency"] = "HUF";
        $data["CurrencySymbol"] = "&#70;&#116;";
        $data["Categories"] = self::getCategories($cart);
        $data["ItemNames"] = self::getItemsName($cart);
        $data["\$service"] = "api";
        $data["extra"]["Items"] = self::getItems($cart);
        $data["extra"]["SubTotal"] = $cart["total"]->convertToCurrentCurrency()->amount()*0.7874;
        $data["extra"]["ShippingTotal"] = $cart["shippingCost"]->convertToCurrentCurrency()->amount();
        $data["extra"]["TaxTotal"] = $cart["total"]->convertToCurrentCurrency()->amount()*0.2126;
        $data["extra"]["GrandTotal"] = $cart["total"]->convertToCurrentCurrency()->amount()+$cart["shippingCost"]->convertToCurrentCurrency()->amount();
        $data["extra"]["CartRebuildKey"] = rand();
        $data["\$value"] = $cart["total"]->convertToCurrentCurrency()->amount()+$cart["shippingCost"]->convertToCurrentCurrency()->amount();

        //dd($data);
        return $data;

    }

    public function getItemsName($cart)
    {

        $data = [];
        $i = 0;
        foreach ($cart["items"] as $item) {


                $data[] = $item->product->name;



        }

        return $data;


    }

    public function getCategories($cart)
    {

        $data = [];
        $i = 0;
        foreach ($cart["items"] as $item) {

            foreach ($item->product->categories as $category) {
                $data[] = $category->name;
            }


        }

        return $data;


    }

    public function getItems($cart)
    {

        $data = [];
        $i = 0;
        foreach ($cart["items"] as $item) {

            $data[$i] = [
                "Quantity" => $item->qty,
                "ProductID" => $item->product->sku,
                "VariantID" => "",
                "Name" => $item->product->name,
                "URL" => "https://royaltuning.hu/termek/" . $item->product->slug,
                "Images" => [
        0 => [
            "URL" => $item->product->base_image->path
        ]
    ],
                "Categories" => [
        0 => $item->product->categories[0]->name
    ],
                "Variation" => [],
                "SubTotal" => $item->product->selling_price->convertToCurrentCurrency()->amount() * 0.2126,
                "Total" => $item->product->selling_price->convertToCurrentCurrency()->amount() - ($item->product->selling_price->convertToCurrentCurrency()->amount() * 0.2126),
                "LineTotal" => ($item->product->selling_price->convertToCurrentCurrency()->amount() * 0.2126) * $item->qty,
                "Tax" => $item->product->selling_price->convertToCurrentCurrency()->amount() * 0.2126 * $item->qty,
                "TotalWithTax" => $item->product->selling_price->convertToCurrentCurrency()->amount() * $item->qty
            ];
            $i++;

            //dd($data);

            return $data;

        }


}

/**
 * Get addresses for the logged in user.
 *
 * @return \Illuminate\Support\Collection
 */
private
function getAddresses()
{
    if (auth()->guest()) {
        return collect();
    }

    return auth()->user()->addresses->keyBy('id');
}

/**
 * Store a newly created resource in storage.
 *
 * @param \Modules\Order\Http\Requests\StoreOrderRequest $request
 * @param \Modules\User\Services\CustomerService $customerService
 * @param \Modules\Checkout\Services\OrderService $orderService
 * @return \Illuminate\Http\Response
 */
public
function store(StoreOrderRequest $request, CustomerService $customerService, OrderService $orderService)
{


    if (auth()->guest() && $request->create_an_account) {
        $customerService->register($request)->login();
    }

    $order = $orderService->create($request);

    $gateway = Gateway::get($request->payment_method);

    try {
        $response = $gateway->purchase($order, $request);
    } catch (Exception $e) {
        $orderService->delete($order);

        return response()->json([
            'message' => $e->getMessage(),
        ], 403);
    }

    return response()->json($response);
}
}