File: D:/HostingSpaces/SBogers10/franciscaansebeweging.komma.pro/app/Komma/Retreats/RetreatService.php
<?php
/**
* Short description for the file.
*
* @author Komma <support@komma.pro>
* @copyright (c) 2012-2015, Komma Mediadesign
*/
namespace Komma\Retreats;
use Carbon\Carbon;
use Komma\Kms\Languages\Language;
use Komma\Retreats\Models\Retreat;
class RetreatService
{
private $today;
public function __construct()
{
$this->today = Carbon::now()->addHour();
//Detect daylight saving time
if(Carbon::now()->format('I') == 0) $this->today->addHour();
$this->today = $this->today->format('Y-m-d H:i:s');
}
public function getAllRetreats($pagination = false, $itemsPerPage = 9, $ids = null, $onlyHighlighted = false)
{
$retreats = \DB::table('retreats')
->leftJoin('retreat_translations', function ($join)
{
$join->on('retreat_translations.retreat_id', '=', 'retreats.id')
->where('language_id', '=', Language::where('languages.iso_2', '=', \App::getLocale())->first()->id);
})
->where('languages.iso_2', '=', \App::getLocale())
->join('languages', 'languages.id', '=', 'retreat_translations.language_id')
->leftJoin('images', function ($join)
{
$join->on('images.imageble_id', '=', 'retreats.id')
->where('images.imageble_type', '=', 'Komma\Kms\Retreats\Models\Retreat')
->where('sort_order', '=', 1)
->where('sort_order', '=', 1);
})
->leftJoin('routes', function ($join)
{
$join->on('retreat_translations.id', '=', 'routes.routable_id')
->where('routes.routable_type', '=', 'Komma\Kms\Retreats\Models\RetreatTranslation');
})
->select('retreats.*', 'retreat_translations.*', 'routes.route', 'images.medium_image_url')
->where('retreats.active', '=', 1);
if($ids !== null)
{
$retreats = $retreats->whereIn('retreats.id', $ids);
}
if($onlyHighlighted === true){
$retreats = $retreats->where('retreats.highlighted', 1);
}
if($pagination)
{
$retreats = $retreats->paginate($itemsPerPage);
}
else
{
$retreats = $retreats->get();
}
return $retreats;
}
public function getLatestRetreats($items = 5)
{
$retreats = Retreat::with('translation')
->with('translation.route')
->where('active', '=', 1)
->where('order_date', '>=', $this->today);
$retreats->orderBy('order_date', 'asc');
$retreats->limit($items);
$retreats = $retreats->get();
return $retreats;
}
public function getRetreat($id, $nextAndPrev = true)
{
if( ! $retreat = Retreat::where('id', '=', $id)
->with('translation')
->with('translation.route')
->with('images')
->where('active', '=', 1)
->first()
) return \App::abort(404, 'retreat not found');
$this->fillRetreat($retreat);
// if($nextAndPrev) $nextAndPrev = $this->getNextAndPrevious($retreat);
return $retreat;
}
public function fillRetreat(Retreat &$retreat)
{
// $retreat->translation->meta_description = str_limit(strip_tags($retreat->translation->description, 155));
//Comment the decode when there aren't dynamic blocks
$retreat->translation->description = json_decode($retreat->translation->description);
}
public function getNextAndPrevious(&$retreat)
{
$previous = \DB::table('retreats')
->leftJoin('retreat_translations', function ($join)
{
$join->on('retreat_translations.retreat_id', '=', 'retreats.id')
->where('language_id', '=', Language::where('languages.iso_2', '=', \App::getLocale())->first()->id);
})
->where('languages.iso_2', '=', \App::getLocale())
->join('languages', 'languages.id', '=', 'retreat_translations.language_id')
->leftJoin('routes', function ($join)
{
$join->on('retreat_translations.id', '=', 'routes.routable_id')
->where('routes.routable_type', '=', 'Komma\Kms\Retreats\Models\RetreatTranslation');
})
->leftJoin('images', function ($join)
{
$join->on('images.imageble_id', '=', 'retreats.id')
->where('images.imageble_type', '=', 'Komma\Kms\Retreats\Models\Retreat')
->where('sort_order', '=', 1);
})
->select('retreats.*', 'retreat_translations.*', 'routes.route')
->where('retreats.active', '=', 1)
->where('retreats.order_date', '>=', $this->today)
->where('retreats.order_date', '>', $retreat->date)
->where('retreats.id', '!=', $retreat->id)
->orderBy('retreats.order_date', 'desc')
->first();
$next = \DB::table('retreats')
->leftJoin('retreat_translations', function ($join)
{
$join->on('retreat_translations.retreat_id', '=', 'retreats.id')
->where('language_id', '=', Language::where('languages.iso_2', '=', \App::getLocale())->first()->id);
})
->where('languages.iso_2', '=', \App::getLocale())
->join('languages', 'languages.id', '=', 'retreat_translations.language_id')
->leftJoin('routes', function ($join)
{
$join->on('retreat_translations.id', '=', 'routes.routable_id')
->where('routes.routable_type', '=', 'Komma\Kms\Retreats\Models\RetreatTranslation');
})
->leftJoin('images', function ($join)
{
$join->on('images.imageble_id', '=', 'retreats.id')
->where('images.imageble_type', '=', 'Komma\Kms\Retreats\Models\Retreat')
->where('sort_order', '=', 1);
})
->select('retreats.*', 'retreat_translations.*', 'routes.route')
->where('retreats.active', '=', 1)
->where('retreats.order_date', '>=', $this->today)
->where('retreats.order_date', '<', $retreat->date)
->where('retreats.id', '!=', $retreat->id)
->orderBy('retreats.order_date', 'asc')
->first();
$retreat->next = $next;
$retreat->previous = $previous;
}
/**
* Convert activitie date to carbon
*
* @param $retreats
*/
public function makeCarbonDate(&$retreats)
{
foreach ($retreats as $retreat)
{
$date = $retreat->order_date;
$retreat->date = Carbon::createFromFormat('Y-m-d H:i:s', $date);
}
}
/**
* Convert for sorting
*
* @param $activities
*/
public function convertForSorting($activities)
{
$activitiesArray = [];
foreach ($activities as $activity)
{
$activityDates = [];
$dates = json_decode($activity->date);
foreach ($dates as $date){
$activityDates[] = Carbon::createFromFormat('d-m-Y', $date);
}
$activity->dates = $activityDates;
foreach ($activity->dates as $date){
$cloneActivity = clone $activity;
$cloneActivity->date = $date;
if($date >= Carbon::today()) $activitiesArray[$date->timestamp.$cloneActivity->name] = $cloneActivity;
}
}
ksort($activitiesArray);
return $activitiesArray;
}
}