From 92a397237116624f50a0b4532ac0d278fcdc3826 Mon Sep 17 00:00:00 2001 From: miguel456 Date: Tue, 28 Jun 2022 16:25:56 +0100 Subject: [PATCH] feat(main): several improvements, home page updates --- .env.example | 2 + app/Http/Controllers/BanController.php | 88 ------ app/Http/Controllers/ProfileController.php | 18 +- app/Http/Controllers/UserController.php | 206 +++++++++++- app/Listeners/NewUser.php | 30 ++ app/Services/AccountSuspensionService.php | 11 + app/Traits/DisablesFeatures.php | 25 ++ app/User.php | 1 + config/app.php | 4 + database/factories/ProfileFactory.php | 23 ++ database/factories/UserFactory.php | 60 ++-- .../administration/players.blade.php | 3 +- .../views/dashboard/user/manage.blade.php | 211 +++++++++++++ .../user/profile/displayprofile.blade.php | 295 ------------------ resources/views/home.blade.php | 139 +-------- routes/web.php | 12 +- 16 files changed, 531 insertions(+), 597 deletions(-) delete mode 100755 app/Http/Controllers/BanController.php create mode 100755 app/Listeners/NewUser.php create mode 100755 app/Traits/DisablesFeatures.php create mode 100755 database/factories/ProfileFactory.php create mode 100755 resources/views/dashboard/user/manage.blade.php diff --git a/.env.example b/.env.example index 80716cb..52bec48 100755 --- a/.env.example +++ b/.env.example @@ -13,6 +13,8 @@ GUIDELINES_URL="#" PRIVACY_URL="#" TERMS_URL="#" SOURCE_REPO="#" +SUPPORT_EMAIL= +SUPPORT_URL= # The auth banner is a relative path diff --git a/app/Http/Controllers/BanController.php b/app/Http/Controllers/BanController.php deleted file mode 100755 index a299a67..0000000 --- a/app/Http/Controllers/BanController.php +++ /dev/null @@ -1,88 +0,0 @@ -. - */ - -namespace App\Http\Controllers; - -use App\Ban; -use App\Events\UserBannedEvent; -use App\Http\Requests\BanUserRequest; -use App\Services\AccountSuspensionService; -use App\User; -use Illuminate\Http\Request; -use Illuminate\Support\Facades\Auth; - -class BanController extends Controller -{ - - protected $suspensionService; - - public function __construct(AccountSuspensionService $suspensionService) - { - // Inject the service via DI - $this->suspensionService = $suspensionService; - } - - public function insert(BanUserRequest $request, User $user) - { - if (config('demo.is_enabled')) { - return redirect() - ->back() - ->with('error', __('This feature is disabled')); - } - - $this->authorize('create', [Ban::class, $user]); - - - if (!$this->suspensionService->isSuspended($user)) { - - $this->suspensionService->suspend($request->reason, $request->duration, $user, $request->suspensionType); - $request->session()->flash('success', __('Account suspended.')); - - } else { - - $request->session()->flash('error', __('Account already suspended!')); - } - - return redirect()->back(); - } - - public function delete(Request $request, User $user) - { - if (config('demo.is_enabled')) { - return redirect() - ->back() - ->with('error', __('This feature is disabled')); - } - - $this->authorize('delete', $user->bans); - - if ($this->suspensionService->isSuspended($user)) { - - $this->suspensionService->unsuspend($user); - $request->session()->flash('success', __('Account unsuspended successfully!')); - - } else { - $request->session()->flash('error', __('This account isn\'t suspended!')); - } - - return redirect()->back(); - } -} diff --git a/app/Http/Controllers/ProfileController.php b/app/Http/Controllers/ProfileController.php index fb7b64c..7beaf85 100755 --- a/app/Http/Controllers/ProfileController.php +++ b/app/Http/Controllers/ProfileController.php @@ -26,6 +26,7 @@ use App\Exceptions\ProfileCreationFailedException; use App\Exceptions\ProfileNotFoundException; use App\Facades\IP; use App\Http\Requests\ProfileSave; +use App\Services\AccountSuspensionService; use App\Services\ProfileService; use App\User; use Carbon\Carbon; @@ -35,7 +36,7 @@ use Spatie\Permission\Models\Role; class ProfileController extends Controller { - private $profileService; + private ProfileService $profileService; public function __construct(ProfileService $profileService) { $this->profileService = $profileService; @@ -63,7 +64,7 @@ class ProfileController extends Controller ]); } - public function showSingleProfile(User $user) + public function showSingleProfile(AccountSuspensionService $accountSuspensionService, User $user) { if (is_null($user->profile)) { @@ -77,21 +78,10 @@ class ProfileController extends Controller $socialMediaProfiles = json_decode($user->profile->socialLinks, true); $createdDate = Carbon::parse($user->created_at); - $systemRoles = Role::all()->pluck('name')->all(); - $userRoles = $user->roles->pluck('name')->all(); - $roleList = []; - - foreach ($systemRoles as $role) { - if (in_array($role, $userRoles)) { - $roleList[$role] = true; - } else { - $roleList[$role] = false; - } - } $suspensionInfo = null; - if ($user->isBanned()) + if ($accountSuspensionService->isSuspended($user)) { $suspensionInfo = [ diff --git a/app/Http/Controllers/UserController.php b/app/Http/Controllers/UserController.php index 4afc2f3..7805523 100755 --- a/app/Http/Controllers/UserController.php +++ b/app/Http/Controllers/UserController.php @@ -22,7 +22,9 @@ namespace App\Http\Controllers; use App\Ban; +use App\Facades\IP; use App\Http\Requests\Add2FASecretRequest; +use App\Http\Requests\BanUserRequest; use App\Http\Requests\ChangeEmailRequest; use App\Http\Requests\ChangePasswordRequest; use App\Http\Requests\DeleteUserRequest; @@ -32,6 +34,7 @@ use App\Http\Requests\SearchPlayerRequest; use App\Http\Requests\UpdateUserRequest; use App\Notifications\ChangedPassword; use App\Notifications\EmailChanged; +use App\Services\AccountSuspensionService; use App\Traits\DisablesFeatures; use App\Traits\HandlesAccountDeletion; use App\Traits\ReceivesAccountTokens; @@ -45,8 +48,15 @@ use Spatie\Permission\Models\Role; class UserController extends Controller { - use HandlesAccountDeletion; + use HandlesAccountDeletion, DisablesFeatures; + + /** + * Shows list of users + * + * @return \Illuminate\Contracts\Foundation\Application|\Illuminate\Contracts\View\Factory|\Illuminate\Contracts\View\View + * @throws \Illuminate\Auth\Access\AuthorizationException + */ public function showUsers() { $this->authorize('viewPlayers', User::class); @@ -59,6 +69,15 @@ class UserController extends Controller ]); } + + /** + * Searches for a player with the given search query. + * + * @deprecated Until Algolia implementation + * @param SearchPlayerRequest $request + * @return \Illuminate\Contracts\Foundation\Application|\Illuminate\Contracts\View\Factory|\Illuminate\Contracts\View\View|\Illuminate\Http\RedirectResponse|\Illuminate\Routing\Redirector + * @throws \Illuminate\Auth\Access\AuthorizationException + */ public function showPlayersLike(SearchPlayerRequest $request) { $this->authorize('viewPlayers', User::class); @@ -85,6 +104,16 @@ class UserController extends Controller } } + + /** + * Shows the user account's settings page + * + * @param Request $request + * @return \Illuminate\Contracts\Foundation\Application|\Illuminate\Contracts\View\Factory|\Illuminate\Contracts\View\View + * @throws \PragmaRX\Google2FA\Exceptions\IncompatibleWithGoogleAuthenticatorException + * @throws \PragmaRX\Google2FA\Exceptions\InvalidCharactersException + * @throws \PragmaRX\Google2FA\Exceptions\SecretKeyTooShortException + */ public function showAccount(Request $request) { $QRCode = null; @@ -109,6 +138,49 @@ class UserController extends Controller ->with('twofaQRCode', $QRCode); } + + /** + * Show account management screen + * + * @param AccountSuspensionService $suspensionService + * @param Request $request + * @param User $user + * @return \Illuminate\Contracts\Foundation\Application|\Illuminate\Contracts\View\Factory|\Illuminate\Contracts\View\View + * @throws \Illuminate\Auth\Access\AuthorizationException + */ + public function showAcocuntManagement(AccountSuspensionService $suspensionService, Request $request, User $user) + { + + $this->authorize('adminEdit', $user); + + $systemRoles = Role::all()->pluck('name')->all(); + $userRoles = $user->roles->pluck('name')->all(); + + $roleList = []; + + foreach ($systemRoles as $role) { + if (in_array($role, $userRoles)) { + $roleList[$role] = true; + } else { + $roleList[$role] = false; + } + } + + return view('dashboard.user.manage') + ->with([ + 'user' => $user, + 'roles' => $roleList, + 'ipInfo' => IP::lookup($request->ip()) + ]); + } + + /** + * Log out other sessions for the current user + * + * @param FlushSessionsRequest $request + * @return \Illuminate\Http\RedirectResponse + * @throws \Illuminate\Auth\AuthenticationException + */ public function flushSessions(FlushSessionsRequest $request) { // TODO: Move all log calls to a listener, which binds to an event fired by each significant event, such as this one @@ -127,6 +199,14 @@ class UserController extends Controller return redirect()->back(); } + + + /** + * Change the current user's password + * + * @param ChangePasswordRequest $request + * @return \Illuminate\Http\RedirectResponse|void + */ public function changePassword(ChangePasswordRequest $request) { if (config('demo.is_enabled')) { @@ -155,13 +235,17 @@ class UserController extends Controller } } + + + /** + * Change the current user's email address + * + * @param ChangeEmailRequest $request + * @return \Illuminate\Http\RedirectResponse + */ public function changeEmail(ChangeEmailRequest $request) { - if (config('demo.is_enabled')) { - return redirect() - ->back() - ->with('error', __('This feature is disabled')); - } + $this->disable(); $user = User::find(Auth::user()->id); @@ -184,13 +268,18 @@ class UserController extends Controller return redirect()->back(); } + + /** + * Delete the given user's account + * + * @param DeleteUserRequest $request + * @param User $user + * @return \Illuminate\Http\RedirectResponse + * @throws \Illuminate\Auth\Access\AuthorizationException + */ public function delete(DeleteUserRequest $request, User $user) { - if (config('demo.is_enabled')) { - return redirect() - ->back() - ->with('error', _('This feature is disabled')); - } + $this->disable(); $this->authorize('delete', $user); @@ -204,14 +293,19 @@ class UserController extends Controller return redirect()->route('registeredPlayerList'); } + + /** + * Update a given user's details + * + * @param UpdateUserRequest $request + * @param User $user + * @return \Illuminate\Http\RedirectResponse + * @throws \Illuminate\Auth\Access\AuthorizationException + */ public function update(UpdateUserRequest $request, User $user) { - if (config('demo.is_enabled')) { - return redirect() - ->back() - ->with('error', __('This feature is disabled')); - } $this->authorize('adminEdit', $user); + $this->disable(); // Mass update would not be possible here without extra code, making route model binding useless $user->email = $request->email; @@ -243,6 +337,16 @@ class UserController extends Controller return redirect()->back(); } + + /** + * Generate and add a 2FA secret for the current user + * + * @param Add2FASecretRequest $request + * @return \Illuminate\Http\RedirectResponse + * @throws \PragmaRX\Google2FA\Exceptions\IncompatibleWithGoogleAuthenticatorException + * @throws \PragmaRX\Google2FA\Exceptions\InvalidCharactersException + * @throws \PragmaRX\Google2FA\Exceptions\SecretKeyTooShortException + */ public function add2FASecret(Add2FASecretRequest $request) { if (config('demo.is_enabled')) { @@ -285,6 +389,13 @@ class UserController extends Controller return redirect()->back(); } + + /** + * Remove the current user's two factor secret key + * + * @param Remove2FASecretRequest $request + * @return \Illuminate\Http\RedirectResponse + */ public function remove2FASecret(Remove2FASecretRequest $request) { Log::warning('SECURITY: Disabling two factor authentication (user initiated)', [ @@ -300,6 +411,15 @@ class UserController extends Controller return redirect()->back(); } + + /** + * Demote the given user's privileges + * + * @param Request $request + * @param User $user + * @return \Illuminate\Http\RedirectResponse + * @throws \Illuminate\Auth\Access\AuthorizationException + */ public function terminate(Request $request, User $user) { $this->authorize('terminate', User::class); @@ -330,4 +450,58 @@ class UserController extends Controller //TODO: Dispatch event return redirect()->back(); } + + /** + * Suspend the given user + * + * @param AccountSuspensionService $suspensionService + * @param BanUserRequest $request + * @param User $user + * @return \Illuminate\Http\RedirectResponse + * @throws \Illuminate\Auth\Access\AuthorizationException + */ + public function suspend(AccountSuspensionService $suspensionService, BanUserRequest $request, User $user) + { + $this->authorize('create', [Ban::class, $user]); + $this->disable(); + + if (!$suspensionService->isSuspended($user)) { + + $suspensionService->suspend($request->reason, $request->duration, $user, $request->suspensionType); + $request->session()->flash('success', __('Account suspended.')); + + } else { + + $request->session()->flash('error', __('Account already suspended!')); + } + + return redirect()->back(); + } + + /** + * Unsuspend the given user + * + * @param AccountSuspensionService $suspensionService + * @param Request $request + * @param User $user + * @return \Illuminate\Http\RedirectResponse + * @throws \Illuminate\Auth\Access\AuthorizationException + */ + public function unsuspend(AccountSuspensionService $suspensionService, Request $request, User $user) + { + $this->authorize('delete', $user->bans); + $this->disable(); + + if ($suspensionService->isSuspended($user)) { + + $suspensionService->unsuspend($user); + $request->session()->flash('success', __('Account unsuspended successfully!')); + + } else { + $request->session()->flash('error', __('This account isn\'t suspended!')); + } + + return redirect()->back(); + } + } diff --git a/app/Listeners/NewUser.php b/app/Listeners/NewUser.php new file mode 100755 index 0000000..5d3f228 --- /dev/null +++ b/app/Listeners/NewUser.php @@ -0,0 +1,30 @@ +isSuspended($user)) ? $user->bans->reason : false; + } + + /** * Checks whether an account is locked * diff --git a/app/Traits/DisablesFeatures.php b/app/Traits/DisablesFeatures.php new file mode 100755 index 0000000..7c8ea26 --- /dev/null +++ b/app/Traits/DisablesFeatures.php @@ -0,0 +1,25 @@ +back() + ->with('error', __('This feature is disabled')); + } + return null; + } + +} diff --git a/app/User.php b/app/User.php index 2bca37a..654c7de 100755 --- a/app/User.php +++ b/app/User.php @@ -71,6 +71,7 @@ class User extends Authenticatable implements MustVerifyEmail public function votes() { return $this->hasMany('App\Vote', 'userID', 'id'); + } public function profile() diff --git a/config/app.php b/config/app.php index 647dad8..520850a 100755 --- a/config/app.php +++ b/config/app.php @@ -110,6 +110,8 @@ return [ | RBRecruiter will display these URLs at appropriate locations and force users to accept them, | if legally necessary, such as in the registration & application form pages. | + | Additionally, you can also specify a support email and URL where your users/customers can send inquiries if necessary. + | | You can leave these URLs empty if your website hasn't entered production yet, but we recommend | you draft these documents as soon as possible. | @@ -118,6 +120,8 @@ return [ 'terms_url' => env('TERMS_URL', '#'), 'privacy_url' => env('PRIVACY_URL', '#'), 'guidelines_url' => env('GUIDELINES_URL', '#'), + 'support_url' => env('SUPPORT_URL', 'https://support.example.com'), + 'support_email' => env('SUPPORT_EMAIL', 'support@example.com'), 'source_repo' => env('SOURCE_REPO', 'https://code.webvokestudio.pt/miguel456/rbrecruiter'), /* diff --git a/database/factories/ProfileFactory.php b/database/factories/ProfileFactory.php new file mode 100755 index 0000000..dfe3c1b --- /dev/null +++ b/database/factories/ProfileFactory.php @@ -0,0 +1,23 @@ + + */ +class ProfileFactory extends Factory +{ + /** + * Define the model's default state. + * + * @return array + */ + public function definition() + { + return [ + // + ]; + } +} diff --git a/database/factories/UserFactory.php b/database/factories/UserFactory.php index 1bbe73f..c3e2bc5 100755 --- a/database/factories/UserFactory.php +++ b/database/factories/UserFactory.php @@ -1,47 +1,23 @@ . - */ - namespace Database\Factories; -use App\User; -use Faker\Generator as Faker; -use Illuminate\Support\Str; +use Illuminate\Database\Eloquent\Factories\Factory; -/* -|-------------------------------------------------------------------------- -| Model Factories -|-------------------------------------------------------------------------- -| -| This directory should contain each of the model factory definitions for -| your application. Factories provide a convenient way to generate new -| model instances for testing / seeding your application's database. -| -*/ - -$factory->define(User::class, function (Faker $faker) { - return [ - 'name' => $faker->name, - 'email' => $faker->unique()->safeEmail, - 'email_verified_at' => now(), - 'password' => '$2y$10$92IXUNpkjO0rOQ5byMi.Ye4oKoEa3Ro9llC/.og/at2.uheWG/igi', // password - 'remember_token' => Str::random(10), - ]; -}); +/** + * @extends \Illuminate\Database\Eloquent\Factories\Factory<\App\User> + */ +class UserFactory extends Factory +{ + /** + * Define the model's default state. + * + * @return array + */ + public function definition() + { + return [ + // + ]; + } +} diff --git a/resources/views/dashboard/administration/players.blade.php b/resources/views/dashboard/administration/players.blade.php index 5fe5f91..990f7dd 100755 --- a/resources/views/dashboard/administration/players.blade.php +++ b/resources/views/dashboard/administration/players.blade.php @@ -103,7 +103,8 @@ {{$user->created_at}} - + + {{ __('Manage') }} diff --git a/resources/views/dashboard/user/manage.blade.php b/resources/views/dashboard/user/manage.blade.php new file mode 100755 index 0000000..e2585a9 --- /dev/null +++ b/resources/views/dashboard/user/manage.blade.php @@ -0,0 +1,211 @@ +@extends('adminlte::page') + +@section('title', config('app.name') . ' | ' . __('Account Management')) + +@section('content_header') + +

