diff --git a/resources/views/movies/index.blade.php b/resources/views/movies/index.blade.php index 89de778d2..00f204640 100644 --- a/resources/views/movies/index.blade.php +++ b/resources/views/movies/index.blade.php @@ -1,31 +1,34 @@ @extends('layouts.main') @section('content') -
- -
+
+ {{-- Breadcrumb --}} +
- -
-
-
-

Filter Movies

+ {{-- Movies Filter Section --}} +
+
+
+

+ Filter Movies +

-
- - - + + {{-- Trending Movies Button --}} + View Trending Movies
+ + {{-- Search Form --}}
- +
+
- + @if(isset($genres)) @foreach($genres as $gen) @@ -61,10 +83,13 @@ @endif
+
- + @if(isset($years)) @foreach($years as $yr) @@ -72,10 +97,13 @@ @endif
+
- + @if(isset($ratings)) @foreach($ratings as $rate) @@ -84,318 +112,111 @@
+
-
- + {{-- Movies List --}} @if(isset($results) && $results->count() > 0) -
- -
+
+ {{-- Results Summary and Pagination --}} +
- Showing {{ $results->firstItem() }} to {{ $results->lastItem() }} of {{ $results->total() }} movies + {{ $results->total() }} movies found + + (showing {{ $results->firstItem() }}-{{ $results->lastItem() }}) +
{{ $results->links() }}
-
- @foreach($results as $result) - @php - // Get the first GUID from the comma-separated list - $guid = isset($result->grp_release_guid) ? explode(',', $result->grp_release_guid)[0] : null; - @endphp -
-
- -
- @if($guid) - - @if(isset($result->cover) && $result->cover) - {{ $result->title }} - @else -
- -
- @endif -
- @else - @if(isset($result->cover) && $result->cover) - {{ $result->title }} - @else -
- -
- @endif - @endif -
+ {{-- Movies Grid - Conditionally include layout --}} + @if(($movie_layout ?? 2) == 1) + @include('movies.layouts.one-column', ['results' => $results, 'site' => $site]) + @else + @include('movies.layouts.two-column', ['results' => $results, 'site' => $site]) + @endif - -
-
-
- @if(isset($result->imdbid) && $result->imdbid) - -

{{ $result->title }}

-
- @else -

{{ $result->title }}

- @endif - - @if(!empty($result->grp_release_reports)) - @php - $reportCounts = array_filter(explode(',', $result->grp_release_reports)); - $totalReports = array_sum($reportCounts); - $reportReasonsRaw = !empty($result->grp_release_report_reasons) - ? implode(',', array_unique(array_filter(preg_split('/[|,]/', $result->grp_release_report_reasons)))) - : ''; - $reportReasons = \App\Models\ReleaseReport::reasonKeysToLabels($reportReasonsRaw); - @endphp - @if($totalReports > 0) -
- - {{ $totalReports }} report{{ $totalReports > 1 ? 's' : '' }} -
- @endif - @endif - - @if(!empty($result->grp_release_failed)) - @php - $failedCounts = array_filter(explode(',', $result->grp_release_failed)); - $totalFailed = array_sum($failedCounts); - @endphp - @if($totalFailed > 0) -
- - {{ $totalFailed }} failed report{{ $totalFailed > 1 ? 's' : '' }} -
- @endif - @endif - -
- @if(isset($result->year) && $result->year) - {{ $result->year }} - @endif - @if(isset($result->rating) && $result->rating) - - {{ $result->rating }} - - @endif -
- - -
- @if(isset($result->imdbid) && $result->imdbid) - - IMDb - - @endif - @if(isset($result->tmdbid) && $result->tmdbid) - - TMDb - - @endif - @if(isset($result->traktid) && $result->traktid) - - Trakt - - @endif -
-
-
- - @if(isset($result->plot) && $result->plot) -

{{ $result->plot }}

