. */ declare(strict_types=1); namespace Fisharebest\Webtrees\Http\RequestHandlers; use Fisharebest\Webtrees\Registry; use Fisharebest\Webtrees\Tree; use Illuminate\Support\Collection; use League\Flysystem\Filesystem; use League\Flysystem\FilesystemException; use Psr\Http\Message\ServerRequestInterface; use function assert; /** * Autocomplete handler for media folders */ class AutoCompleteFolder extends AbstractAutocompleteHandler { /** * @param ServerRequestInterface $request * * @return Collection */ protected function search(ServerRequestInterface $request): Collection { $tree = $request->getAttribute('tree'); assert($tree instanceof Tree); $query = $request->getAttribute('query'); $media_filesystem = Registry::filesystem()->media($tree); try { $contents = new Collection($media_filesystem->listContents('', Filesystem::LIST_DEEP)); return $contents ->filter(static function (array $object) use ($query): bool { return $object['type'] === 'dir' && str_contains($object['path'], $query); }) ->values() ->pluck('path') ->take(static::LIMIT); } catch (FilesystemException $ex) { return new Collection(); } } }