namespace App\Templates;
use App\Models\News as NewsModel;
+use Carbon\Carbon;
use Cubist\Backpack\app\Magic\Menu\Item;
use Barryvdh\Debugbar\Facade as Debugbar;
$news = NewsModel::with('media')
->where('type', 'news')
->where('status', 1)
+ ->whereDate('date', '<=', Carbon::now())
->orderBy('date', 'desc')
->get();
protected function _getEvents()
{
+ $limit = 2;
+ $now = Carbon::now();
$eventItems = [];
+ // Get all events
$events = NewsModel::with('media')
->where('type', 'event')
->where('status', 1)
- ->orderBy('date', 'desc')
- ->take(2)
+ ->whereDate('date', '<=', $now)
+ ->orderBy('event_start', 'asc')
->get();
+ $currentEvents = [];
+ $pastEvents = [];
+ $futureEvents = [];
+
foreach ($events as $eventItem) {
- $eventItems[$eventItem->id] = $eventItem;
+ if ($eventItem->event_start < $now && $eventItem->event_end > $now) {
+ $currentEvents[$eventItem->id] = $eventItem;
+ } else if ($eventItem->event_start > $now) {
+ $futureEvents[$eventItem->id] = $eventItem;
+ } else {
+ $pastEvents[$eventItem->id] = $eventItem;
+ }
}
- return $eventItems;
+ // First we look at current events
+ $res = $currentEvents;
+
+ // We display all current events
+ if (count($res) >= $limit) {
+ return $currentEvents;
+ }
+
+ // If there is not enough current events, we append future events
+ $res = array_merge($res, $futureEvents);
+ // And only return the $limit events of $current+$future
+ if (count($res) >= $limit) {
+ return array_slice($res, 0, $limit, true);
+ }
+ // If there is not current+future events, we prepend past events
+ $res = array_merge($pastEvents, $res);
+ // And only display the $limit last events of $past+$current+$future
+ return array_slice($res, $limit * -1, $limit, true);
}
}