- @endif - -
- @if(isset($result->genre) && $result->genre) -
- Genre: {!! $result->genre !!} -
- @endif -
- -
- @if(isset($result->director) && $result->director) -
- Director: {!! $result->director !!} -
- @endif -
- -
- @if(isset($result->actors) && $result->actors) -
- Actors: {!! $result->actors !!} -
- @endif -
- - - @if($guid) - @php - $releaseNames = isset($result->grp_release_name) ? explode('#', $result->grp_release_name) : []; - $releaseSizes = isset($result->grp_release_size) ? explode(',', $result->grp_release_size) : []; - $releaseGuids = isset($result->grp_release_guid) ? explode(',', $result->grp_release_guid) : []; - $releaseIds = isset($result->grp_release_id) ? explode(',', $result->grp_release_id) : []; - $releasePostDates = isset($result->grp_release_postdate) ? explode(',', $result->grp_release_postdate) : []; - $releaseAddDates = isset($result->grp_release_adddate) ? explode(',', $result->grp_release_adddate) : []; - $releaseHasPreview = isset($result->grp_haspreview) ? explode(',', $result->grp_haspreview) : []; - $releaseJpgStatus = isset($result->grp_jpgstatus) ? explode(',', $result->grp_jpgstatus) : []; - $releaseNfoStatus = isset($result->grp_nfostatus) ? explode(',', $result->grp_nfostatus) : []; - $releaseFromNames = isset($result->grp_release_fromname) ? explode(',', $result->grp_release_fromname) : []; - - // Limit to maximum 2 releases - $maxReleases = 2; - $totalReleases = count($releaseNames); - $releaseNames = array_slice($releaseNames, 0, $maxReleases); - $releaseSizes = array_slice($releaseSizes, 0, $maxReleases); - $releaseGuids = array_slice($releaseGuids, 0, $maxReleases); - $releaseIds = array_slice($releaseIds, 0, $maxReleases); - $releasePostDates = array_slice($releasePostDates, 0, $maxReleases); - $releaseAddDates = array_slice($releaseAddDates, 0, $maxReleases); - $releaseHasPreview = array_slice($releaseHasPreview, 0, $maxReleases); - $releaseJpgStatus = array_slice($releaseJpgStatus, 0, $maxReleases); - $releaseNfoStatus = array_slice($releaseNfoStatus, 0, $maxReleases); - $releaseFromNames = array_slice($releaseFromNames, 0, $maxReleases); - @endphp - - @if(!empty($releaseNames[0])) -
-

- Available Releases - @if($totalReleases > $maxReleases) - (Showing {{ $maxReleases }} of {{ $totalReleases }}) - @endif -

-
- @foreach($releaseNames as $index => $releaseName) - @if($releaseName && isset($releaseGuids[$index])) -
-
-
- - - {{ $releaseName }} - - - -
- @if(isset($releaseSizes[$index])) - - {{ number_format($releaseSizes[$index] / 1073741824, 2) }} GB - - @endif - @if(isset($releasePostDates[$index])) - - {{ userDate($releasePostDates[$index],'M d, Y H:i') }} - - @endif - @if(isset($releaseAddDates[$index])) - - {{ userDateDiffForHumans($releaseAddDates[$index]) }} - - @endif - @if(isset($releaseHasPreview[$index]) && $releaseHasPreview[$index] == 1) - - @endif - @if(isset($releaseJpgStatus[$index]) && $releaseJpgStatus[$index] == 1) - - @endif - @if(isset($releaseNfoStatus[$index]) && $releaseNfoStatus[$index] == 1) - - @endif - @if(isset($releaseFromNames[$index]) && !empty($releaseFromNames[$index])) - - {{ $releaseFromNames[$index] }} - - @endif -
-
- - -
- - Download - - - - Details - - @if(isset($releaseIds[$index])) - - @endif -
-
-
- @endif - @endforeach -
-
- @endif - @endif -
-
-
- @endforeach -
- - -
+ {{-- Bottom Pagination --}} +
{{ $results->links() }}
@else -
- -

No movies found.

+ {{-- Empty State --}} +
+
+ +
+

No Movies Found

+

+ Try adjusting your search filters or check back later for new releases. +

