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/Properties/Kms/PropertyController.php
<?php
namespace App\Properties\Kms;

use App\Products\Product\Product;
use App\Products\ProductComposite\ProductComposite;
use App\Products\ProductGroup\ProductGroup;
use App\Properties\Models\Property;
use App\Properties\Models\PropertyKey;
use App\Properties\Resources\KeyValueTranslation;
use App\Properties\Resources\Property as PropertyResource;
use App\Properties\Resources\Key as PropertyKeyResource;
use Illuminate\Http\Response;
use Komma\KMS\Core\ModelServiceInterface;
use Komma\KMS\Core\SectionController;
use Illuminate\Http\Request;
use Komma\KMS\Globalization\Languages\Models\Language;

class PropertyController extends SectionController
{
    protected string $slug = "property_keys";
    protected string $classModelName = PropertyKey::class;

    /** @param PropertyService $modelService */
    protected ModelServiceInterface $modelService;

    public function __construct()
    {
        $section = new PropertyKeySection($this->slug);
        parent::__construct($section);
        $this->modelService = new PropertyService();
    }

    /**
     * For ajax requests
     *
     * @param Request $request
     * @param string $keyTranslationValue
     *
     * @return \Illuminate\Http\Resources\Json\AnonymousResourceCollection
     * @see PropertyService::getPropertiesForPropertyKeyValue()
     */
    public function getPropertiesForPropertyKeyValue(Request $request, string $keyTranslationValue)
    {
        if(!$request->ajax()) abort(403);
        $propertiesCollection = $this->modelService->getPropertiesForPropertyKeyValue($keyTranslationValue)->get();
        return PropertyResource::collection($propertiesCollection);
    }

    /**
     * @param Request $request
     *
     * @param string  $language_iso2
     *
     * @return \Illuminate\Http\Resources\Json\AnonymousResourceCollection
     */
    public function allKeyTranslationsForLanguage(Request $request, ?string $language_iso2 = null) {
        if(!$request->ajax()) abort(Response::HTTP_FORBIDDEN);

        $language = null;
        if($language_iso2) $language = Language::where('iso_2', $language_iso2)->first();

        return KeyValueTranslation::collection($this->modelService->allKeyTranslationsForLanguage($language)->get());
    }

    /**
     * @param Request $request
     *
     * @param string  $language_iso2
     *
     * @return \Illuminate\Http\Resources\Json\AnonymousResourceCollection
     */
    public function allValueTranslationsForLanguage(Request $request, ?string $language_iso2 = null) {
        if(!$request->ajax()) abort(Response::HTTP_FORBIDDEN);

        $language = null;
        if($language_iso2) $language = Language::where('iso_2', $language_iso2)->first();

        return KeyValueTranslation::collection($this->modelService->allValueTranslationsForLanguage($language)->get());
    }

    /**
     * @param Request $request
     * @param string  $propertizable_type
     * @param string  $propertizable_id
     *
     * @return \Illuminate\Http\JsonResponse|\Illuminate\Http\Resources\Json\AnonymousResourceCollection
     */
    public function getPropertiesForPropertizable(Request $request, string $propertizable_type, string $propertizable_id) {
        if(!$request->ajax()) return response()->json('Only ajax requests are allowed', Response::HTTP_NOT_IMPLEMENTED);

        $query = null;
        switch ($propertizable_type) {
            case 'product':
                $query = Product::query();
                break;
            case 'product_group':
                $query = ProductGroup::query();
                break;
            case 'product_composite':
                $query = ProductComposite::query();
                break;
            default:
                abort(Response::HTTP_BAD_REQUEST, 'Invalid productable type');
        }

        $propertizable = $query->with('properties')->find($propertizable_id);

        return PropertyResource::collection($propertizable->properties);
    }

    /**
     * @param Request $request
     */
    public function all(Request $request) {
        $properties = Property::with('key.translations', 'values.translations')->get();
        return PropertyResource::collection($properties);
    }

    /**
     * @param Request $request
     */
    public function allKeys(Request $request) {
        $keys = PropertyKey::with('translations',)->get();
        return PropertyKeyResource::collection($keys);
    }
}