File: /var/www/gestion-formularios.bdfschool/app/Http/Controllers/UsersController.php
<?php
namespace App\Http\Controllers;
use App\Http\Controllers\Controller;
use App\Models\Areas;
use App\Models\PersonalUsersInformation;
use App\Models\Profiles;
use App\Models\Users;
use App\Services\BrevoService\BrevoMailer;
use Exception;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Mail;
class UsersController extends Controller
{
public function __construct()
{
$this->middleware('auth.users')->except('logout');
$this->middleware('auth.users:LIST_PROFILES')->only(['index']);
$this->middleware('auth.users:ADD_PROFILES')->only(['create', 'store']);
$this->middleware('auth.users:EDIT_PROFILES')->only(['edit', 'update']);
$this->middleware('auth.users:DEL_PROFILES')->only(['destroy']);
}
public function index()
{
$sidenav = 'users';
$sidenav_item = 'users_list';
$title = 'Gestión de Usuarios';
$title_table = 'Listado de Usuarios';
$list_data = Users::where('deleted', false)->where('id', '!=', 1)->get();
return view('admin.users.users_list', compact(
'title',
'sidenav',
'sidenav_item',
'title_table',
'list_data'
));
}
public function create()
{
$sidenav = 'users';
$sidenav_item = 'users_new';
$title = 'Nuevo Usuario';
$title_form = 'Formulario de Registro de Usuario';
$profiles_data = Profiles::where('deleted', false)->where('show_user', true)->where('status', true)->get();
$areas_data = Areas::where('deleted', false)->where('status', true)->get();
return view(
'admin.users.users_new',
compact(
'title',
'sidenav',
'sidenav_item',
'title_form',
'profiles_data',
'areas_data'
)
);
}
public function store(Request $request)
{
$this->validateData($request);
if (!empty($request->rut)) {
$this->validate($request, [
'rut' => 'min:11|max:13',
], [
'rut.min' => 'Rut debe tener Mínimo 11 Caracteres',
'rut.max' => 'Rut debe tener Máximo 13 Caracteres',
]);
$rut = trim($request->rut);
$rut = str_replace('.', '', $rut);
if (!validateRut($rut)) {
return back()->with(['danger_message' => 'Rut posee formato inválido'])->with(['danger_message_title' => 'ERROR DE VALIDACIÓN'])->withInput();
}
$validate_rut = Users::where('rut', $rut)->where('deleted', false)->first();
if (!empty($validate_rut)) {
return back()->with(['danger_message' => 'Rut ya existe en nuestros registros'])->with(['danger_message_title' => 'ERROR DE VALIDACIÓN'])->withInput();
}
}
$email = strLower($request->email);
$validate_username = Users::where('username', $email)->where('deleted', false)->first();
$validate_email = Users::where('username', $email)->where('deleted', false)->first();
if (!empty($validate_username) || !empty($validate_email)) {
return back()->with(['danger_message' => 'Correo electrónico ya existe en nuestros registros'])->with(['danger_message_title' => 'ERROR DE VALIDACIÓN'])->withInput();
}
$profile = Profiles::find($request->profile);
$request->password = generateSecurePassword();
$request->activation_token = getToken();
$user_register = $this->createOrUpdate($request, '');
if ($user_register > 0) {
#ENVIO DE CREACIÓN DE CUENTA
$email = strLower($request->email);
try {
BrevoMailer::send(
$email,
'Confirmación de Cuenta - Bradford School',
'templates_email.email_register_user',
[
'data' =>
[
'name' => $request->name,
'username' => $email,
'password' => $request->password,
'token' => $request->activation_token,
'type_account' => $profile ? $profile->profile : ''
]
],
);
} catch (Exception $e) {
return redirect(route('users'))->with(['warning_message' => 'Usuario Creado Correctamente, pero ocurrió un problema al enviar correo'])->with(['warning_message_title' => 'GESTIÓN DE USUARIOS']);
}
return redirect(route('users'))->with(['success_message' => 'Usuario Creado Correctamente'])->with(['success_message_title' => 'GESTIÓN DE USUARIOS']);
}
return back()->with(['danger_message' => 'Ha Ocurrido un error al crear. Intente Nuevamente'])->with(['danger_message_title' => 'ERROR INTERNO'])->withInput();
}
public function edit($register_id)
{
$form_data = $this->validateExists($register_id);
if (empty($form_data)) {
return redirect(route('users'))->with(['danger_message' => 'Registro No existe o fue Eliminado'])->with(['danger_message_title' => 'ERROR DE VALIDACIÓN']);
}
$sidenav = 'users';
$sidenav_item = 'users_list';
$title = 'Editar Usuario';
$title_form = 'Formulario de Edición de Usuario';
$profiles_data = Profiles::where('deleted', false)->where('show_user', true)->where('status', true)->get();
$areas_data = Areas::where('deleted', false)->where('status', true)->get();
return view(
'admin.users.users_edit',
compact(
'title',
'sidenav',
'sidenav_item',
'title_form',
'form_data',
'profiles_data',
'areas_data'
)
);
}
public function update(Request $request, $register_id)
{
$register_data = $this->validateExists($register_id);
if (empty($register_data)) {
return redirect(route('users'))->with(['danger_message' => 'Registro No existe o fue Eliminado'])->with(['danger_message_title' => 'ERROR DE VALIDACIÓN']);
}
$this->validateData($request);
$rut = null;
if (!empty($request->rut)) {
$this->validate($request, [
'rut' => 'min:11|max:13',
], [
'rut.min' => 'Rut debe tener Mínimo 11 Caracteres',
'rut.max' => 'Rut debe tener Máximo 13 Caracteres',
]);
$rut = trim($request->rut);
$rut = str_replace('.', '', $rut);
if (!validateRut($rut)) {
return back()->with(['danger_message' => 'Rut posee formato inválido'])->with(['danger_message_title' => 'ERROR DE VALIDACIÓN'])->withInput();
}
$validate_rut = Users::where('rut', $rut)->where('deleted', false)->where('id', '!=', $register_id)->first();
if (!empty($validate_rut)) {
return back()->with(['danger_message' => 'Rut ya existe en nuestros registros'])->with(['danger_message_title' => 'ERROR DE VALIDACIÓN'])->withInput();
}
}
$email = strLower($request->email);
$validate_username = Users::where('username', $email)->where('deleted', false)->where('id', '!=', $register_id)->first();
$validate_email = Users::where('email', $email)->where('deleted', false)->where('id', '!=', $register_id)->first();
if (!empty($validate_username) || !empty($validate_email)) {
return back()->with(['danger_message' => 'Correo electrónico ya existe en nuestros registros'])->with(['danger_message_title' => 'ERROR DE VALIDACIÓN'])->withInput();
}
$register_data = $this->createOrUpdate($request, $register_data);
if ($register_data > 0) {
return redirect(route('users'))->with(['success_message' => 'Usuario Modificado Correctamente'])->with(['success_message_title' => 'GESTIÓN DE USUARIOS']);
}
return back()->with(['danger_message' => 'Ha Ocurrido un error al modificar. Intente Nuevamente'])->with(['danger_message_title' => 'ERROR INTERNO'])->withInput();
}
private function validateData(Request $request)
{
$this->validate($request, [
'name' => 'required|min:3|max:100',
'email' => 'required|email',
'rut' => 'required',
'area' => 'required',
], [
'name.required' => 'Nombre completo Requerido',
'name.min' => 'Nombre completo debe tener Mínimo 3 Caracteres',
'name.max' => 'Nombre completo debe tener Máximo 100 Caracteres',
'email.required' => 'Correo electrónico Requerido',
'email.email' => ' Correo electrónico debe ser un correo válido',
'rut.required' => 'Rut Requerido',
'area.required' => 'Área Requerido',
]);
}
private function validateExists($register_id)
{
$error = false;
if (!is_numeric($register_id)) {
$error = true;
}
$register_data = [];
if (!$error) {
$register_data = Users::where('deleted', 0)->where('id', $register_id)->first();
if (empty($register_data)) {
$error = true;
}
}
return $register_data;
}
private function createOrUpdate(Request $request, $register_data = '')
{
try {
if (empty($register_data)) {
$register_data = new Users();
$register_data->username = strLower($request->email);
$register_data->created_at = ahoraServidor();
$register_data->user_created = auth()->user()->id;
$register_data->password = bcrypt($request->password);
$register_data->activation_token = $request->activation_token;
$register_data->validate_password = true;
}
$register_data->name = $request->name;
$register_data->email = strLower($request->email);
$register_data->rut = str_replace('.', '', $request->rut);
$register_data->status = isset($request->status) ? ($request->status == 1 ? true : false) : true;
$register_data->is_head_of_area = isset($request->is_head_of_area) ? ($request->is_head_of_area == 1 ? true : false) : false;
$register_data->notification_new_request = isset($request->notification_new_request) ? ($request->notification_new_request == 1 ? true : false) : false;
$register_data->profile_id = (auth()->user()->id != 1 && $request->profile == 1 ? auth()->user()->profile_id : $request->profile);
$register_data->area_id = $request->area;
$register_data->updated_at = ahoraServidor();
$register_data->user_updated = auth()->user()->id;
return $register_data->save() ? $register_data->id : 0;
} catch (Exception $e) {
return $e->getMessage();
}
}
public function destroy(Request $request)
{
$this->validate($request, [
'id_modal' => 'required',
], [
'id_modal.required' => 'Id de registro Requerido',
]);
$register_data = $this->validateExists($request->id_modal);
if (empty($register_data)) {
return redirect(route('users'))->with(['danger_message' => 'Registro No existe o fue Eliminado'])->with(['danger_message_title' => 'ERROR DE VALIDACIÓN']);
}
if ($register_data->id == auth()->user()->id) {
return back()->with(['danger_message' => 'Lo sentimos. No se puede eliminar su propio usuario.'])->with(['danger_message_title' => 'ERROR DE VALIDACIÓN']);
}
$register_data->deleted = true;
$register_data->deleted_at = ahoraServidor();
$register_data->user_deleted = auth()->user()->id;
if ($register_data->save()) {
return redirect(route('users'))->with(['success_message' => 'Usuario Eliminado Correctamente'])->with(['success_message_title' => 'GESTIÓN DE USUARIOS']);
}
return back()->with(['danger_message' => 'Ha Ocurrido un error al eliminar. Intente Nuevamente'])->with(['danger_message_title' => 'ERROR INTERNO']);
}
public function restore_password(Request $request)
{
$this->validate($request, [
'id_modal_restore' => 'required',
], [
'id_modal_restore.required' => 'Id de registro Requerido',
]);
$register_data = $this->validateExists($request->id_modal_restore);
if (empty($register_data)) {
return redirect(route('users'))->with(['danger_message' => 'Registro No existe o fue Eliminado'])->with(['danger_message_title' => 'ERROR DE VALIDACIÓN']);
}
if ($register_data->id == auth()->user()->id) {
return back()->with(['danger_message' => 'Lo sentimos. No se puede restablecer la contraseña de tu propio usuario.'])->with(['danger_message_title' => 'ERROR DE VALIDACIÓN']);
}
$password = generateSecurePassword();
$register_data->password = bcrypt($password);;
$register_data->validate_password = true;
$register_data->updated_at = ahoraServidor();
$register_data->user_updated = auth()->user()->id;
$register_data->connection_token = null;
if ($register_data->save()) {
#RESTABLECIMIENTO DE CONTRASEÑA
$email = strLower($register_data->email);
try {
BrevoMailer::send(
$email,
'Restablecimiento de Contraseña - Bradford School',
'templates_email.email_restore_password_admin',
[
'data' =>
[
'user_restore' => auth()->user()->name,
'name' => $register_data->name,
'password' => $password
]
],
);
} catch (Exception $e) {
return redirect(route('users'))->with(['warning_message' => 'Contraseña Restablecida Correctamente, pero ocurrió un problema al enviar correo.'])->with(['warning_message_title' => 'GESTIÓN DE USUARIOS']);
}
return redirect(route('users'))->with(['success_message' => 'Contraseña Restablecida Correctamente'])->with(['success_message_title' => 'GESTIÓN DE USUARIOS']);
}
return back()->with(['danger_message' => 'Ha Ocurrido un error al eliminar. Intente Nuevamente'])->with(['danger_message_title' => 'ERROR INTERNO']);
}
public function confirm_account(Request $request)
{
$this->validate($request, [
'id_modal_confirm' => 'required',
], [
'id_modal_confirm.required' => 'Id de registro Requerido',
]);
$register_data = $this->validateExists($request->id_modal_confirm);
if (empty($register_data)) {
return redirect(route('users'))->with(['danger_message' => 'Registro No existe o fue Eliminado'])->with(['danger_message_title' => 'ERROR DE VALIDACIÓN']);
}
if ($register_data->account_confirmed) {
return back()->with(['warning_message' => 'La cuenta del usuario ya está confirmada'])->with(['warning_message_title' => 'CUENTA YA CONFIRMADA']);
}
$register_data->account_confirmed = true;
$register_data->user_confirmed = auth()->user()->id;
$register_data->account_confirmed_at = ahoraServidor();
$register_data->updated_at = ahoraServidor();
$register_data->user_updated = auth()->user()->id;
if ($register_data->save()) {
#ENVIO DE CONFIRMACIÓN DE CUENTA
$email = strLower($register_data->email);
try {
BrevoMailer::send(
$email,
'Cuenta Confirmada - Bradford School',
'templates_email.email_confirmation_account',
[
'data' =>
[
'name' => $register_data->name,
]
],
);
} catch (Exception $e) {
return back()->with(['warning_message' => 'Su Cuenta ha sido confirmada exitosamente, pero no ha podido enviar el correo.'])->with(['warning_message_title' => 'CUENTA CONFIRMADA'])->withInput();
}
return redirect(route('login'))->with(
[
'success_message' => 'Su Cuenta ha sido confirmada exitosamente',
'success_message_title' => 'CUENTA CONFIRMADA'
]
);
}
if ($register_data->save()) {
return redirect(route('users'))->with(['success_message' => 'Usuario Eliminado Correctamente'])->with(['success_message_title' => 'GESTIÓN DE USUARIOS']);
}
return back()->with(['danger_message' => 'Ha Ocurrido un error al eliminar. Intente Nuevamente'])->with(['danger_message_title' => 'ERROR INTERNO']);
}
}