From b20c79b679dc13e19fd2a78726b182d0d5bf170c Mon Sep 17 00:00:00 2001 From: James Collins Date: Fri, 27 Sep 2024 13:33:50 +1000 Subject: [PATCH] updated search and added past workshop page --- app/Http/Controllers/SearchController.php | 57 +++++++++++++ app/Http/Controllers/WorkshopController.php | 85 +++---------------- resources/views/components/mast.blade.php | 3 + resources/views/components/navbar.blade.php | 23 ++++- .../views/components/ui/search.blade.php | 2 +- resources/views/post/index.blade.php | 8 +- resources/views/search.blade.php | 40 +++++++++ resources/views/workshop/index.blade.php | 12 +-- routes/web.php | 3 + 9 files changed, 139 insertions(+), 94 deletions(-) create mode 100644 app/Http/Controllers/SearchController.php create mode 100644 resources/views/search.blade.php diff --git a/app/Http/Controllers/SearchController.php b/app/Http/Controllers/SearchController.php new file mode 100644 index 0000000..7405bcf --- /dev/null +++ b/app/Http/Controllers/SearchController.php @@ -0,0 +1,57 @@ +get('q', ''); + $search_words = explode(' ', $search); // Split the search query into words[1] + + $workshopQuery = Workshop::query()->where('status', '!=', 'draft'); + + $workshopQuery->where(function ($query) use ($search_words) { + foreach ($search_words as $word) { + $query->orWhere(function ($subQuery) use ($word) { + $subQuery->where('title', 'like', '%' . $word . '%') + ->orWhere('content', 'like', '%' . $word . '%') + ->orWhereHas('location', function ($locationQuery) use ($word) { + $locationQuery->where('name', 'like', '%' . $word . '%'); + }); + }); + } + }); + + $workshops = $workshopQuery->orderBy('starts_at', 'desc') + ->paginate(6, ['*'], 'workshop'); + + $postQuery = Post::query()->where('status', 'published'); + $postQuery->where(function ($query) use ($search_words) { + foreach ($search_words as $word) { + $query->where(function ($subQuery) use ($word) { + $subQuery->where('title', 'like', '%' . $word . '%') + ->orWhere('content', 'like', '%' . $word . '%'); + }); + } + }); + + $posts = $postQuery->orderBy('created_at', 'desc') + ->paginate(6, ['*'], 'post') + ->onEachSide(1); + + return view('search', [ + 'workshops' => $workshops, + 'posts' => $posts, + 'search' => $search, + ]); + } +} diff --git a/app/Http/Controllers/WorkshopController.php b/app/Http/Controllers/WorkshopController.php index b5cd125..a45897d 100644 --- a/app/Http/Controllers/WorkshopController.php +++ b/app/Http/Controllers/WorkshopController.php @@ -11,93 +11,30 @@ class WorkshopController extends Controller /** * Display a listing of the resource. */ - public function index(Request $request) + public function index() { - $homeView = true; - $search = $request->get('search', ''); - $query = Workshop::query(); - - if(!auth()->user()?->admin) { - $query = $query->where('status', '!=', 'draft'); - } - - if($request->has('search') && $request->search !== '') { - $homeView = false; - $query = $query->where(function ($query) use ($request) { - $query->where('title', 'like', '%' . $request->search . '%') - ->orWhere('content', 'like', '%' . $request->search . '%'); - }); - } - - if($request->has('location') && $request->location !== '') { - $homeView = false; - $query = $query->whereHas('location', function ($query) use ($request) { - $query->where('name', 'like', '%' . $request->location . '%'); - }); - } - - if($request->has('date') && $request->date !== '') { - $homeView = false; - $dates = explode('-', $request->date); - $dates = array_map('trim', $dates); - $dates = array_map(function($date) { - $date = trim($date); - - if(preg_match('/^\d{4}-\d{2}-\d{2}$/', $date)) { - return $date; - } - if(preg_match('/^(\d{2})-(\d{2})-(\d{2})$/', $date, $matches)) { - return '20' . $matches[1] . '-' . $matches[2] . '-' . $matches[3]; - } - if(preg_match('/^\d{4}-\d{2}$/', $date)) { - return $date . '-01'; - } - if(preg_match('/^\d{4}$/', $date)) { - return $date . '-01-01'; - } - if(preg_match('/^(\d{2})\/(\d{2})\/(\d{2})$/', $date, $matches)) { - return '20' . $matches[3] . '-' . $matches[2] . '-' . $matches[1]; - } - if(preg_match('/^(\d{2})\/(\d{2})\/(\d{4})$/', $date, $matches)) { - return $matches[3] . '-' . $matches[2] . '-' . $matches[1]; - } - - return ''; - }, $dates); - - if(count($dates) == 2) { - // If there are two dates, filter between starts_at and ends_at - $query = $query->whereDate('starts_at', '>=', $dates[0]) - ->whereDate('ends_at', '<=', $dates[1]); - } else { - // If there is one date, filter starts_at that date or newer - $query = $query->whereDate('starts_at', '>=', $dates[0]); - } - } - - if($homeView) { - $query = $query->where('starts_at', '>=', Carbon::now()->subDays(8)) - ->orderBy('starts_at', 'asc'); - } else { - $query = $query->orderBy('starts_at', 'asc'); - } + $query = $query->where('starts_at', '>=', Carbon::now()->subDays(8)) + ->orderBy('starts_at', 'asc'); $workshops = $query->paginate(12); return view('workshop.index', [ - 'workshops' => $workshops, - 'search' => $search, + 'workshops' => $workshops ]); } /** * Display a listing of the resource. */ - public function past_index(Request $request) + public function past_index() { + $query = Workshop::query(); + $query = $query->where('starts_at', '<', Carbon::now()) + ->orderBy('starts_at', 'desc'); + + $workshops = $query->paginate(12); return view('workshop.index', [ - 'workshops' => [], -// 'search' => $search, + 'workshops' => $workshops ]); } diff --git a/resources/views/components/mast.blade.php b/resources/views/components/mast.blade.php index 337997e..74746aa 100644 --- a/resources/views/components/mast.blade.php +++ b/resources/views/components/mast.blade.php @@ -1,5 +1,8 @@

{{ $title ?? $slot }}

+ @if(isset($description)) +
{{ $description }}
+ @endif @if(isset($backRoute) && isset($backTitle)) {{ $backTitle }} @endif diff --git a/resources/views/components/navbar.blade.php b/resources/views/components/navbar.blade.php index 3e172ac..5aa3992 100644 --- a/resources/views/components/navbar.blade.php +++ b/resources/views/components/navbar.blade.php @@ -1,4 +1,11 @@ -