diff --git a/app/Http/Controllers/CustomRegistrationController.php b/app/Http/Controllers/CustomRegistrationController.php new file mode 100644 index 00000000..b4a5c4f0 --- /dev/null +++ b/app/Http/Controllers/CustomRegistrationController.php @@ -0,0 +1,62 @@ +create($request->all()); + + event(new Registered($user)); + // Chame sendEmailVerificationNotification para enviar o e-mail de verificação + $user->sendEmailVerificationNotification(); + + // // Auth::login($user); + + $pendingUser = pending_user::where('pending_email', $user->email)->first(); + if ($pendingUser) { + $pendingUser->delete(); + } + + return $request->wantsJson() + ? new JsonResponse([], 201) + : Redirect::to('/CreateUsers')->with('success', 'Usuário criado com sucesso, aguarda confirmacao por Email!!'); + } + + + public function yourVerificationMethod(Request $request, $id, $hash) + { + $user = User::findOrFail($id); + + if (!hash_equals((string) $hash, sha1($user->getEmailForVerification()))) { + abort(403, 'Unauthorized action.'); + } + + if ($user->markEmailAsVerified()) { + event(new Verified($user)); + } + + // Redirecione para a rota desejada após a verificação bem-sucedida + return redirect()->route('CreateUsers')->with('message', 'E-mail verificado com sucesso!'); + } +} diff --git a/app/Http/Controllers/Pending_UserController.php b/app/Http/Controllers/Pending_UserController.php index a9f80d9e..5366d2cf 100644 --- a/app/Http/Controllers/Pending_UserController.php +++ b/app/Http/Controllers/Pending_UserController.php @@ -6,7 +6,11 @@ use Illuminate\Support\Facades\Hash; +use App\Mail\NewUserNotification; +use Illuminate\Support\Facades\Mail; + use App\Models\pending_user; +use App\Models\User; class Pending_UserController extends Controller { @@ -28,7 +32,7 @@ public function store(Request $request) $request->validate([ 'name' => 'required', 'lastName' => 'required', - 'pending_email' => 'required|email|unique:pending_users,pending_email', + 'pending_email' => 'required|email|unique:pending_users,pending_email|unique:users,email', 'pending_phone' => 'required', 'pending_nif' => 'required', 'pending_password' => 'required|min:8|confirmed', @@ -46,6 +50,14 @@ public function store(Request $request) $pendingUser->save(); + // Enviar email de notificação para todos os Super_Administrador + $superAdmins = User::where('user_type', 'Super_Administrador')->get(); + $newUserNotification = new NewUserNotification(); + + foreach ($superAdmins as $superAdmin) { + Mail::to($superAdmin->email)->send($newUserNotification); + } + return redirect('/formulario')->with('success', 'O seu registro foi enviado e aguarda aprovação.'); } diff --git a/app/Http/Controllers/userController.php b/app/Http/Controllers/userController.php index 33ee45e6..55e5c3fd 100644 --- a/app/Http/Controllers/userController.php +++ b/app/Http/Controllers/userController.php @@ -3,6 +3,9 @@ namespace App\Http\Controllers; use Illuminate\Support\Facades\Hash; +use Illuminate\Support\Facades\Auth; + +use Illuminate\Validation\ValidationException; use Illuminate\Http\Request; @@ -11,17 +14,33 @@ use Laravel\Fortify\Fortify; use Laravel\Fortify\Http\Controllers\AuthenticatedSessionController as FortifyAuthenticatedSessionController; - +use Illuminate\Auth\Events\Verified; use App\Models\User; class userController extends Controller { - public function UserProfile (){ - return view('Admin.profile'); + public function UserProfile($id) + { + $user = User::find($id); + return view('Admin.profile', compact('user')); } + public function yourVerificationMethod(Request $request, $id, $hash) + { + $user = User::findOrFail($id); + if (!hash_equals((string) $hash, sha1($user->getEmailForVerification()))) { + abort(403, 'Unauthorized action.'); + } + + if ($user->markEmailAsVerified()) { + event(new Verified($user)); + } + + // Redirecione para a rota desejada após a verificação bem-sucedida + return redirect()->route('CreateUsers')->with('message', 'E-mail verificado com sucesso!'); + } public function authenticate(Request $request) @@ -40,6 +59,19 @@ public function authenticate(Request $request) return null; } + public static function authenticateAndRedirect(Request $request) + { + $user = User::where('email', $request->email)->first(); + + if ($user && Hash::check($request->password, $user->password)) { + Auth::login($user); + + return redirect()->route('CreateUsers'); + } + + return null; + } + public function ListUsers() { diff --git a/app/Http/Middleware/CheckSuperAdmin.php b/app/Http/Middleware/CheckSuperAdmin.php index f4ca6c6f..6ec668cd 100644 --- a/app/Http/Middleware/CheckSuperAdmin.php +++ b/app/Http/Middleware/CheckSuperAdmin.php @@ -15,7 +15,7 @@ class CheckSuperAdmin */ public function handle(Request $request, Closure $next): Response { - if (auth()->user() && auth()->user()->user_type == 'Super_Administrador') { + if (auth()->user() && auth()->user()->userType->type == 'Super_Administrador') { return $next($request); } diff --git a/app/Mail/NewUserNotification.php b/app/Mail/NewUserNotification.php new file mode 100644 index 00000000..359407eb --- /dev/null +++ b/app/Mail/NewUserNotification.php @@ -0,0 +1,59 @@ +subject('Um novo usuário para criar') + ->view('emails.new_user_notification'); + } + + /** + * Get the message envelope. + */ + public function envelope(): Envelope + { + return new Envelope( + subject: 'New User Notification', + ); + } + + /** + * Get the message content definition. + */ + public function content(): Content + { + return new Content( + view: 'email.new_user_notification', + ); + } + + /** + * Get the attachments for the message. + * + * @return array + */ + public function attachments(): array + { + return []; + } +} diff --git a/app/Models/TypeUser.php b/app/Models/TypeUser.php new file mode 100644 index 00000000..2e84a017 --- /dev/null +++ b/app/Models/TypeUser.php @@ -0,0 +1,16 @@ +hasMany(User::class, 'user_type', 'id'); + } +} diff --git a/app/Models/User.php b/app/Models/User.php index 841f278f..d1f7cec1 100644 --- a/app/Models/User.php +++ b/app/Models/User.php @@ -9,10 +9,11 @@ use Laravel\Sanctum\HasApiTokens; -use Illuminate\Contracts\Auth\MustVerifyEmail; +// use Illuminate\Contracts\Auth\MustVerifyEmail; -class User extends Authenticatable implements MustVerifyEmail +class User extends Authenticatable +// implements MustVerifyEmail { use HasApiTokens, HasFactory, Notifiable; @@ -28,7 +29,7 @@ class User extends Authenticatable implements MustVerifyEmail 'user_type', 'user_phone', 'user_nif' - + ]; /** @@ -49,4 +50,9 @@ class User extends Authenticatable implements MustVerifyEmail protected $casts = [ 'email_verified_at' => 'datetime', ]; + + public function userType() + { + return $this->belongsTo(TypeUser::class, 'user_type', 'id'); + } } diff --git a/app/Providers/FortifyServiceProvider.php b/app/Providers/FortifyServiceProvider.php index 33ebf55d..3593a280 100644 --- a/app/Providers/FortifyServiceProvider.php +++ b/app/Providers/FortifyServiceProvider.php @@ -16,6 +16,8 @@ use App\Http\Controllers\Auth\ResetPasswordController; use App\Http\Controllers\Auth\PasswordResetLinkController; +// use App\http\Controllers\userController; + use Laravel\Fortify\Fortify; @@ -49,7 +51,12 @@ public function boot(): void return view('auth.verify-email'); }); + // Fortify::authenticateUsing(function (Request $request) { + // return UserController::authenticateAndRedirect($request); + // }); + + Fortify::createUsersUsing(CreateNewUser::class); Fortify::updateUserProfileInformationUsing(UpdateUserProfileInformation::class); diff --git a/config/fortify.php b/config/fortify.php index 39f0153c..ab302869 100644 --- a/config/fortify.php +++ b/config/fortify.php @@ -135,7 +135,7 @@ 'features' => [ Features::registration(), Features::resetPasswords(), - Features::emailVerification(), + // Features::emailVerification(), // Features::updateProfileInformation(), // Features::updatePasswords(), diff --git a/public/templateExcel/FinalTemplate .xlsx b/public/templateExcel/FinalTemplate .xlsx new file mode 100644 index 00000000..3c98c111 Binary files /dev/null and b/public/templateExcel/FinalTemplate .xlsx differ diff --git a/resources/views/Admin/CrudUsers/editUsers.blade.php b/resources/views/Admin/CrudUsers/editUsers.blade.php index 3f3610c8..6ae61e4b 100644 --- a/resources/views/Admin/CrudUsers/editUsers.blade.php +++ b/resources/views/Admin/CrudUsers/editUsers.blade.php @@ -32,7 +32,7 @@ --}} - +

