Commit 5f3f5bcf by Juan Montilla

Editar Usuario

parent fac1f0e7
...@@ -68,17 +68,18 @@ $routes->get('/myrecipes', 'User::personalRecipes', ['filter' => 'user_auth']); ...@@ -68,17 +68,18 @@ $routes->get('/myrecipes', 'User::personalRecipes', ['filter' => 'user_auth']);
// Ruta para vista "Mi perfil" // Ruta para vista "Mi perfil"
$routes->get('/profile', 'User::myprofile', ['filter' => 'user_auth']); $routes->get('/profile', 'User::myprofile', ['filter' => 'user_auth']);
$routes->post('/cambiarFoto', 'User::changeProfilePhoto'); $routes->post('/profile', 'User::editProfile'); // Cambia la ruta para editar perfil
$routes->get('login','Pages::viewLogin'); $routes->get('login','Pages::viewLogin');
$routes->get('users','User::list');
$routes->get('users', 'User::list', ['filter' => 'admin_auth']); $routes->get('users', 'User::list', ['filter' => 'admin_auth']);
$routes->get('home','Pages::prueba'); $routes->get('home','Pages::prueba');
$routes->get('(:segment)', 'Home::index'); $routes->get('(:segment)', 'Home::index');
// Ruta para la búsqueda de re // Ruta para la búsqueda de recetas
$routes->post('/filter_recipes', 'RecipesController::filter_recipes'); $routes->post('/filter_recipes', 'RecipesController::filter_recipes');
......
...@@ -192,23 +192,35 @@ class User extends BaseController ...@@ -192,23 +192,35 @@ class User extends BaseController
. view('templates/footer'); . view('templates/footer');
} }
public function changeProfilePhoto() public function editProfile()
{ {
$session = \Config\Services::session(); $session = session();
$email = $session->get('user')->email; $userModel = new \App\Models\UserModel();
$userModel = new UserModel();
if($this->request->getMethod() === 'post') {
$photo = $this->request->getFile('photo'); $username = $this->request->getPost('username');
if ($photo->isValid() && !$photo->hasMoved()) {
$photoBlob = file_get_contents($photo->getRealPath()); // Manejar el archivo de imagen
$data['photo'] = $photoBlob; $photo = $this->request->getFile('photo');
$userModel->update($email, $data); $photoBlob = null;
if ($photo->isValid() && !$photo->hasMoved()) {
$photoBlob = file_get_contents($photo->getRealPath());
$userModel->updateUser($session->get('user')->email, $username, $photoBlob);
} else {
// Actualiza solo el nombre de usuario si no se ha subido una nueva foto
$userModel->updateUser($session->get('user')->email, $username, $session->get('user')->photo);
}
// Actualizar datos de la sesión
$session->set('user', $userModel->find($session->get('user')->email));
$session->setFlashdata('success', 'Profile updated successfully');
return redirect()->to('/profile'); // Cambia la redirección a '/profile'
} }
return redirect()->to('/perfil'); $data['user'] = $session->get('user');
return view('edit_profile', $data);
} }
} }
\ No newline at end of file
...@@ -12,7 +12,7 @@ class AdminAuth implements FilterInterface ...@@ -12,7 +12,7 @@ class AdminAuth implements FilterInterface
if (!session('logged_in')) if (!session('logged_in'))
return redirect()->to(site_url('/login')); return redirect()->to(site_url('/login'));
elseif ((session('user')->rol & 2) == 0) elseif ((session('user')->rol & 2) == 0)
return redirect()->to(site_url('/unauthorized')); return redirect()->to(site_url('/login'));
} }
public function after( public function after(
RequestInterface $request, ResponseInterface $response, RequestInterface $request, ResponseInterface $response,
......
...@@ -11,7 +11,7 @@ class UserModel extends Model ...@@ -11,7 +11,7 @@ class UserModel extends Model
protected $returnType = 'object'; # 'object' or 'array' protected $returnType = 'object'; # 'object' or 'array'
protected $useSoftDeletes = false; # true if you expect to recover data protected $useSoftDeletes = false; # true if you expect to recover data
# Fields that can be set during save, insert, or update methods # Fields that can be set during save, insert, or update methods
protected $allowedFields = ['email', 'username', 'password','photo']; protected $allowedFields = ['email', 'username', 'password', 'photo'];
protected $useTimestamps = false; # no timestamps on inserts and updates protected $useTimestamps = false; # no timestamps on inserts and updates
# Do not use validations rules (for the time being...) # Do not use validations rules (for the time being...)
protected $validationRules = []; protected $validationRules = [];
...@@ -36,5 +36,17 @@ class UserModel extends Model ...@@ -36,5 +36,17 @@ class UserModel extends Model
return $this->insert($data); return $this->insert($data);
} }
public function updateUser($email, $username, $photo)
{
$data = [
'username' => $username,
'photo' => $photo,
];
return $this->update($email, $data);
}
} }
\ No newline at end of file
<main id="main" class="main"> <style>
<section class="section dashboard"> .profile-container {
<?php $session = session(); ?> max-width: 500px;
<div style="display: flex; flex-direction: row; align-items: center;"> margin: auto;
<?php if ($session->has('user') && !is_null($session->get('user')->photo)): ?> }
<img src="data:image/jpeg;base64,<?= base64_encode($session->get('user')->photo) ?>" alt="Profile" .profile-photo {
style="width: 100px; height: 100px; object-fit: cover; border-radius: 50%;"> max-width: 200px;
<?php else: ?> display: block;
<img src="<?= base_url("imagenes/profile.png") ?>" margin: 10px 0;
style="width: 100px; height: 100px; object-fit: cover; border-radius: 50%;"> }
<?php endif; ?> .save-btn-container {
<div style="display: flex; flex-direction: column; margin-left: 20px;"> margin-top: 20px;
<span style="font-size: 18px; font-weight: bold;">Nombre de usuario:</span> }
<span style="font-size: 16px;"> </style>
<?= $session->get('user')->username ?>
</span>
<span style="font-size: 18px; font-weight: bold;">Correo:</span>
<span style="font-size: 16px;">
<?= $session->get('user')->email ?>
</span>
</div>
</div>
<a href="#" id="cambiar-foto-btn" class="btn btn-primary">Cambiar foto de perfil</a>
<div class="modal fade" id="cambiar-foto-modal" tabindex="-1" role="dialog"> <main id="main" class="main">
<div class="modal-dialog" role="document"> <section class="section dashboard">
<div class="modal-content"> <?php
<div class="modal-header"> $session = session();
<h5 class="modal-title">Cambiar foto de perfil</h5> $user = $session->get('user');
<button type="button" class="close" data-dismiss="modal" aria-label="Close"> ?>
<span aria-hidden="true">&times;</span>
</button> <div class="container profile-container">
</div> <div class="card">
<div class="modal-body"> <div class="card-header">
<form id="cambiar-foto-form" enctype="multipart/form-data"> Editar usuario
<div class="form-group"> </div>
<label for="foto">Selecciona una foto:</label> <div class="card-body">
<input type="file" class="form-control-file" id="foto" name="foto"> <form method="post" enctype="multipart/form-data">
</div> <div class="form-group">
</form> <label for="email">Email</label>
</div> <input type="email" class="form-control" id="email" name="email" value="<?= $user->email ?>" readonly>
<div class="modal-footer"> </div>
<button type="button" class="btn btn-secondary" data-dismiss="modal">Cancelar</button> <div class="form-group">
<button type="button" class="btn btn-primary" id="guardar-foto-btn">Guardar</button> <label for="username">Nombre de usuario</label>
</div> <input type="text" class="form-control" id="username" name="username" value="<?= $user->username ?>">
</div>
<div class="form-group">
<label for="photo">Foto de perfil</label>
<?php if ($user->photo): ?>
<img src="data:image/jpeg;base64,<?= base64_encode($user->photo) ?>" alt="User photo" class="profile-photo" />
<?php endif; ?>
<input type="file" class="form-control" id="photo" name="photo">
</div>
<div class="text-center save-btn-container">
<button type="submit" class="btn btn-primary">Guardar cambios</button>
</div>
</form>
</div> </div>
</div> </div>
</div> </div>
</section> </section>
</main><!-- End #main --> </main><!-- End #main -->
<script>
$(document).ready(function () {
$('#cambiar-foto-btn').click(function () {
$('#cambiar-foto-modal').modal('show');
});
});
</script>
<script>
$(document).ready(function() {
$('#guardar-foto-btn').click(function() {
var formData = new FormData($('#cambiar-foto-form')[0]);
$.ajax({
url: '/cambiarFoto',
type: 'POST',
data: formData,
contentType: false,
processData: false,
success: function(data) {
window.location.href = '/perfil';
}
});
});
});
</script>
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or sign in to comment