Commit f92b1e87 by Manuel Ruiz Toribio

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

parents 0a9b0608 e6d12607
...@@ -37,14 +37,25 @@ $routes->match(['get', 'post'], '/loginAjax', [User::class, 'loginAjax']); ...@@ -37,14 +37,25 @@ $routes->match(['get', 'post'], '/loginAjax', [User::class, 'loginAjax']);
$routes->match(['get', 'post'], '/registerAjax', [User::class, 'registerAjax']); $routes->match(['get', 'post'], '/registerAjax', [User::class, 'registerAjax']);
$routes->match(['get'], '/home', [User::class, 'user_ok']); $routes->match(['get'], '/home', [User::class, 'user_ok']);
// Ruta para boorar una receta dada un id
$routes->get('/recipes/delete/(:num)', 'RecipesController::delete/$1');
// Ruta cuando se cierra la sesión
$routes->get('/logout', 'User::logout');
// Ruta para ver una receta
$routes->get('/recipe/(:num)', 'RecipesController::view_recipe/$1');
$routes->get('/recipe/(:num)', 'RecipesController::view_recipe/$1'); $routes->get('/recipe/(:num)', 'RecipesController::view_recipe/$1');
// Ruta para obtener una imagen de una receta dado un id // Ruta para obtener una imagen de una receta dado un id
$routes->get('recipe/image/(:num)', 'RecipesController::show_image/$1'); $routes->get('recipe/image/(:num)', 'RecipesController::show_image/$1');
// Ruta para obtener un nombre de usuario dado un email
$routes->get('username/(:any)', 'User::show_name/$1');
// Rutas para formulario de ingresar recetas // Rutas para formulario de ingresar recetas
$routes->get('/insert_recipe', 'InsertRecipeController::index'); $routes->get('/insert_recipe', 'InsertRecipeController::index', ['filter' => 'user_auth']);
$routes->match(['get', 'post'], '/search_ingredient', 'InsertRecipeController::search_ingredient'); $routes->match(['get', 'post'], '/search_ingredient', 'InsertRecipeController::search_ingredient');
$routes->post('/insert_recipe', 'InsertRecipeController::insert_recipe'); $routes->post('/insert_recipe', 'InsertRecipeController::insert_recipe');
...@@ -53,11 +64,17 @@ $routes->match(['get', 'post'], '/search_recipe', 'RecipesController::search_rec ...@@ -53,11 +64,17 @@ $routes->match(['get', 'post'], '/search_recipe', 'RecipesController::search_rec
$routes->post('filter_recipes', 'RecipesController::get_filtered_recipes'); $routes->post('filter_recipes', 'RecipesController::get_filtered_recipes');
// Ruta para vista "Mis recetas"
$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->get('login','Pages::viewLogin'); $routes->get('login','Pages::viewLogin');
$routes->get('users','User::list'); $routes->get('users','User::list');
$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');
......
...@@ -28,7 +28,7 @@ class InsertRecipeController extends Controller ...@@ -28,7 +28,7 @@ class InsertRecipeController extends Controller
} }
public function insert_recipe() public function insert_recipe()
{ {
// Cargar los modelos necesarios // Cargar los modelos necesarios
$recipeModel = new \App\Models\RecipesModel(); $recipeModel = new \App\Models\RecipesModel();
$recipesIngredientModel = new \App\Models\RecipesIngredientModel(); $recipesIngredientModel = new \App\Models\RecipesIngredientModel();
...@@ -47,6 +47,13 @@ class InsertRecipeController extends Controller ...@@ -47,6 +47,13 @@ class InsertRecipeController extends Controller
$recipeData['photo'] = $photoBlob; $recipeData['photo'] = $photoBlob;
} }
// Obtener el email del usuario de la sesión
$session = session();
$userEmail = $session->get('user')->email;
// Agregar el email del usuario a los datos de la receta
$recipeData['email_user'] = $userEmail;
// Insertar la receta en la tabla 'recipes' // Insertar la receta en la tabla 'recipes'
$recipeId = $recipeModel->insert($recipeData); $recipeId = $recipeModel->insert($recipeData);
...@@ -59,8 +66,9 @@ class InsertRecipeController extends Controller ...@@ -59,8 +66,9 @@ class InsertRecipeController extends Controller
]); ]);
} }
// Redireccionar a la página principal (o cualquier otra página que desees) // Redireccionar a la página principal
return redirect()->to('/home'); return redirect()->to('/home');
} }
} }
...@@ -14,6 +14,13 @@ class RecipesController extends Controller ...@@ -14,6 +14,13 @@ class RecipesController extends Controller
$recipe = $recipesModel->find($recipe_id); $recipe = $recipesModel->find($recipe_id);
$ingredients = $recipesModel->get_recipe_ingredients($recipe_id); $ingredients = $recipesModel->get_recipe_ingredients($recipe_id);
// Obtén el nombre de usuario a partir del correo electrónico
$userModel = new \App\Models\UserModel();
$email = $recipe->email_user;
$user = $userModel->where('email', $email)->first();
$username = $user->username;
$photo = $user->photo;
if ($recipe == null) { if ($recipe == null) {
// Mostrar un mensaje de error si no se encuentra la receta // Mostrar un mensaje de error si no se encuentra la receta
return redirect()->to('/'); return redirect()->to('/');
...@@ -22,10 +29,13 @@ class RecipesController extends Controller ...@@ -22,10 +29,13 @@ class RecipesController extends Controller
$data = [ $data = [
'recipe' => $recipe, 'recipe' => $recipe,
'ingredients' => $ingredients, 'ingredients' => $ingredients,
'username' => $username,
'photoUser' => $photo,
]; ];
return view('templates/header', $data) return view('templates/header', $data)
. view('pages/recipe_view') . view('pages/recipe_view')
. view('pages/recipe_view')
. view('templates/footer'); . view('templates/footer');
} }
...@@ -53,6 +63,29 @@ class RecipesController extends Controller ...@@ -53,6 +63,29 @@ class RecipesController extends Controller
return $this->response->setJSON($recipes); return $this->response->setJSON($recipes);
} }
public function delete($id)
{
$recipeModel = new RecipesModel();
$recipeIngredientModel = new RecipesIngredientModel();
// Primero, borra todas las entradas de la tabla recipes_ingredient
if ($recipeIngredientModel->deleteRelation($id)) {
// Si se eliminaron las relaciones correctamente, borra la receta
if ($recipeModel->deleteRecipe($id)) {
// La receta se eliminó correctamente
return redirect()->to('/users')->with('message', 'Receta eliminada correctamente');
} else {
// Hubo un error al eliminar la receta
return redirect()->back()->with('error', 'No se pudo eliminar la receta');
}
} else {
// Hubo un error al eliminar las relaciones
return redirect()->back()->with('error', 'No se pudieron eliminar las relaciones de ingredientes de la receta');
}
}
// En tu controlador de recetas // En tu controlador de recetas
public function get_filtered_recipes() { public function get_filtered_recipes() {
$recipesModel = new \App\Models\RecipesModel(); $recipesModel = new \App\Models\RecipesModel();
......
...@@ -27,7 +27,8 @@ class User extends BaseController ...@@ -27,7 +27,8 @@ class User extends BaseController
} }
public function loginAjax(){ public function loginAjax()
{
$validation = \Config\Services::validation(); $validation = \Config\Services::validation();
$rules = [ $rules = [
"email" => [ "email" => [
...@@ -77,12 +78,7 @@ class User extends BaseController ...@@ -77,12 +78,7 @@ class User extends BaseController
} }
public function user_ok() public function user_ok()
{ {
$session = session(); return view('templates/header')
$usuario = $session->__get('user');
$data['usuario'] = $usuario;
$userModel = model('UserModel');
return view('templates/header',$data)
. view('pages/home') . view('pages/home')
. view('templates/footer'); . view('templates/footer');
} }
...@@ -90,7 +86,10 @@ class User extends BaseController ...@@ -90,7 +86,10 @@ class User extends BaseController
public function logout() public function logout()
{ {
# To Do. $session = session();
$session->destroy();
return redirect()->to('/login');
} }
public function unauthorized() public function unauthorized()
...@@ -128,10 +127,13 @@ class User extends BaseController ...@@ -128,10 +127,13 @@ class User extends BaseController
$name = $this->request->getVar('username'); $name = $this->request->getVar('username');
$email = $this->request->getVar('email'); $email = $this->request->getVar('email');
$password = $this->request->getVar('password'); $password = $this->request->getVar('password');
$role = $this->request->getVar('rol');
$userData = [ $userData = [
'username' => $name, 'username' => $name,
'email' => $email, 'email' => $email,
'password' => password_hash($password, PASSWORD_DEFAULT), 'password' => password_hash($password, PASSWORD_DEFAULT),
'rol' => $role,
'photo' => null
]; ];
$userModel->saveUser($email, $name, $password); $userModel->saveUser($email, $name, $password);
$newUser = $userModel->authenticate($email, $password); $newUser = $userModel->authenticate($email, $password);
...@@ -164,5 +166,49 @@ class User extends BaseController ...@@ -164,5 +166,49 @@ class User extends BaseController
} }
public function show_name($email)
{
$userModel = new \App\Models\UserModel();
$user = $userModel->find($email);
if ($user) {
return $user->username;
}
return false;
}
public function personalRecipes()
{
return view('templates/header')
. view('pages/userRecipes')
. view('templates/footer');
}
public function myprofile()
{
return view('templates/header')
. view('pages/profile_view')
. view('templates/footer');
}
public function changeProfilePhoto()
{
$session = \Config\Services::session();
$email = $session->get('user')->email;
$userModel = new UserModel();
$photo = $this->request->getFile('photo');
if ($photo->isValid() && !$photo->hasMoved()) {
$photoBlob = file_get_contents($photo->getRealPath());
$data['photo'] = $photoBlob;
$userModel->update($email, $data);
}
return redirect()->to('/perfil');
}
} }
\ No newline at end of file
...@@ -11,7 +11,7 @@ class AdminAuth implements FilterInterface ...@@ -11,7 +11,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')->role & 2) == 0) elseif ((session('user')->rol & 2) == 0)
return redirect()->to(site_url('/unauthorized')); return redirect()->to(site_url('/unauthorized'));
} }
public function after( public function after(
......
...@@ -11,8 +11,6 @@ class UserAuth implements FilterInterface ...@@ -11,8 +11,6 @@ class UserAuth implements FilterInterface
{ {
if (!session('logged_in')) if (!session('logged_in'))
return redirect()->to(site_url('/login')); return redirect()->to(site_url('/login'));
else if ((session('user')->role & 1) == 0)
return redirect()->to(site_url('/unauthorized'));
} }
public function after( public function after(
RequestInterface $request, ResponseInterface $response, RequestInterface $request, ResponseInterface $response,
......
...@@ -30,5 +30,10 @@ class RecipesIngredientModel extends Model ...@@ -30,5 +30,10 @@ class RecipesIngredientModel extends Model
return $this->insert($data); return $this->insert($data);
} }
public function deleteRelation($id_recipe) {
return $this->where('id_recipe', $id_recipe)->delete();
}
} }
\ No newline at end of file
...@@ -11,7 +11,7 @@ class RecipesModel extends Model ...@@ -11,7 +11,7 @@ class RecipesModel 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 = ['id', 'name', 'season', 'origin', 'photo', 'is_vegan', 'description', 'instructions', 'link']; protected $allowedFields = ['id', 'name', 'season', 'origin', 'photo', 'is_vegan', 'description', 'instructions', 'link', 'email_user'];
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 = [];
...@@ -19,7 +19,7 @@ class RecipesModel extends Model ...@@ -19,7 +19,7 @@ class RecipesModel extends Model
protected $skipValidation = false; protected $skipValidation = false;
public function saveRecipe($id, $name, $season, $origin, $photo, $is_vegan, $description, $instructions, $link) public function saveRecipe($id, $name, $season, $origin, $photo, $is_vegan, $description, $instructions, $link, $email_user)
{ {
$data = [ $data = [
'id' => $id, 'id' => $id,
...@@ -31,6 +31,7 @@ class RecipesModel extends Model ...@@ -31,6 +31,7 @@ class RecipesModel extends Model
'description' => $description, 'description' => $description,
'instructions' => $instructions, 'instructions' => $instructions,
'link' => $link, 'link' => $link,
'email_user' => $email_user
]; ];
return $this->insert($data); return $this->insert($data);
} }
...@@ -57,27 +58,9 @@ class RecipesModel extends Model ...@@ -57,27 +58,9 @@ class RecipesModel extends Model
return []; return [];
} }
public function get_filtered_recipes($vegan, $country, $season) { public function deleteRecipe($id) {
$builder = $this->db->table('recipes'); return $this->delete($id);
if ($vegan) {
$builder->where('is_vegan', true);
}
if (!empty($country)) {
$builder->where('origin', $country);
}
if (!empty($season)) {
$builder->where('season', $season);
}
$query = $builder->get();
return $query->getResult();
} }
} }
\ No newline at end of file
...@@ -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']; 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 = [];
......
<main id="main" class="main"> <main id="main" class="main">
......
...@@ -61,7 +61,6 @@ ...@@ -61,7 +61,6 @@
</select> </select>
</div> </div>
</div>
<!-- Opción vegana --> <!-- Opción vegana -->
<div class="form-group col-md-4"> <div class="form-group col-md-4">
...@@ -72,6 +71,9 @@ ...@@ -72,6 +71,9 @@
</div> </div>
</div> </div>
</div>
<!-- Seleccionar ingredientes --> <!-- Seleccionar ingredientes -->
<label>Ingredientes:</label> <label>Ingredientes:</label>
<div class="input-group my-form"> <div class="input-group my-form">
...@@ -111,6 +113,10 @@ ...@@ -111,6 +113,10 @@
</div> </div>
</div> </div>
<!-- Añadir ingrediente -->
<h5>¿No ves tu ingrediente en la lista?
<!-- Seleccionar enlace de video-->
<div class="form-group"> <div class="form-group">
<label for="link">Ingrese el enlace del video:</label> <label for="link">Ingrese el enlace del video:</label>
<input type="text" id="link" name="link" class="form-control" <input type="text" id="link" name="link" class="form-control"
......
<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>
<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>
</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">
</div>
</form>
</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>
</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>
...@@ -76,6 +76,12 @@ function getYoutubeVideoId($url) ...@@ -76,6 +76,12 @@ function getYoutubeVideoId($url)
width: 100%; width: 100%;
height: 100%; height: 100%;
} }
#profile-pic {
border-radius: 10px;
width: 25px;
height: 25px;
}
</style> </style>
<main id="main" class="main"> <main id="main" class="main">
...@@ -94,6 +100,22 @@ function getYoutubeVideoId($url) ...@@ -94,6 +100,22 @@ function getYoutubeVideoId($url)
<?php echo $recipe->description; ?> <?php echo $recipe->description; ?>
</p> </p>
<div class="recipe-header">
<p>Receta subida por:
<b>
<?= $username ?>
<?php if (empty($photoUser)): ?>
<img src="<?= base_url("imagenes/profile.png") ?>" alt="Profile" id="profile-pic">
<?php else: ?>
<img src="data:image/jpeg;base64,<?= base64_encode($photoUser) ?>" alt="Profile"
id="profile-pic">
<?php endif; ?>
</b>
</p>
</div>
<h2>Ingredientes</h2> <h2>Ingredientes</h2>
<ul class="ingredient-list"> <ul class="ingredient-list">
<?php foreach ($ingredients as $ingredient) { ?> <?php foreach ($ingredients as $ingredient) { ?>
......
<main id="main" class="main">
<section class="section dashboard">
<h1>Vista por hacer🤠</h1>
</section>
</main><!-- End #main -->
\ No newline at end of file
<h1>Admin Page</h1> <main id="main" class="main">
<h2>Lista de usuarios</h2>
<!-- LISTA DE USUARIOS --> <section class="section dashboard">
<?php <h2>Usuarios</h2>
if (sizeof($users) > 0) { <!-- LISTA DE USUARIOS -->
<?php
if (sizeof($users) > 0) {
foreach ($users as $row) { foreach ($users as $row) {
echo $row->email . " - "; echo $row->email . " - ";
echo $row->username . " - "; echo $row->username . " - ";
echo $row->password . " "; echo $row->password . " ";
echo "<br/>"; echo "<br/>";
} }
} else { } else {
echo "No user"; echo "No user";
} }
?> ?>
<h2> Recetas </h2> <h2> Recetas </h2>
<!-- LISTA DE RECETAS --> <!-- LISTA DE RECETAS -->
<?php <?php
$recipesModel = new \App\Models\RecipesModel(); $recipesModel = new \App\Models\RecipesModel();
$recipes = $recipesModel->findAll(); $recipes = $recipesModel->findAll();
?> ?>
<table class="table"> <table class="table">
<thead> <thead>
<tr> <tr>
<th>ID</th> <th>ID</th>
...@@ -66,20 +68,23 @@ $recipes = $recipesModel->findAll(); ...@@ -66,20 +68,23 @@ $recipes = $recipesModel->findAll();
<?= mb_strimwidth($row->instructions, 0, 10, "..."); ?> <?= mb_strimwidth($row->instructions, 0, 10, "..."); ?>
</td> </td>
<td> <td>
<?= $row->link; ?> <?= mb_strimwidth($row->link, 0, 50, "..."); ?>
</td> </td>
<td> <td>
<button class="btn btn-danger" onclick="deleteRecipe(<?= $row->id; ?>)">Borrar</button> <button class="btn btn-danger" onclick="window.location.href='<?php echo base_url('/recipes/delete/' . $row->id); ?>'">Borrar</button>
</td> </td>
</tr> </tr>
<?php endforeach; ?> <?php endforeach; ?>
</tbody> </tbody>
</table> </table>
<script> <script>
function borrarReceta(recipeId) { function borrarReceta(recipeId) {
//AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAa
} }
</script> </script>
\ No newline at end of file </section>
</main><!-- End #main -->
\ No newline at end of file
...@@ -266,6 +266,38 @@ body { ...@@ -266,6 +266,38 @@ body {
width: 32%; width: 32%;
} }
.form-group {
margin-bottom: 20px;
}
.form-row {
display: flex;
justify-content: space-between;
align-items: center;
flex-wrap: wrap;
margin-bottom: 20px;
}
.form-row > .form-group {
flex: 1;
padding: 0 15px;
}
.form-row > .form-group:first-child {
padding-left: 0;
}
.form-row > .form-group:last-child {
padding-right: 0;
}
.label-centered {
display: flex;
justify-content: center;
align-items: center;
flex-direction: column;
}
/* Estilos para el chip vegano */ /* Estilos para el chip vegano */
.vegan-chip { .vegan-chip {
......
...@@ -367,90 +367,59 @@ ...@@ -367,90 +367,59 @@
}, 200); }, 200);
} }
/* function updateRecipeList() {
// Obtén el estado de los checkboxes
var vegan = document.getElementById("checkboxOne").checked;
var countries = ['India', 'Francia', 'China', 'México', 'España', 'Japón']; /*
var country = ''; function search_recipe(query) {
for (var i = 0; i < countries.length; i++) { if (query.trim() === '') {
if (document.getElementById("checkbox" + (i + 4)).checked) { document.querySelector('#recipe_dropdown').style.display = 'none';
country = countries[i]; return;
break;
}
}
var seasons = ['Invierno', 'Primavera', 'Verano', 'Otoño'];
var season = '';
for (var i = 0; i < seasons.length; i++) {
if (document.getElementById("checkbox" + (i + 10)).checked) {
season = seasons[i];
break;
}
} }
// Enviar una solicitud AJAX a tu controlador de recetas
var xhr = new XMLHttpRequest(); var xhr = new XMLHttpRequest();
xhr.open("POST", "/recipes/get_filtered_recipes", true); xhr.open('POST', '/search_recipe', true);
xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
xhr.onreadystatechange = function() { xhr.setRequestHeader('X-Requested-With', 'XMLHttpRequest');
if (this.readyState === 4 && this.status === 200) { xhr.onreadystatechange = function () {
// Actualizar el contenido de la página con las recetas filtradas if (xhr.readyState === 4 && xhr.status === 200) {
var recipes = JSON.parse(this.responseText); try {
var recipeList = document.getElementById("recipe-list"); var searchResults = JSON.parse(xhr.responseText);
recipeList.innerHTML = ''; // Limpiar la lista de recetas const recipeList = document.querySelector('#recipe_list');
recipeList.innerHTML = '';
if (searchResults.length > 0) {
document.querySelector('#recipe_dropdown').style.display = 'block';
} else {
document.querySelector('#recipe_dropdown').style.display = 'none';
}
searchResults.forEach((recipe) => {
const listItem = document.createElement('li');
listItem.classList.add('recipe-item');
for (var i = 0; i < recipes.length; i++) { const nameElement = document.createElement('span');
var recipeHTML = generateRecipeHTML(recipes[i]); nameElement.textContent = recipe.name;
recipeList.innerHTML += recipeHTML; listItem.appendChild(nameElement);
recipeList.appendChild(listItem);
});
} catch (error) {
console.error('Error parsing JSON response:', error);
} }
} else if (xhr.readyState === 4) {
console.error('Error in request:', xhr.status, xhr.statusText);
} }
}; };
xhr.send("vegan=" + vegan + "&country=" + country + "&season=" + season);
} xhr.send('query=' + encodeURIComponent(query));
}
function generateRecipeHTML(recipe) {
var recipeHTML = ` document.addEventListener('click', function (event) {
<div class="card info-card sales-card" if (!event.target.closest('.search-bar')) {
onclick="window.location.href='<?php echo base_url('recipe/' . $row->id); ?>'"> document.querySelector('#recipe_dropdown').style.display = 'none';
<a href="<?php echo base_url('recipe/' . $row->id); ?>"> }
</a> });
<div class="row flex-nowrap"> */
<div class="col-lg-3 col-md-4 col-sm-12 imagen-container">
<img src="<?php echo base_url('recipe/image/' . $row->id); ?>" alt=""
class="img-fluid rounded-start">
</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">
<?php echo $row->name; ?> <span>|
<?php echo $row->origin; ?>
</span>
</h5>
<!--ingredientes-->
<?php foreach ($ingredients as $ingredient) { ?>
<div class="chip" title="Cantidad: <?php echo $ingredient->amount; ?>">
<img src="imagenes/ingredientes/<?php echo $ingredient->icon; ?>">
<b style="font-size: 14px">
<?php echo $ingredient->name; ?>
</b>
</div>
<?php } ?>
<!--fin ingredientes-->
</div>
</div>
</div>
</div>`;
return recipeHTML;
} */
})(); })();
\ No newline at end of file
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