3 namespace App\Http\Controllers;
7 use Illuminate\Http\Request;
9 class EventController extends Controller
12 public function search(Request $request) {
13 $validatedData = $request->validate([
14 'after' => 'nullable|date',
15 'before' => 'nullable|date',
16 'order' => 'nullable|string',
17 'with' => 'nullable|array',
20 $events = Event::where('visible', '=', true);
21 if (isset($validatedData['before'])) {
22 $events = $events->where(function ($query) use ($validatedData) {
23 $query->whereNull('start');
24 $query->orWhere('start', '<', $validatedData['before']);
27 if (isset($validatedData['after'])) {
28 $events = $events->where(function ($query) use ($validatedData) {
29 $query->whereNull('end');
30 $query->orWhere('end', '>', $validatedData['after']);
33 if (isset($validatedData['order'])) {
34 switch ($validatedData['order']) {
36 $events->orderByRaw('start IS NOT NULL');
37 $events->orderByRaw('end IS NOT NULL');
38 $events->orderBy('end', 'DESC');
39 $events->orderBy('start', 'DESC');
40 $events->orderBy('name', 'ASC');
44 if (isset($validatedData['with'])) {
45 if (in_array('description', $validatedData['with'])) {
46 $events->with('description');
49 return $events->get()->toJson();
52 public function single(Request $request, Event $event) {
53 $this->authorize('view', $event);
54 $event->load('description');
55 return $event->toJson();