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/netwerkbrabant/netwerkbrabant.nl/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
        ];
    }
}