{{ __('Users / Accounts / :username / Manage', ['username' => $user->name]) }}

+ +@stop + +@section('js') + + +@stop + +@section('content') + + + +

{{__("Please confirm that you want to suspend this account. You'll need to add a reason and expiration date to confirm this.")}}

+ +
+ @csrf + + @if($demoActive) +
+

{{ __('This feature is disabled') }}

+
+ @endif + +
+ +
+ + +
+ +
+ + +
+
+ + +
+ + +
+ +

{{ __('Temporary suspensions will be automatically lifted. The suspension note is visible to all users. Suspended users will not be able to login or register.') }}

+
+ + +
+ + + + + +
+ + @if (!Auth::user()->is($user) && $user->isStaffMember()) + + + @if($demoActive) +
+

{{ __('This feature is disabled') }}

+
+ @endif + +

{{__('You are about to terminate a recruited staff member')}}

+

+ {{__('Terminating a staff member will remove their privileges on the application management site and connected integrations configured for the vacancy they applied for.')}} +

+

+ {{__('THIS PROCESS IS IRREVERSIBLE AND IMMEDIATE')}} +

+ + + + +
+ @csrf + @method('PATCH') + + +
+ +
+ +
+ @endif + + + + @if($demoActive) +
+

{{ __('This feature is disabled') }}

