Initial Commit

The initial public commit of MVGL website code.
This commit is contained in:
Jimmy B. 2024-01-14 13:51:43 -06:00
commit b39ecf1638
2043 changed files with 215154 additions and 0 deletions

View file

@ -0,0 +1,141 @@
<?php
namespace App\Http\Controllers\Account;
use App\Http\Controllers\Controller;
use App\Http\Requests\Account\SettingsEmailRequest;
use App\Http\Requests\Account\SettingsInfoRequest;
use App\Http\Requests\Account\SettingsPasswordRequest;
use App\Models\UserInfo;
use Illuminate\Support\Facades\Hash;
use Illuminate\Support\Facades\Storage;
class SettingsController extends Controller
{
/**
* Display a listing of the resource.
*
* @return \Illuminate\Contracts\Foundation\Application|\Illuminate\Contracts\View\Factory|\Illuminate\Contracts\View\View
*/
public function index()
{
$info = auth()->user()->info;
// get the default inner page
return view('pages.account.settings.settings', compact('info'));
}
/**
* Update the specified resource in storage.
*
* @param \Illuminate\Http\Request $request
* @param int $user
*
* @return \Illuminate\Http\RedirectResponse
*/
public function update(SettingsInfoRequest $request)
{
// save user name
$validated = $request->validate([
'first_name' => 'required|string|max:255',
'last_name' => 'required|string|max:255',
]);
auth()->user()->update($validated);
// save on user info
$info = UserInfo::where('user_id', auth()->user()->id)->first();
if ($info === null) {
// create new model
$info = new UserInfo();
}
// attach this info to the current user
$info->user()->associate(auth()->user());
foreach ($request->only(array_keys($request->rules())) as $key => $value) {
if (is_array($value)) {
$value = serialize($value);
}
$info->$key = $value;
}
// include to save avatar
if ($avatar = $this->upload()) {
$info->avatar = $avatar;
}
if ($request->boolean('avatar_remove')) {
Storage::delete($info->avatar);
$info->avatar = null;
}
$info->save();
return redirect()->intended('account/settings');
}
/**
* Function for upload avatar image
*
* @param string $folder
* @param string $key
* @param string $validation
*
* @return false|string|null
*/
public function upload($folder = 'images', $key = 'avatar', $validation = 'image|mimes:jpeg,png,jpg,gif,svg|max:2048|sometimes')
{
request()->validate([$key => $validation]);
$file = null;
if (request()->hasFile($key)) {
$file = Storage::disk('public')->putFile($folder, request()->file($key), 'public');
}
return $file;
}
/**
* Function to accept request for change email
*
* @param SettingsEmailRequest $request
*/
public function changeEmail(SettingsEmailRequest $request)
{
// prevent change email for demo account
if ($request->input('current_email') === 'demo@demo.com') {
return redirect()->intended('account/settings');
}
auth()->user()->update(['email' => $request->input('email')]);
if ($request->expectsJson()) {
return response()->json($request->all());
}
return redirect()->intended('account/settings');
}
/**
* Function to accept request for change password
*
* @param SettingsPasswordRequest $request
*/
public function changePassword(SettingsPasswordRequest $request)
{
// prevent change password for demo account
if ($request->input('current_email') === 'demo@demo.com') {
return redirect()->intended('account/settings');
}
auth()->user()->update(['password' => Hash::make($request->input('password'))]);
if ($request->expectsJson()) {
return response()->json($request->all());
}
return redirect()->intended('account/settings');
}
}

View file

@ -0,0 +1,102 @@
<?php
namespace App\Http\Controllers\Auth;
use App\Http\Controllers\Controller;
use App\Http\Requests\Auth\LoginRequest;
use App\Providers\RouteServiceProvider;
use App\Models\User;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Hash;
use Illuminate\Validation\ValidationException;
use Illuminate\Support\Str;
class AuthenticatedSessionController extends Controller
{
/**
* Display the login view.
*
* @return \Illuminate\View\View
*/
public function create()
{
return view('auth.login');
}
/**
* Handle an incoming authentication request.
*
* @param \App\Http\Requests\Auth\LoginRequest $request
*
* @return \Illuminate\Http\RedirectResponse
*/
public function store(LoginRequest $request)
{
$request->authenticate();
$request->session()->regenerate();
return redirect()->intended(RouteServiceProvider::HOME);
}
/**
* Handle an incoming api authentication request.
*
* @param \App\Http\Requests\Auth\LoginRequest $request
*
* @return \Illuminate\Http\Response
*/
public function apiStore(LoginRequest $request)
{
if (!Auth::attempt($request->only('email', 'password'))) {
throw ValidationException::withMessages([
'email' => ['The provided credentials are incorrect']
]);
}
$user = User::where('email', $request->email)->first();
return response($user);
}
/**
* Verifies user token.
*
* @param \Illuminate\Http\Request $request
*
* @return \Illuminate\Http\Response
*/
public function apiVerifyToken(Request $request)
{
$request->validate([
'api_token' => 'required'
]);
$user = User::where('api_token', $request->api_token)->first();
if (!$user) {
throw ValidationException::withMessages([
'token' => ['Invalid token']
]);
}
return response($user);
}
/**
* Destroy an authenticated session.
*
* @param \Illuminate\Http\Request $request
*
* @return \Illuminate\Http\RedirectResponse
*/
public function destroy(Request $request)
{
Auth::guard('web')->logout();
$request->session()->invalidate();
$request->session()->regenerateToken();
return redirect('/');
}
}

View file

@ -0,0 +1,47 @@
<?php
namespace App\Http\Controllers\Auth;
use App\Http\Controllers\Controller;
use App\Providers\RouteServiceProvider;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Illuminate\Validation\ValidationException;
class ConfirmablePasswordController extends Controller
{
/**
* Show the confirm password view.
*
* @return \Illuminate\View\View
*/
public function show()
{
return view('auth.confirm-password');
}
/**
* Confirm the user's password.
*
* @param \Illuminate\Http\Request $request
*
* @return mixed
*/
public function store(Request $request)
{
if (
!Auth::guard('web')->validate([
'email' => $request->user()->email,
'password' => $request->password,
])
) {
throw ValidationException::withMessages([
'password' => __('auth.password'),
]);
}
$request->session()->put('auth.password_confirmed_at', time());
return redirect()->intended(RouteServiceProvider::HOME);
}
}