@endif - - - - - - @include('partials.nfo-modal')
+{{-- Preview/Sample Image Modal - CSP Safe Alpine.js --}} +@include('partials.preview-modal') + +{{-- NFO Modal - CSP Safe Alpine.js --}} +@include('partials.nfo-modal') @endsection +@push('scripts') + +@endpush diff --git a/resources/views/movies/layouts/one-column.blade.php b/resources/views/movies/layouts/one-column.blade.php new file mode 100644 index 000000000..4be66ef40 --- /dev/null +++ b/resources/views/movies/layouts/one-column.blade.php @@ -0,0 +1,15 @@ +{{-- Movies 1-Column Layout --}} +{{-- Props: $results, $site --}} + +
+ @foreach($results as $result) + @include('movies.partials.movie-card', [ + 'result' => $result, + 'layout' => 1, + 'site' => $site, + ]) + @endforeach +
+ diff --git a/resources/views/movies/layouts/two-column.blade.php b/resources/views/movies/layouts/two-column.blade.php new file mode 100644 index 000000000..8e158eaf2 --- /dev/null +++ b/resources/views/movies/layouts/two-column.blade.php @@ -0,0 +1,15 @@ +{{-- Movies 2-Column Layout --}} +{{-- Props: $results, $site --}} + +
+ @foreach($results as $result) + @include('movies.partials.movie-card', [ + 'result' => $result, + 'layout' => 2, + 'site' => $site, + ]) + @endforeach +
+ diff --git a/resources/views/movies/partials/movie-card.blade.php b/resources/views/movies/partials/movie-card.blade.php new file mode 100644 index 000000000..0d7a4c709 --- /dev/null +++ b/resources/views/movies/partials/movie-card.blade.php @@ -0,0 +1,223 @@ +{{-- Movie Card Partial --}} +{{-- Props: $result (movie object), $layout (1 or 2), $site (site configuration) --}} + +@props([ + 'result', + 'layout' => 2, + 'site' => [], +]) + +@php + // Get the first GUID from the comma-separated list + $guid = isset($result->grp_release_guid) ? explode(',', $result->grp_release_guid)[0] : null; + + // Parse release data + $releaseNames = isset($result->grp_release_name) ? explode('#', $result->grp_release_name) : []; + $releaseSizes = isset($result->grp_release_size) ? explode(',', $result->grp_release_size) : []; + $releaseGuids = isset($result->grp_release_guid) ? explode(',', $result->grp_release_guid) : []; + $releaseIds = isset($result->grp_release_id) ? explode(',', $result->grp_release_id) : []; + $releasePostDates = isset($result->grp_release_postdate) ? explode(',', $result->grp_release_postdate) : []; + $releaseAddDates = isset($result->grp_release_adddate) ? explode(',', $result->grp_release_adddate) : []; + $releaseHasPreview = isset($result->grp_haspreview) ? explode(',', $result->grp_haspreview) : []; + $releaseJpgStatus = isset($result->grp_jpgstatus) ? explode(',', $result->grp_jpgstatus) : []; + $releaseNfoStatus = isset($result->grp_nfostatus) ? explode(',', $result->grp_nfostatus) : []; + $releaseFromNames = isset($result->grp_release_fromname) ? explode(',', $result->grp_release_fromname) : []; + + // Limit to maximum 2 releases + $maxReleases = 2; + $totalReleases = count($releaseNames); + $releaseNames = array_slice($releaseNames, 0, $maxReleases); + $releaseSizes = array_slice($releaseSizes, 0, $maxReleases); + $releaseGuids = array_slice($releaseGuids, 0, $maxReleases); + $releaseIds = array_slice($releaseIds, 0, $maxReleases); + $releasePostDates = array_slice($releasePostDates, 0, $maxReleases); + $releaseAddDates = array_slice($releaseAddDates, 0, $maxReleases); + $releaseHasPreview = array_slice($releaseHasPreview, 0, $maxReleases); + $releaseJpgStatus = array_slice($releaseJpgStatus, 0, $maxReleases); + $releaseNfoStatus = array_slice($releaseNfoStatus, 0, $maxReleases); + $releaseFromNames = array_slice($releaseFromNames, 0, $maxReleases); + + // Image dimensions based on layout + $coverClass = $layout == 1 ? 'w-48 h-72' : 'w-32 h-48'; +@endphp + +
+
+ {{-- Movie Poster --}} +
+ @if($guid) + + @if(isset($result->cover) && $result->cover) + {{ $result->title }} + @else +
+ +
+ @endif +
+ @else + @if(isset($result->cover) && $result->cover) + {{ $result->title }} + @else +
+ +
+ @endif + @endif +
+ + {{-- Movie Details --}} +
+ {{-- Title and Report Badges --}} +
+
+ @if(isset($result->imdbid) && $result->imdbid) + +

{{ $result->title }}

+
+ @else +

{{ $result->title }}

