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/Neopoints/momsecurity.be/app/Services/Kms/ServiceTranslationService.php
<?php


namespace App\Services\Kms;


use App\Services\Models\Service;
use App\Services\Models\ServiceTranslation;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Support\Collection;
use Komma\KMS\Core\AbstractTranslationModel;
use Komma\KMS\Core\HasSlugInterface;
use Komma\KMS\Core\TranslationService;
use Komma\KMS\Sites\HasSiteInterface;
use Komma\KMS\Sites\HasSitesInterface;

class ServiceTranslationService extends TranslationService
{

    protected $modelClassName = ServiceTranslation::class;

    /**
     * Generates a unique slug for the model, and saves it at the model.
     *
     * @param Model $model
     * @return Model
     */
    protected function saveSlugForModel(Model $model): Model {

        if(!is_a($model,HasSlugInterface::class)) return $model;

        /** @var HasSlugInterface $model */
        $suggestedSlug = $model->suggestSlug();

        $service = Service::find($model->service_id);
        $collection = $this->retrieveCollectionForCreatingSlug($service);

        while($collection->where('slug', '=', $suggestedSlug)->count() !== 0) {
            $suggestedSlug = create_unique_slug($collection, $suggestedSlug);
        }
        $model->slug = $suggestedSlug;
        $model->save();

        return $model;
    }


    /**
     * @param Model $model
     * @return Collection
     */
    private function retrieveCollectionForCreatingSlug(Model $model)
    {
        $services =  Service::where('service_type', $model->service_type)
            ->where('id', '!=', $model->id)
            ->with('translations')
            ->has('translations')
            ->get();

        $serviceTranslations = collect([]);

        foreach ($services as $service) {
            foreach ($service->translations as $translation) $serviceTranslations->push($translation);
        }
        return $serviceTranslations;
    }

}