From ffb98631a60dab5a5cebc9b91107bade60e9702a Mon Sep 17 00:00:00 2001 From: Deon George Date: Sat, 3 May 2025 20:27:02 +1000 Subject: [PATCH] Implemented search via the top menu --- app/Http/Controllers/SearchController.php | 59 ++++++++++++++ .../views/layouts/partials/topmenu.blade.php | 79 ++++++++++++++++++- routes/web.php | 3 +- 3 files changed, 138 insertions(+), 3 deletions(-) create mode 100644 app/Http/Controllers/SearchController.php diff --git a/app/Http/Controllers/SearchController.php b/app/Http/Controllers/SearchController.php new file mode 100644 index 00000000..cf71c2c5 --- /dev/null +++ b/app/Http/Controllers/SearchController.php @@ -0,0 +1,59 @@ +term,'=')) { + list($attr,$value) = explode('=',$request->term,2); + $value = trim($value); + + $result = collect(); + + foreach ($so->baseDNs() as $base) { + $search = (new Entry) + ->in($base); + + $search = ($x=Str::startsWith($value,'*')) + ? $search->whereEndsWith($attr,substr($value,1)) + : $search->whereStartsWith($attr,$value); + + $result = $result->merge($search->get()); + } + + return $result + ->map(fn($item)=>[ + 'name'=>$item->getDN(), + 'value'=>Crypt::encryptString($item->getDN()), + 'category'=>sprintf('%s: [%s=%s%s]',__('Result'),$attr,$value,($x ? '' : '*')) + ]); + + // We are searching for an attribute + } else { + $attrs = $so + ->schema('attributetypes') + ->sortBy('name') + ->filter(fn($item)=>Str::contains($item->name_lc,$request->term)); + + return $attrs + ->map(fn($item)=>[ + 'name'=>$item->name, + 'value'=>'', + 'category'=>__('Select attribute...') + ]) + ->values(); + } + } +} \ No newline at end of file diff --git a/resources/themes/architect/views/layouts/partials/topmenu.blade.php b/resources/themes/architect/views/layouts/partials/topmenu.blade.php index d2a7652f..8b27d7cd 100644 --- a/resources/themes/architect/views/layouts/partials/topmenu.blade.php +++ b/resources/themes/architect/views/layouts/partials/topmenu.blade.php @@ -33,8 +33,12 @@
- - + + +
@@ -160,6 +164,13 @@
@section('page-scripts') + + @append \ No newline at end of file diff --git a/routes/web.php b/routes/web.php index 09021292..a79180ae 100644 --- a/routes/web.php +++ b/routes/web.php @@ -2,7 +2,7 @@ use Illuminate\Support\Facades\Route; -use App\Http\Controllers\{AjaxController,HomeController}; +use App\Http\Controllers\{AjaxController,HomeController,SearchController}; use App\Http\Controllers\Auth\LoginController; use App\Http\Middleware\AllowAnonymous; @@ -27,6 +27,7 @@ Auth::routes([ ]); Route::get('logout',[LoginController::class,'logout']); +Route::post('search',[SearchController::class,'search']); Route::controller(HomeController::class)->group(function() { Route::middleware(AllowAnonymous::class)->group(function() {