diff --git a/resources/views/Admin/CrudUsers/showUsers.blade.php b/resources/views/Admin/CrudUsers/showUsers.blade.php index de6d2e6e..8cfb32f6 100644 --- a/resources/views/Admin/CrudUsers/showUsers.blade.php +++ b/resources/views/Admin/CrudUsers/showUsers.blade.php @@ -28,6 +28,14 @@ Tipo de usuário {{ $user->user_type }} + + Telemovel + {{ $user->user_phone }} + + + NIF + {{ $user->user_nif }} + Criado em : {{ $user->created_at }} diff --git a/resources/views/Admin/profile.blade.php b/resources/views/Admin/profile.blade.php index 8d6ff1f7..70680c31 100644 --- a/resources/views/Admin/profile.blade.php +++ b/resources/views/Admin/profile.blade.php @@ -1,28 +1,28 @@ @extends('Templates/templateAdmin') @section('Main-content') - -
+
-
-
-
- -
+
+
+
+ +

+
-
-
-
-
+
+
+
+
-
+
-
-
- {{--

{{ $tipo_usuario }}

--}} +
+
{{$user->userType->type }} :: {{$user->name}}
+
-
-
-
-

Nome:

-
- -
-

Email:

-
-
- -
-
-

Telemovel:

-
- -
-

