From ab81444e72721027353761854ae61098e5f4b995 Mon Sep 17 00:00:00 2001 From: mingan <11653241+mingan666@users.noreply.github.com> Date: Mon, 1 May 2023 20:21:18 +0200 Subject: [PATCH] Add config for random album id --- app/Http/Controllers/PhotoController.php | 22 +++++++++++---- ...05_01_165730_add_random_photo_settings.php | 28 +++++++++++++++++++ 2 files changed, 44 insertions(+), 6 deletions(-) create mode 100644 database/migrations/2023_05_01_165730_add_random_photo_settings.php diff --git a/app/Http/Controllers/PhotoController.php b/app/Http/Controllers/PhotoController.php index 967a2c6a69e..e559b847a38 100644 --- a/app/Http/Controllers/PhotoController.php +++ b/app/Http/Controllers/PhotoController.php @@ -32,7 +32,7 @@ use App\ModelFunctions\SymLinkFunctions; use App\Models\Configs; use App\Models\Photo; -use App\SmartAlbums\StarredAlbum; +use App\Policies\PhotoQueryPolicy; use Illuminate\Database\Eloquent\ModelNotFoundException; use Illuminate\Http\JsonResponse; use Illuminate\Routing\Controller; @@ -64,9 +64,12 @@ public function get(GetPhotoRequest $request): PhotoResource } /** - * Returns a random public photo (starred) + * Returns a random photo (from the configured album). + * Only photos with enough access rights are included. * This is used in the Frame Controller. * + * @param PhotoQueryPolicy $photoQueryPolicy + * * @return PhotoResource * * @throws ModelNotFoundException @@ -75,13 +78,20 @@ public function get(GetPhotoRequest $request): PhotoResource * * @noinspection PhpIncompatibleReturnTypeInspection */ - public function getRandom(): PhotoResource + public function getRandom(PhotoQueryPolicy $photoQueryPolicy): PhotoResource { + $randomAlbumId = Configs::getValueAsString('random_album_id'); + + if ($randomAlbumId === '') { + $query = $photoQueryPolicy->applySearchabilityFilter(Photo::query()->with(['album', 'size_variants', 'size_variants.sym_links'])); + } else { + $query = $this->albumFactory->findAbstractAlbumOrFail($randomAlbumId) + ->photos() + ->with(['album', 'size_variants', 'size_variants.sym_links']); + } // PHPStan does not understand that `firstOrFail` returns `Photo`, but assumes that it returns `Model` // @phpstan-ignore-next-line - return PhotoResource::make(StarredAlbum::getInstance() - ->photos() - ->inRandomOrder() + return PhotoResource::make($query->inRandomOrder() ->firstOrFail()); } diff --git a/database/migrations/2023_05_01_165730_add_random_photo_settings.php b/database/migrations/2023_05_01_165730_add_random_photo_settings.php new file mode 100644 index 00000000000..1e834fccf05 --- /dev/null +++ b/database/migrations/2023_05_01_165730_add_random_photo_settings.php @@ -0,0 +1,28 @@ +insert([ + 'key' => 'random_album_id', + 'value' => 'starred', + 'cat' => 'Mod Frame', + 'type_range' => 'string', + 'confidentiality' => '0', + 'description' => 'Album id to be used by for random function.', + ]); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + DB::table('configs')->where('key', '=', 'random_album_id')->delete(); + } +};