diff --git a/app/Http/Controllers/InvitationController.php b/app/Http/Controllers/InvitationController.php index 1909866d3..56acc1417 100644 --- a/app/Http/Controllers/InvitationController.php +++ b/app/Http/Controllers/InvitationController.php @@ -3,11 +3,12 @@ namespace App\Http\Controllers; use App\Models\Invitation; -use App\Models\Settings; // Added for registerstatus check +use App\Models\Settings; use App\Services\InvitationService; use Illuminate\Http\JsonResponse; use Illuminate\Http\RedirectResponse; use Illuminate\Http\Request; +use Illuminate\View\View; class InvitationController extends BasePageController { @@ -23,45 +24,38 @@ class InvitationController extends BasePageController /** * Display a listing of the user's invitations */ - public function index(Request $request): void + public function index(Request $request): View { $this->setPreferences(); $inviteMode = (int) Settings::settingValue('registerstatus') === Settings::REGISTER_STATUS_INVITE; + $status = $request->get('status'); + + $this->viewData['meta_title'] = 'My Invitations'; + $this->viewData['meta_keywords'] = 'invitations,invite,users,manage'; + $this->viewData['meta_description'] = 'Manage your sent invitations and send new invitations to friends'; + $this->viewData['status'] = $status; + if (! $inviteMode) { // Invitations disabled: show informational message only, no queries. - $this->smarty->assign([ - 'invite_mode' => false, - 'status' => null, - 'stats' => [], - 'invitations' => [], - 'pagination_links' => null, - 'csrf_token' => csrf_token(), - ]); + $this->viewData['invite_mode'] = false; + $this->viewData['stats'] = []; + $this->viewData['invitations'] = []; + $this->viewData['pagination_links'] = null; - $meta_title = 'Invitations Disabled'; - $meta_keywords = 'invitations,disabled'; - $meta_description = 'Invitations are currently disabled on this site.'; + $this->viewData['meta_title'] = 'Invitations Disabled'; + $this->viewData['meta_keywords'] = 'invitations,disabled'; + $this->viewData['meta_description'] = 'Invitations are currently disabled on this site.'; - $content = $this->smarty->fetch('invitations_index.tpl'); - $this->smarty->assign([ - 'content' => $content, - 'meta_title' => $meta_title, - 'meta_keywords' => $meta_keywords, - 'meta_description' => $meta_description, - ]); - $this->pagerender(); - - return; + return view('invitations.index', $this->viewData); } - $status = $request->get('status'); $user = auth()->user(); $invitations = $this->invitationService->getUserInvitations($user->id, $status); $stats = $this->invitationService->getUserInvitationStats($user->id); - // Convert paginated results to array for Smarty + // Convert paginated results to array for Blade $invitationsArray = []; foreach ($invitations as $invitation) { $invitationData = $invitation->toArray(); @@ -71,7 +65,7 @@ class InvitationController extends BasePageController $invitationData['used_by_user'] = $invitation->usedBy->toArray(); } - // Convert timestamps for Smarty + // Convert timestamps $invitationData['created_at'] = strtotime($invitation->created_at); $invitationData['expires_at'] = strtotime($invitation->expires_at); if ($invitation->used_at) { @@ -81,61 +75,35 @@ class InvitationController extends BasePageController $invitationsArray[] = $invitationData; } - $this->smarty->assign([ - 'invite_mode' => true, - 'invitations' => $invitationsArray, - 'stats' => $stats, - 'status' => $status, - 'pagination_links' => $invitations->links(), - 'csrf_token' => csrf_token(), - ]); + $this->viewData['invite_mode'] = true; + $this->viewData['invitations'] = $invitationsArray; + $this->viewData['stats'] = $stats; + $this->viewData['status'] = $status; + $this->viewData['pagination_links'] = $invitations->links(); - // Set meta information - $meta_title = 'My Invitations'; - $meta_keywords = 'invitations,invite,users,manage'; - $meta_description = 'Manage your sent invitations and send new invitations to friends'; - - // Fetch the template content - $content = $this->smarty->fetch('invitations_index.tpl'); - - // Assign content and meta data for final rendering - $this->smarty->assign([ - 'content' => $content, - 'meta_title' => $meta_title, - 'meta_keywords' => $meta_keywords, - 'meta_description' => $meta_description, - ]); - - // Render the page with proper styling - $this->pagerender(); + return view('invitations.index', $this->viewData); } /** * Show the form for creating a new invitation */ - public function create(): void + public function create(): View { $this->setPreferences(); $inviteMode = (int) Settings::settingValue('registerstatus') === Settings::REGISTER_STATUS_INVITE; - if (! $inviteMode) { - $this->smarty->assign([ - 'invite_mode' => false, - 'csrf_token' => csrf_token(), - ]); - $meta_title = 'Invitations Disabled'; - $meta_keywords = 'invitations,disabled'; - $meta_description = 'Invitations are currently disabled on this site.'; - $content = $this->smarty->fetch('invitations_create.tpl'); - $this->smarty->assign([ - 'content' => $content, - 'meta_title' => $meta_title, - 'meta_keywords' => $meta_keywords, - 'meta_description' => $meta_description, - ]); - $this->pagerender(); - return; + $this->viewData['meta_title'] = 'Send New Invitation'; + $this->viewData['meta_keywords'] = 'invitation,invite,send,new,user'; + $this->viewData['meta_description'] = 'Send a new invitation to invite someone to join the site'; + + if (! $inviteMode) { + $this->viewData['invite_mode'] = false; + $this->viewData['meta_title'] = 'Invitations Disabled'; + $this->viewData['meta_keywords'] = 'invitations,disabled'; + $this->viewData['meta_description'] = 'Invitations are currently disabled on this site.'; + + return view('invitations.create', $this->viewData); } $user = auth()->user(); @@ -148,36 +116,15 @@ class InvitationController extends BasePageController ->count(); $availableInvites = $user->invites - $activeInvitations; - $this->smarty->assign([ - 'invite_mode' => true, - 'user_roles' => config('nntmux.user_roles', []), - 'csrf_token' => csrf_token(), - 'old' => old(), - 'errors' => session('errors') ? session('errors')->getBag('default')->getMessages() : [], - 'user_invites_left' => $availableInvites, - 'user_invites_total' => $user->invites, - 'user_invites_pending' => $activeInvitations, - 'can_send_invites' => $availableInvites > 0, - ]); - // Set meta information - $meta_title = 'Send New Invitation'; - $meta_keywords = 'invitation,invite,send,new,user'; - $meta_description = 'Send a new invitation to invite someone to join the site'; + $this->viewData['invite_mode'] = true; + $this->viewData['user_roles'] = config('nntmux.user_roles', []); + $this->viewData['user_invites_left'] = $availableInvites; + $this->viewData['user_invites_total'] = $user->invites; + $this->viewData['user_invites_pending'] = $activeInvitations; + $this->viewData['can_send_invites'] = $availableInvites > 0; - // Fetch the template content - $content = $this->smarty->fetch('invitations_create.tpl'); - - // Assign content and meta data for final rendering - $this->smarty->assign([ - 'content' => $content, - 'meta_title' => $meta_title, - 'meta_keywords' => $meta_keywords, - 'meta_description' => $meta_description, - ]); - - // Render the page with proper styling - $this->pagerender(); + return view('invitations.create', $this->viewData); } /** @@ -223,31 +170,16 @@ class InvitationController extends BasePageController /** * Display the specified invitation */ - public function show(string $token): void + public function show(string $token): View { // For public invitation page, we need to handle both logged in and guest users if (auth()->check()) { $this->setPreferences(); - } else { - // Set up basic Smarty configuration for guests - $this->smarty->setTemplateDir([ - 'user' => config('ytake-laravel-smarty.template_path').'/Gentele', - 'shared' => config('ytake-laravel-smarty.template_path').'/shared', - 'default' => config('ytake-laravel-smarty.template_path').'/Gentele', - ]); - - $this->smarty->assign([ - 'isadmin' => false, - 'ismod' => false, - 'loggedin' => false, - 'theme' => 'Gentele', - 'site' => $this->settings, - ]); } $preview = $this->invitationService->getInvitationPreview($token); - // Convert timestamps for Smarty + // Convert timestamps if ($preview && isset($preview['expires_at'])) { $preview['expires_at'] = strtotime($preview['expires_at']); } @@ -258,29 +190,15 @@ class InvitationController extends BasePageController $preview['role_name'] = $roles[$preview['metadata']['role']] ?? 'Default'; } - $this->smarty->assign([ - 'preview' => $preview, - 'token' => $token, - ]); + $this->viewData['preview'] = $preview; + $this->viewData['token'] = $token; // Set meta information - $meta_title = $preview ? 'Invitation to Join' : 'Invalid Invitation'; - $meta_keywords = 'invitation,join,register,signup'; - $meta_description = $preview ? 'You have been invited to join our community' : 'This invitation link is invalid or expired'; + $this->viewData['meta_title'] = $preview ? 'Invitation to Join' : 'Invalid Invitation'; + $this->viewData['meta_keywords'] = 'invitation,join,register,signup'; + $this->viewData['meta_description'] = $preview ? 'You have been invited to join our community' : 'This invitation link is invalid or expired'; - // Fetch the template content - $content = $this->smarty->fetch('invitations_show.tpl'); - - // Assign content and meta data for final rendering - $this->smarty->assign([ - 'content' => $content, - 'meta_title' => $meta_title, - 'meta_keywords' => $meta_keywords, - 'meta_description' => $meta_description, - ]); - - // Render the page with proper styling - $this->pagerender(); + return view('invitations.show', $this->viewData); } /** @@ -371,3 +289,4 @@ class InvitationController extends BasePageController ]); } } + diff --git a/app/Http/Controllers/MyMoviesController.php b/app/Http/Controllers/MyMoviesController.php index b26a5d7e3..5d0eda556 100644 --- a/app/Http/Controllers/MyMoviesController.php +++ b/app/Http/Controllers/MyMoviesController.php @@ -20,9 +20,9 @@ class MyMoviesController extends BasePageController $imdbid = $request->input('imdb') ?? ''; if ($request->has('from')) { - $this->smarty->assign('from', url($request->input('from'))); + $this->viewData['from'] = url($request->input('from')); } else { - $this->smarty->assign('from', url('/mymovies')); + $this->viewData['from'] = url('/mymovies'); } switch ($action) { @@ -70,16 +70,15 @@ class MyMoviesController extends BasePageController } $categories[$c['id']] = $c['title']; } - $this->smarty->assign('type', 'add'); - $this->smarty->assign('cat_ids', array_keys($categories)); - $this->smarty->assign('cat_names', $categories); - $this->smarty->assign('cat_selected', []); - $this->smarty->assign('imdbid', $imdbid); - $this->smarty->assign('movie', $movie); - $content = $this->smarty->fetch('mymovies-add.tpl'); - $this->smarty->assign('content', $content); - $this->pagerender(); - break; + $this->viewData['type'] = 'add'; + $this->viewData['cat_ids'] = array_keys($categories); + $this->viewData['cat_names'] = $categories; + $this->viewData['cat_selected'] = []; + $this->viewData['imdbid'] = $imdbid; + $this->viewData['movie'] = $movie; + $this->viewData['content'] = view('themes/Gentele/mymovies-add', $this->viewData)->render(); + return $this->pagerender(); + case 'edit': case 'doedit': $movie = UserMovie::getMovie($this->userdata->id, $imdbid); @@ -104,16 +103,15 @@ class MyMoviesController extends BasePageController $categories[$c['id']] = $c['title']; } - $this->smarty->assign('type', 'edit'); - $this->smarty->assign('cat_ids', array_keys($categories)); - $this->smarty->assign('cat_names', $categories); - $this->smarty->assign('cat_selected', explode('|', $movie['categories'])); - $this->smarty->assign('imdbid', $imdbid); - $this->smarty->assign('movie', $movie); - $content = $this->smarty->fetch('mymovies-add.tpl'); - $this->smarty->assign('content', $content); - $this->pagerender(); - break; + $this->viewData['type'] = 'edit'; + $this->viewData['cat_ids'] = array_keys($categories); + $this->viewData['cat_names'] = $categories; + $this->viewData['cat_selected'] = explode('|', $movie['categories']); + $this->viewData['imdbid'] = $imdbid; + $this->viewData['movie'] = $movie; + $this->viewData['content'] = view('themes/Gentele/mymovies-add', $this->viewData)->render(); + return $this->pagerender(); + case 'browse': $title = 'Browse My Movies'; @@ -148,22 +146,19 @@ class MyMoviesController extends BasePageController $results = $mv->getMovieRange($page, $movie['categoryNames'], $offset, config('nntmux.items_per_cover_page'), $ordering, -1, $this->userdata->categoryexclusions); - $this->smarty->assign('covgroup', ''); + $this->viewData['covgroup'] = ''; foreach ($ordering as $ordertype) { - $this->smarty->assign('orderby'.$ordertype, url('/mymovies/browse?ob='.$ordertype.'&offset=0')); + $this->viewData['orderby'.$ordertype] = url('/mymovies/browse?ob='.$ordertype.'&offset=0'); } - $this->smarty->assign('lastvisit', $this->userdata->lastlogin); + $this->viewData['lastvisit'] = $this->userdata->lastlogin; + $this->viewData['results'] = $results; + $this->viewData['movies'] = true; + $this->viewData['content'] = view('themes/Gentele/browse', $this->viewData)->render(); + $this->viewData = array_merge($this->viewData, compact('title', 'meta_title', 'meta_keywords', 'meta_description')); + return $this->pagerender(); - $this->smarty->assign('results', $results); - - $this->smarty->assign('movies', true); - - $content = $this->smarty->fetch('browse.tpl'); - $this->smarty->assign(compact('content', 'title', 'meta_title', 'meta_keywords', 'meta_description')); - $this->pagerender(); - break; default: $title = 'My Movies'; @@ -195,12 +190,13 @@ class MyMoviesController extends BasePageController $results[$moviek] = $movie; } - $this->smarty->assign('movies', $results); - - $content = $this->smarty->fetch('mymovies.tpl'); - $this->smarty->assign(compact('content', 'title', 'meta_title', 'meta_keywords', 'meta_description')); - $this->pagerender(); - break; + $this->viewData['movies'] = $results; + $this->viewData['content'] = view('themes/Gentele/mymovies', $this->viewData)->render(); + $this->viewData = array_merge($this->viewData, compact('title', 'meta_title', 'meta_keywords', 'meta_description')); + return $this->pagerender(); } + + // Fallback return in case no case matches + return redirect()->to('/mymovies'); } } diff --git a/resources/views/invitations/create.blade.php b/resources/views/invitations/create.blade.php new file mode 100644 index 000000000..399ce00d3 --- /dev/null +++ b/resources/views/invitations/create.blade.php @@ -0,0 +1,202 @@ +@extends('layouts.main') + +@section('content') +@if(!$invite_mode) +
User invitations are currently disabled on this site. You cannot send new invitations at this time.
+ Back to Profile +You have used all of your available invitations. You cannot send new invitations at this time.
+ +User invitations are currently disabled on this site. If you believe this is an error, please contact an administrator.
+| Status | +Sent Date | +Expires | +Used By | +Used Date | +Actions | +|
|---|---|---|---|---|---|---|
|
+
+
+ {{ $invitation['email'] }}
+
+ |
+ + @if($invitation['used_at']) + Accepted + @elseif($invitation['expires_at'] < time()) + Expired + @elseif(!$invitation['is_active']) + Cancelled + @else + Pending + @endif + | +
+
+
+ {{ date('M j, Y', $invitation['created_at']) }}
+ {{ date('H:i', $invitation['created_at']) }}
+
+ |
+
+
+
+ {{ date('M j, Y', $invitation['expires_at']) }}
+ {{ date('H:i', $invitation['expires_at']) }}
+
+ |
+
+ @if(isset($invitation['used_by_user']))
+
+
+ {{ $invitation['used_by_user']['username'] ?? $invitation['used_by_user']['email'] }}
+
+ @else
+ -
+ @endif
+ |
+
+ @if($invitation['used_at'])
+
+
+ {{ date('M j, Y', $invitation['used_at']) }}
+ {{ date('H:i', $invitation['used_at']) }}
+
+ @else
+ -
+ @endif
+ |
+
+ @if(!$invitation['used_at'] && $invitation['expires_at'] > time() && $invitation['is_active'])
+
+
+
+
+ @else
+ -
+ @endif
+ |
+
+ {{ $preview['inviter_name'] ?? 'Someone' }} has invited you to join {{ $site->title }}. +
+To accept this invitation and create your account:
+The account has been successfully created using this invitation.
+Please contact the person who invited you for a new invitation.
+This invitation link is not valid, has expired, or has been removed.
+ +| Name | +Category | +Posted | +Size | +Files | +Action | +
|---|---|---|---|---|---|
| + + | ++ + {{ $result->category_name ?? '' }} + + | ++ {{ isset($result->postdate) ? \Carbon\Carbon::parse($result->postdate)->diffForHumans() : '' }} + | ++ {{ isset($result->size) ? \App\Extensions\helper\formatBytes($result->size) : '' }} + | ++ {{ $result->totalpart ?? 0 }} + | ++ + | +
Select categories below to organize this movie in your collection.
+| Cover | +Information | +Category | +Added | +Actions | +
|---|---|---|---|---|
|
+
+
+
+ |
+
+
+
+
+ @if(!empty($movie['plot']))
+ + + {{ e($movie['title'] ?? '') }} ({{ $movie['year'] ?? '' }}) + ++ + @if(!empty($movie['tagline'])) +{{ e($movie['tagline']) }}
+ @endif
+ {{ e($movie['plot']) }} + @endif + +
+ @if(!empty($movie['genre']))
+
+
+
+ Genre: {{ e($movie['genre']) }}
+
+ @endif
+
+ @if(!empty($movie['director']))
+
+ Director: {{ e($movie['director']) }}
+
+ @endif
+
+ @if(!empty($movie['actors']))
+
+ Starring: {{ e($movie['actors']) }}
+
+ @endif
+
+
+ IMDB
+
+
+ |
+ + + {{ !empty($movie['categoryNames']) ? e($movie['categoryNames']) : 'All' }} + + | +
+
+
+ {{ isset($movie['created_at']) ? date('M d, Y', strtotime($movie['created_at'])) : '' }}
+
+ |
+ + + | +