View file

@ -0,0 +1,28 @@
<?php
namespace App\Http\Controllers\Auth;
use App\Http\Controllers\Controller;
use App\Providers\RouteServiceProvider;
use Illuminate\Http\Request;
class EmailVerificationNotificationController extends Controller
{
/**
* Send a new email verification notification.
*
* @param \Illuminate\Http\Request $request
*
* @return \Illuminate\Http\RedirectResponse
*/
public function store(Request $request)
{
if ($request->user()->hasVerifiedEmail()) {
return redirect()->intended(RouteServiceProvider::HOME);
}
$request->user()->sendEmailVerificationNotification();
return back()->with('status', 'verification-link-sent');
}
}

View file

@ -0,0 +1,24 @@
<?php
namespace App\Http\Controllers\Auth;
use App\Http\Controllers\Controller;
use App\Providers\RouteServiceProvider;
use Illuminate\Http\Request;
class EmailVerificationPromptController extends Controller
{
/**
* Display the email verification prompt.
*
* @param \Illuminate\Http\Request $request
*
* @return mixed
*/
public function __invoke(Request $request)
{
return $request->user()->hasVerifiedEmail()
? redirect()->intended(RouteServiceProvider::HOME)
: view('auth.verify-email');
}
}

View file

@ -0,0 +1,67 @@
<?php
namespace App\Http\Controllers\Auth;
use App\Http\Controllers\Controller;
use Illuminate\Auth\Events\PasswordReset;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Hash;
use Illuminate\Support\Facades\Password;
use Illuminate\Support\Str;
use Illuminate\Validation\Rules;
class NewPasswordController extends Controller
{
/**
* Display the password reset view.
*
* @param \Illuminate\Http\Request $request
*
* @return \Illuminate\View\View
*/
public function create(Request $request, $token)
{
return view('auth.reset-password', compact('request', 'token'));
}
/**
* Handle an incoming new password request.
*
* @param \Illuminate\Http\Request $request
*
* @return \Illuminate\Http\RedirectResponse
*
* @throws \Illuminate\Validation\ValidationException
*/
public function store(Request $request)
{
$request->validate([
'token' => 'required',
'email' => 'required|email',
'password' => ['required', 'confirmed', Rules\Password::defaults()],
]);
// Here we will attempt to reset the user's password. If it is successful we
// will update the password on an actual user model and persist it to the
// database. Otherwise we will parse the error and return the response.
$status = Password::reset(
$request->only('email', 'password', 'password_confirmation', 'token'),
function ($user) use ($request) {
$user->forceFill([
'password' => Hash::make($request->password),
'remember_token' => Str::random(60),
])->save();
event(new PasswordReset($user));
}
);
// If the password was successfully reset, we will redirect the user back to
// the application's home authenticated view. If there is an error we can
// redirect them back to where they came from with their error message.
return $status == Password::PASSWORD_RESET
? redirect()->route('login')->with('status', __($status))
: back()->withInput($request->only('email'))
->withErrors(['email' => __($status)]);
}
}

View file

@ -0,0 +1,76 @@
<?php
namespace App\Http\Controllers\Auth;
use App\Http\Controllers\Controller;
use App\Models\User;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Password;
use Illuminate\Validation\ValidationException;
class PasswordResetLinkController extends Controller
{
/**
* Display the password reset link request view.
*
* @return \Illuminate\View\View
*/
public function create()
{
return view('auth.forgot-password');
}
/**
* Handle an incoming password reset link request.
*
* @param \Illuminate\Http\Request $request
*
* @return \Illuminate\Http\RedirectResponse
*
* @throws \Illuminate\Validation\ValidationException
*/
public function store(Request $request)
{
$request->validate([
'email' => 'required|email',
]);
// We will send the password reset link to this user. Once we have attempted
// to send the link, we will examine the response then see the message we
// need to show to the user. Finally, we'll send out a proper response.
$status = Password::sendResetLink(
$request->only('email')
);
return $status == Password::RESET_LINK_SENT
? back()->with('status', __($status))
: back()->withInput($request->only('email'))
->withErrors(['email' => __($status)]);
}
/**
* Handle an incoming api password reset link request.
*
* @param \Illuminate\Http\Request $request
*
* @return \Illuminate\Http\Response
*
* @throws \Illuminate\Validation\ValidationException
*/
public function apiStore(Request $request)
{
$request->validate([
'email' => 'required|email',
]);
$user = User::where('email', $request->email)->first();
if (!$user) {
throw ValidationException::withMessages([
'email' => ['User with such email doesn\'t exist']
]);
}
return response('Password reset email successfully sent.');
}
}

View file

@ -0,0 +1,137 @@
<?php
namespace App\Http\Controllers\Auth;
use App\Http\Controllers\Controller;
use App\Models\User;
use App\Providers\RouteServiceProvider;
use Illuminate\Auth\Events\Registered;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Hash;
use Illuminate\Validation\Rules;
use Illuminate\Support\Str;
class RegisteredUserController extends Controller
{
/**
* Display the registration view.
*
* @return \Illuminate\View\View
*/
public function create()
{
return view('auth.register');
}
/**
* Handle an incoming registration request.
*
* @param \Illuminate\Http\Request $request
*
* @return \Illuminate\Http\RedirectResponse
*
* @throws \Illuminate\Validation\ValidationException
*/
public function store(Request $request)
{
$request->validate([
'username' => 'required|string|max:16|unique:users',
'email' => 'required|string|email|max:255|unique:users',
'password' => ['required', 'confirmed', Rules\Password::defaults()]
]);
$user = User::create([
'username' => $request->username,
'email' => $request->email,
'password' => Hash::make($request->password),
'ip_address' => $request->ip()
]);
/* Add account into Fider (https://myvideogamelist.com). */
$json = '{"name": "' . $request->username . '", "email": "' . $request->email . '"}';
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => "https://features.myvideogamelist.com/api/v1/users",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => $json,
CURLOPT_HTTPHEADER => array(
"Content-Type: application/json",
"Authorization: Bearer $TOKEN"
),
));
curl_exec($curl);
curl_close($curl);
event(new Registered($user));
Auth::login($user);
return redirect(RouteServiceProvider::HOME);
}
/**
* Handle an incoming api registration request.
*
* @param \Illuminate\Http\Request $request
*
* @return \Illuminate\Http\Response
*
* @throws \Illuminate\Validation\ValidationException
*/
public function apiStore(Request $request)
{
$request->validate([
'username' => 'required|string|max:16|unique:users',
'email' => 'required|string|email|max:255|unique:users',
'password' => ['required', 'confirmed', Rules\Password::defaults()],
]);
$token = Str::random(60);
$user = User::create([
'username' => $request->username,
'email' => $request->email,
'password' => Hash::make($request->password),
'api_token' => hash('sha256', $token),
'ip_address' => $request->ip()
]);
/* Add account into Fider (https://myvideogamelist.com). */
$json = '{"name": "' . $request->username . '", "email": "' . $request->email . '"}';
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => "https://features.myvideogamelist.com/api/v1/users",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => $json,
CURLOPT_HTTPHEADER => array(
"Content-Type: application/json",
"Authorization: Bearer $TOKEN"
),
));
curl_exec($curl);
curl_close($curl);
return response($user);
}
}