+
+ @endif + +

{{__('WARNING: This is a potentially destructive action!')}}

+ +

{{__("Deleting a user's account is an irreversible process. Historic and current applications, votes, and profile content, as well as any personally identifiable information will be immediately erased.")}}

+ +
$user->id])}}> + + @csrf + @method('DELETE') + + + + +
+ + + + + + +
+ + + + + @if($demoActive) +
+

{{ __('This feature is disabled') }}

+
+ @endif + +
+ @csrf + @method('PATCH') + + + + + + + + + +

+ {{__('If the setting "Require Valid Game License" is activated, editing this field may have unintended consequences. Proceed with caution.')}} +

+ +
+ + + + + + @foreach($roles as $roleName => $status) + + + + + + @endforeach + + + + +
{{ ucfirst($roleName) }}
+ +
+ +
+ + + + + + + +
+ + +
+ +
+ +
+ +
+

{{ __('Account data') }}

+
+ +
+ +
+ + + +
+ +
+ +
+ +
+ +
+ +@stop + + +@section('footer') + @include('breadcrumbs.dashboard.footer') +@stop diff --git a/resources/views/dashboard/user/profile/displayprofile.blade.php b/resources/views/dashboard/user/profile/displayprofile.blade.php index 7966172..cc32d38 100755 --- a/resources/views/dashboard/user/profile/displayprofile.blade.php +++ b/resources/views/dashboard/user/profile/displayprofile.blade.php @@ -34,256 +34,6 @@ @endif - @if (Auth::user()->hasRole('admin')) - - - -

