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) { // dd($request); //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([ 'user_name' => $request->get('user_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.'); } }