View file

@ -0,0 +1,31 @@
<?php
namespace App\Http\Controllers\Auth;
use App\Http\Controllers\Controller;
use App\Providers\RouteServiceProvider;
use Illuminate\Auth\Events\Verified;
use Illuminate\Foundation\Auth\EmailVerificationRequest;
class VerifyEmailController extends Controller
{
/**
* Mark the authenticated user's email address as verified.
*
* @param \Illuminate\Foundation\Auth\EmailVerificationRequest $request
*
* @return \Illuminate\Http\RedirectResponse
*/
public function __invoke(EmailVerificationRequest $request)
{
if ($request->user()->hasVerifiedEmail()) {
return redirect()->intended(RouteServiceProvider::HOME . '?verified=1');
}
if ($request->user()->markEmailAsVerified()) {
event(new Verified($request->user()));
}
return redirect()->intended(RouteServiceProvider::HOME . '?verified=1');
}
}

View file

@ -0,0 +1,85 @@
<?php
namespace App\Http\Controllers;
use App\Models\ConsoleList;
use Illuminate\Http\Request;
class ConsoleListController extends Controller
{
/**
* Display a listing of the resource.
*
* @return \Illuminate\Http\Response
*/
public function index()
{
//
}
/**
* Show the form for creating a new resource.
*
* @return \Illuminate\Http\Response
*/
public function create()
{
//
}
/**
* Store a newly created resource in storage.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\Response
*/
public function store(Request $request)
{
//
}
/**
* Display the specified resource.
*
* @param \App\Models\ConsoleList $consoleList
* @return \Illuminate\Http\Response
*/
public function show(ConsoleList $consoleList)
{
//
}
/**
* Show the form for editing the specified resource.
*
* @param \App\Models\ConsoleList $consoleList
* @return \Illuminate\Http\Response
*/
public function edit(ConsoleList $consoleList)
{
//
}
/**
* Update the specified resource in storage.
*
* @param \Illuminate\Http\Request $request
* @param \App\Models\ConsoleList $consoleList
* @return \Illuminate\Http\Response
*/
public function update(Request $request, ConsoleList $consoleList)
{
//
}
/**
* Remove the specified resource from storage.
*
* @param \App\Models\ConsoleList $consoleList
* @return \Illuminate\Http\Response
*/
public function destroy(ConsoleList $consoleList)
{
//
}
}

View file

@ -0,0 +1,15 @@
<?php
namespace App\Http\Controllers;
use Illuminate\Foundation\Auth\Access\AuthorizesRequests;
use Illuminate\Foundation\Bus\DispatchesJobs;
use Illuminate\Foundation\Validation\ValidatesRequests;
use Illuminate\Routing\Controller as BaseController;
class Controller extends BaseController
{
use AuthorizesRequests;
use DispatchesJobs;
use ValidatesRequests;
}

View file

@ -0,0 +1,85 @@
<?php
namespace App\Http\Controllers;
use App\Models\GameComment;
use Illuminate\Http\Request;
class GameCommentController extends Controller
{
/**
* Display a listing of the resource.
*
* @return \Illuminate\Http\Response
*/
public function index()
{
//
}
/**
* Show the form for creating a new resource.
*
* @return \Illuminate\Http\Response
*/
public function create()
{
//
}
/**
* Store a newly created resource in storage.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\Response
*/
public function store(Request $request)
{
//
}
/**
* Display the specified resource.
*
* @param \App\Models\GameComment $gameComment
* @return \Illuminate\Http\Response
*/
public function show(GameComment $gameComment)
{
//
}
/**
* Show the form for editing the specified resource.
*
* @param \App\Models\GameComment $gameComment
* @return \Illuminate\Http\Response
*/
public function edit(GameComment $gameComment)
{
//
}
/**
* Update the specified resource in storage.
*
* @param \Illuminate\Http\Request $request
* @param \App\Models\GameComment $gameComment
* @return \Illuminate\Http\Response
*/
public function update(Request $request, GameComment $gameComment)
{
//
}
/**
* Remove the specified resource from storage.
*
* @param \App\Models\GameComment $gameComment
* @return \Illuminate\Http\Response
*/
public function destroy(GameComment $gameComment)
{
//
}
}

View file