NIF:

-
-
- -
-
- {{--

Nova Senha:

--}} -
- - -
- +
+ {{--

{{ $tipo_usuario }}

--}}
-
- +
+
+
+

Nome:

+
+ +
+

Email:

+
+
+ +
+
+

Telemovel:

+
+ +
+

NIF:

+
+
+ + {{--
+
+

Senha :

+
+ +
+

Confirmar Senha :

+
+
--}} + +
+
+ {{--

Nova Senha:

--}} +
+
-
- + +
+ + +
- - -
- {{-- ./container-fluid" --}} -
- {{-- ./content --}} + + + +
+ {{-- ./container-fluid" --}} + + {{-- ./content --}}
{{-- ./content-wrapper --}} @endsection diff --git a/resources/views/Templates/templateAdmin.blade.php b/resources/views/Templates/templateAdmin.blade.php index 32e67cb7..5402ca85 100644 --- a/resources/views/Templates/templateAdmin.blade.php +++ b/resources/views/Templates/templateAdmin.blade.php @@ -86,8 +86,10 @@ class="fas fa-bars">
@if (Auth::check()) - {{ Auth::user()->user_type }} - + {{-- {{ Auth::user()->user_type }} + --}} + {{ Auth::user()->userType->type }} + @endif
@@ -125,12 +127,7 @@ class="fas fa-bars"> - {{-- --}} + diff --git a/resources/views/auth/login.blade.php b/resources/views/auth/login.blade.php index 7bd6741d..30ba4281 100644 --- a/resources/views/auth/login.blade.php +++ b/resources/views/auth/login.blade.php @@ -38,6 +38,7 @@
+ {{-- --}}
@@ -52,6 +53,7 @@
+
diff --git a/resources/views/email/email.blade.php b/resources/views/email/email.blade.php index aec1feec..f25bb027 100644 --- a/resources/views/email/email.blade.php +++ b/resources/views/email/email.blade.php @@ -8,7 +8,7 @@

Olá!

Segue abaixo o link para acessar o formulário:

- Acessar Formulário + Acessar Formulário

Se você não solicitou este e-mail, por favor, desconsidere.

diff --git a/resources/views/email/new_user_notification.blade.php b/resources/views/email/new_user_notification.blade.php new file mode 100644 index 00000000..51077bde --- /dev/null +++ b/resources/views/email/new_user_notification.blade.php @@ -0,0 +1,12 @@ + + + + + + Um novo usuário para criar + + +

Olá,

+

Um novo usuário foi registrado e está aguardando aprovação.

+ + \ No newline at end of file diff --git a/resources/views/email/pendingUsers.blade.php b/resources/views/email/pendingUsers.blade.php index 265d1aa8..53335edf 100644 --- a/resources/views/email/pendingUsers.blade.php +++ b/resources/views/email/pendingUsers.blade.php @@ -2,6 +2,12 @@ @section('Main-content')

+ @if (session('status')) + + @endif +

Enviar Formulário:

@@ -13,13 +19,13 @@
- - +

Email + +

-
- - +
+
@@ -37,7 +43,7 @@ - + diff --git a/routes/web.php b/routes/web.php index 6d27c807..859ccd57 100644 --- a/routes/web.php +++ b/routes/web.php @@ -19,10 +19,31 @@ use App\Http\Controllers\userController; use App\Http\Controllers\Pending_UserController; - - use App\Http\Controllers\Auth\RegisteredUserController; +use App\Http\Controllers\CustomRegistrationController; + + + +Route::get('/download-template', function () { + $filePath = public_path('templateExcel/FinalTemplate .xlsx'); + $fileName = 'FinalTemplate .xlsx'; + + return response()->download($filePath, $fileName); +}); + + + +Route::post('/register', [CustomRegistrationController::class, 'store'])->name('register'); + +Route::get('/your-verification-route/{id}/{hash}', [UserController::class, 'yourVerificationMethod']) + ->middleware(['auth', 'signed', 'throttle:6,1']) + ->name('verification.verify'); + + +Route::get('/receiveThisShit', function () { + return redirect()->route('test'); +})->name('verification.notice'); /* @@ -45,17 +66,7 @@ return view('Admin/index'); })->name('home'); - // Route::get('/', function () { - // return view('Admin/index'); - // })->name('home'); - // Route::get('formulario', function () { - // return view('email/formAdmin'); - // })->name('formulario'); - - - - /* |-------------------------------------------------------------------------- | Create Users with Super Admin @@ -66,19 +77,8 @@ | be assigned to the "web" middleware group. Make something great! | */ - }); -// Route::get('formulario', function () { -// return view('email/FormAdmin'); -// })->name('formulario'); - - -// Route::post('formulario/receive', [Pending_UserController::class, 'store'])->name('criarUser'); - - - - /* |-------------------------------------------------------------------------- | User_Type (Super_Administrador) @@ -88,16 +88,7 @@ | */ Route::middleware(['auth', 'verified', 'checksuperadmin'])->group(function () { - - - - // Rotas protegidas que exigem verificação de e-mail e user_type Super_Admin - // Route::get('/register', [RegisteredUserController::class, 'create']) - // ->name('register'); - // Route::post('/register', [RegisteredUserController::class, 'store']); - - - Route::get('usersProfiles', [userController::class, 'UserProfile'])->name('usersProfiles'); + Route::get('usersProfiles/{id}', [userController::class, 'UserProfile'])->name('usersProfiles'); Route::post('enviar-formulario', [FormController::class, 'enviarEmail'])->name('enviar.formulario'); /* @@ -127,21 +118,21 @@ */ Route::get('/CreateUsers', [Pending_UserController::class, 'ListPendingUsers'])->name('CreateUsers'); - Route::get('/CreateUsers/{id}',[Pending_UserController::class, 'ShowFormUser'])->name('ShowPendingUser'); + Route::get('/CreateUsers/{id}', [Pending_UserController::class, 'ShowFormUser'])->name('ShowPendingUser'); Route::get('formulario', function () { return view('email/FormAdmin'); })->name('formulario'); Route::post('formulario/receive', [Pending_UserController::class, 'store'])->name('criarUser'); - - - }); - + // Rotas protegidas que exigem verificação de e-mail e user_type Super_Admin + // Route::get('/register', [RegisteredUserController::class, 'create']) + // ->name('register'); + // Route::post('/register', [RegisteredUserController::class, 'store']) // Route::get('/test-email', function () { @@ -157,4 +148,24 @@ // } else { // return 'Failed to send email'; // } -// }); \ No newline at end of file +// }); + +// Route::get('formulario', function () { +// return view('email/FormAdmin'); +// })->name('formulario'); + + +// Route::post('formulario/receive', [Pending_UserController::class, 'store'])->name('criarUser'); + + + // Route::get('/', function () { + // return view('Admin/index'); + // })->name('home'); + + // Route::get('formulario', function () { + // return view('email/formAdmin'); + // })->name('formulario'); + + // Route::get('/email/notice', function (EmailVerificationRequest $request) { +// return view('auth.verify-email'); +// })->middleware(['auth'])->name('verification.notice');
NumeroId Nome Email Verificar