diff --git a/web/app/Http/Controllers/Web/AdminController.php b/web/app/Http/Controllers/Web/AdminController.php index 6c2684d..588518c 100644 --- a/web/app/Http/Controllers/Web/AdminController.php +++ b/web/app/Http/Controllers/Web/AdminController.php @@ -29,13 +29,24 @@ class AdminController extends Controller return view('web.admin.dashboard'); } + // GET admin.useradmin + function userAdmin(Request $request) + { + $request->validate([ + 'ID' => ['required', 'int', 'exists:users,id'] + ]); + + $user = User::where('id', $request->get('ID'))->first(); + return view('web.admin.useradmin')->with('user', $user); + } + // GET admin.usersearch function userSearch() { return view('web.admin.usersearch'); } - // POST admin.usersearch + // POST admin.usersearchquery function userSearchQuery(Request $request) { if($request->has('userid-button')) @@ -70,6 +81,51 @@ class AdminController extends Controller return view('web.admin.usersearch')->with('error', 'Input validation failed.'); } + // GET admin.userlookup + function userLookup() + { + return view('web.admin.userlookup'); + } + + // POST admin.userlookupquery + function userLookupQuery(Request $request) + { + $request->validate([ + 'lookup' => ['required', 'string'] + ]); + + $users = []; + + foreach(preg_split('/\r\n|\r|\n/', $request->get('lookup')) as $username) + { + $user = User::where('username', $username); + + if($user->exists()) + { + $user = $user->first(); + array_push( + $users, + [ + 'found' => true, + 'user' => $user + ] + ); + } + else + { + array_push( + $users, + [ + 'found' => false, + 'username' => $username + ] + ); + } + } + + return view('web.admin.userlookup')->with('users', $users)->with('input', $request->get('lookup')); + } + // GET admin.autoupload function autoUpload() { diff --git a/web/app/Models/UserAsset.php b/web/app/Models/UserAsset.php new file mode 100644 index 0000000..17c1ce1 --- /dev/null +++ b/web/app/Models/UserAsset.php @@ -0,0 +1,11 @@ +id(); + + $table->unsignedBigInteger('owner_id'); + $table->unsignedBigInteger('asset_id'); + $table->unsignedBigInteger('serial'); + + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('user_assets'); + } +}; diff --git a/web/resources/sass/VirtuBrick.scss b/web/resources/sass/VirtuBrick.scss index 00eba3c..dbe75fb 100644 --- a/web/resources/sass/VirtuBrick.scss +++ b/web/resources/sass/VirtuBrick.scss @@ -471,40 +471,44 @@ html { &-top { html.vbrick-dark & { - border-top: $gray-700; + border-top: 1px solid $gray-700; } html.vbrick-light & { - border-top: $border-color; + border-top: 1px solid $border-color; } } &-end { html.vbrick-dark & { - border-right: $gray-700; + border-right: 1px solid $gray-700; } html.vbrick-light & { - border-right: $border-color; + border-right: 1px solid $border-color; } } &-bottom { html.vbrick-dark & { - border-bottom: $gray-700; + border-bottom: 1px solid $gray-700; } html.vbrick-light & { - border-bottom: $border-color; + border-bottom: 1px solid $border-color; } } &-start { html.vbrick-dark & { - border-left: $gray-700; + border-left: 1px solid $gray-700; } html.vbrick-light & { - border-left: $border-color; + border-left: 1px solid $border-color; } } + &-0 { + border: 0!important; + } + &-top-0 { border-top: 0!important; } diff --git a/web/resources/views/components/admin/navigation-tab-link.blade.php b/web/resources/views/components/admin/navigation-tab-link.blade.php new file mode 100644 index 0000000..c1d5686 --- /dev/null +++ b/web/resources/views/components/admin/navigation-tab-link.blade.php @@ -0,0 +1,17 @@ +@props([ + 'label', + 'route' +]) + + \ No newline at end of file diff --git a/web/resources/views/components/admin/navigation-tabs.blade.php b/web/resources/views/components/admin/navigation-tabs.blade.php new file mode 100644 index 0000000..224d843 --- /dev/null +++ b/web/resources/views/components/admin/navigation-tabs.blade.php @@ -0,0 +1,3 @@ + \ No newline at end of file diff --git a/web/resources/views/components/admin/navigation/user-admin.blade.php b/web/resources/views/components/admin/navigation/user-admin.blade.php new file mode 100644 index 0000000..dd8029c --- /dev/null +++ b/web/resources/views/components/admin/navigation/user-admin.blade.php @@ -0,0 +1,17 @@ +@props([ + 'uid' +]) + + + + + + + + + + @owner + + + @endowner + \ No newline at end of file diff --git a/web/resources/views/components/admin/navigation/user-search.blade.php b/web/resources/views/components/admin/navigation/user-search.blade.php new file mode 100644 index 0000000..a03e6a6 --- /dev/null +++ b/web/resources/views/components/admin/navigation/user-search.blade.php @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/web/resources/views/components/admin/user-admin-label.blade.php b/web/resources/views/components/admin/user-admin-label.blade.php new file mode 100644 index 0000000..a798329 --- /dev/null +++ b/web/resources/views/components/admin/user-admin-label.blade.php @@ -0,0 +1,12 @@ +@props([ + 'label' +]) + +
+
+

