update: rss system

- a lot more refactoring to come
This commit is contained in:
HDVinnie
2021-08-10 11:31:47 -04:00
parent 62b241ee4d
commit 88bf916b0a
6 changed files with 106 additions and 119 deletions
+17 -21
View File
@@ -13,6 +13,7 @@
namespace App\Http\Controllers;
use App\Models\Genre;
use App\Models\Category;
use App\Models\Group;
use App\Models\Resolution;
@@ -20,21 +21,14 @@ use App\Models\Rss;
use App\Models\Torrent;
use App\Models\Type;
use App\Models\User;
use App\Repositories\TorrentFacetedRepository;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
/**
* @see \Tests\Todo\Feature\Http\Controllers\RssControllerTest
*/
class RssController extends Controller
{
/**
* RssController Constructor.
*/
public function __construct(private TorrentFacetedRepository $torrentFacetedRepository)
{
}
/**
* Display a listing of the RSS resource.
*
@@ -61,13 +55,12 @@ class RssController extends Controller
public function create(Request $request): \Illuminate\Contracts\View\Factory | \Illuminate\View\View
{
$user = $request->user();
$torrentRepository = $this->torrentFacetedRepository;
return \view('rss.create', [
'torrent_repository' => $torrentRepository,
'categories' => Category::all()->sortBy('position'),
'types' => Type::all()->sortBy('position'),
'resolutions' => Resolution::all()->sortBy('position'),
'categories' => Category::select(['id', 'name', 'position'])->get()->sortBy('position'),
'types' => Type::select(['id', 'name', 'position'])->get()->sortBy('position'),
'resolutions' => Resolution::select(['id', 'name', 'position'])->get()->sortBy('position'),
'genres' => Genre::all()->sortBy('name'),
'user' => $user,
]);
}
@@ -87,7 +80,7 @@ class RssController extends Controller
'categories' => 'sometimes|array|max:999',
'types' => 'sometimes|array|max:999',
'resolutions' => 'sometimes|array|max:999',
'genres' => 'sometimes|array|max:999',
'genres.*' => 'exists:genres,id|sometimes|array|max:999',
'position' => 'sometimes|integer|max:9999',
]);
@@ -263,7 +256,11 @@ class RssController extends Controller
}
if ($rss->object_torrent->genres && \is_array($rss->object_torrent->genres)) {
// TODO
$tvCollection = DB::table('genre_tv')->whereIn('genre_id', $genres)->pluck('tv_id');
$movieCollection = DB::table('genre_movie')->whereIn('genre_id', $genres)->pluck('movie_id');
$mergedCollection = $tvCollection->merge($movieCollection);
$builder->whereRaw("tmdb in ('".\implode("','", $mergedCollection->toArray())."')"); // Protected with Validation that IDs passed are not malicious
}
if ($rss->object_torrent->freeleech && $rss->object_torrent->freeleech != null) {
@@ -321,13 +318,12 @@ class RssController extends Controller
$user = $request->user();
$rss = Rss::where('is_private', '=', 1)->findOrFail($id);
\abort_unless($user->group->is_modo || $user->id === $rss->user_id, 403);
$torrentRepository = $this->torrentFacetedRepository;
return \view('rss.edit', [
'torrent_repository' => $torrentRepository,
'categories' => Category::all()->sortBy('position'),
'types' => Type::all()->sortBy('position'),
'resolutions' => Resolution::all()->sortBy('position'),
'categories' => Category::select(['id', 'name', 'position'])->get()->sortBy('position'),
'types' => Type::select(['id', 'name', 'position'])->get()->sortBy('position'),
'resolutions' => Resolution::select(['id', 'name', 'position'])->get()->sortBy('position'),
'genres' => Genre::all()->sortBy('name'),
'user' => $user,
'rss' => $rss,
]);
@@ -349,7 +345,7 @@ class RssController extends Controller
'categories' => 'sometimes|array|max:999',
'types' => 'sometimes|array|max:999',
'resolutions' => 'sometimes|array|max:999',
'genres' => 'sometimes|array|max:999',
'genres.*' => 'exists:genres,id|sometimes|array|max:999',
'position' => 'sometimes|integer|max:9999',
]);
+15 -23
View File
@@ -13,12 +13,12 @@
namespace App\Http\Controllers\Staff;
use App\Models\Genre;
use App\Http\Controllers\Controller;
use App\Models\Category;
use App\Models\Resolution;
use App\Models\Rss;
use App\Models\Type;
use App\Repositories\TorrentFacetedRepository;
use Illuminate\Http\Request;
/**
@@ -26,13 +26,6 @@ use Illuminate\Http\Request;
*/
class RssController extends Controller
{
/**
* RssController Constructor.
*/
public function __construct(private TorrentFacetedRepository $torrentFacetedRepository)
{
}
/**
* Display a listing of the RSS resource.
*
@@ -54,14 +47,14 @@ class RssController extends Controller
public function create(Request $request): \Illuminate\Contracts\View\Factory | \Illuminate\View\View
{
$user = $request->user();
$torrentRepository = $this->torrentFacetedRepository;
return \view('Staff.rss.create', [
'torrent_repository' => $torrentRepository,
'categories' => Category::all()->sortBy('position'),
'types' => Type::all()->sortBy('position'),
'resolutions' => Resolution::all()->sortBy('position'),
'user' => $user, ]);
'categories' => Category::select(['id', 'name', 'position'])->get()->sortBy('position'),
'types' => Type::select(['id', 'name', 'position'])->get()->sortBy('position'),
'resolutions' => Resolution::select(['id', 'name', 'position'])->get()->sortBy('position'),
'genres' => Genre::all()->sortBy('name'),
'user' => $user,
]);
}
/**
@@ -79,7 +72,7 @@ class RssController extends Controller
'categories' => 'sometimes|array|max:999',
'types' => 'sometimes|array|max:999',
'resolutions' => 'sometimes|array|max:999',
'genres' => 'sometimes|array|max:999',
'genres' => 'exists:genres,id|sometimes|array|max:999',
'position' => 'sometimes|integer|max:9999',
]);
@@ -124,15 +117,14 @@ class RssController extends Controller
{
$user = $request->user();
$rss = Rss::where('is_private', '=', 0)->findOrFail($id);
$torrentRepository = $this->torrentFacetedRepository;
return \view('Staff.rss.edit', [
'torrent_repository' => $torrentRepository,
'categories' => Category::all()->sortBy('position'),
'types' => Type::all()->sortBy('position'),
'resolutions' => Resolution::all()->sortBy('position'),
'user' => $user,
'rss' => $rss,
'categories' => Category::select(['id', 'name', 'position'])->get()->sortBy('position'),
'types' => Type::select(['id', 'name', 'position'])->get()->sortBy('position'),
'resolutions' => Resolution::select(['id', 'name', 'position'])->get()->sortBy('position'),
'genres' => Genre::all()->sortBy('name'),
'user' => $user,
'rss' => $rss,
]);
}
@@ -153,7 +145,7 @@ class RssController extends Controller
'categories' => 'sometimes|array|max:999',
'types' => 'sometimes|array|max:999',
'resolutions' => 'sometimes|array|max:999',
'genres' => 'sometimes|array|max:999',
'genres' => 'exists:genres,id|sometimes|array|max:999',
'position' => 'sometimes|integer|max:9999',
]);
+13 -13
View File
@@ -60,15 +60,15 @@
placeholder="TMDB #">
<label for="mal"></label><input type="text" class="form-control" id="mal" name="mal" placeholder="MAL #">
</div>
<div class="form-group">
<label for="category">@lang('torrent.category')</label>
<div>
@foreach ($torrent_repository->categories() as $id => $category)
@foreach ($categories as $category)
<span class="badge-user">
<label class="inline">
<input type="checkbox" id="{{ $category }}" name="categories[]" value="{{ $id }}"
class="category"> {{ $category }}
<input type="checkbox" id="{{ $category->name }}" name="categories[]" value="{{ $category->id }}" class="category">
{{ $category->name }}
</label>
</span>
@endforeach
@@ -77,11 +77,11 @@
<div class="form-group">
<label for="type">@lang('torrent.type')</label>
<div>
@foreach ($torrent_repository->types() as $id => $type)
@foreach ($types as $type)
<span class="badge-user">
<label class="inline">
<input type="checkbox" id="{{ $type }}" name="types[]" value="{{ $id }}" class="type">
{{ $type }}
<input type="checkbox" id="{{ $type->name }}" name="types[]" value="{{ $type->id }}" class="type">
{{ $type->name }}
</label>
</span>
@endforeach
@@ -90,11 +90,11 @@
<div class="form-group">
<label for="resolution">@lang('torrent.resolution')</label>
<div>
@foreach ($torrent_repository->resolutions() as $id => $resolution)
@foreach ($resolutions as $resolution)
<span class="badge-user">
<label class="inline">
<input type="checkbox" id="{{ $resolution }}" value="{{ $id }}" class="resolution" name="resolutions[]">
{{ $resolution }}
<input type="checkbox" id="{{ $resolution->name }}" value="{{ $resolution->id }}" class="resolution" name="resolutions[]">
{{ $resolution->name }}
</label>
</span>
@endforeach
@@ -103,11 +103,11 @@
<div class="form-group">
<label for="genre">@lang('torrent.genre')</label>
<div>
@foreach ($torrent_repository->genres() as $id => $genre)
@foreach ($genres as $genre)
<span class="badge-user">
<label class="inline">
<input type="checkbox" id="{{ $genre }}" name="genres[]" value="{{ $genre }}" class="genre">
{{ $genre }}
<input type="checkbox" id="{{ $genre->name }}" name="genres[]" value="{{ $genre->id }}" class="genre">
{{ $genre->name }}
</label>
</span>
@endforeach
+25 -26
View File
@@ -64,20 +64,19 @@
<label for="mal"></label><input type="text" class="form-control" id="mal" name="mal"
value="{{ $rss->object_torrent->mal }}">
</div>
<div class="form-group">
<label for="category">@lang('torrent.category')</label>
<div>
@foreach ($torrent_repository->categories() as $id => $category)
@foreach ($categories as $category)
<span class="badge-user">
<label class="inline">
@if(is_array($rss->object_torrent->categories) &&
in_array($id, $rss->object_torrent->categories, true))
<input type="checkbox" id="{{ $category }}" name="categories[]" value="{{ $id }}"
class="category" CHECKED> {{ $category }}
@if(is_array($rss->object_torrent->categories) && in_array((string)$category->id, $rss->object_torrent->categories, true))
<input type="checkbox" id="{{ $category->name }}" name="categories[]" value="{{ $category->id }}"
class="category" CHECKED> {{ $category->name }}
@else
<input type="checkbox" id="{{ $category }}" name="categories[]" value="{{ $id }}"
class="category"> {{ $category }}
<input type="checkbox" id="{{ $category->name }}" name="categories[]" value="{{ $category->id }}"
class="category"> {{ $category->name }}
@endif
</label>
</span>
@@ -87,15 +86,15 @@
<div class="form-group">
<label for="type">@lang('torrent.type')</label>
<div>
@foreach ($torrent_repository->types() as $id => $type)
@foreach ($types as $type)
<span class="badge-user">
<label class="inline">
@if(is_array($rss->object_torrent->types) && in_array($id, $rss->object_torrent->types, true))
<input type="checkbox" id="{{ $type }}" name="types[]" value="{{ $id }}" class="type" CHECKED>
{{ $type }}
@if(is_array($rss->object_torrent->types) && in_array((string)$type->id, $rss->object_torrent->types, true))
<input type="checkbox" id="{{ $type->name }}" name="types[]" value="{{ $type->id }}" class="type"
CHECKED> {{ $type->name }}
@else
<input type="checkbox" id="{{ $type }}" name="types[]" value="{{ $id }}" class="type">
{{ $type }}
<input type="checkbox" id="{{ $type->name }}" name="types[]" value="{{ $type->id }}" class="type">
{{ $type->name }}
@endif
</label>
</span>
@@ -105,15 +104,15 @@
<div class="form-group">
<label for="resolution">@lang('torrent.resolution')</label>
<div>
@foreach ($torrent_repository->resolutions() as $id => $resolution)
@foreach ($resolutions as $resolution)
<span class="badge-user">
<label class="inline">
@if(is_array($rss->object_torrent->resolutions) && in_array($id, $rss->object_torrent->resolutions, true))
<input type="checkbox" id="{{ $resolution }}" name="resolutions[]" value="{{ $id }}" class="resolution" CHECKED>
{{ $resolution }}
@if(is_array($rss->object_torrent->resolutions) && in_array((string)$resolution->id, $rss->object_torrent->resolutions, true))
<input type="checkbox" id="{{ $resolution->name }}" name="resolutions[]" value="{{ $resolution->id }}" class="resolution" CHECKED>
{{ $resolution->name }}
@else
<input type="checkbox" id="{{ $resolution }}" name="resolutions[]" value="{{ $id }}" class="resolution">
{{ $resolution }}
<input type="checkbox" id="{{ $resolution->name }}" name="resolutions[]" value="{{ $resolution->id }}" class="resolution">
{{ $resolution->name }}
@endif
</label>
</span>
@@ -123,15 +122,15 @@
<div class="form-group">
<label for="genre">@lang('torrent.genre')</label>
<div>
@foreach ($torrent_repository->genres() as $id => $genre)
@foreach ($genres as $genre)
<span class="badge-user">
<label class="inline">
@if(is_array($rss->object_torrent->genres) && in_array($genre, $rss->object_torrent->genres, true))
<input type="checkbox" id="{{ $genre }}" name="genres[]" value="{{ $genre }}" class="genre"
CHECKED> {{ $genre }}
@if(is_array($rss->object_torrent->genres) && in_array($genre->id, $rss->object_torrent->genres, true))
<input type="checkbox" id="{{ $genre->name }}" name="genres[]" value="{{ $genre->id }}"
class="genre" CHECKED> {{ $genre->name }}
@else
<input type="checkbox" id="{{ $genre }}" name="genres[]" value="{{ $genre }}" class="genre">
{{ $genre }}
<input type="checkbox" id="{{ $genre->name }}" name="genres[]" value="{{ $genre->id }}"
class="genre"> {{ $genre->name }}
@endif
</label>
</span>
+12 -12
View File
@@ -58,11 +58,11 @@
<div class="form-group">
<label for="category">@lang('torrent.category')</label>
<div>
@foreach ($torrent_repository->categories() as $id => $category)
@foreach ($categories as $category)
<span class="badge-user">
<label class="inline">
<input type="checkbox" id="{{ $category }}" name="categories[]" value="{{ $id }}"
class="category"> {{ $category }}
<input type="checkbox" id="{{ $category->name }}" name="categories[]" value="{{ $category->id }}" class="category">
{{ $category->name }}
</label>
</span>
@endforeach
@@ -71,11 +71,11 @@
<div class="form-group">
<label for="type">@lang('torrent.type')</label>
<div>
@foreach ($torrent_repository->types() as $id => $type)
@foreach ($types as $type)
<span class="badge-user">
<label class="inline">
<input type="checkbox" id="{{ $type }}" name="types[]" value="{{ $id }}" class="type">
{{ $type }}
<input type="checkbox" id="{{ $type->name }}" name="types[]" value="{{ $type->id }}" class="type">
{{ $type->name }}
</label>
</span>
@endforeach
@@ -84,11 +84,11 @@
<div class="form-group">
<label for="resolution">@lang('torrent.resolution')</label>
<div>
@foreach ($torrent_repository->resolutions() as $id => $resolution)
@foreach ($resolutions as $resolution)
<span class="badge-user">
<label class="inline">
<input type="checkbox" id="{{ $resolution }}" value="{{ $id }}" class="resolution" name="resolutions[]">
{{ $resolution }}
<input type="checkbox" id="{{ $resolution->name }}" value="{{ $resolution->id }}" class="resolution" name="resolutions[]">
{{ $resolution->name }}
</label>
</span>
@endforeach
@@ -97,11 +97,11 @@
<div class="form-group">
<label for="genre">@lang('torrent.genre')</label>
<div>
@foreach ($torrent_repository->genres() as $id => $genre)
@foreach ($genres as $genre)
<span class="badge-user">
<label class="inline">
<input type="checkbox" id="{{ $genre }}" name="genres[]" value="{{ $genre }}"
class="genre"> {{ $genre }}
<input type="checkbox" id="{{ $genre->name }}" name="genres[]" value="{{ $genre->id }}" class="genre">
{{ $genre->name }}
</label>
</span>
@endforeach
+24 -24
View File
@@ -63,16 +63,16 @@
<div class="form-group">
<label for="category">@lang('torrent.category')</label>
<div>
@foreach ($torrent_repository->categories() as $id => $category)
@foreach ($categories as $category)
<span class="badge-user">
<label class="inline">
@if(is_array($rss->object_torrent->categories) &&
in_array((string)$id, $rss->object_torrent->categories, true))
<input type="checkbox" id="{{ $category }}" name="categories[]" value="{{ $id }}"
class="category" CHECKED> {{ $category }}
in_array((string)$category->id, $rss->object_torrent->categories, true))
<input type="checkbox" id="{{ $category->name }}" name="categories[]" value="{{ $category->id }}"
class="category" CHECKED> {{ $category->name }}
@else
<input type="checkbox" id="{{ $category }}" name="categories[]" value="{{ $id }}"
class="category"> {{ $category }}
<input type="checkbox" id="{{ $category->name }}" name="categories[]" value="{{ $category->id }}"
class="category"> {{ $category->name }}
@endif
</label>
</span>
@@ -82,16 +82,16 @@
<div class="form-group">
<label for="type">@lang('torrent.type')</label>
<div>
@foreach ($torrent_repository->types() as $id => $type)
@foreach ($types as $type)
<span class="badge-user">
<label class="inline">
@if(is_array($rss->object_torrent->types) &&
in_array((string)$id, $rss->object_torrent->types, true))
<input type="checkbox" id="{{ $type }}" name="types[]" value="{{ $id }}" class="type"
CHECKED> {{ $type }}
in_array((string)$type->id, $rss->object_torrent->types, true))
<input type="checkbox" id="{{ $type->name }}" name="types[]" value="{{ $type->id }}" class="type"
CHECKED> {{ $type->name }}
@else
<input type="checkbox" id="{{ $type }}" name="types[]" value="{{ $id }}" class="type">
{{ $type }}
<input type="checkbox" id="{{ $type->name }}" name="types[]" value="{{ $type->id }}" class="type">
{{ $type->name }}
@endif
</label>
</span>
@@ -101,15 +101,15 @@
<div class="form-group">
<label for="resolution">@lang('torrent.resolution')</label>
<div>
@foreach ($torrent_repository->resolutions() as $id => $resolution)
@foreach ($resolutions as $resolution)
<span class="badge-user">
<label class="inline">
@if(is_array($rss->object_torrent->resolutions) && in_array((string)$id, $rss->object_torrent->resolutions, true))
<input type="checkbox" id="{{ $resolution }}" name="resolutions[]" value="{{ $id }}" class="resolution" CHECKED>
{{ $resolution }}
@if(is_array($rss->object_torrent->resolutions) && in_array((string)$resolution->id, $rss->object_torrent->resolutions, true))
<input type="checkbox" id="{{ $resolution->name }}" name="resolutions[]" value="{{ $resolution->id }}" class="resolution" CHECKED>
{{ $resolution->name }}
@else
<input type="checkbox" id="{{ $resolution }}" name="resolutions[]" value="{{ $id }}" class="resolution">
{{ $resolution }}
<input type="checkbox" id="{{ $resolution->name }}" name="resolutions[]" value="{{ $resolution->id }}" class="resolution">
{{ $resolution->name }}
@endif
</label>
</span>
@@ -119,16 +119,16 @@
<div class="form-group">
<label for="genre">@lang('torrent.genre')</label>
<div>
@foreach ($torrent_repository->genres() as $id => $genre)
@foreach ($genres as $genre)
<span class="badge-user">
<label class="inline">
@if(is_array($rss->object_torrent->genres) &&
in_array($genre, $rss->object_torrent->genres, true))
<input type="checkbox" id="{{ $genre }}" name="genres[]" value="{{ $genre }}"
class="genre" CHECKED> {{ $genre }}
in_array($genre->id, $rss->object_torrent->genres, true))
<input type="checkbox" id="{{ $genre->name }}" name="genres[]" value="{{ $genre->id }}"
class="genre" CHECKED> {{ $genre->name }}
@else
<input type="checkbox" id="{{ $genre }}" name="genres[]" value="{{ $genre }}"
class="genre"> {{ $genre }}
<input type="checkbox" id="{{ $genre->name }}" name="genres[]" value="{{ $genre->id }}"
class="genre"> {{ $genre->name }}
@endif
</label>
</span>