Skip to content
Toggle navigation
P
Projects
G
Groups
S
Snippets
Help
Juan Montilla
/
TBW2223_equipo12
This project
Loading...
Sign in
Toggle navigation
Go to a project
Project
Repository
Issues
0
Merge Requests
0
Pipelines
Wiki
Snippets
Settings
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Commit
e7bb7bd9
authored
May 16, 2023
by
Manuel Ruiz Toribio
Browse files
Options
_('Browse Files')
Download
Plain Diff
Merge remote-tracking branch 'origin/developJC' into developmanu
parents
d073734b
5f3f5bcf
Hide whitespace changes
Inline
Side-by-side
Showing
8 changed files
with
195 additions
and
182 deletions
app/Config/Routes.php
app/Controllers/InsertRecipeController.php
app/Controllers/User.php
app/Filters/AdminAuth.php
app/Models/UserModel.php
app/Views/pages/home.php
app/Views/pages/profile_view.php
app/Views/templates/header.php
app/Config/Routes.php
View file @
e7bb7bd9
...
...
@@ -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'
);
...
...
app/Controllers/InsertRecipeController.php
View file @
e7bb7bd9
...
...
@@ -9,66 +9,67 @@ 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'
);
// Cargar el modelo de ingredientes (si no lo has hecho)
$ingredientModel
=
new
\App\Models\IngredientModel
();
// Buscar ingredientes en la base de datos que coincidan con la consulta
$ingredients
=
$ingredientModel
->
search_ingredient
(
$query
);
// Devolver los ingredientes coincidentes en formato JSON
return
$this
->
response
->
setJSON
(
$ingredients
);
}
public
function
insert_recipe
()
{
// Cargar los modelos necesarios
$recipeModel
=
new
\App\Models\RecipesModel
();
$recipesIngredientModel
=
new
\App\Models\RecipesIngredientModel
();
// Obtener los datos del formulario
$recipeData
=
$this
->
request
->
getPost
();
$selectedIngredients
=
json_decode
(
$recipeData
[
'selected_ingredients'
],
true
);
// Eliminar el elemento 'selected_ingredients' de los datos de la receta
unset
(
$recipeData
[
'selected_ingredients'
]);
// Manejar el archivo de imagen
$photo
=
$this
->
request
->
getFile
(
'photo'
);
if
(
$photo
->
isValid
()
&&
!
$photo
->
hasMoved
())
{
$photoBlob
=
file_get_contents
(
$photo
->
getRealPath
());
$recipeData
[
'photo'
]
=
$photoBlob
;
}
{
// Cargar los modelos necesarios
$recipeModel
=
new
\App\Models\RecipesModel
();
$recipesIngredientModel
=
new
\App\Models\RecipesIngredientModel
();
// Obtener el email del usuario de la sesión
$session
=
session
();
$userEmail
=
$session
->
get
(
'user'
)
->
email
;
// Obtener los datos del formulario
$recipeData
=
$this
->
request
->
getPost
();
$selectedIngredients
=
json_decode
(
$recipeData
[
'selected_ingredients'
],
true
)
;
// Agregar el email del usuario a
los datos de la receta
$recipeData
[
'email_user'
]
=
$userEmail
;
// Eliminar el elemento 'selected_ingredients' de
los datos de la receta
unset
(
$recipeData
[
'selected_ingredients'
])
;
// Insertar la receta en la tabla 'recipes'
$recipeId
=
$recipeModel
->
insert
(
$recipeData
);
// Manejar el archivo de imagen
$photo
=
$this
->
request
->
getFile
(
'photo'
);
if
(
$photo
->
isValid
()
&&
!
$photo
->
hasMoved
())
{
$photoBlob
=
file_get_contents
(
$photo
->
getRealPath
());
$recipeData
[
'photo'
]
=
$photoBlob
;
}
// Insertar los ingredientes seleccionados y sus cantidades en la tabla 'recipes_ingredient'
foreach
(
$selectedIngredients
as
$ingredient
)
{
$recipesIngredientModel
->
insert
([
'id_recipe'
=>
$recipeId
,
'id_ingredient'
=>
$ingredient
[
'id'
],
'amount'
=>
$ingredient
[
'amount'
]
]);
}
// 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
;
// Redireccionar a la página principal
return
redirect
()
->
to
(
'/home'
);
}
// Insertar la receta en la tabla 'recipes'
$recipeId
=
$recipeModel
->
insert
(
$recipeData
);
// Insertar los ingredientes seleccionados y sus cantidades en la tabla 'recipes_ingredient'
foreach
(
$selectedIngredients
as
$ingredient
)
{
$recipesIngredientModel
->
insert
([
'id_recipe'
=>
$recipeId
,
'id_ingredient'
=>
$ingredient
[
'id'
],
'amount'
=>
$ingredient
[
'amount'
]
]);
}
// Redireccionar a la página principal
return
redirect
()
->
to
(
'/home'
);
}
}
}
\ No newline at end of file
app/Controllers/User.php
View file @
e7bb7bd9
...
...
@@ -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
();
$photo
=
$this
->
request
->
getFile
(
'photo'
);
if
(
$photo
->
isValid
()
&&
!
$photo
->
hasMoved
())
{
$photoBlob
=
file_get_contents
(
$photo
->
getRealPath
());
$data
[
'photo'
]
=
$photoBlob
;
$userModel
->
update
(
$email
,
$data
);
$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
());
$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
app/Filters/AdminAuth.php
View file @
e7bb7bd9
...
...
@@ -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
,
...
...
app/Models/UserModel.php
View file @
e7bb7bd9
...
...
@@ -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
app/Views/pages/home.php
View file @
e7bb7bd9
<main
id=
"main"
class=
"main"
>
<div
class=
"pagetitle"
>
<h1>
Recetas
</h1>
<nav>
...
...
@@ -11,57 +10,70 @@
</nav>
</div>
<!-- End Page Title -->
<section
class=
"section dashboard"
id=
"recipeSection"
>
<div
id=
"recipeCards"
>
<?php
$recipesModel
=
new
\App\Models\RecipesModel
();
$recipes
=
$recipesModel
->
findAll
();
if
(
sizeof
(
$recipes
)
>
0
)
{
foreach
(
$recipes
as
$row
)
{
$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
);
?>
"
>
</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"
>
<section
class=
"section dashboard"
>
<?php
$recipesModel
=
new
\App\Models\RecipesModel
();
$recipes
=
$recipesModel
->
findAll
();
if
(
sizeof
(
$recipes
)
>
0
)
{
foreach
(
$recipes
as
$row
)
{
$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
);
?>
"
>
</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=
"col-lg-9 col-md-8 col-sm-12"
>
<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
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>
<!-- Fin de la tarjeta de la receta -->
<?php
}
<!-- Fin de la tarjeta de la receta -->
<?php
}
?>
</div>
}
?>
</section>
</main>
<!-- End #main -->
...
...
app/Views/pages/profile_view.php
View file @
e7bb7bd9
<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"
>
×
</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>
<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=
"form-group"
>
<label
for=
"username"
>
Nombre de usuario
</label>
<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>
</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>
app/Views/templates/header.php
View file @
e7bb7bd9
...
...
@@ -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>
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment