Commit e7bb7bd9 by Manuel Ruiz Toribio

Merge remote-tracking branch 'origin/developJC' into developmanu

parents d073734b 5f3f5bcf
......@@ -68,15 +68,19 @@ $routes->get('/myrecipes', 'User::personalRecipes', ['filter' => 'user_auth']);
// Ruta para vista "Mi perfil"
$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('users','User::list');
$routes->get('users', 'User::list', ['filter' => 'admin_auth']);
$routes->get('home','Pages::prueba');
$routes->get('(:segment)', 'Home::index');
// Ruta para la búsqueda de recetas
$routes->post('/filter_recipes', 'RecipesController::filter_recipes');
$routes->match(['get', 'post'], '/filterRecipes', 'RecipesController::filterRecipes');
......
......@@ -9,11 +9,12 @@ class InsertRecipeController extends Controller
public function index()
{
return view('templates/header')
.view('pages/insertRecipe')
. view('pages/insertRecipe')
. view('templates/footer');
}
public function search_ingredient() {
public function search_ingredient()
{
// Obtener la consulta de búsqueda desde el formulario
$query = $this->request->getVar('query');
......@@ -28,7 +29,7 @@ class InsertRecipeController extends Controller
}
public function insert_recipe()
{
{
// Cargar los modelos necesarios
$recipeModel = new \App\Models\RecipesModel();
$recipesIngredientModel = new \App\Models\RecipesIngredientModel();
......@@ -68,7 +69,7 @@ class InsertRecipeController extends Controller
// Redireccionar a la página principal
return redirect()->to('/home');
}
}
}
\ No newline at end of file
......@@ -192,23 +192,35 @@ class User extends BaseController
. view('templates/footer');
}
public function changeProfilePhoto()
public function editProfile()
{
$session = \Config\Services::session();
$email = $session->get('user')->email;
$userModel = new UserModel();
$session = session();
$userModel = new \App\Models\UserModel();
if($this->request->getMethod() === 'post') {
$username = $this->request->getPost('username');
// Manejar el archivo de imagen
$photo = $this->request->getFile('photo');
$photoBlob = null;
if ($photo->isValid() && !$photo->hasMoved()) {
$photoBlob = file_get_contents($photo->getRealPath());
$data['photo'] = $photoBlob;
$userModel->update($email, $data);
$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);
}
return redirect()->to('/perfil');
}
// 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'
}
$data['user'] = $session->get('user');
return view('edit_profile', $data);
}
}
\ No newline at end of file
......@@ -12,7 +12,7 @@ class AdminAuth implements FilterInterface
if (!session('logged_in'))
return redirect()->to(site_url('/login'));
elseif ((session('user')->rol & 2) == 0)
return redirect()->to(site_url('/unauthorized'));
return redirect()->to(site_url('/login'));
}
public function after(
RequestInterface $request, ResponseInterface $response,
......
......@@ -11,7 +11,7 @@ class UserModel extends Model
protected $returnType = 'object'; # 'object' or 'array'
protected $useSoftDeletes = false; # true if you expect to recover data
# 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
# Do not use validations rules (for the time being...)
protected $validationRules = [];
......@@ -36,5 +36,17 @@ class UserModel extends Model
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">
<div class="pagetitle">
<h1>Recetas</h1>
<nav>
......@@ -11,8 +10,8 @@
</nav>
</div><!-- End Page Title -->
<section class="section dashboard" id="recipeSection">
<div id="recipeCards">
<section class="section dashboard">
<?php
$recipesModel = new \App\Models\RecipesModel();
$recipes = $recipesModel->findAll();
......@@ -22,6 +21,8 @@
$ingredients = $recipesModel->get_recipe_ingredients($row->id);
?>
<!-- Inicio de la tarjeta de la receta -->
<div class="card info-card sales-card"
onclick="window.location.href='<?php echo base_url('recipe/' . $row->id); ?>'">
<a href="<?php echo base_url('recipe/' . $row->id); ?>">
......@@ -33,7 +34,16 @@
</div>
<div class="col-lg-9 col-md-8 col-sm-12">
<div class="filter">
<a class="icon" href="#" data-bs-toggle="dropdown"><i class="bi bi-three-dots"></i></a>
<ul class="dropdown-menu dropdown-menu-end dropdown-menu-arrow">
<li class="dropdown-header text-start">
<h6>Opciones</h6>
</li>
<li><a class="dropdown-item" href="#">Guardar</a></li>
<li><a class="dropdown-item" href="#">Compartir</a></li>
</ul>
</div>
<div class="card-body">
<h5 class="card-title">
......@@ -61,7 +71,9 @@
}
}
?>
</div>
</section>
</main><!-- End #main -->
......
<main id="main" class="main">
<section class="section dashboard">
<?php $session = session(); ?>
<div style="display: flex; flex-direction: row; align-items: center;">
<?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"
style="width: 100px; height: 100px; object-fit: cover; border-radius: 50%;">
<?php else: ?>
<img src="<?= base_url("imagenes/profile.png") ?>"
style="width: 100px; height: 100px; object-fit: cover; border-radius: 50%;">
<?php endif; ?>
<div style="display: flex; flex-direction: column; margin-left: 20px;">
<span style="font-size: 18px; font-weight: bold;">Nombre de usuario:</span>
<span style="font-size: 16px;">
<?= $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>
<style>
.profile-container {
max-width: 500px;
margin: auto;
}
.profile-photo {
max-width: 200px;
display: block;
margin: 10px 0;
}
.save-btn-container {
margin-top: 20px;
}
</style>
<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">
<div class="modal-dialog" role="document">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title">Cambiar foto de perfil</h5>
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
<span aria-hidden="true">&times;</span>
</button>
<main id="main" class="main">
<section class="section dashboard">
<?php
$session = session();
$user = $session->get('user');
?>
<div class="container profile-container">
<div class="card">
<div class="card-header">
Editar usuario
</div>
<div class="card-body">
<form method="post" enctype="multipart/form-data">
<div class="form-group">
<label for="email">Email</label>
<input type="email" class="form-control" id="email" name="email" value="<?= $user->email ?>" readonly>
</div>
<div class="modal-body">
<form id="cambiar-foto-form" enctype="multipart/form-data">
<div class="form-group">
<label for="foto">Selecciona una foto:</label>
<input type="file" class="form-control-file" id="foto" name="foto">
<label for="username">Nombre de usuario</label>
<input type="text" class="form-control" id="username" name="username" value="<?= $user->username ?>">
</div>
</form>
<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="modal-footer">
<button type="button" class="btn btn-secondary" data-dismiss="modal">Cancelar</button>
<button type="button" class="btn btn-primary" id="guardar-foto-btn">Guardar</button>
<div class="text-center save-btn-container">
<button type="submit" class="btn btn-primary">Guardar cambios</button>
</div>
</form>
</div>
</div>
</div>
</section>
</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>
......@@ -96,7 +96,6 @@
<img src="<?= base_url("imagenes/profile.png") ?>" alt="Profile" class="rounded-circle">
<?php endif; ?>
<span class="d-none d-md-block dropdown-toggle ps-2">
</span>
......
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