HEX
Server: Microsoft-IIS/8.5
System: Windows NT YDAWBH120 6.3 build 9600 (Windows Server 2012 R2 Standard Edition) AMD64
User: tentjecom_web (0)
PHP: 7.4.14
Disabled: NONE
Upload Files
File: D:/HostingSpaces/SBogers10/shop.komma.nl/app/Discounts/DiscountController.php
<?php

namespace App\Discounts;

use DB;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Http\Request;
use Illuminate\Http\Response;
use Illuminate\Support\Arr;
use Illuminate\View\View;
use Komma\KMS\Core\Attributes\Models\Traits\HasThumbnailInterface;
use Komma\KMS\Core\Entities\DisplayNameInterface;
use Komma\KMS\Core\SectionController;

class DiscountController extends SectionController
{
    protected string $slug = "discounts";
    protected string $classModelName = Discount::class;
    protected ?string $forTranslationModelName = DiscountTranslation::class;

    private DiscountService $discountService;
    private DiscountConditionService $discountConditionService;
    private DiscountActionService $actionService;

    /**
     * Constructor
     * @param DiscountSection $transferSection
     */
    public function __construct()
    {
        if(app()->runningInConsole()) return;

        $section = new DiscountSection($this->slug);
        $this->discountConditionService = new DiscountConditionService();
        $this->actionService = new DiscountActionService();
        $this->discountService = new DiscountService();
        parent::__construct($section);
    }

    protected function render(Model $model = null)
    {
        return $this->makeView();
    }

    protected function makeView(): View
    {
        $thumbnail = '';
        if(is_a($this->forModelInstance, HasThumbnailInterface::class)) {
            $thumbnail = $this->forModelInstance->getThumbnail();
        };

        if(is_a($this->forModelInstance, DisplayNameInterface::class)) {
            $displayName = $this->forModelInstance->getDisplayName();
        } else {
            $displayName = $this->section->getSectionNewModel();
        }

        $siteSlug = !$this->siteService->getCurrentSite()->exists ? null : $this->siteService->getCurrentSite()->slug;

        return view('KMS::discounts/index', [
            'currentModel'                 => $this->forModelInstance,
            'thumbnail'                    => $thumbnail,
            'displayName'                  => $displayName,
            'modelClassName'               => $this->classModelName,
            'slug'                         => $this->slug,
            'siteSlug'                     => $siteSlug,
        ]);
    }

    public function conditionDataByType(Request $request) {
        if(!$request->ajax()) abort(Response::HTTP_BAD_REQUEST, 'Only ajax calls are allowed');
        return $this->discountConditionService->dataByType();
    }

    public function actionDataByType(Request $request) {
        if(!$request->ajax()) abort(Response::HTTP_BAD_REQUEST, 'Only ajax calls are allowed');
        return $this->actionService->dataByType();
    }

    public function discountableProps(Request $request, $discountable) {
        $discountPropertyService = new DiscountPropertyService();
        $discountable = intval($discountable, 10);

        switch ($discountable) {
            case DiscountableTypes::ShoppingCartItem:
                return $discountPropertyService->discountablePropertiesForShoppingCartItem();
            case DiscountableTypes::ShoppingCart:
                return $discountPropertyService->discountablePropertiesForShoppingCart();
        }
        return null;
    }

    public function index()
    {
        if(!request()->ajax()) return parent::index();
        return $this->discountService->baseQuery()->get();
    }

    public function updateSortOrder(Request $request)
    {
        $sortOrderData = $request->get('sortOrderData');
        return $this->discountService->updateSortOrder($sortOrderData);
    }

    public function saveFromJsonArray(Request $request)
    {
        $data = Arr::wrap($request->all());
        $result = collect();
        DB::transaction(function() use ($data, &$result) {
            foreach ($data as $index => $discountData) {
                $result->push($this->discountService->saveFromJsonArray($discountData));
            }
        });
        return $result;
    }

    public function weatherInfo() {
        return $this->discountService->weatherInfo();
    }
}