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 @@