{{ $label }}

+
+
+ {{ $slot }} +
+
\ No newline at end of file diff --git a/web/resources/views/components/admin/user-search-input.blade.php b/web/resources/views/components/admin/user-search-input.blade.php index 6128851..e6f18ae 100644 --- a/web/resources/views/components/admin/user-search-input.blade.php +++ b/web/resources/views/components/admin/user-search-input.blade.php @@ -1,14 +1,28 @@ @props([ 'id', - 'definition' + 'definition', + 'nolabel', + 'value' ])
- + @if(!isset($nolabel) || !$nolabel) + + @endif
@csrf
- +
diff --git a/web/resources/views/web/admin/useradmin.blade.php b/web/resources/views/web/admin/useradmin.blade.php new file mode 100644 index 0000000..bf5d69c --- /dev/null +++ b/web/resources/views/web/admin/useradmin.blade.php @@ -0,0 +1,183 @@ +@extends('layouts.admin') + +@section('title', 'User Admin (' . $user->username . ')') + +@section('page-specific') + +@endsection + +@push('content') +
+ +
+
+

Account Summary

+
+ @php + $isProtected = false; + $isPowerful = false; + $powerColor = 'secondary'; + $powerType = '[ Error ]'; + + if($user->hasRoleset('ProtectedUser')) + $isProtected = true; + + if($user->hasRoleset('Owner')) + { + $isPowerful = true; + $powerColor = 'danger'; + $powerType = 'owner'; + } + elseif($user->hasRoleset('Administrator')) + { + $isPowerful = true; + $powerColor = 'primary'; + $powerType = 'administrator'; + } + elseif($user->hasRoleset('Moderator')) + { + $isPowerful = true; + $powerColor = 'success'; + $powerType = 'moderator'; + } + @endphp + @if($isProtected) +
This user is protected.
+ @endif + @if($isPowerful) +
!$isProtected + ])> + This user is a {{ $powerType }}. +
+ @endif + {{ $user->username }} + TODO + OK (TODO) + + + + + + + Website TODO +
+
+ +
+ +
+
+ +

Punishments

+
+ + + + + + + + + + + + + + + + + + + +
IDActionModeratorCreatedExpiration
11 day, perm, etc...Joe1/2/3 4:5 61/2/3 4:5 6
+
+ +

Seller Ban

+
+ None (todo) +
+ + +
+
+ + +
+
+ + +
+
+ + +
+ + + +
+
+ +
+
+

User Notes

+ +
+
+
+ XlXi + 12/28/2022 5:35 PM + #1 +

Example note.

+
+
+ XlXi + 12/28/2022 5:35 PM + #1 +

Example note.

+
+
+ +

Update User