{{__("Please confirm that you want to suspend this account. You'll need to add a reason and expiration date to confirm this.")}}

- -
- @csrf - - @if($demoActive) -
-

{{ __('This feature is disabled') }}

-
- @endif - -
- -
- - -
- -
- - -
-
- - -
- - -
- -

{{ __('Temporary suspensions will be automatically lifted. The suspension note is visible to all users. Suspended users will not be able to login or register.') }}

-
- - -
- - - - - -
- - @if (!Auth::user()->is($profile->user) && $profile->user->isStaffMember()) - - - @if($demoActive) -
-

{{ __('This feature is disabled') }}

-
- @endif - -

{{__('You are about to terminate a recruited staff member')}}

-

- {{__('Terminating a staff member will remove their privileges on the application management site and connected integrations configured for the vacancy they applied for.')}} -

-

- {{__('THIS PROCESS IS IRREVERSIBLE AND IMMEDIATE')}} -

- - - - -
- @csrf - @method('PATCH') - - -
- -
- -
- @endif - - - - @if($demoActive) -
-

{{ __('This feature is disabled') }}

-
- @endif - -

{{__('WARNING: This is a potentially destructive action!')}}

- -

{{__("Deleting a user's account is an irreversible process. Historic and current applications, votes, and profile content, as well as any personally identifiable information will be immediately erased.")}}

