ispt4.0_laravel/app/Http/Controllers/Pending_UserController.php
2024-10-24 09:41:10 +01:00

163 lines
5.3 KiB
PHP
Executable File

<?php
namespace App\Http\Controllers;
use App\Models\Company;
use App\Models\CompanyProject;
use App\Models\FormAccessToken;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Validator;
use Illuminate\Support\Facades\Hash;
use App\Mail\NewUserNotification;
use Illuminate\Support\Facades\Mail;
use App\Models\PendingUser;
use App\Models\User;
use App\Models\TypeUser;
class Pending_UserController extends Controller
{
public function validateForm(Request $request)
{
$value = $request->get('value');
$type = $request->get('type');
// Inicializa os resultados como null para indicar que não foram verificados
$resultEmail = null;
$resultNif = null;
$resultPhone = null;
if ($type === 'email') {
$columnEmail = ['pending_user_email', 'email'];
$existsInPendingUser = PendingUser::where($columnEmail[0], $value)->exists();
$existsInUser = User::where($columnEmail[1], $value)->exists();
if ($existsInPendingUser && $existsInUser) {
$resultEmail = 3;
} elseif ($existsInPendingUser) {
$resultEmail = 2;
} elseif ($existsInUser) {
$resultEmail = 1;
} else {
$resultEmail = 0;
}
} elseif ($type === 'nif') {
$columnNif = ['pending_user_nif', 'user_nif'];
$existsInPendingUser = PendingUser::where($columnNif[0], $value)->exists();
$existsInUser = User::where($columnNif[1], $value)->exists();
if ($existsInPendingUser && $existsInUser) {
$resultNif = 3;
} elseif ($existsInPendingUser) {
$resultNif = 2;
} elseif ($existsInUser) {
$resultNif = 1;
} else {
$resultNif = 0;
}
} elseif ($type === 'phone') {
$resultPhone = ['pending_user_phone', 'user_phone'];
$existsInPendingUser = PendingUser::where($resultPhone[0], $value)->exists();
$existsInUser = User::where($resultPhone[1], $value)->exists();
if ($existsInPendingUser && $existsInUser) {
$resultPhone = 3;
} elseif ($existsInPendingUser) {
$resultPhone = 2;
} elseif ($existsInUser) {
$resultPhone = 1;
} else {
$resultPhone = 0;
}
}
return response()->json([
'result_email' => $resultEmail,
'result_nif' => $resultNif,
'result_phone' => $resultPhone
]);
}
public function ListPendingUsers($typeUser)
{
// Passa para a funcao para qual tipo de utilizador vai criar.
$pend_users = PendingUser::all();
return view('email/pendingUsers', compact('pend_users','typeUser'));
}
public function ShowFormUser($id)
{
$pend_user = PendingUser::findOrFail($id);
$allTypes = TypeUser::all();
$allCompanies = Company::all();
// Verifica se o usuário autenticado é de um tipo específico
if (auth()->user()->type_users == 1) {
// Se o usuário autenticado tem tipo '1', envia todos os tipos
$types = $allTypes;
} else {
// Caso contrário, filtra os tipos para excluir o tipo '1'
$types = $allTypes->reject(function ($type) {
return $type->type_user_id == 1;
});
}
return view('Admin.CrudUsers.createUser', compact('pend_user', 'types', 'allCompanies'));
}
public function store(Request $request)
{
// dd($request);
$request->validate([
'name' => 'required',
'lastName' => 'required',
'pending_email' => 'required|email|unique:pending_users,pending_user_email|unique:users,email',
'pending_phone' => 'required',
'pending_nif' => 'required',
'pending_password' => 'required|min:8|confirmed',
]);
$joinName = $request->get('name') . ' ' . $request->get('lastName');
$pendingUser = new PendingUser();
$pendingUser->pending_user_name = $joinName;
$pendingUser->pending_user_email = $request->get('pending_email');
$pendingUser->pending_user_phone = $request->get('pending_phone');
$pendingUser->pending_user_nif = $request->get('pending_nif');
$pendingUser->pending_user_password = Hash::make($request->get('pending_password'));
$pendingUser->save();
//Recebe o token criado para preencher o formulario e apaga o mesmo apos criar o User.
$receiveToken = FormAccessToken::where('token', $request->get('receiveToken'))->first();
if ($receiveToken) {
$receiveToken->delete();
}
// Enviar email de notificação para todos os Super_Administrador
$superAdmins = User::where('type_users', 'Super_Administrador')->get();
$newUserNotification = new NewUserNotification();
foreach ($superAdmins as $superAdmin) {
Mail::to($superAdmin->email)->send($newUserNotification);
}
return redirect('login')->with('success', '"O seu registo foi submetido e está atualmente pendente de aprovação. Por favor, aguarde antes de iniciar sessão no sistema." ');
}
}