tadah-eleven/app/Http/Controllers/UsersController.php

211 lines
5.7 KiB
PHP

<?php
namespace App\Http\Controllers;
use App\Models\User;
use Illuminate\Support\Facades\DB;
use App\Models\Server;
use App\Models\Item;
use App\Models\OwnedItems;
use App\Models\BodyColors;
use App\Models\RenderQueue;
use Illuminate\Http\Request;
use Illuminate\Support\Arr;
use Illuminate\Support\Facades\Storage;
use Illuminate\Support\Facades\Response;
class UsersController extends Controller
{
public function __construct()
{
$this->middleware('auth');
}
public function index(Request $request)
{
$users = User::query();
if (request('search')) {
$users->where('username', 'LIKE', '%' . request('search') . '%')->orderBy('last_online', 'desc');
} else {
$users->orderBy('last_online', 'desc');
}
return view('users.index')->with('users', $users->paginate(10)->appends($request->all()));
}
public function me(Request $request)
{
$servers = Server::where('creator', $request->user()->id)->get();
return view('users.user')->with('servers', $servers);
}
public function profile(Request $request, $id)
{
$user = User::findOrFail($id);
$servers = Server::where('creator', $user->id)->get();
return view('users.profile')->with(['user' => $user, 'servers' => $servers]);
}
public function banned(Request $request)
{
if (!$request->user()->banned) {
return redirect(route('home'));
}
return view('users.banned');
}
public function settings(Request $request)
{
return view('users.settings');
}
public function getthumbnail(Request $request, $id)
{
$user = User::findOrFail($id);
$userInQueue = RenderQueue::where(['type' => 'user', 'target_id' => $user->id])->first();
$path = 'items/asset-error.png'; // default image (not found)
if (Storage::disk('public')->exists('users/user_' . $user->id . '.png')) {
$path = $user->banned ?
'items/asset-notapproved.png' : // user thumbnail if they're not banned
('users/user_' . $user->id . '.png'); // otherwise not approved if they're banned
}
if ($userInQueue) { // if user is in render queue, return loading spinner gif
return redirect(asset('images/asset-loading.gif'));
}
$response = Response::make(Storage::disk('public')
->get($path, 200))
->header('Content-Type', 'image/png');
return $response;
}
public function characterItems(Request $request, $requestType)
{
$type = "Hat";
switch ($requestType) {
case "hats":
default:
$type = "Hat";
break;
case "shirts":
$type = "Shirt";
break;
case "pants":
$type = "Pants";
break;
case "tshirts":
$type = "T-Shirt";
break;
case "images":
$type = "Image";
break;
case "faces":
$type = "Face";
break;
case "gears":
$type = "Gear";
break;
case "heads":
$type = "Head";
break;
case "packages":
$type = "Package";
break;
}
$items = DB::table('owned_items')
->join('items', 'owned_items.item_id', '=', 'items.id')
->where('owned_items.user_id', $request->user()->id)
->where('items.type', $type)
->where('items.approved', 1)
->select('items.id', 'items.thumbnail_url', 'items.name', 'items.type', 'owned_items.wearing')
->orderBy('owned_items.created_at', 'desc')
->get();
return view('users.characteritems', ['items' => $items, 'type' => $type]);
}
public function toggleWearing(Request $request, $id)
{
$item = Item::findOrFail($id);
$ownedItem = OwnedItems::where(['item_id' => $id, 'user_id' => $request->user()->id])->firstOrFail();
$wearingItems = DB::table('owned_items')
->join('items', 'owned_items.item_id', '=', 'items.id')
->where('owned_items.user_id', $request->user()->id)
->where('owned_items.wearing', true)
->where('items.type', $item->type)
->select('owned_items.id', 'owned_items.item_id', 'owned_items.wearing')
->get();
if (!$ownedItem->wearing) {
if ($item->type == "Hat") {
if (count($wearingItems) >= 5) {
$wearingItem = OwnedItems::where(['id' => $wearingItems[0]->id, 'wearing' => true])->first();
if ($wearingItem) {
$wearingItem->wearing = false;
$wearingItem->save();
}
}
} else {
foreach ($wearingItems as $wearingItem) {
$wearingItem = OwnedItems::where(['id' => $wearingItem->id, 'user_id' => $request->user()->id])->first();
$wearingItem->wearing = false;
$wearingItem->save();
}
}
$ownedItem->wearing = true;
$ownedItem->save();
} else {
$ownedItem->wearing = false;
$ownedItem->save();
}
return back();
}
public function regenThumbnail(Request $request)
{
$user = $request->user();
$userInQueue = RenderQueue::where(['type' => 'user', 'target_id' => $user->id])->first();
if ($userInQueue) {
return 'INQUEUE';
} else {
RenderQueue::create([
'type' => 'user',
'target_id' => $user->id
]);
return 'OK';
}
}
public function download(Request $request)
{
return view('client.download');
}
public function savesettings(Request $request)
{
$user = $request->user();
$request->validate([
'blurb' => ['max:700']
]);
$user->blurb = $request->blurb;
$user->save();
return redirect(route('users.settings'))->with('message', 'Settings saved successfully.');
}
}