File: D:/HostingSpaces/SBogers10/netwerkbrabant.komma.pro/app/KommaApp/Tags/TagService.php
<?php
namespace App\KommaApp\Tags;
use App\KommaApp\Tags\Models\Tag;
use App\KommaApp\Tags\Models\TagTranslation;
use Carbon\Carbon;
class TagService
{
public function __construct()
{
$this->today = Carbon::now()->addHour();
$this->today = $this->today->format('Y-m-d H:i:s');
}
public function getTagBySlug($slug)
{
if(!$tagTranslation = TagTranslation::where('slug', $slug)->first()) \App::abort(404);
$tag = $tagTranslation->translatable;
$tag->load('translation');
return $tag;
}
public function getTaggableModels(Tag $tag)
{
$taggableModels = [];
$this->getMagazineArticlesForTag($tag, $taggableModels);
$this->getEventsForTag($tag, $taggableModels);
$this->getPastEventsForTag($tag, $taggableModels);
$this->getNewsArticlesForTag($tag, $taggableModels);
return $taggableModels;
}
private function getMagazineArticlesForTag(Tag $tag, &$taggableModels)
{
$magazineArticles = $tag->magazineArticles()
->has('images')
->has('partners')
->has('company')
->has('magazines')
->where('active', 1)
->orderBy('id','desc')
->with('images', 'translation', 'magazines', 'magazines.translation')
->take(5)
->get();
if($magazineArticles->count() == 0) return;
$showLink = false;
if($magazineArticles->count() > 4) $showLink = true;
$preparedMagazineArticles = [];
// We actually only need 4
$magazineArticles = $magazineArticles->take(4);
foreach($magazineArticles as $magazineArticle){
$magazineArticleRoute = $magazineArticle->magazines->first()->translation->slug.'/'.$magazineArticle->translation->slug;
$preparedMagazineArticle = (object)[
'name' => $magazineArticle->translation->name,
'description' => '<p>'.nl2br($magazineArticle->translation->meta_description).'</p>',
'route' => $magazineArticleRoute,
'images' => $magazineArticle->images,
];
$preparedMagazineArticles[] = $preparedMagazineArticle;
}
$taggableModels['magazineArticles'] = (object)[
'showLink' => $showLink,
'models' => $preparedMagazineArticles
];
}
private function getEventsForTag(Tag $tag, &$taggableModels)
{
$events = $tag->events()
->has('images')
->where('active', 1)
->whereNotNull('region_id')
->where('date', '>=', $this->today)
->orderBy('date','asc')
->with('images', 'translation')
->take(5)
->get();
if($events->count() == 0) return;
$showLink = false;
if($events->count() > 4) $showLink = true;
$preparedEvents = [];
// We actually only need 4
$events = $events->take(4);
foreach($events as $event){
$eventDescription = '<p>';
if(!empty($event->location_name)) $eventDescription.= '<strong>'.$event->location_name.'</strong><br/>';
if(!empty($event->time)) $eventDescription.= $event->time.'<br/>';
$eventDescription.= $event->date->format('d').' '. __('calendar.monthNamesShort.'.($event->date->format('n') - 1)) . ' '. $event->date->format('Y') .'</p>';
$preparedEvent = (object)[
'name' => $event->translation->name,
'description' => $eventDescription,
'route' => $event->translation->slug,
'images' => $event->images,
];
$preparedEvents[] = $preparedEvent;
}
$taggableModels['events'] = (object)[
'showLink' => $showLink,
'models' => $preparedEvents
];
}
private function getPastEventsForTag(Tag $tag, &$taggableModels)
{
$pastEvents = $tag->pastEvents()
->has('images')
->where('active', 1)
->whereNotNull('region_id')
->where('date', '<=', $this->today)
->orderBy('date','desc')
->with('images', 'translation')
->take(5)
->get();
if($pastEvents->count() == 0) return;
$showLink = false;
if($pastEvents->count() > 4) $showLink = true;
$preparedPastEvents = [];
// We actually only need 4
$pastEvents = $pastEvents->take(4);
foreach($pastEvents as $pastEvent){
$pastEventDescription = '<p>';
if(!empty($pastEvent->translation->sub_title)) $pastEventDescription.= '<strong>'.$pastEvent->translation->sub_title.'</strong><br/>';
$pastEventDescription.= $pastEvent->date->format('d').' '. __('calendar.monthNames.'.($pastEvent->date->format('n') - 1)) . ' '. $pastEvent->date->format('Y') .'</p>';
$preparedPastEvent = (object)[
'name' => $pastEvent->translation->name,
'description' => $pastEventDescription,
'route' => $pastEvent->translation->slug,
'images' => $pastEvent->images,
];
$preparedPastEvents[] = $preparedPastEvent;
}
$taggableModels['pastEvents'] = (object)[
'showLink' => $showLink,
'models' => $preparedPastEvents
];
}
private function getNewsArticlesForTag(Tag $tag, &$taggableModels)
{
$newsArticles = $tag->newsArticles()
->has('images')
->where('active', 1)
->where('date', '<=', $this->today)
->orderBy('date','desc')
->with('images', 'translation')
->take(5)
->get();
if($newsArticles->count() == 0) return;
$showLink = false;
if($newsArticles->count() > 4) $showLink = true;
$preparedNewsArticles = [];
// We actually only need 4
$newsArticles = $newsArticles->take(4);
foreach($newsArticles as $newsArticle){
$newsArticleDescription = '<p>'.$newsArticle->date->format('d').' '. __('calendar.monthNames.'.($newsArticle->date->format('n') - 1)) . ' '. $newsArticle->date->format('Y') .'</p>';
$preparedNewsArticle = (object)[
'name' => $newsArticle->translation->name,
'description' => $newsArticleDescription,
'route' => $newsArticle->translation->slug,
'images' => $newsArticle->images,
];
$preparedNewsArticles[] = $preparedNewsArticle;
}
$taggableModels['newsArticles'] = (object)[
'showLink' => $showLink,
'models' => $preparedNewsArticles
];
}
}