diff --git a/app/Http/Controllers/Api/V2/Rsi/CommLink/ImageController.php b/app/Http/Controllers/Api/V2/Rsi/CommLink/ImageController.php index 6a1f68085..d03cf444d 100644 --- a/app/Http/Controllers/Api/V2/Rsi/CommLink/ImageController.php +++ b/app/Http/Controllers/Api/V2/Rsi/CommLink/ImageController.php @@ -6,6 +6,8 @@ use App\Http\Controllers\Api\V2\AbstractApiV2Controller; use App\Http\Filters\ImageTagFilter; +use App\Http\Requests\AbstractSearchRequest; +use App\Http\Requests\Rsi\CommLink\Image\ImageSearchRequest; use App\Http\Resources\AbstractBaseResource; use App\Http\Resources\Rsi\CommLink\CommLinkResource; use App\Http\Resources\Rsi\CommLink\Image\ImageResource; @@ -85,4 +87,38 @@ public function random(Request $request): AnonymousResourceCollection return ImageResource::collection($query); } + + #[OA\Post( + path: '/api/v2/comm-link-images/search', + tags: ['Comm-Links', 'RSI-Website', 'Images', 'Search'], + parameters: [ + new OA\Parameter(ref: '#/components/parameters/limit'), + new OA\Parameter(name: 'filter[tags]', in: 'query', schema: new OA\Schema(type: 'string')), + ], + responses: [ + new OA\Response( + response: 200, + description: 'Search for a Comm-Link Image by its filename.', + content: new OA\JsonContent( + type: 'array', + items: new OA\Items(ref: '#/components/schemas/comm_link_image_v2') + ) + ) + ] + )] + public function search(ImageSearchRequest $request): AnonymousResourceCollection + { + $query = QueryBuilder::for(Image::class, $request) + ->allowedFilters([ + AllowedFilter::partial('tags', 'tags.name'), + ]) + ->whereNull('base_image_id') + ->whereRaw("LOWER(src) LIKE ?", [sprintf('%%%s%%', strtolower($request->get('query')))]) + ->whereRelation('metadata', 'size', '>', 0) + ->limit($this->limit) + ->orderByDesc('created_at') + ->get(); + + return ImageResource::collection($query); + } } diff --git a/app/Http/Controllers/Web/User/Rsi/CommLink/Image/ImageController.php b/app/Http/Controllers/Web/User/Rsi/CommLink/Image/ImageController.php index fcbdd03e7..8119eb686 100644 --- a/app/Http/Controllers/Web/User/Rsi/CommLink/Image/ImageController.php +++ b/app/Http/Controllers/Web/User/Rsi/CommLink/Image/ImageController.php @@ -7,6 +7,7 @@ use App\Http\Controllers\Api\V2\Rsi\CommLink\CommLinkSearchController; use App\Http\Controllers\Controller; use App\Http\Requests\Rsi\CommLink\Image\AddImageTagsRequest; +use App\Http\Requests\Rsi\CommLink\Image\ImageSearchRequest; use App\Http\Requests\Rsi\CommLink\Image\ImageUploadRequest; use App\Models\Rsi\CommLink\Image\Image; use App\Models\Rsi\CommLink\Image\ImageMetadata; @@ -61,7 +62,6 @@ function (Builder $query) use ($request) { 'user.rsi.comm_links.images.index', [ 'images' => $query - ->where('local', 1) ->orderByDesc('id') ->groupBy('src') ->paginate(50), @@ -183,4 +183,22 @@ public function saveTags(Image $image, AddImageTagsRequest $request): RedirectRe return redirect()->back(); } + + /** + * Search for images by filename + * + * @param ImageSearchRequest $request + * @return View + */ + public function search(ImageSearchRequest $request): View { + $request->query->set('limit', 250); + $controller = new \App\Http\Controllers\Api\V2\Rsi\CommLink\ImageController($request); + + return view( + 'user.rsi.comm_links.images.index', + [ + 'images' => $controller->search($request), + ] + ); + } } diff --git a/app/Http/Requests/Rsi/CommLink/Image/ImageSearchRequest.php b/app/Http/Requests/Rsi/CommLink/Image/ImageSearchRequest.php new file mode 100644 index 000000000..606f75489 --- /dev/null +++ b/app/Http/Requests/Rsi/CommLink/Image/ImageSearchRequest.php @@ -0,0 +1,12 @@ +where('size', '>=', 250 * 1024) ->where('comm_link_images.id', '!=', $this->id) + ->where('comm_link_images.base_image_id', 'IS NULL') ->orderBy('pdq_distance') ->limit($limit) ->get() diff --git a/lang/en.json b/lang/en.json index 2874782d2..30bff7cd2 100644 --- a/lang/en.json +++ b/lang/en.json @@ -79,16 +79,16 @@ "Comm-Link bearbeiten": "Edit Comm-Link", "Comm-Link Benachrichtigungen erhalten": "Comm-Link notifications received", "Comm-Link Bild": "Comm-Link image", - "Comm-Link Bild URL": "Comm-Link image URL", + "Comm-Link Bild URL": "Comm-Link media URL", "Comm-Link Bilder": "Comm-Link images", "Comm-Link Bildlinksuche": "Comm-Link Image Link Search", "Comm-Link Bildsuche": "Comm-Link Image Search", "Comm-Link Channel": "Comm-Link Channel", - "Comm-Link Inhalt": "Comm-Link content", "Comm-Link Kategorien": "Comm-Link categories", "Comm-Link Metadaten": "Comm-Link Metadata", "Comm-Link Rückwärtssuche": "Comm-Link Reverse Search", "Comm-Link Serien": "Comm-Link Series", + "Comm-Link Titelsuche": "Search Comm-Links by Title", "Comm-Links": "Comm-Links", "Comm-Links mit geändertem Inhalt": "Comm-Links with modified content", "Comm-Links mit neuem Inhalt": "Comm-Links with new content", @@ -299,12 +299,16 @@ "Suche nach Bildern": "Search for images", "Suche nach Comm-Links mit Bild": "Search for Comm-Links with image", "Suche nach Comm-Links mit Bildlink": "Search for Comm-Links with image link", + "Suche nach Comm-Links mit Medienurl": "Search for Comm-Links containing a media url", + "Suche nach Comm-Link mit Text": "Search for Comm-Links containing some text", + "Suche nach Comm-Link mit Bild": "Reverse search a Comm-Link by an image", + "Suche nach Comm-Link Bildern": "Search for Comm-Link images by name", "Systeme": "Systems", "Tabelle leeren": "Empty table", "Tags": "Tags", "Textänderungen": "Text changes", - "Text, welcher in einem Comm-Link vorkommt": "Text which occurs in a Comm-Link", + "Text, welcher in einem Comm-Link vorkommt": "Text which occurs in the body of a Comm-Link", "Titel": "Title", "Transkript": "Transcript", "Transkripte": "Transcripts", diff --git a/resources/views/components/forms/form-group.blade.php b/resources/views/components/forms/form-group.blade.php index 86bbbbb6e..eaacb1376 100644 --- a/resources/views/components/forms/form-group.blade.php +++ b/resources/views/components/forms/form-group.blade.php @@ -42,6 +42,7 @@ class="{{ $inputClass ?? 'form-control' }} {{ $errors->has($id) ? 'is-invalid' : class="{{ $inputClass ?? 'form-control' }} {{ $errors->has($id) ? 'is-invalid' : '' }}" @if(isset($required) && $required == '1') required @endif @if(isset($autofocus) && $autofocus == '1') autofocus @endif + @if(isset($placeholder)) placeholder="{{ $placeholder }}" @endif {{ $inputOptions ?? '' }} /> @endif {{ $slot }} diff --git a/resources/views/user/rsi/comm_links/components/image_info_card.blade.php b/resources/views/user/rsi/comm_links/components/image_info_card.blade.php index 621b7a2c9..8abc728c7 100644 --- a/resources/views/user/rsi/comm_links/components/image_info_card.blade.php +++ b/resources/views/user/rsi/comm_links/components/image_info_card.blade.php @@ -20,10 +20,11 @@ @endunless {{ $image->metadata->mime }} - + {{ $image->name }} @elseif(\Illuminate\Support\Str::contains($image->metadata->mime, 'audio')) @@ -103,7 +104,7 @@ class="card-img-top" @lang('Duplikate') @foreach($image->duplicates as $duplicate) - {{ $duplicate->name }} ({{ $duplicate->similarity }}%) + {{ $duplicate->name }} @endforeach diff --git a/resources/views/user/rsi/comm_links/images/index.blade.php b/resources/views/user/rsi/comm_links/images/index.blade.php index 93dd280ea..26ef5bc5e 100644 --- a/resources/views/user/rsi/comm_links/images/index.blade.php +++ b/resources/views/user/rsi/comm_links/images/index.blade.php @@ -73,13 +73,15 @@ }) } - mimeSelect.addEventListener('change', (ev) => { - currentUrl.searchParams.delete('page') - currentUrl.searchParams.delete('mime') - currentUrl.searchParams.append('mime', ev.target.value) + if (mimeSelect) { + mimeSelect.addEventListener('change', (ev) => { + currentUrl.searchParams.delete('page') + currentUrl.searchParams.delete('mime') + currentUrl.searchParams.append('mime', ev.target.value) - window.location = currentUrl.href - }) + window.location = currentUrl.href + }); + } })(); @endsection \ No newline at end of file diff --git a/resources/views/user/rsi/comm_links/images/show.blade.php b/resources/views/user/rsi/comm_links/images/show.blade.php index af8a8d83d..f4027fd49 100644 --- a/resources/views/user/rsi/comm_links/images/show.blade.php +++ b/resources/views/user/rsi/comm_links/images/show.blade.php @@ -68,7 +68,7 @@ @forelse($image->duplicates as $duplicate) - {{ $duplicate->name }} ({{ $duplicate->similarity }}%) + {{ $duplicate->name }} @empty @lang('Keine') @endforelse diff --git a/resources/views/user/rsi/comm_links/search.blade.php b/resources/views/user/rsi/comm_links/search.blade.php index f262a767e..b2eb1ab5d 100644 --- a/resources/views/user/rsi/comm_links/search.blade.php +++ b/resources/views/user/rsi/comm_links/search.blade.php @@ -29,7 +29,7 @@ - {{ __('Comm-Link Bildlinksuche') }} + {{ __('Suche nach Comm-Links mit Medienurl') }} @@ -49,7 +49,7 @@ @lang('URL der Form'): https://robertsspaceindustries.com/media/...https://media.robertsspaceindustries.com/... @endcomponent - @lang('Suche nach Comm-Links mit Bildlink') + @lang('Suche') @endcomponent @@ -58,7 +58,7 @@ - {{ __('Comm-Link Inhalt') }} + {{ __('Suche nach Comm-Link mit Text') }} @@ -68,23 +68,26 @@ ]) @component('components.forms.form-group', [ 'inputType' => 'text', - 'label' => __('Comm-Link Inhalt'), + 'label' => __('Inhalt'), 'id' => 'query', 'inputOptions' => 'required', + 'placeholder' => 'Welcome to the Comm-Link' ]) @lang('Text, welcher in einem Comm-Link vorkommt') @endcomponent - @lang('Suche nach Bildern') + @lang('Suche') @endcomponent @endauth + + - {{ __('Comm-Link Bildsuche') }} + {{ __('Suche nach Comm-Link mit Bild') }} @@ -124,9 +127,32 @@ @lang('Sehr ungenau') + @lang('Suche') + @endcomponent + + + + + + {{ __('Suche nach Comm-Link Bildern') }} + + + + @component('components.forms.form', [ + 'action' => route('web.user.rsi.comm-links.images.search'), + 'class' => 'd-flex h-100 flex-column', + ]) + @component('components.forms.form-group', [ + 'inputType' => 'text', + 'label' => __('Dateiname'), + 'id' => 'query', + 'placeholder' => 'Carrack', + 'required' => true + ]) + @endcomponent - @lang('Suche nach Comm-Links mit Bild') + @lang('Suche') @endcomponent diff --git a/routes/api/api_v2.php b/routes/api/api_v2.php index 099a18e5e..1e9dda9f3 100644 --- a/routes/api/api_v2.php +++ b/routes/api/api_v2.php @@ -27,7 +27,7 @@ static function () { Route::get('comm-link-images', 'ImageController@index')->name('cli.index'); Route::get('comm-link-images/random', 'ImageController@random')->name('cli.random'); - #Route::post('comm-link-images/search', 'ImageController@search')->name('cli.search'); + Route::post('comm-link-images/search', 'ImageController@search')->name('cli.search'); #Route::get('comm-link-images/{image}', 'ImageController@show')->name('cli.show'); Route::get('comm-link-images/{image}/similar', 'CommLinkSearchController@similarSearch')->name('cli.similar'); } diff --git a/routes/web/user.php b/routes/web/user.php index aa53559e0..34b0fb915 100644 --- a/routes/web/user.php +++ b/routes/web/user.php @@ -207,6 +207,7 @@ static function () { Route::get('images', 'Image\ImageController@index')->name('images.index'); Route::post('images/upload-wiki', 'Image\ImageController@upload')->name('images.upload-wiki'); + Route::post('images/search', 'Image\ImageController@search')->name('images.search'); Route::get('images/{image}/similar', 'Image\ImageController@similarImages')->name('images.similar'); Route::get('images/{image}/tags', 'Image\ImageController@editTags')->name('images.edit-tags'); Route::patch('images/{image}/tags', 'Image\ImageController@saveTags')->name('images.save-tags');
@lang('Duplikate')