@ -0,0 +1,288 @@
<?php
namespace App\Http\Controllers;
use App\Models\Game;
use App\Rules\GameReleaseDate;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Storage;
use Illuminate\Validation\Rule;
class GameController extends Controller
{
/**
* Display a listing of the resource.
*
* @return \Illuminate\Http\Response
*/
public function index()
{
// Direct the user to the list of games.
return view('pages.admin.games.index');
}
/**
* Show the form for creating a new resource.
*
* @return \Illuminate\Http\Response
*/
public function create()
{
// Direct the user to the add game to database page.
return view('pages.admin.games.create');
}
/**
* Show the form for cloning a resource.
*
* @param int $gameId
* @return \Illuminate\Http\Response
*/
public function clone($gameId)
{
// Direct the user to the clone game page.
$game = Game::findOrFail($gameId);
return view('pages.admin.games.clone', compact('game'));
}
/**
* Store a newly created resource in storage.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\Response
*/
public function store(Request $request)
{
// Ensure the user has permission to add games into the database.
$this->authorize('create', Game::class);
// Validate the data from the request.
$inputs = $this->validate($request, [
'name' => 'string|required|max:255',
'alt_titles' => 'string|nullable|max:255',
'platform_id' => 'integer|required',
'description' => 'string|nullable',
'source' => 'url|nullable|max:255',
'boxart' => 'image|nullable|max:512',
'genre_ids' => 'array|nullable',
'developers' => 'string|nullable|max:255',
'publishers' => 'string|nullable|max:255',
'composers' => 'string|nullable|max:255',
'website' => 'url|nullable|max:255',
'na_release_date' => [
new GameReleaseDate(),
'nullable'
],
'jp_release_date' => [
new GameReleaseDate(),
'nullable'
],
'eu_release_date' => [
new GameReleaseDate(),
'nullable'
],
'aus_release_date' => [
new GameReleaseDate(),
'nullable'
],
'esrb_rating' => [
'string',
'nullable',
Rule::in(['Everyone', 'Everyone 10+', 'Teen', 'Mature 17+', 'Adults Only 18+', 'Rating Pending - Likely Mature 17+']) // phpcs:ignore
],
'pegi_rating' => [
'string',
'nullable',
Rule::in(['PEGI 3', 'PEGI 7', 'PEGI 12', 'PEGI 16', 'PEGI 18'])
],
'cero_rating' => [
'string',
'nullable',
Rule::in(['CERO A', 'CERO B', 'CERO C', 'CERO D', 'CERO Z'])
],
'acb_rating' => [
'string',
'nullable',
Rule::in(['E', 'G', 'PG', 'M', 'MA 15+', 'R 18+', 'X 18+'])
]
]);
// Convert the genre_ids array into a comma separated string.
if (isset($inputs['genre_ids'])) {
$inputs['genre_ids'] = implode(',', $inputs['genre_ids']);
}
// Upload the boxart image as necessary.
if ($request->hasFile('boxart')) {
$path = $request->boxart->store('assets/boxart', 's3');
$inputs['boxart'] = basename($path);
}
// Set the requested_by and added_by fields to the current user.
$inputs['requested_by'] = auth()->user()->id;
$inputs['added_by'] = auth()->user()->id;
// Save the data to the database.
$result = Game::create($inputs);
// If the creation was successful go to the list of games.
if ($result->exists) {
return redirect('/admin/games')->with('create_success', str_replace('"', '', json_encode($inputs['name'])));
} else { // If the creation failed, go back.
return back();
}
}
/**
* Display the specified resource.
*
* @param int $gameId
*
* @return \Illuminate\Http\Response
*/
public function show($gameId)
{
// Direct the user to the games profile page.
$game = Game::findOrFail($gameId);
return view('pages.game.index', compact('game'));
}
/**
* Show the form for editing the specified resource.
*
* @param \App\Models\Game $game
* @return \Illuminate\Http\Response
*/
public function edit(Game $game)
{
// Direct the user to the edit game page.
$game = Game::findOrFail($game->id);
return view('pages.admin.games.edit', compact('game'));
}
/**
* Update the specified resource in storage.
*
* @param \Illuminate\Http\Request $request
* @param \App\Models\Game $game
* @return \Illuminate\Http\Response
*/
public function update(Request $request, Game $game)
{
// Ensure the user has permission to add games into the database.
$this->authorize('update', Game::class);
// Validate the data from the request.
$inputs = $this->validate($request, [
'name' => 'string|required|max:255',
'alt_titles' => 'string|nullable|max:255',
'platform_id' => 'integer|required',
'description' => 'string|nullable',
'source' => 'url|nullable|max:255',
'boxart' => 'image|nullable|max:512',
'genre_ids' => 'array|nullable',
'developers' => 'string|nullable|max:255',
'publishers' => 'string|nullable|max:255',
'composers' => 'string|nullable|max:255',
'website' => 'url|nullable|max:255',
'na_release_date' => [
new GameReleaseDate(),
'nullable'
],
'jp_release_date' => [
new GameReleaseDate(),
'nullable'
],
'eu_release_date' => [
new GameReleaseDate(),
'nullable'
],
'aus_release_date' => [
new GameReleaseDate(),
'nullable'
],
'esrb_rating' => [
'string',
'nullable',
Rule::in(['Everyone', 'Everyone 10+', 'Teen', 'Mature 17+', 'Adults Only 18+', 'Rating Pending - Likely Mature 17+']) // phpcs:ignore
],
'pegi_rating' => [
'string',
'nullable',
Rule::in(['PEGI 3', 'PEGI 7', 'PEGI 12', 'PEGI 16', 'PEGI 18'])
],
'cero_rating' => [
'string',
'nullable',
Rule::in(['CERO A', 'CERO B', 'CERO C', 'CERO D', 'CERO Z'])
],
'acb_rating' => [
'string',
'nullable',
Rule::in(['E', 'G', 'PG', 'M', 'MA 15+', 'R 18+', 'X 18+'])
]
]);
// Convert the genre_ids array into a comma separated string.
if (isset($inputs['genre_ids'])) {
$inputs['genre_ids'] = implode(',', $inputs['genre_ids']);
$game->genre_ids = $inputs['genre_ids'];
}
// Upload the new boxart image as necessary.
if ($request->hasFile('boxart')) {
// Get the current boxart image.
$original_boxart = $game->boxart;
// Delete the boxart image if a previous boxart image existed.
if ($original_boxart) {
$result = Storage::disk('s3')->delete('assets/boxart/' . $original_boxart);
}
// Upload the new boxart image.
$path = $request->boxart->store('assets/boxart', 's3');
$inputs['boxart'] = basename($path);
$game->boxart = $inputs['boxart'];
}
// Set the values of the $game object to the new values.
$game->name = $inputs['name'];
$game->alt_titles = $inputs['alt_titles'];
$game->platform_id = $inputs['platform_id'];
$game->description = $inputs['description'];
$game->source = $inputs['source'];
$game->developers = $inputs['developers'];
$game->publishers = $inputs['publishers'];
$game->composers = $inputs['composers'];
$game->website = $inputs['website'];
$game->na_release_date = $inputs['na_release_date'];
$game->jp_release_date = $inputs['jp_release_date'];
$game->eu_release_date = $inputs['eu_release_date'];
$game->aus_release_date = $inputs['aus_release_date'];
$game->esrb_rating = $inputs['esrb_rating'];
$game->pegi_rating = $inputs['pegi_rating'];
$game->cero_rating = $inputs['cero_rating'];
$game->acb_rating = $inputs['acb_rating'];
// Save the data to the database.
$result = $game->save();
// If the update was successful show the user the updated game.
if ($result === true) {
return redirect('/admin/game/' . $game->id . '/edit')->with('edit_success', '1');
} else { // If the update failed, go back.
return back();
}
}
/**
* Remove the specified resource from storage.
*
* @param \App\Models\Game $game
* @return \Illuminate\Http\Response
*/
public function destroy(Game $game)
{
//
}
}

