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/fire-tech/fire-tech.nl/app/KommaApp/Subscription/SubscriptionService.php
<?php

namespace App\KommaApp\Subscriptions\Kms;

use App\KommaApp\Courses\Models\Course;
use App\KommaApp\Kms\Core\Attributes\Attribute;
use App\KommaApp\Kms\Core\Attributes\Models\SelectOption;
use App\KommaApp\Kms\Core\Sections\SectionService;
use App\KommaApp\Kms\Core\Sections\SectionTabItem;
use App\KommaApp\Subscription\Notifications\AdminSubscriptionNotification;
use App\KommaApp\Subscription\Notifications\ClientSubscriptionNotification;
use App\KommaApp\Subscriptions\Models\Subscription;
use App\KommaApp\Users\Models\Role;
use App\KommaApp\Users\Models\User;
use Illuminate\Support\Facades\Notification;
use Illuminate\Database\Eloquent\Collection;
use Illuminate\Database\Eloquent\Model;

class SubscriptionService extends SectionService
{
    protected $sortable = false;

    /**
     * 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
    {
        /** @var Subscription $model */
        //Process Subscription Specific attributes

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

            $reference = $attribute->getsValueFromReference();
            $value = (int) $attribute->getValue();
            switch ($attribute->getsValueFrom()) {
                case Attribute::ValueFromModel:
                    if ($reference == 'course_id') {
                        $model->course_id = $value;
                        $attribute->mapValueFrom(Attribute::ValueFromItself,
                            ''); //unset parent_id it so it won't get saved directly on the model in the parent_id field. The makeLastChildOf call above does save the parent id via lft rgt
                    }

                    break;
            }
        });

        $model = parent::saveModel($model,
            $sectionTabItems); //First make sure we have a model and save the attributes in them from the SectionTabItem attributes

        //Return the subscription
        return $model;
    }

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

        parent::__construct();
    }

    /**
     * Notify admins that a new Subscription was done
     *
     * @param Subscription $subscription
     */
    public static function notifyAdminsAndClientForNewSubscription(Subscription $subscription)
    {
        /** @var Course $course */
        $course = $subscription->course()->first();

        Notification::route('mail', config('site.mailTo'))
            ->notify(new AdminSubscriptionNotification($subscription, $course));

        (new User(['email' => $subscription->email]))->notify(new ClientSubscriptionNotification($subscription, $course));
    }


    /**
     * @param int|null $siteId
     * @param int|null $languageId TODO: Jules. Check if we still need this
     * @param int|null $excludeId TODO: Jules. Check if we still need this
     * @return SelectOptionInterface[]
     */
    public function getOptionsForSelect($languageId = null, int $excludeId = null): array
    {
        /** @var $sidebarListItems SidebarListItem[] */
        $sidebarListItems = $this->getModelsForSideBar();

        if ($excludeId == -1) {
            $entities = [];
        }
        foreach ($sidebarListItems as $sidebarListItem) {
            /** @var Subscription $model */
            $model = $this->forModelName::find($sidebarListItem->getId());
            if (! $model) {
                continue;
            }

            $entities[] = (new SelectOption())
                ->setValue($model->id)
                ->setContent($sidebarListItem->getName())
                ->setHtmlContent($sidebarListItem->getName());
        }

        return $entities;
    }

}