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);
}
}