View file

@ -0,0 +1,283 @@
<?php
namespace App\Http\Controllers;
use App\Models\Game;
use App\Models\GameList;
use App\Models\User;
use Illuminate\Http\Request;
use Illuminate\Validation\Rule;
class GameListController extends Controller
{
/**
* Display a listing of the resource.
*
* @param string $username
* @return \Illuminate\Http\Response
*/
public function index($username = null)
{
// If username is null, $user is the currently logged in user.
if ($username === null) {
$user = auth()->user();
} else { // Otherwise, $user is the user with the specified username.
$user = User::where('username', $username)->firstOrFail();
}
// Direct the user to the games list page.
return view('pages.game-lists.index', compact('user'));
}
/**
* Show the form for creating a new resource.
*
* @param int $gameId
* @return \Illuminate\Http\Response
*/
public function create($gameId)
{
// Make sure $gameId is numeric.
if (is_numeric($gameId)) {
return view('pages.game-lists.create', ['gameId' => $gameId]);
} else { // Else go to the home page.
return redirect()->route('index');
}
}
/**
* Store a newly created resource in storage.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\Response
*/
public function store(Request $request)
{
// Validate the data from the request.
$inputs = $this->validate($request, [
'name' => [
'string',
'max:128',
'nullable'
],
'ownership' => [
'numeric',
'nullable',
Rule::in([1, 2, 3, 4])
],
'status' => [
'numeric',
Rule::in([1, 2, 3, 4, 5, 6])
],
'rating' => [
'numeric',
'nullable',
Rule::in([1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
],
'priority' => [
Rule::in(['Low', 'Medium', 'High']),
'string',
'max:6',
'nullable',
],
'difficulty' => [
'string',
'nullable',
Rule::in(['Easy', 'Medium', 'Hard', 'Extremely Hard'])
],
'hoursPlayed' => [
'numeric',
'nullable',
Rule::in([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13])
],
'start_date' => 'date_format:Y-m-d|after:1970-01-01 00:00:00|nullable',
'finish_date' => 'date_format:Y-m-d|after:1970-01-01 00:00:00|nullable',
'replayValue' => [
'numeric',
'nullable',
Rule::in([1, 2, 3, 4, 5])
],
'notes' => 'string|nullable'
]);
// Fetch a Game Model.
$game = Game::whereId($request->input('gameId'))->first();
// Fetch the name if none was selected.
if (!$request->input('name')) {
$inputs['name'] = $game->name;
}
// Set $input['game_id'].
$inputs['game_id'] = $game->id;
// Set $inputs['platform_id'].
$inputs['platform_id'] = Game::whereId($game->id)->value('platform_id');
// Set the value of replayValue.
if (!$request->input('replayValue')) {
$inputs['replayValue'] = null;
}
// Set the value of isReplaying.
if ($request->input('isReplaying') == 1) {
$inputs['isReplaying'] = 'Y';
} else {
$inputs['isReplaying'] = 'N';
}
// Save the data to the database.
$result = auth()->user()->gameList()->create($inputs);
// If adding the game was successful go to the users list.
if ($result->exists) {
return redirect('/list')->with('create_success', str_replace('"', '', json_encode($inputs['name'])));
} else { // If the addition failed, go back.
return back();
}
}
/**
* Display the specified resource.
*
* @param \App\Models\GameList $gameList
* @return \Illuminate\Http\Response
*/
public function show(GameList $gameList)
{
//
}
/**
* Show the form for editing the specified resource.
*
* @param \App\Models\GameList $gameList
* @return \Illuminate\Http\Response
*/
public function edit(GameList $gameList)
{
// Direct the user to the edit page.
return view('pages.game-lists.edit', compact('gameList'));
}
/**
* Update the specified resource in storage.
*
* @param \Illuminate\Http\Request $request
* @param \App\Models\GameList $gameList
* @return \Illuminate\Http\Response
*/
public function update(Request $request, GameList $gameList)
{
// Validate the data from the request.
$inputs = $this->validate($request, [
'name' => 'string|max:128|nullable',
'ownership' => [
'numeric',
'nullable',
Rule::in([1, 2, 3, 4])
],
'status' => [
'numeric',
Rule::in([1, 2, 3, 4, 5, 6])
],
'rating' => [
'numeric',
'nullable',
Rule::in([1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
],
'priority' => [
Rule::in(['Low', 'Medium', 'High']),
'string',
'max:6',
'nullable',
],
'difficulty' => [
'string',
'nullable',
Rule::in(['Easy', 'Medium', 'Hard', 'Extremely Hard'])
],
'hoursPlayed' => [
'numeric',
'nullable',
Rule::in([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13])
],
'start_date' => 'date_format:Y-m-d|after:1970-01-01 00:00:00|nullable',
'finish_date' => 'date_format:Y-m-d|after:1970-01-01 00:00:00|nullable',
'replayValue' => [
'numeric',
'nullable',
Rule::in([1, 2, 3, 4, 5])
],
'notes' => 'string|nullable'
]);
// Fetch a Game Model.
$game = Game::whereId($gameList->game_id)->first();
// Fetch the name if none was selected.
if (!$request->input('name')) {
$inputs['name'] = $game->name;
}
// Set $inputs['platform_id'].
$inputs['platform_id'] = $game->platform_id;
// Set the value of replayValue.
if (!$request->input('replayValue')) {
$inputs['replayValue'] = null;
}
// Set the value of isReplaying.
if ($request->input('isReplaying') == 1) {
$inputs['isReplaying'] = 'Y';
} else {
$inputs['isReplaying'] = 'N';
}
// Set the values of the gameList object to the updates values.
$gameList['name'] = $inputs['name'];
$gameList['ownership'] = $inputs['ownership'];
$gameList['status'] = $inputs['status'];
$gameList['rating'] = $inputs['rating'];
$gameList['priority'] = $inputs['priority'];
$gameList['difficulty'] = $inputs['difficulty'];
$gameList['hours_played'] = $inputs['hoursPlayed'];
$gameList['start_date'] = $inputs['start_date'];
$gameList['finish_date'] = $inputs['finish_date'];
$gameList['replay_value'] = $inputs['replayValue'];
$gameList['notes'] = $inputs['notes'];
$gameList['is_replaying'] = $inputs['isReplaying'];
// Ensure the user has permission to update this game list entry.
$this->authorize('update', $gameList);
// Save the data to the database.
$result = $gameList->save();
// If the update was successful go back to the edit page with a success message.
if ($result === true) {
return redirect('/list/edit/' . $gameList->id)->with('edit_success', '1');
} else { // If the update failed, go back.
return back();
}
}
/**
* Remove the specified resource from storage.
*
* @param \App\Models\GameList $gameList
* @return \Illuminate\Http\Response
*/
public function destroy(GameList $gameList)
{
// Check to ensure this user has permission to delete this game list entry.
$this->authorize('delete', $gameList);
// Soft delete the entry within the database.
$gameList->delete();
// Go back to the users game list.
return redirect('/list')->with('delete_success', str_replace('"', '', json_encode($gameList->name)));
}
}

View file

@ -0,0 +1,110 @@
<?php
namespace App\Http\Controllers;
use App\Models\Game;
use Illuminate\Http\Request;
class GameSearchController extends Controller
{
/**
* Display a listing of the resource.
*
* @return \Illuminate\Http\Response
*/
public function index()
{
//
}
/**
* Show the form for creating a new resource.
*
* @return \Illuminate\Http\Response
*/
public function create()
{
//
}
/**
* Store a newly created resource in storage.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\Response
*/
public function store(Request $request)
{
//
}
/**
* Display the specified resource.
*
* @param int $id
* @return \Illuminate\Http\Response
*/
public function show($id)
{
//
}
/**
* Show the form for editing the specified resource.
*
* @param int $id
* @return \Illuminate\Http\Response
*/
public function edit($id)
{
//
}
/**
* Update the specified resource in storage.
*
* @param \Illuminate\Http\Request $request
* @param int $id
* @return \Illuminate\Http\Response
*/
public function update(Request $request, $id)
{
//
}
/**
* Remove the specified resource from storage.
*
* @param int $id
* @return \Illuminate\Http\Response
*/
public function destroy($id)
{
//
}
/**
* Search for games and return results sorted by created_at, decending.
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\Response
*/
public function search(Request $request)
{
// Validate the data from the request.
$input = $this->validate($request, [
'search' => 'required|string|max:64'
]);
// Set the search term variable.
$term = $input['search'];
// Fetch all matching posts and send them to the search view.
$games = Game::where('name', 'like', "%$term%")
->orWhere('alt_titles', 'like', "%$term%")
->orderBy('created_at', 'DESC')
->paginate(25);
// Send the results to the view.
return view('pages.search.games.show', compact('games'));
}
}

View file

@ -0,0 +1,85 @@
<?php
namespace App\Http\Controllers;
use App\Models\Genre;
use Illuminate\Http\Request;
class GenreController extends Controller
{
/**
* Display a listing of the resource.
*
* @return \Illuminate\Http\Response
*/
public function index()
{
//
}
/**
* Show the form for creating a new resource.
*
* @return \Illuminate\Http\Response
*/
public function create()
{
//
}
/**
* Store a newly created resource in storage.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\Response
*/
public function store(Request $request)
{
//
}
/**
* Display the specified resource.
*
* @param \App\Models\Genre $genre
* @return \Illuminate\Http\Response
*/
public function show(Genre $genre)
{
//
}
/**
* Show the form for editing the specified resource.
*
* @param \App\Models\Genre $genre
* @return \Illuminate\Http\Response
*/
public function edit(Genre $genre)
{
//
}
/**
* Update the specified resource in storage.
*
* @param \Illuminate\Http\Request $request
* @param \App\Models\Genre $genre
* @return \Illuminate\Http\Response
*/
public function update(Request $request, Genre $genre)
{
//
}
/**
* Remove the specified resource from storage.
*
* @param \App\Models\Genre $genre
* @return \Illuminate\Http\Response
*/
public function destroy(Genre $genre)
{
//
}
}

View file

@ -0,0 +1,35 @@
<?php
namespace App\Http\Controllers\Logs;
use App\DataTables\Logs\AuditLogsDataTable;
use App\Http\Controllers\Controller;
use Spatie\Activitylog\Models\Activity;
class AuditLogsController extends Controller
{
/**
* Display a listing of the resource.
*
* @return \Illuminate\Http\Response
*/
public function index(AuditLogsDataTable $dataTable)
{
return $dataTable->render('pages.log.audit.index');
}
/**
* Remove the specified resource from storage.
*
* @param int $id
*
* @return \Illuminate\Http\Response
*/
public function destroy($id)
{
$activity = Activity::find($id);
// Delete from db
$activity->delete();
}
}

View file

@ -0,0 +1,32 @@
<?php
namespace App\Http\Controllers\Logs;
use App\DataTables\Logs\SystemLogsDataTable;
use App\Http\Controllers\Controller;
use Jackiedo\LogReader\LogReader;
class SystemLogsController extends Controller
{
/**
* Display a listing of the resource.
*
* @return \Illuminate\Http\Response
*/
public function index(SystemLogsDataTable $dataTable)
{
return $dataTable->render('pages.log.system.index');
}
/**
* Remove the specified resource from storage.
*
* @param int $id
*
* @return \Illuminate\Http\Response
*/
public function destroy($id, LogReader $logReader)
{
return $logReader->find($id)->delete();
}
}

View file

@ -0,0 +1,100 @@
<?php
namespace App\Http\Controllers;
use App\Models\Platform;
use Illuminate\Http\Request;
class PlatformController extends Controller
{
/**
* Display a listing of the resource.
*
* @return \Illuminate\Http\Response
*/
public function index()
{
// Direct the user to the page listing all platforms.
return view('pages.platforms.index');
}
/**
* Show the form for creating a new resource.
*
* @return \Illuminate\Http\Response
*/
public function create()
{
//
}
/**
* Store a newly created resource in storage.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\Response
*/
public function store(Request $request)
{
//
}
/**
* Display the specified resource.
*
* @param string $platform
* @return \Illuminate\Http\Response
*/
public function show($platform)
{
// Fetch the platform.
if ($platform == 'Xbox_Series_X_S') {
$platform = Platform::where('name', 'Xbox Series X/S')->firstOrFail();
} elseif ($platform == 'Sega_Genesis_MegaDrive') {
$platform = Platform::where('name', 'Sega Genesis/MegaDrive')->firstOrFail();
} elseif ($platform == 'Meta_Oculus_Quest') {
$platform = Platform::where('name', 'Meta/Oculus Quest')->firstOrFail();
} elseif ($platform == 'Meta_Oculus_Quest_2') {
$platform = Platform::where('name', 'Meta/Oculus Quest 2')->firstOrFail();
} else {
$platform = Platform::where('name', str_replace('_', ' ', $platform))->firstOrFail();
}
// Direct the users to a page showing all the games for the specified platform.
return view('pages.platforms.show', compact('platform'));
}
/**
* Show the form for editing the specified resource.
*
* @param \App\Models\Platform $platform
* @return \Illuminate\Http\Response
*/
public function edit(Platform $platform)
{
//
}
/**
* Update the specified resource in storage.
*
* @param \Illuminate\Http\Request $request
* @param \App\Models\Platform $platform
* @return \Illuminate\Http\Response
*/
public function update(Request $request, Platform $platform)
{
//
}
/**
* Remove the specified resource from storage.
*
* @param \App\Models\Platform $platform
* @return \Illuminate\Http\Response
*/
public function destroy(Platform $platform)
{
//
}
}

View file

@ -0,0 +1,85 @@
<?php
namespace App\Http\Controllers;
use App\Models\ProfileComment;
use Illuminate\Http\Request;
class ProfileCommentController extends Controller
{
/**
* Display a listing of the resource.
*
* @return \Illuminate\Http\Response
*/
public function index()
{
//
}
/**
* Show the form for creating a new resource.
*
* @return \Illuminate\Http\Response
*/
public function create()
{
//
}
/**
* Store a newly created resource in storage.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\Response
*/
public function store(Request $request)
{
//
}
/**
* Display the specified resource.
*
* @param \App\Models\ProfileComment $profileComment
* @return \Illuminate\Http\Response
*/
public function show(ProfileComment $profileComment)
{
//
}
/**
* Show the form for editing the specified resource.
*
* @param \App\Models\ProfileComment $profileComment
* @return \Illuminate\Http\Response
*/
public function edit(ProfileComment $profileComment)
{
//
}
/**
* Update the specified resource in storage.
*
* @param \Illuminate\Http\Request $request
* @param \App\Models\ProfileComment $profileComment
* @return \Illuminate\Http\Response
*/
public function update(Request $request, ProfileComment $profileComment)
{
//
}
/**
* Remove the specified resource from storage.
*
* @param \App\Models\ProfileComment $profileComment
* @return \Illuminate\Http\Response
*/
public function destroy(ProfileComment $profileComment)
{
//
}
}

View file

@ -0,0 +1,85 @@
<?php
namespace App\Http\Controllers;
use App\Models\Role;
use Illuminate\Http\Request;
class RoleController extends Controller
{
/**
* Display a listing of the resource.
*
* @return \Illuminate\Http\Response
*/
public function index()
{
//
}
/**
* Show the form for creating a new resource.
*
* @return \Illuminate\Http\Response
*/
public function create()
{
//
}
/**
* Store a newly created resource in storage.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\Response
*/
public function store(Request $request)
{
//
}
/**
* Display the specified resource.
*
* @param \App\Models\Role $role
* @return \Illuminate\Http\Response
*/
public function show(Role $role)
{
//
}
/**
* Show the form for editing the specified resource.
*
* @param \App\Models\Role $role
* @return \Illuminate\Http\Response
*/
public function edit(Role $role)
{
//
}
/**
* Update the specified resource in storage.
*
* @param \Illuminate\Http\Request $request
* @param \App\Models\Role $role
* @return \Illuminate\Http\Response
*/
public function update(Request $request, Role $role)
{
//
}
/**
* Remove the specified resource from storage.
*
* @param \App\Models\Role $role
* @return \Illuminate\Http\Response
*/
public function destroy(Role $role)
{
//
}
}

View file

@ -0,0 +1,98 @@
<?php
namespace App\Http\Controllers;
use App\Models\User;
use Illuminate\Http\Request;
class UserController extends Controller
{
/**
* Display a listing of the resource.
*
* @return \Illuminate\Http\Response
*/
public function index()
{
//
}
/**
* Show the form for creating a new resource.
*
* @return \Illuminate\Http\Response
*/
public function create()
{
//
}
/**
* Store a newly created resource in storage.
*
* @param \Illuminate\Http\Request $request
*
* @return \Illuminate\Http\Response
*/
public function store(Request $request)
{
//
}
/**
* Display the specified resource.
*
* @param string $username
*
* @return \Illuminate\Http\Response
*/
public function show($username = null)
{
// If username is null, $user is the currently logged in user.
if ($username === null) {
$user = auth()->user();
} else { // Otherwise, $user is the user with the specified username.
$user = User::where('username', $username)->firstOrFail();
}
// Direct the user to the profile page.
return view('pages.profile.index', compact('user'));
}
/**
* Show the form for editing the specified resource.
*
* @param int $id
*
* @return \Illuminate\Http\Response
*/
public function edit($id)
{
//
}
/**
* Update the specified resource in storage.
*
* @param \Illuminate\Http\Request $request
* @param int $id
*
* @return \Illuminate\Http\Response
*/
public function update(Request $request, $id)
{
//
}
/**
* Remove the specified resource from storage.
*
* @param int $id
*
* @return \Illuminate\Http\Response
*/
public function destroy($id)
{
//
}
}

View file

@ -0,0 +1,85 @@
<?php
namespace App\Http\Controllers;
use App\Models\UserGamerTag;
use Illuminate\Http\Request;
class UserGamerTagController extends Controller
{
/**
* Display a listing of the resource.
*
* @return \Illuminate\Http\Response
*/
public function index()
{
//
}
/**
* Show the form for creating a new resource.
*
* @return \Illuminate\Http\Response
*/
public function create()
{
//
}
/**
* Store a newly created resource in storage.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\Response
*/
public function store(Request $request)
{
//
}
/**
* Display the specified resource.
*
* @param \App\Models\UserGamerTag $userGamerTag
* @return \Illuminate\Http\Response
*/
public function show(UserGamerTag $userGamerTag)
{
//
}
/**
* Show the form for editing the specified resource.
*
* @param \App\Models\UserGamerTag $userGamerTag
* @return \Illuminate\Http\Response
*/
public function edit(UserGamerTag $userGamerTag)
{
//
}
/**
* Update the specified resource in storage.
*
* @param \Illuminate\Http\Request $request
* @param \App\Models\UserGamerTag $userGamerTag
* @return \Illuminate\Http\Response
*/
public function update(Request $request, UserGamerTag $userGamerTag)
{
//
}
/**
* Remove the specified resource from storage.
*
* @param \App\Models\UserGamerTag $userGamerTag
* @return \Illuminate\Http\Response
*/
public function destroy(UserGamerTag $userGamerTag)
{
//
}
}

View file

@ -0,0 +1,85 @@
<?php
namespace App\Http\Controllers;
use App\Models\UserInfo;
use Illuminate\Http\Request;
class UserInfoController extends Controller
{
/**
* Display a listing of the resource.
*
* @return \Illuminate\Http\Response
*/
public function index()
{
//
}
/**
* Show the form for creating a new resource.
*
* @return \Illuminate\Http\Response
*/
public function create()
{
//
}
/**
* Store a newly created resource in storage.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\Response
*/
public function store(Request $request)
{
//
}
/**
* Display the specified resource.
*
* @param \App\Models\UserInfo $userInfo
* @return \Illuminate\Http\Response
*/
public function show(UserInfo $userInfo)
{
//
}
/**
* Show the form for editing the specified resource.
*
* @param \App\Models\UserInfo $userInfo
* @return \Illuminate\Http\Response
*/
public function edit(UserInfo $userInfo)
{
//
}
/**
* Update the specified resource in storage.
*
* @param \Illuminate\Http\Request $request
* @param \App\Models\UserInfo $userInfo
* @return \Illuminate\Http\Response
*/
public function update(Request $request, UserInfo $userInfo)
{
//
}
/**
* Remove the specified resource from storage.
*
* @param \App\Models\UserInfo $userInfo
* @return \Illuminate\Http\Response
*/
public function destroy(UserInfo $userInfo)
{
//
}
}

View file

@ -0,0 +1,85 @@
<?php
namespace App\Http\Controllers;
use App\Models\UserNotificationSetting;
use Illuminate\Http\Request;
class UserNotificationSettingController extends Controller
{
/**
* Display a listing of the resource.
*
* @return \Illuminate\Http\Response
*/
public function index()
{
//
}
/**
* Show the form for creating a new resource.
*
* @return \Illuminate\Http\Response
*/
public function create()
{
//
}
/**
* Store a newly created resource in storage.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\Response
*/
public function store(Request $request)
{
//
}
/**
* Display the specified resource.
*
* @param \App\Models\UserNotificationSetting $userNotificationSetting
* @return \Illuminate\Http\Response
*/
public function show(UserNotificationSetting $userNotificationSetting)
{
//
}
/**
* Show the form for editing the specified resource.
*
* @param \App\Models\UserNotificationSetting $userNotificationSetting
* @return \Illuminate\Http\Response
*/
public function edit(UserNotificationSetting $userNotificationSetting)
{
//
}
/**
* Update the specified resource in storage.
*
* @param \Illuminate\Http\Request $request
* @param \App\Models\UserNotificationSetting $userNotificationSetting
* @return \Illuminate\Http\Response
*/
public function update(Request $request, UserNotificationSetting $userNotificationSetting)
{
//
}
/**
* Remove the specified resource from storage.
*
* @param \App\Models\UserNotificationSetting $userNotificationSetting
* @return \Illuminate\Http\Response
*/
public function destroy(UserNotificationSetting $userNotificationSetting)
{
//
}
}

View file

@ -0,0 +1,27 @@
<?php
namespace App\Http\Controllers;
use App\Models\UserSiteSetting;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
class UserSiteSettingController extends Controller
{
/**
* Set the users dark mode setting.
*
* @param string $mode Dark mode setting, either 'yes' or 'no'.
* @return \Illuminate\Http\Response
*/
public static function setDarkMode($mode)
{
// Get the user as an object.
$user = auth()->user();
$result = DB::table('user_site_settings')->updateOrInsert(
['user_id' => $user->id, 'setting_name' => 'dark_mode'],
['setting_value' => $mode]
);
}
}

View file

@ -0,0 +1,97 @@
<?php
namespace App\Http\Controllers;
use App\Models\Wishlist;
use App\Models\User;
use Illuminate\Http\Request;
class WishlistController extends Controller
{
/**
* Display a listing of the resource.
*
* @return \Illuminate\Http\Response
*/
public function index()
{
//
}
/**
* Show the form for creating a new resource.
*
* @return \Illuminate\Http\Response
*/
public function create()
{
//
}
/**
* Store a newly created resource in storage.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\Response
*/
public function store(Request $request)
{
//
}
/**
* Display the specified resource.
*
* @param string $username
*
* @return \Illuminate\Http\Response
*/
public function show($username = null)
{
// If username is null, fetch the user_id and their wishlist items.
if ($username === null) {
$userId = auth()->user()->id;
$wishlist = Wishlist::where('user_id', $userId)->whereNull('deleted_at')->get();
} else { // Otherwise, fetch the user_id from $username and their wishlist items.
$userId = User::whereUsername($username)->firstOrFail()->id;
$wishlist = Wishlist::where('user_id', $userId)->get();
}
// Direct the user to the wishlist page.
return view('pages.wishlist.index', compact('wishlist'));
}
/**
* Show the form for editing the specified resource.
*
* @param \App\Models\Wishlist $wishlist
* @return \Illuminate\Http\Response
*/
public function edit(Wishlist $wishlist)
{
//
}
/**
* Update the specified resource in storage.
*
* @param \Illuminate\Http\Request $request
* @param \App\Models\Wishlist $wishlist
* @return \Illuminate\Http\Response
*/
public function update(Request $request, Wishlist $wishlist)
{
//
}
/**
* Remove the specified resource from storage.
*
* @param \App\Models\Wishlist $wishlist
* @return \Illuminate\Http\Response
*/
public function destroy(Wishlist $wishlist)
{
//
}
}