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/DiscountTranslationService.php
<?php declare(strict_types=1);


namespace App\Discounts;


use Illuminate\Support\Collection;
use Komma\KMS\Globalization\Languages\Models\Language;

class DiscountTranslationService
{
    public function saveFromJsonArray(Discount $discount, array $data): Collection {
        $translationClass = $className = get_class($discount->translations()->getRelated());

        return collect($data)->map(function(array $data) use($discount, $translationClass) {
            if(!array_key_exists('state', $data)) throw new \InvalidArgumentException('The data must contain a state attribute, but it did not contain it.');

            $translation = null;
            switch ($data['state']) {
                case Discount::NEW:
                    $translation = new $translationClass;
                    $translation->fill($data);
                    if($translation->isEmpty()) break;
                    if(array_key_exists('language', $data)) $this->saveDiscountTranslationLanguage($translation, $data['language']);
                    $discount->translations()->save($translation);
                    break;
                case Discount::PRISTINE:
                case Discount::DIRTY:
                    /** @var DiscountTranslation|null $translation */
                    $translation = $translationClass::find($data['id']);
                    if(!$translation) throw new \InvalidArgumentException('Data refers to a key that does not exist anymore. Cannot save a '.$translationClass);
                    $translation->fill($data);
                    if(array_key_exists('language', $data)) $this->saveDiscountTranslationLanguage($translation, $data['language']);
                    $discount->translations()->save($translation);
                    break;
                case Discount::DELETED:
                    $translation = $translationClass::find($data['id']);
                    $translation->delete();
                    break;
            }

            return $translation;
        })->filter(
            fn($translationResource) => is_a($translationResource, $translationClass)
        );
    }

    protected function saveDiscountTranslationLanguage(DiscountTranslation $translation, $data): DiscountTranslation {
        if(!array_key_exists('iso_2', $data)) throw new \InvalidArgumentException('The data must contain an iso_2 attribute. But did not contain it.');

        $language = Language::where('iso_2', '=', $data['iso_2'])->first();
        $translation->language()->associate($language);
        return $translation;
    }
}