+ @endif + + {{-- Report Badges --}} +
+ @if(!empty($result->grp_release_reports)) + @php + $reportCounts = array_filter(explode(',', $result->grp_release_reports)); + $totalReports = array_sum($reportCounts); + $reportReasonsRaw = !empty($result->grp_release_report_reasons) + ? implode(',', array_unique(array_filter(preg_split('/[|,]/', $result->grp_release_report_reasons)))) + : ''; + $reportReasons = \App\Models\ReleaseReport::reasonKeysToLabels($reportReasonsRaw); + @endphp + @if($totalReports > 0) +
+ + {{ $totalReports }} report{{ $totalReports > 1 ? 's' : '' }} +
+ @endif + @endif + + @if(!empty($result->grp_release_failed)) + @php + $failedCounts = array_filter(explode(',', $result->grp_release_failed)); + $totalFailed = array_sum($failedCounts); + @endphp + @if($totalFailed > 0) +
+ + {{ $totalFailed }} failed report{{ $totalFailed > 1 ? 's' : '' }} +
+ @endif + @endif +
+ + {{-- Year and Rating --}} +
+ @if(isset($result->year) && $result->year) + {{ $result->year }} + @endif + @if(isset($result->rating) && $result->rating) + + {{ $result->rating }} + + @endif +
+ + {{-- External Links --}} +
+ @if(isset($result->imdbid) && $result->imdbid) + + IMDb + + @endif + @if(isset($result->tmdbid) && $result->tmdbid) + + TMDb + + @endif + @if(isset($result->traktid) && $result->traktid) + + Trakt + + @endif +
+
+
+ + {{-- Plot --}} + @if(isset($result->plot) && $result->plot) +

{{ $result->plot }}

+ @endif + + {{-- Metadata: Genre, Director, Actors --}} +
+ @if(isset($result->genre) && $result->genre) +
+ Genre: {!! $result->genre !!} +
+ @endif + @if(isset($result->director) && $result->director) +
+ Director: {!! $result->director !!} +
+ @endif + @if(isset($result->actors) && $result->actors) +
+ Actors: {!! Str::limit($result->actors, 100) !!} +
+ @endif +
+ + {{-- Release Information --}} + @if($guid && !empty($releaseNames[0])) +
+

+ Available Releases + @if($totalReleases > $maxReleases) + + (Showing {{ $maxReleases }} of {{ $totalReleases }}) + + @endif +

+
+ @foreach($releaseNames as $index => $releaseName) + @include('movies.partials.release-item', [ + 'releaseName' => $releaseName, + 'releaseGuid' => $releaseGuids[$index] ?? '', + 'releaseId' => $releaseIds[$index] ?? null, + 'releaseSize' => $releaseSizes[$index] ?? 0, + 'releasePostDate' => $releasePostDates[$index] ?? null, + 'releaseAddDate' => $releaseAddDates[$index] ?? null, + 'hasPreview' => $releaseHasPreview[$index] ?? 0, + 'jpgStatus' => $releaseJpgStatus[$index] ?? 0, + 'nfoStatus' => $releaseNfoStatus[$index] ?? 0, + 'fromName' => $releaseFromNames[$index] ?? '', + 'layout' => $layout, + 'index' => $index, + ]) + @endforeach +
+
+ @endif +
+
+
+ + diff --git a/resources/views/movies/partials/release-item.blade.php b/resources/views/movies/partials/release-item.blade.php new file mode 100644 index 000000000..2078c7627 --- /dev/null +++ b/resources/views/movies/partials/release-item.blade.php @@ -0,0 +1,112 @@ +{{-- Release Item Partial --}} +{{-- Props: $releaseName, $releaseGuid, $releaseId, $releaseSize, $releasePostDate, $releaseAddDate, $hasPreview, $jpgStatus, $nfoStatus, $fromName, $layout, $index --}} + +@props([ + 'releaseName' => '', + 'releaseGuid' => '', + 'releaseId' => null, + 'releaseSize' => 0, + 'releasePostDate' => null, + 'releaseAddDate' => null, + 'hasPreview' => 0, + 'jpgStatus' => 0, + 'nfoStatus' => 0, + 'fromName' => '', + 'layout' => 2, + 'index' => 0, +]) + +@if($releaseName && $releaseGuid) +
+
+
+ {{-- Release Name --}} + + {{ $releaseName }} + + + {{-- Info Badges --}} +
+ @if($releaseSize) + + {{ number_format($releaseSize / 1073741824, 2) }} GB + + @endif + + @if($releasePostDate) + + {{ userDate($releasePostDate, 'M d, Y H:i') }} + + @endif + + @if($releaseAddDate) + + {{ userDateDiffForHumans($releaseAddDate) }} + + @endif + + @if($hasPreview == 1) + + @endif + + @if($jpgStatus == 1) + + @endif + + @if($nfoStatus == 1) + + @endif + + @if(!empty($fromName)) + + {{ $fromName }} + + @endif +
+
+ + {{-- Action Buttons --}} +
+ + Download + + + + + + Details + + + @if($releaseId) + + @endif +
+
+
+@endif + +