+
+ @owner + todo put a form here to update + @endowner + @admin + (scrub) (todo) + @endadmin + @owner + todo put a form here to update + todo put a form here to update + @endowner + Todo Link and disconnect/or Not Connected + Todo Link and disconnect/or Not Connected + Todo Link and disconnect/or Not Connected + Todo Link and disconnect/or Not Connected + {{ $user->created_at->isoFormat('l LT') }} + Website (todo) + {{ $user->last_seen->isoFormat('l LT') }} + @owner + + @endowner +
+ +

Badges and Settings

+
+ {{ $user->tokens }} +
+
+
+
+@endpush \ No newline at end of file diff --git a/web/resources/views/web/admin/userlookup.blade.php b/web/resources/views/web/admin/userlookup.blade.php new file mode 100644 index 0000000..4a41e8e --- /dev/null +++ b/web/resources/views/web/admin/userlookup.blade.php @@ -0,0 +1,58 @@ +@extends('layouts.admin') + +@section('title', 'Lookup Tool') + +@php + if(isset($users) && count($users) == 0) + $error = 'No users found.'; +@endphp + +@push('content') +
+ +

Lookup Tool

+ @if(isset($error)) +
{{ $error }}
+ @endif +
+
+
+
+ @csrf + + +
+
+ @if(isset($users) && count($users) > 0) +
+ + + + + + + + + @foreach($users as $user) + + @if($user['found']) + + + @else + + + @endif + + @endforeach + +
User IdUser
{{ $user['user']->id }} + + + + Unable to find {{ $user['username'] }}
+
+ @endif +
+
+
+@endpush \ No newline at end of file diff --git a/web/resources/views/web/admin/usersearch.blade.php b/web/resources/views/web/admin/usersearch.blade.php index 1746b17..3c8ef6c 100644 --- a/web/resources/views/web/admin/usersearch.blade.php +++ b/web/resources/views/web/admin/usersearch.blade.php @@ -9,6 +9,7 @@ @push('content')
+

Find User

@if(isset($error))
{{ $error }}
@@ -49,8 +50,7 @@ @endphp - {{-- TODO: XlXi: Switch to user admin page when it exists. --}} - + diff --git a/web/resources/views/web/user/profile.blade.php b/web/resources/views/web/user/profile.blade.php index 6a289ec..8567946 100644 --- a/web/resources/views/web/user/profile.blade.php +++ b/web/resources/views/web/user/profile.blade.php @@ -8,12 +8,7 @@ @section('quick-admin') - @endsection diff --git a/web/routes/web.php b/web/routes/web.php index d0a8c3a..2c870de 100644 --- a/web/routes/web.php +++ b/web/routes/web.php @@ -46,8 +46,15 @@ Route::group(['as' => 'admin.'], function() { Route::group(['as' => 'admin.', 'prefix' => 'admin'], function() { Route::middleware('roleset:moderator')->group(function () { Route::get('/', 'AdminController@dashboard')->name('dashboard'); - Route::get('/users', 'AdminController@userSearch')->name('usersearch'); - Route::post('/users', 'AdminController@userSearchQuery')->name('usersearchquery'); + + Route::group(['prefix' => 'users'], function() { + Route::get('/useradmin', 'AdminController@userAdmin')->name('useradmin'); + Route::get('/find', 'AdminController@userSearch')->name('usersearch'); + Route::post('/find', 'AdminController@userSearchQuery')->name('usersearchquery'); + Route::get('/userlookuptool', 'AdminController@userLookup')->name('userlookup'); + Route::post('/userlookuptool', 'AdminController@userLookupQuery')->name('userlookupquery'); + }); + Route::get('/auto-uploader', 'AdminController@autoUpload')->name('autoupload'); }); diff --git a/web/storage/app/layouts/Admin.xml b/web/storage/app/layouts/Admin.xml index dbb9c57..4800526 100644 --- a/web/storage/app/layouts/Admin.xml +++ b/web/storage/app/layouts/Admin.xml @@ -14,7 +14,10 @@ - + + + + @@ -57,11 +60,14 @@ + + + + -