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