374 lines
13 KiB
PHP
Executable File
374 lines
13 KiB
PHP
Executable File
<?php
|
|
|
|
namespace App\Http\Controllers;
|
|
|
|
use App\Models\AssociationCompanyUser;
|
|
use App\Models\Company;
|
|
use App\Models\CompanyProject;
|
|
use App\Models\Plant;
|
|
use App\Models\TypeUser;
|
|
use Illuminate\Support\Facades\Hash;
|
|
use Illuminate\Support\Facades\Auth;
|
|
use Illuminate\Support\Facades\File;
|
|
|
|
|
|
use Illuminate\Validation\ValidationException;
|
|
|
|
|
|
use Illuminate\Http\Request;
|
|
use Laravel\Fortify\Contracts\LoginResponse as LoginResponseContract;
|
|
use Laravel\Fortify\Contracts\LogoutResponse as LogoutResponseContract;
|
|
use Laravel\Fortify\Fortify;
|
|
use Laravel\Fortify\Http\Controllers\AuthenticatedSessionController as FortifyAuthenticatedSessionController;
|
|
|
|
use Illuminate\Auth\Events\Verified;
|
|
|
|
use App\Models\User;
|
|
use App\Models\FormAccessToken;
|
|
|
|
class userController extends Controller
|
|
{
|
|
|
|
|
|
public function EditProfile(Request $request)
|
|
{
|
|
// Verifica se um arquivo foi enviado e se o tamanho é maior que 70 KB
|
|
if ($request->hasFile('user_logo') && $request->file('user_logo')->getSize() > 71680) {
|
|
return back()->with('danger', 'O tamanho da imagem não deve ser maior que 70KB, valores não alteradas.');
|
|
}
|
|
|
|
$messages = [
|
|
'user_logo.max' => 'O tamanho da imagem não deve ser maior que 70KB.',
|
|
];
|
|
|
|
$request->validate([
|
|
'user_logo' => 'image|mimes:jpeg,png,jpg,gif,svg|max:70',
|
|
'fullName' => 'required',
|
|
'email' => 'required|email|unique:users,email,' . $request->userID . ',user_id',
|
|
'phone' => 'required',
|
|
'nif' => 'required',
|
|
], $messages);
|
|
|
|
|
|
$user = User::find($request->userID);
|
|
|
|
if ($request->hasFile('user_logo')) {
|
|
$imageName = time() . '.' . $request->user_logo->extension();
|
|
|
|
// Verifica se o usuário já tem uma imagem e se é diferente da nova imagem
|
|
if ($user->user_logo && $user->user_logo != $imageName) {
|
|
// Constrói o caminho completo para o arquivo de imagem existente
|
|
$existingImagePath = public_path('user_logos/' . $user->user_logo);
|
|
|
|
// Verifica se o arquivo de imagem existente realmente existe no sistema de arquivos
|
|
if (File::exists($existingImagePath)) {
|
|
// Exclui o arquivo de imagem existente
|
|
File::delete($existingImagePath);
|
|
}
|
|
}
|
|
|
|
// Move o novo arquivo de imagem para o diretório
|
|
$request->user_logo->move(public_path('user_logos'), $imageName);
|
|
|
|
// Atualiza o campo user_logo do usuário com o nome do novo arquivo de imagem
|
|
$user->user_logo = $imageName;
|
|
}
|
|
|
|
$user->user_name = $request->fullName;
|
|
$user->email = $request->email;
|
|
$user->user_phone = $request->phone;
|
|
$user->user_nif = $request->nif;
|
|
$user->save();
|
|
|
|
return back()->with('success', "Perfil actualizado com sucesso!");
|
|
}
|
|
|
|
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)
|
|
{
|
|
$request->validate([
|
|
Fortify::username() => 'required|string',
|
|
'password' => 'required|string',
|
|
]);
|
|
|
|
$user = User::where('email', $request->email)->first();
|
|
|
|
if ($user && Hash::check($request->password, $user->password)) {
|
|
return $user;
|
|
}
|
|
|
|
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;
|
|
}
|
|
|
|
|
|
|
|
//Busca Todos os Utilizador Exeto as 'Empresas'
|
|
public function listUsers()
|
|
{
|
|
$users = User::with('userType')->where('type_users', '<>', 3)->get();
|
|
|
|
return view('Admin.CrudUsers.listUsers', compact('users'));
|
|
}
|
|
|
|
public function show($id)
|
|
{
|
|
$user = User::findOrFail($id);
|
|
return view('Admin.CrudUsers.showUsers', compact('user'));
|
|
}
|
|
|
|
public function edit($id)
|
|
{
|
|
$user = User::findOrFail($id);
|
|
//Por enquanto suas estruturas são iguas então não precisa de outra pagina apenas para fazer a mesma coisa.
|
|
//Dependendo do tipo de utilizador deve ir para um pagina diferente.
|
|
// if($user->type_users == 3){
|
|
// return view('Admin.CrudUsers.editCompanies', compact('user'));
|
|
// } else
|
|
return view('Admin.CrudUsers.editUsers', compact('user'));
|
|
|
|
|
|
|
|
}
|
|
|
|
public function update(Request $request, User $user)
|
|
{
|
|
//Por enquanto foi retirado o 'user_type' pois ainda não é necessario alterar o tipo de utilizador na edição.
|
|
|
|
$request->validate([
|
|
'name' => 'required',
|
|
'email' => 'required|email|unique:users,email,' . $user->user_id . ',user_id',
|
|
'password' => 'nullable|min:8|confirmed',
|
|
// 'user_type' => 'required',
|
|
'user_phone' => 'required',
|
|
'user_nif' => 'required',
|
|
]);
|
|
|
|
$user->update([
|
|
'name' => $request->get('name'),
|
|
'email' => $request->get('email'),
|
|
'password' => $request->filled('password') ? Hash::make($request->get('password')) : $user->password,
|
|
// 'user_type' => $request->get('user_type'),
|
|
'user_phone' => $request->get('user_phone'),
|
|
'user_nif' => $request->get('user_nif'),
|
|
]);
|
|
|
|
$user->save();
|
|
|
|
if ($user->type_users == 3) {
|
|
return redirect('/users/listCompanies')->with('success', 'Utilizador atualizado com Sucesso!!');
|
|
|
|
} else
|
|
return redirect('/users/listUsers')->with('success', 'Utilizador atualizado com Sucesso!!');
|
|
}
|
|
|
|
public function create()
|
|
{
|
|
return view('users.create');
|
|
}
|
|
|
|
public function store(Request $request)
|
|
{
|
|
$request->validate([
|
|
'name' => 'required',
|
|
'email' => 'required|email|unique:users',
|
|
'password' => 'required|min:8|confirmed',
|
|
'user_type' => 'required',
|
|
'user_phone' => 'required',
|
|
'user_nif' => 'required',
|
|
]);
|
|
|
|
$user = new User([
|
|
'name' => $request->get('name'),
|
|
'email' => $request->get('email'),
|
|
'password' => Hash::make($request->get('password')),
|
|
'user_type' => $request->get('user_type'),
|
|
'user_phone' => $request->get('user_phone'),
|
|
'user_nif' => $request->get('user_nif'),
|
|
]);
|
|
|
|
$user->save();
|
|
return redirect('/users')->with('success', 'Utilizador criado com sucesso!');
|
|
}
|
|
|
|
public function destroy(User $user)
|
|
{
|
|
$user->delete();
|
|
|
|
if ($user->type_users == 3) {
|
|
return redirect('/users/listCompanies')->with('success', 'Empresa deletado com sucesso!');
|
|
} else {
|
|
return redirect('/users/listUsers')->with('success', 'Utilizador deletado com sucesso!');
|
|
|
|
}
|
|
}
|
|
|
|
public function listCompanies()
|
|
{
|
|
// $users = User::with('userType')->where('type_users', '=', 3)->get();
|
|
$companiesList = Company::all();
|
|
|
|
// $companierList = AssociationCompanyUser
|
|
|
|
return view('Admin.CrudUsers.listCompany', compact('companiesList'));
|
|
}
|
|
|
|
public function showCompany($id)
|
|
{
|
|
|
|
$company = Company::where('company_id', $id)->first();
|
|
|
|
// Busca todos os registros na tabela association_company_user que correspondem à company_id
|
|
$associationRecords = AssociationCompanyUser::where('company_id', $id)->get();
|
|
|
|
// Extrai todos os user_id da coleção de registros
|
|
$userIds = $associationRecords->pluck('user_id');
|
|
|
|
// Busca os detalhes dos usuários na tabela users usando os IDs coletados
|
|
$companyUsers = User::whereIn('user_id', $userIds)->get();
|
|
|
|
|
|
// Para cada cliente, obtemos os plant_ids associados
|
|
$plantIds = Plant::where('company_id', $company->company_id)->pluck('plant_id');
|
|
|
|
// Contamos os CompanyProjects associados com datas de início e fim não nulas
|
|
$projectCount = CompanyProject::whereIn('plant_id', $plantIds)
|
|
->whereNotNull('date_started')
|
|
->whereNotNull('end_date')
|
|
->count();
|
|
|
|
return view('Admin.CrudCompanies.showCompanyDetails', compact('company', 'companyUsers', 'projectCount'));
|
|
}
|
|
|
|
|
|
public function createCompany(Request $request)
|
|
{
|
|
|
|
// Função interna para normalizar nomes de empresas
|
|
function normalize($value)
|
|
{
|
|
$trimmed = trim($value);
|
|
$noInnerSpaces = str_replace(' ', '', $trimmed);
|
|
$lowercase = strtolower($noInnerSpaces);
|
|
return $lowercase;
|
|
}
|
|
|
|
// Normaliza o nome da empresa recebido
|
|
$normalizedInputName = normalize($request->company_name);
|
|
|
|
// Verifica se já existe uma empresa com nome similar
|
|
$existingCompany = Company::whereRaw("LOWER(REPLACE(company_name, ' ', '')) = ?", [$normalizedInputName])->first();
|
|
|
|
if ($existingCompany) {
|
|
return back()->with('danger', 'Uma empresa com um nome similar já existe.');
|
|
}
|
|
|
|
|
|
$createCompany = new Company;
|
|
$createCompany->company_name = $request->company_name;
|
|
|
|
// Primeiro, verificamos se um arquivo foi enviado e se seu tamanho é maior que 70KB.
|
|
if ($request->hasFile('company_logo') && $request->file('company_logo')->getSize() > 71680) {
|
|
return back()->with('danger', 'O tamanho da imagem não deve ser maior que 70KB.');
|
|
}
|
|
|
|
// Processo para salvar a imagem, se tudo estiver ok
|
|
if ($request->hasFile('company_logo')) {
|
|
$imageName = time() . '.' . $request->company_logo->extension();
|
|
|
|
// Move o novo arquivo de imagem para o diretório
|
|
$request->company_logo->move(public_path('companies_logo'), $imageName);
|
|
$createCompany->company_logo = $imageName;
|
|
|
|
} else {
|
|
// Se nenhuma imagem foi enviada, atribuímos uma imagem padrão.
|
|
$createCompany->company_logo = 'logoISPT4.0.jpg';
|
|
}
|
|
|
|
$createCompany->save();
|
|
|
|
return redirect('CreateUsers')->with('status', 'A Empresa ' . $createCompany->company_name . ' foi criada com êxito. Consulte na página "Empresas".');
|
|
}
|
|
|
|
public function companyEdit(Request $request)
|
|
{
|
|
// Verifica se um arquivo foi enviado e se o tamanho é maior que 70 KB
|
|
if ($request->hasFile('company_logo') && $request->file('company_logo')->getSize() > 71680) {
|
|
return back()->with('danger', 'O tamanho da imagem não deve ser maior que 70KB, valores não alteradas.');
|
|
}
|
|
|
|
$messages = [
|
|
'user_logo.max' => 'O tamanho da imagem não deve ser maior que 70KB.',
|
|
];
|
|
|
|
$companyDetails = Company::find($request->companyId);
|
|
|
|
// Processo para salvar a imagem, se tudo estiver ok
|
|
if ($request->hasFile('company_logo')) {
|
|
|
|
$imageName = time() . '.' . $request->company_logo->extension();
|
|
|
|
// Verifica se o usuário já tem uma imagem e se é diferente da nova imagem
|
|
if ($companyDetails->company_logo && $companyDetails->company_logo != $imageName) {
|
|
// Constrói o caminho completo para o arquivo de imagem existente
|
|
$existingImagePath = public_path('companies_logo/' . $companyDetails->company_logo);
|
|
|
|
// Verifica se o arquivo de imagem existente realmente existe no sistema de arquivos
|
|
if (File::exists($existingImagePath)) {
|
|
// Exclui o arquivo de imagem existente
|
|
File::delete($existingImagePath);
|
|
}
|
|
}
|
|
|
|
// Move o novo arquivo de imagem para o diretório
|
|
$request->company_logo->move(public_path('companies_logo'), $imageName);
|
|
|
|
// Atualiza o campo user_logo do usuário com o nome do novo arquivo de imagem
|
|
$companyDetails->company_logo = $imageName;
|
|
$companyDetails->save();
|
|
|
|
|
|
return back()->with('success', 'Logo atualizado com sucesso!');
|
|
}
|
|
|
|
return back()->with('danger', 'Erro ao carregar a imagem.');
|
|
}
|
|
|
|
}
|
|
|
|
|