- -
$profile->user->id])}}> - - @csrf - @method('DELETE') - - - - -
- - - - - - -
- - - -

{{__('Search results')}}

- - @if (!isset($ipInfo->message)) - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
{{__('Origin country')}}{{$ipInfo->country_name ?? 'N/A'}}
{{__('State/Province')}}{{$ipInfo->state_prov ?? 'None'}}
{{__('District (if any)')}}{{$ipInfo->district ?? 'N/A'}}
{{__('City')}}{{$ipInfo->city ?? 'N/A'}}
{{__('Postal code')}}{{$ipInfo->zipcode ?? 'N/A'}}
{{__('Geographical coordinates')}}{{$ipInfo->latitude ?? 0}}, {{$ipInfo->longitude ?? 0}}
{{__('European?')}}{{($ipInfo->is_eu) ? __('Yes') : __('No')}}
{{__('ISP')}}{{$ipInfo->isp ?? 'N/A'}}
{{__('Organization')}}{{$ipInfo->organization ?? 'N/A'}}
{{__('Connection type (e.g. datacenter, home)')}}{{$ipInfo->connection_type ?? 'N/A'}}
{{__('Timezone')}}{{$ipInfo->time_zone->name ?? __('N/A')}}
- - @else -
- - {{__("This query didn't return any results.")}} -

