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/rentman2019.komma.pro/app/Komma/Posts/Kms/PostService.php
<?php

namespace App\Komma\Posts\Kms;

use App\Komma\Kms\Core\Attributes\Attribute;
use App\Komma\Kms\Core\Attributes\Models\SelectOptionInterface;
use App\Komma\Kms\Core\Sections\SectionService;
use App\Komma\Kms\Core\Sections\SectionTabItem;
use App\Komma\Posts\Models\Post;
use App\Komma\Routes\Models\Route;
use App\Komma\Sites\HasSitesInterface;
use Illuminate\Database\Eloquent\Collection;
use Illuminate\Database\Eloquent\Collection as DatabaseCollection;
use Illuminate\Database\Eloquent\Model;

class PostService extends SectionService
{
    protected $sortable = false;

    protected $orderBy = 'date';

    protected $orderReverse = true;

    public function __construct()
    {
        $this->forModelName = Post::class;

        parent::__construct();
    }

    /**
     * This method will save an model
     *
     * @param $model Model or null
     * @param Collection $sectionTabItems These must be filled with data. This is something you need to do yourself.
     *
     * @return mixed
     */
    public function saveModel(Model $model = null, Collection $sectionTabItems): Model
    {
        $model = parent::saveModel($model, $sectionTabItems); //First make sure we have a model and save the attributes in them from the SectionTabItem attributes

        $sectionTabItems->each(function ($sectionTabItem, $key) use ($model) {
            /** @var SectionTabItem $sectionTabItem */
            $attribute = $sectionTabItem->getAttribute();

            $reference = $attribute->getsValueFromReference();
            switch ($attribute->getsValueFrom()) {
                case Attribute::ValueFromTranslationModel:

                    $language = $attribute->getAssociatedLanguage();
                    $translation = $this->getTranslationModelForModelByLanguage($model, $language);

                    if ($reference == 'slug') {
                        $value = $attribute->getValue();

                        // If slug isn't defined we use the name
                        if (empty($value)) {
                            $value = $translation->name;
                        }

                        if (! empty($value)) {
                            $slug = $this->createOrGetUniqueSlug($translation, $value);
                            $translation['slug'] = $slug;
                        }
                    }

                    break;

                case Attribute::ValueFromItself:
                    if ($reference == 'site_id') {
                        // Overrule the normal save to force the default site (1)
//                            $this->siteService->linkModelToSitesUsingIdCsvString($model, $sectionTabItem->getAttribute()->getValue());
                        $this->siteService->linkModelToSitesUsingIdCsvString($model, 1);
                    }
            }
        });

        $model->save(); //Save the page
        $this->saveModelTranslations($model);

        //Return the page
        return $model;
    }

    /**
     * Fills non-post specific attributes. Post specific attributes are processed in the parent
     *
     * @param DatabaseCollection $sectionTabItems A collection containing implementations AbstractSectionTabItem's
     * @param Model $model
     * @return DatabaseCollection
     */
    public function fillAttributesWithData(DatabaseCollection $sectionTabItems, Model $model)
    {
        $filledAttributesCollection = parent::fillAttributesWithData($sectionTabItems, $model);

        $sectionTabItems->each(
            function ($sectionTabItem, $key) use ($model, $filledAttributesCollection, &$quantityDiscountAttribute, &$quantityPriceAttribute) {
                /** @var $sectionTabItem SectionTabItem */
                $attribute = $sectionTabItem->getAttribute();
                if (! is_a($attribute, Attribute::class)) {
                    throw new \InvalidArgumentException('One of the attributes in a AbstractSectionTabItem instance is not but must be an child instance of Attribute.');
                }

                $valueReference = $sectionTabItem->getAttribute()->getsValueFromReference();
                switch ($valueReference) {
                    case 'site_id':
                        /** @var HasSitesInterface $model */
                        $idString = $this->siteService->getSiteIdsForModel($model);
                        if ($idString) {
                            $attribute->setValue($idString);
                        }
                        break;

                    case 'link':

                        $link = '';

                        $language = $attribute->getAssociatedLanguage();
                        $translation = $this->getTranslationModelForModelByLanguage($model, $language);

                        $route = Route::where('route', 'posts')
                            ->where('language_id', $language->id)
                            ->first();

                        if (! empty($translation->slug) && isset($route)) {
                            $link = '/'.$route->alias.'/'.$translation->slug;
                        }

                        $attribute->setLink($link)->setLinkText($link);
                        break;
                }
            }
        );

        return $filledAttributesCollection;
    }

    public function getAllTypes()
    {
        $selectOptions = collect();
        $optionsArray = __('postCategories.categories');

        foreach ($optionsArray as $key => $value) {
            $selectOption = app(SelectOptionInterface::class);
            $selectOption
                ->setValue($key)
                ->setContent($value)
                ->setHtmlContent($value);
            $selectOptions->push($selectOption);
        }

        return $selectOptions;

    }

}