user list in admin panel + bug fixes

This commit is contained in:
Conkley 2022-06-30 15:46:00 +10:00
parent 48194def6a
commit 8aebeecf13
7 changed files with 152 additions and 190 deletions

View File

@ -3,6 +3,8 @@
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
use App\Models\User;
class AdminController extends Controller
{
@ -11,6 +13,19 @@ class AdminController extends Controller
return view('admin.index');
}
public function users(Request $request)
{
if ($request->searchBy == 'name' && $request->has('q')) {
$users = DB::table('users')->where('name', 'LIKE', '%'.$request->q.'%')->paginate(10);
} else if ($request->searchBy == 'id' && $request->has('q')) {
$users = DB::table('users')->where('id', $request->q)->paginate(10);
} else {
$users = User::paginate(10);
}
return view('admin.users')->with('users', $users);
}
public function keys()
{
return view('admin.keys');

View File

@ -1,174 +1,11 @@
@extends('layouts.app')
@extends('layouts.admin')
@section('title')
<title>Admin - {{ env('APP_NAME') }}</title>
<title>Admin | Dashboard - {{ env('APP_NAME') }}</title>
@endsection
@section('content')
<div class="iphone-sidebar">
<img src="https://morblox.us/img/MORBLOXlogo.png" width="50%">
<p>Admin Panel</p>
<p>Logged in as: ballsgamer123</p>
<br>
<a>User List</a>
<br>
<a>Game List</a>
<br>
<a>Invite Tree</a>
<br>
<a>Asset Approval Queue</a>
<br>
<a>Reports</a>
<br>
<a>Moderation Logs</a>
<br>
<a>Game Servers</a>
</div>
<div class="iphone-content" style="padding-left: 0px; padding-right: 0px;">
<div id="UserList">
<h2>User List</h2>
<p><input type="text" placeholder="Search..."><button class="bluebutton">Search by Username</button> <button class="bluebutton">Search by ID</button></p>
<div id="SearchContainer">
<div class="ProfileContainerBox" id="ProfileContainerBox1">
<div id="ProfileContainerBox1ImageContainer">
<img alt="Profile Image" src="https://morblox.us/img/reviewpending.png" width="60px" height="100%">
</div>
<div id="ProfileContainerBox1TextContainer">
<p>USERNAME: MORBLOX</p>
<p>EMAIL: test@example.com</p>
<p>ID: 1</p>
<p>DOB: 1/1/01</p>
<p>STATUS: Normal</p>
<p>INVITED BY: SYSTEM (ID: 0)</p>
<button class="greybutton">Check Reports For This User</button>
<button class="bluebutton">Edit User Data</button>
<button class="bluebutton">Warn/Ban History</button>
<button class="redbutton">Warn</button>
<button class="redbutton">Ban/Terminate</button>
</div>
</div>
</div>
</div>
<div id="GameList">
<h2>Game List</h2>
<p><input type="text" placeholder="Search..."><button class="bluebutton">Search by Name</button> <button class="bluebutton">Search by ID</button></p>
<div id="SearchContainer">
<div class="ProfileContainerBox" id="ProfileContainerBox1">
<div id="ProfileContainerBox1ImageContainer">
<img alt="Game Image" src="https://morblox.us/img/reviewpending.png" width="60px" height="100%">
</div>
<div id="ProfileContainerBox1TextContainer">
<p>Game Name: MORBLOX's Place</p>
<p>Game Description: This is your first MORBLOX Place. Open it with MORBLOX Studio to start building!</p>
<p>Creator: MORBLOX</p>
<p>GAMEID: 1</p>
<button class="greybutton">Check Reports For This Game</button>
<button class="greenbutton">Play Game In Studio</button>
<button class="redbutton">Delete Game</button>
<button class="redbutton">Ban/Terminate Creator</button>
</div>
</div>
</div>
</div>
<div id="InviteTree">
<h2>Invite Tree</h2>
<p><input type="text" placeholder="Search..."><button class="bluebutton">Search by Username</button> <button class="bluebutton">Search by ID</button></p>
<div id="InviteTreeContainer">
<p>---------------------------</p>
<p>SYSTEM (ID: 0)</p>
<p>- MORBLOX (ID: 1)</p>
<p>- Conkley (ID: 2)</p>
<p>- Thomas (ID: 3)</p>
<p>- - the night guard from five nights at freddy (ID: ??)</p>
<p>- Mura (ID: 4)</p>
<p>- Pipedream (ID: 5)</p>
<p>---------------------------</p>
</div>
</div>
<div id="AssetApprovalQueue">
<h2>Asset Approval Queue</h2>
<p><input type="text" placeholder="Search..."><button class="bluebutton">Search by Asset Name</button> <button class="bluebutton">Search by Username</button></p>
<div id="AssetApprovalContainer">
<div class="ProfileContainerBox" id="ProfileContainerBox1">
<div id="ProfileContainerBox1ImageContainer">
<img alt="Asset Image" src="https://morblox.us/img/reviewpending.png" width="60px" height="100%">
</div>
<div id="ProfileContainerBox1TextContainer">
<p>Asset Name: PLACEHOLDER</p>
<p>Asset Description: PLACEHOLDER IMAGE</p>
<p>Asset Type: Decal</p>
<p>Asset Creator: MORBLOX (ID: 1)</p>
<button class="bluebutton">Accept</button>
<button class="bluebutton">Decline</button>
<button class="redbutton">Warn User</button>
<button class="redbutton">Ban/Terminate User</button>
</div>
</div>
</div>
</div>
<div id="Reports">
<h2>Reports</h2>
<p><input type="text" placeholder="Search..."><button class="bluebutton">Search by Game Name/Id</button> <button class="bluebutton">Search by Username/Id</button></p>
<div id="ReportsContainer">
<div class="ProfileContainerBox" id="ProfileContainerBox1">
<div id="ProfileContainerBox1ImageContainer">
<img alt="Asset Image" src="https://morblox.us/img/reviewpending.png" width="60px" height="100%">
</div>
<div id="ProfileContainerBox1TextContainer">
<p>Reporting: Game</p>
<p>Report Sender: MORBLOX (USERID: 1)</p>
<p>Game: MORBLOX's Place (GAMEID: 1)</p>
<p>Game Creator: MORBLOX (USERID: 1)</p>
<p>Reason: Racial/Homophobic Slurs</p>
<p>Comments: Has the N Word in it.</p>
<button class="greenbutton">Open Game In Studio</button>
<button class="greybutton">Warn Report Sender</button>
<button class="redbutton">Delete Game</button>
<button class="redbutton">Ban/Terminate Game Creator</button>
</div>
</div>
<div class="ProfileContainerBox" id="ProfileContainerBox1">
<div id="ProfileContainerBox1ImageContainer">
<img alt="Asset Image" src="https://morblox.us/img/reviewpending.png" width="60px" height="100%">
</div>
<div id="ProfileContainerBox1TextContainer">
<p>Reporting: Player</p>
<p>Report Sender: MORBLOX (USERID: 1)</p>
<p>Player: Thomas (USERID: 3)</p>
<p>Inviter: SYSTEM (USERID: 0)</p>
<p>Reason: Harrassment</p>
<p>Comments: Said "It's Morbin Time"</p>
<button class="bluebutton">View Chat Logs</button>
<button class="greybutton">Warn Report Sender</button>
<button class="redbutton">Warn Player</button>
<button class="redbutton">Ban/Terminate Player</button>
</div>
</div>
</div>
<div id="ModLogs">
<h2>Moderation Logs</h2>
<p><input type="text" placeholder="Search..."><button class="bluebutton">Search by Reason</button> <button class="bluebutton">Search by Moderator</button></p>
<div id="ModLogsContainer">
<div class="ProfileContainerBox" id="ProfileContainerBox1">
<div id="ProfileContainerBox1TextContainer">
<p>Moderator: Thomas (ID: 3)</p>
<p>Player: skeuomorphism hater (ID: ??)</p>
<p>Inviter: skeuomorphism lover (ID: ??)</p>
<p>Punishment: Termination, Disabling invites for Inviter</p>
<p>Reason: Being mean :(</p>
<button class="greybutton">View Original Report</button>
<button class="greybutton">View Proof</button>
<button class="redbutton">Undo Invite Ban for Inviter</button>
<button class="redbutton">Undo Ban/Termination</button>
</div>
</div>
</div>
</div>
<div id="GameServers">
<h2>Game Servers</h2>
<p><input type="text" placeholder="Search..."><button class="bluebutton">Search by Game Name</button></p>
<div id="ModLogsContainer">
<p>There are no running game servers!</p>
</div>
</div>
</div>
<h1>{{ env('APP_NAME') }}</h1>
<h5>Administration Area</h5><br>
<p><strong>{{ App\Models\User::count() }}</strong> users registered, <strong>{{ App\Models\User::where('admin', true)->count() }}</strong> total admins, <strong>{{ App\Models\User::where('last_seen', '>', Carbon\Carbon::now()->subDay()->toDateTimeString())->count(); }}</strong> users online in the past 24 hours.</p><br>
<p><strong>{{ App\Models\InviteKey::count() }}</strong> invite keys exist, <strong>{{ App\Models\InviteKey::where('active', true)->count() }}</strong> keys haven't been used yet.</p>
@endsection

View File

@ -0,0 +1,66 @@
@extends('layouts.admin')
@section('title')
<title>
Admin | User List - {{ env('APP_NAME') }}</title>
<style>
.flex {
display: block !important;
}
</style>
@endsection
@section('content')
<div id="UserList">
<h2>User List</h2>
@if (request()->query('q'))
<a href="{{ route('admin_users') }}" style="color:navy">Clear Search</a>
@endif
<form method="GET" action="{{ route('admin_users') }}">
<div style="margin-top:10px;margin-bottom:10px;"><input type="text" id="q" name="q" placeholder="Search..." value="{{ request()->q }}"><button
class="bluebutton" style="margin-left:2px" name="searchBy" value="name">Search by Username</button><button class="bluebutton" style="margin-left:2px" name="searchBy" value="id">Search by ID</button></div>
</form>
@foreach ($users as $user)
<div id="SearchContainer">
<div class="ProfileContainerBox" id="ProfileContainerBox1" style="background-color: white;">
<div id="ProfileContainerBox1ImageContainer">
<img alt="Profile Image" src="https://morblox.us/img/reviewpending.png" width="60px"
height="100%">
</div>
<div id="ProfileContainerBox1TextContainer" style="color:black">
<p><strong>Username:</strong> {{ $user->name }}</p>
@if ($user->admin)
<p><strong>E-Mail:</strong> <i>Admin E-Mail Hidden</i></p>
@else
<p><strong>E-Mail:</strong> {{ $user->email }}</p>
@endif
<p><strong>ID:</strong> {{ $user->id }}</p>
<p><strong>DOB:</strong> {{ Carbon\Carbon::parse($user->dob)->format('d/m/Y') }}</p>
<p><strong>Rank:</strong>
@if ($user->admin)
Admin
@else
Member
@endif
</p>
<p><strong>Status:</strong> Normal</p>
<p><strong>Invited By:</strong> <a style="color:blue"
href="{{ route('profile', App\Models\User::where('id', $user->invited_by)->first()->id) }}">{{ App\Models\User::where('id', $user->invited_by)->first()->name }}</a>
(ID: {{ App\Models\User::where('id', $user->invited_by)->first()->id }})
</p>
<!--
<button class="greybutton">Check Reports For This User</button>
<button class="bluebutton">Edit User Data</button>
<button class="bluebutton">Warn/Ban History</button>
<button class="redbutton">Warn</button>
<button class="redbutton">Ban/Terminate</button>-->
</div>
</div>
</div>
@endforeach
@if ($users->isEmpty())
<h5>No user was found, check if you entered the correct details.</h5>
@endif
</div>
{{ $users->appends($_GET)->links() }}
@endsection

View File

@ -16,44 +16,44 @@
<div id="FeedContainer">
<div class="FeedContainerBox" id="FeedContainerBox1">
<div class="FeedContainerBoxImageContainer" id="FeedContainerBox1ImageContainer">
<a href="profile.html"><img alt="Profile Image" src="{{ asset('img/reviewpending.png') }}" width="60px"
<a href="#"><img alt="Profile Image" src="{{ asset('img/reviewpending.png') }}" width="60px"
height="100%"></a>
</div>
<div class="FeedContainerBoxTextContainer" id="FeedContainerBox1TextContainer">
<a href="profile.html" id="FeedContainerBox1Username">skeuomorphism hater</a>
<a href="#" id="FeedContainerBox1Username">skeuomorphism hater</a>
<p id="FeedContainerBox1Text">"noooooo"</p>
<p id="FeedContainerBox1Timestamp">June 21, 2022 04:42 AM</p>
</div>
</div>
<div class="FeedContainerBox" id="FeedContainerBox1">
<div class="FeedContainerBoxImageContainer" id="FeedContainerBox1ImageContainer">
<a href="profile.html"><img alt="Profile Image" src="{{ asset('img/reviewpending.png') }}" width="60px"
<a href="#"><img alt="Profile Image" src="{{ asset('img/reviewpending.png') }}" width="60px"
height="100%"></a>
</div>
<div class="FeedContainerBoxTextContainer" id="FeedContainerBox1TextContainer">
<a href="profile.html" id="FeedContainerBox1Username">Thomas</a>
<a href="#" id="FeedContainerBox1Username">Thomas</a>
<p id="FeedContainerBox1Text">"grrr im banning you"</p>
<p id="FeedContainerBox1Timestamp">June 21, 2022 04:29 AM</p>
</div>
</div>
<div class="FeedContainerBox" id="FeedContainerBox1">
<div class="FeedContainerBoxImageContainer" id="FeedContainerBox1ImageContainer">
<a href="profile.html"><img alt="Profile Image" src="{{ asset('img/reviewpending.png') }}" width="60px"
<a href="#"><img alt="Profile Image" src="{{ asset('img/reviewpending.png') }}" width="60px"
height="100%"></a>
</div>
<div class="FeedContainerBoxTextContainer" id="FeedContainerBox1TextContainer">
<a href="profile.html" id="FeedContainerBox1Username">skeuomorphism hater</a>
<a href="#" id="FeedContainerBox1Username">skeuomorphism hater</a>
<p id="FeedContainerBox1Text">"i dont"</p>
<p id="FeedContainerBox1Timestamp">June 21, 2022 04:28 AM</p>
</div>
</div>
<div class="FeedContainerBox" id="FeedContainerBox1">
<div class="FeedContainerBoxImageContainer" id="FeedContainerBox1ImageContainer">
<a href="profile.html"><img alt="Profile Image" src="{{ asset('img/reviewpending.png') }}" width="60px"
<a href="#"><img alt="Profile Image" src="{{ asset('img/reviewpending.png') }}" width="60px"
height="100%"></a>
</div>
<div class="FeedContainerBoxTextContainer" id="FeedContainerBox1TextContainer">
<a href="profile.html" id="FeedContainerBox1Username">Thomas</a>
<a href="#" id="FeedContainerBox1Username">Thomas</a>
<p id="FeedContainerBox1Text">"Who likes my epic new CSS buttons? They're way more interesting than
the default buttons."</p>
<p id="FeedContainerBox1Timestamp">June 21, 2022 04:27 AM</p>
@ -61,22 +61,22 @@
</div>
<div class="FeedContainerBox" id="FeedContainerBox1">
<div class="FeedContainerBoxImageContainer" id="FeedContainerBox1ImageContainer">
<a href="profile.html"><img alt="Profile Image" src="{{ asset('img/reviewpending.png') }}" width="60px"
<a href="#"><img alt="Profile Image" src="{{ asset('img/reviewpending.png') }}" width="60px"
height="100%"></a>
</div>
<div class="FeedContainerBoxTextContainer" id="FeedContainerBox1TextContainer">
<a href="profile.html" id="FeedContainerBox1Username">the night guard from five nights at freddy</a>
<a href="#" id="FeedContainerBox1Username">the night guard from five nights at freddy</a>
<p id="FeedContainerBox1Text">"OH LAWD ITS 3 AM! FREDDY FAZBER IS AT MY DOOR PLEASE HELP!!!!"</p>
<p id="FeedContainerBox1Timestamp">June 21, 2022 03:19 AM</p>
</div>
</div>
<div class="FeedContainerBox" id="FeedContainerBox1">
<div class="FeedContainerBoxImageContainer" id="FeedContainerBox1ImageContainer">
<a href="profile.html"><img alt="Profile Image" src="{{ asset('img/reviewpending.png') }}" width="60px"
<a href="#"><img alt="Profile Image" src="{{ asset('img/reviewpending.png') }}" width="60px"
height="100%"></a>
</div>
<div class="FeedContainerBoxTextContainer" id="FeedContainerBox1TextContainer">
<a href="profile.html" id="FeedContainerBox1Username">Thomas</a>
<a href="#" id="FeedContainerBox1Username">Thomas</a>
<p id="FeedContainerBox1Text">"Why am I staying up so late making this."</p>
<p id="FeedContainerBox1Timestamp">June 21, 2022 12:30 AM</p>
</div>

View File

@ -0,0 +1,43 @@
<!doctype html>
<html lang="{{ str_replace('_', '-', app()->getLocale()) }}">
<head>
@yield('title')
<meta charset="utf-8">
<meta content="Morblox" property="og:title" />
<meta content="MORBLOX is a work in progress revival." property="og:description" />
<meta content="https://morblox.us" property="og:url" />
<meta content="https://morblox.us/img/MORBLOXlogo.png" property="og:image" />
<meta content="#4b4b4b" data-react-helmet="true" name="theme-color" />
<meta name="csrf-token" content="{{ csrf_token() }}">
<meta name="apple-mobile-web-app-capable" content="yes" />
<meta name="apple-mobile-web-app-status-bar-style" content="black" />
<link rel="apple-touch-icon" href="{{ asset('img/MORBLOX.png') }}" />
<link rel="apple-touch-startup-image" href="{{ asset('img/MORBLOXsplash.png') }}" />
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="icon" type="image/x-icon" href="{{ asset('favicon.ico') }}">
<link href="{{ asset('css/app.css?id=e5Az527Gb1') }}" rel="stylesheet">
<script src="{{ asset('js/main.js?id=z3b8JK2bff') }}"></script>
</head>
<body>
@yield('alert')
<div class="iphone-sidebar">
<img src="https://morblox.us/img/MORBLOXlogo.png" width="50%">
<p>Admin Panel</p>
<p>Logged in as: {{ Auth::user()->name }}</p>
<br>
<a href="{{ route('admin_users') }}">User List</a>
<br>
<a>Invite Tree</a>
<br><br>
<a href="{{ route('home') }}"><span style="font-size:20px"></span> Return to Main Site</a>
</div>
<div class="iphone-content"
style="padding-left: 5px; padding-right: 0px; overflow-x: hidden; position: fixed; height: 100%; color: #ececec;">
@yield('content')
</div>
</body>
</html>

View File

@ -16,8 +16,8 @@
<link rel="apple-touch-startup-image" href="{{ asset('img/MORBLOXsplash.png') }}" />
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="icon" type="image/x-icon" href="{{ asset('favicon.ico') }}">
<link href="{{ asset('css/app.css') }}" rel="stylesheet">
<script src="{{ asset('js/main.js') }}"></script>
<link href="{{ asset('css/app.css?id=e5Az527Gb1') }}" rel="stylesheet">
<script src="{{ asset('js/main.js?id=z3b8JK2bff') }}"></script>
</head>
<body>
@ -27,10 +27,10 @@
<a id="logo_small" class="invisible" href="{{ route('home') }}"><img alt="MORBLOX Logo"
src="{{ asset('img/MORBLOXlogoshort.png') }}" width="45" height="40" /></a>
<div class="navbarbuttoncontainer">
<a class="navbarbutton" id="smallbtn5" href="games.html">Games</a>
<a class="navbarbutton" id="smallbtn4" href="catalog.html">Catalog</a>
<a class="navbarbutton" id="smallbtn0" href="build.html">Build</a>
<a class="navbarbutton" id="smallbtn1" href="forum.html">Forum</a>
<a class="navbarbutton" id="smallbtn5" href="#">Games</a>
<a class="navbarbutton" id="smallbtn4" href="#">Catalog</a>
<a class="navbarbutton" id="smallbtn0" href="#">Build</a>
<a class="navbarbutton" id="smallbtn1" href="#">Forum</a>
<a class="navbarbutton" id="smallbtn2"
href="@guest {{ route('login') }}
@else
@ -57,9 +57,9 @@
</div>
<div class="smallnav">
<div class="smallnavbarbuttoncontainer">
<a class="smallnavbarbutton" href="friends.html">Friends</a>
<a class="smallnavbarbutton" href="avatar.html">Avatar</a>
<a class="smallnavbarbutton" href="Settings.html">Transactions</a>
<a class="smallnavbarbutton" href="#">Friends</a>
<a class="smallnavbarbutton" href="#">Avatar</a>
<a class="smallnavbarbutton" href="#">Transactions</a>
<a class="smallnavbarbutton" href="{{ route('users') }}">Users</a>
@if (!Auth::guest() && Auth::user()->isAdmin())
<a class="smallnavbarbutton" href="{{ route('admin_index') }}">Admin</a>

View File

@ -35,5 +35,6 @@ Route::middleware(['auth'])->group(function () {
// Admin only
Route::group(['middleware' => 'AdminCheck'], function() {
Route::get('/iphone/dashboard', [App\Http\Controllers\AdminController::class, 'index'])->name('admin_index');
Route::get('/iphone/users', [App\Http\Controllers\AdminController::class, 'users'])->name('admin_users');
Route::get('/iphone/keys', [App\Http\Controllers\AdminController::class, 'keys'])->name('admin_keys');
});