- {{$ipInfo->message}} -

- -
- @endif - - -
- - - - @if($demoActive) -
-

{{ __('This feature is disabled') }}

-
- @endif - -
- @csrf - @method('PATCH') - - - - - - - - - -

- {{__('If the setting "Require Valid Game License" is activated, editing this field may have unintended consequences. Proceed with caution.')}} -

- -
- - - - - - @foreach($roles as $roleName => $status) - - - - - - @endforeach - - - - -
{{ ucfirst($roleName) }}
- -
- -
- - - - - - - -
- - @endif - - -
@@ -316,14 +66,9 @@

{{$profile->profileShortBio}}

{{__('Member since :date', ['date' => $since])}}

- @if (Auth::user()->hasRole('admin')) - - @endif @if ($profile->user->is(Auth::user())) - @elseif (Auth::user()->hasRole('admin') && $profile->user->isStaffMember()) - @endif
@@ -342,46 +87,6 @@
- @if (Auth::user()->hasRole('admin')) - -
- -
-
- -
-
-
- -
- - @if (!$profile->user->isBanned()) -
- @else -
- - @method('DELETE') - @csrf - - -
- @endif -
- -
-
- -
-
-
- - -
- @endif -
diff --git a/resources/views/home.blade.php b/resources/views/home.blade.php index 428286b..e041570 100755 --- a/resources/views/home.blade.php +++ b/resources/views/home.blade.php @@ -56,36 +56,6 @@
@endif -
- -
- -
- -

