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/SBogers110/franciscaansebeweging.nl/app/Komma/Vacancies/VacancyService.php
<?php

/**
 * Short description for the file.
 *
 * @author      Komma <support@komma.pro>
 * @copyright   (c) 2012-2015, Komma Mediadesign
 */

namespace Komma\Vacancies;

use Carbon\Carbon;
use Komma\Kms\Languages\Language;
use Komma\Vacancies\Models\Vacancy;

class VacancyService
{

    public function getAllVacancies($pagination = false, $itemsPerPage = 9, $onlyHighlighted = false)
    {

        // Get pages with translations and routes

        $vacancies = \DB::table('vacancies')
            ->leftJoin('vacancy_translations', function ($join)
            {
                $join->on('vacancy_translations.vacancy_id', '=', 'vacancies.id')
                    ->where('language_id', '=', Language::where('languages.iso_2', '=', \App::getLocale())->first()->id);

            })
            ->where('languages.iso_2', '=', \App::getLocale())
            ->join('languages', 'languages.id', '=', 'vacancy_translations.language_id')
            ->leftJoin('images', function ($join)
            {
                $join->on('images.imageble_id', '=', 'vacancies.id')
                    ->where('images.imageble_type', '=', 'Komma\Kms\Vacancies\Models\Vacancy')
                    ->where('sort_order', '=', 1)
                    ->where('sort_order', '=', 1);
            })
            ->leftJoin('routes', function ($join)
            {
                $join->on('vacancy_translations.id', '=', 'routes.routable_id')
                    ->where('routes.routable_type', '=', 'Komma\Kms\Vacancies\Models\VacancyTranslation');
            })
            ->select('vacancies.*', 'vacancy_translations.*', 'routes.route', 'images.medium_image_url')
            ->where('vacancies.active', '=', 1);

        if($onlyHighlighted === true){
            $vacancies = $vacancies->where('vacancies.highlighted', 1);
        }

        if($pagination)
        {
            $vacancies = $vacancies->paginate($itemsPerPage);
        }
        else
        {
            $vacancies = $vacancies->get();
        }

        return $vacancies;

    }

    public function getHighlighted()
    {
        if( ! $activity = Vacancy::where('highlighted', '=', 1)
            ->with('translation')
            ->with('translation.route')
            ->with('images')
            ->where('active', '=', 1)
            ->first()
        ) return \App::abort(404, 'activity not found');

        $this->fillActivity($activity);

//        if($nextAndPrev) $nextAndPrev = $this->getNextAndPrevious($activity);

        return $activity;
    }

    public function getVacancy($id, $nextAndPrev = true)
    {
        if( ! $vacancy = Vacancy::where('id', '=', $id)
            ->with('translation')
            ->with('translation.route')
            ->with('images')
            ->where('active', '=', 1)
            ->first()
        ) return \App::abort(404, 'vacancy not found');

        $this->fillVacancy($vacancy);

//        if($nextAndPrev) $nextAndPrev = $this->getNextAndPrevious($vacancy);

        return $vacancy;
    }

    public function fillVacancy(Vacancy &$vacancy)
    {
//        $vacancy->translation->meta_description = str_limit(strip_tags($vacancy->translation->description, 155));

        //Comment the decode when there aren't dynamic blocks
        $vacancy->translation->description = json_decode($vacancy->translation->description);

    }


    public function getNextAndPrevious(&$vacancy)
    {
        $previous = \DB::table('vacancies')
            ->leftJoin('vacancy_translations', function ($join)
            {
                $join->on('vacancy_translations.vacancy_id', '=', 'vacancies.id')
                    ->where('language_id', '=', Language::where('languages.iso_2', '=', \App::getLocale())->first()->id);

            })
            ->where('languages.iso_2', '=', \App::getLocale())
            ->join('languages', 'languages.id', '=', 'vacancy_translations.language_id')
            ->leftJoin('routes', function ($join)
            {
                $join->on('vacancy_translations.id', '=', 'routes.routable_id')
                    ->where('routes.routable_type', '=', 'Komma\Kms\Vacancies\Models\VacancyTranslation');
            })
            ->leftJoin('images', function ($join)
            {
                $join->on('images.imageble_id', '=', 'vacancies.id')
                    ->where('images.imageble_type', '=', 'Komma\Kms\Vacancies\Models\Vacancy')
                    ->where('sort_order', '=', 1);
            })
            ->select('vacancies.*', 'vacancy_translations.*', 'routes.route')
            ->where('vacancies.active', '=', 1)
            ->where('vacancies.lft', '<', $vacancy->lft)
            ->where('vacancies.id', '!=', $vacancy->id)
            ->orderBy('vacancies.lft', 'desc')
            ->first();

        $next = \DB::table('vacancies')
            ->leftJoin('vacancy_translations', function ($join)
            {
                $join->on('vacancy_translations.vacancy_id', '=', 'vacancies.id')
                    ->where('language_id', '=', Language::where('languages.iso_2', '=', \App::getLocale())->first()->id);

            })
            ->where('languages.iso_2', '=', \App::getLocale())
            ->join('languages', 'languages.id', '=', 'vacancy_translations.language_id')
            ->leftJoin('routes', function ($join)
            {
                $join->on('vacancy_translations.id', '=', 'routes.routable_id')
                    ->where('routes.routable_type', '=', 'Komma\Kms\Vacancies\Models\VacancyTranslation');
            })
            ->leftJoin('images', function ($join)
            {
                $join->on('images.imageble_id', '=', 'vacancies.id')
                    ->where('images.imageble_type', '=', 'Komma\Kms\Vacancies\Models\Vacancy')
                    ->where('sort_order', '=', 1);
            })
            ->select('vacancies.*', 'vacancy_translations.*', 'routes.route')
            ->where('vacancies.active', '=', 1)
            ->where('vacancies.lft', '>', $vacancy->lft)
            ->where('vacancies.id', '!=', $vacancy->id)
            ->orderBy('vacancies.lft', 'asc')
            ->first();

        $vacancy->next = $next;
        $vacancy->previous = $previous;
    }

    /**
     * Convert for sorting
     *
     * @param $activities
     */
    public function convertForSorting($activities)
    {

        $activitiesArray = [];

        foreach ($activities as $activity) {

            $cloneActivity = clone $activity;
            $activitiesArray[] = $cloneActivity;
        }

        ksort($activitiesArray);

        return $activitiesArray;
    }

}