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