Junte-se ao nosso Discord!

-

O Discord é o coração da nossa comunidade — onde toda a diversão acontece.

-
-

Venha conhecer a nossa comunidade de perto aderindo ao nosso servidor Discord. Conheça novos amigos, jogos, vários minigames divertidos e fale com a nossa equipe amigável! Todo mundo é bem-vindo.

-

Registre-se também no nosso portal online, que lhe permite gerir suas candidaturas à nossa equipe, ligar a sua conta Discord (e receber vantagens no servidor!), ver o diretório de usuários, fazer doação e muito mais!

-

- - - - - Aderir ao Discord - Aderir ao portal -

- -
- -
- -
- -
- -
-
@@ -183,118 +153,13 @@
-

Convencido?

+

{{ __('A gestão da :appName responde a todas candidaturas dentro de 48 horas.', ['appName' => config('app.name')]) }}

+

{!! __('Se você tiver algum dúvida sobre a sua conta de recrutamento, candidatura, ou qualquer outra questão, visite o nosso site de atendimento, ou envie-nos um email.', ['supportURL' => config('app.support_url'), 'supportEmail' => config('app.support_email')]) !!}

-
- -
-

- Esperamos você! Junte-se hoje e desfrute de uma nova experiência. -

-
- - -
- -
- -
- -

{{__('Any questions? Leave a message!')}}

-

{{__('*This is not an application form. Any applications sent here will be ignored. Additionally, please keep messages on topic (about this site only). For anything else, please use other contact options available.')}}

- - -
- -
- -
- -
- - - -
- @csrf - - - - -
- -
-
- - - - -
-
- -
- -
- - - - -
- -
- -
- - -
- -
- - - - -
- -
- -
- -
- - - -
- -
- -
- -
- -
- -
- -
- - - - -
- - - -
- -
diff --git a/routes/web.php b/routes/web.php index 89a6a17..f2eeacc 100755 --- a/routes/web.php +++ b/routes/web.php @@ -291,18 +291,22 @@ Route::group(['prefix' => LaravelLocalization::setLocale(), 'middleware' => ['lo Route::patch('settings/game/update', [OptionsController::class, 'saveGameIntegration']) ->name('saveGameIntegration'); - Route::post('players/ban/{user}', [BanController::class, 'insert']) + + Route::post('accounts/suspend/{user}', [UserController::class, 'suspend']) ->name('banUser'); - Route::delete('players/unban/{user}', [BanController::class, 'delete']) + Route::delete('accounts/unsuspend/{user}', [UserController::class, 'unsuspend']) ->name('unbanUser'); - Route::delete('players/delete/{user}', [UserController::class, 'delete']) + Route::delete('accounts/delete/{user}', [UserController::class, 'delete']) ->name('deleteUser'); - Route::patch('players/update/{user}', [UserController::class, 'update']) + Route::patch('accounts/update/{user}', [UserController::class, 'update']) ->name('updateUser'); + Route::get('accounts/manage/{user}', [UserController::class, 'showAcocuntManagement']) + ->name('manageUser'); + Route::get('positions', [VacancyController::class, 'index']) ->name('showPositions');