Universidad Politécnica de Madrid: Desarrollo de Un Sistema Web para La Gestión de Imágenes Y Álbumes
Universidad Politécnica de Madrid: Desarrollo de Un Sistema Web para La Gestión de Imágenes Y Álbumes
Universidad Politécnica de Madrid: Desarrollo de Un Sistema Web para La Gestión de Imágenes Y Álbumes
2017
1
DESARROLLO DE UN SISTEMA WEB PARA LA GESTIÓN DE
IMÁGENES Y ÁLBUMES
DESARROLLO DE UN SISTEMA WEB PARA LA GESTIÓN DE
IMÁGENES Y ÁLBUMES
Resumen
Este Trabajo de Fin de Grado tiene como intención llevar a cabo el desarrollo de un
sistema web para la gestión de imágenes y álbumes utilizando el framework web
Laravel (desarrollado en PHP) junto con otras tecnologías básicas del desarrollo web:
HTML5, CSS3 y Javascript.
El objetivo principal del proyecto es realizar el sistema web mencionado a medida para
un cliente, que pretende utilizar este sistema como página de presentación profesional.
En este documento se explican las diferentes tecnologías utilizadas y las fases seguidas
durante el desarrollo del proyecto, incluyendo etapas como la documentación de
requisitos, el diseño de diagramas para el desarrollo del sistema y la puesta en
producción del proyecto, entre otras.
The main goal of this Project consists in developing a custom web system for a client,
who has the intention to use this web as a professional portfolio.
In this document are explained the different used technologies besides the phases of the
Project, starting with the requirements documentation, also the design of the diagrams
for the system development, the design of the user interfaces and the deployment.
Finally, conclusions will be exposed and also future projects and improvements.
4
DESARROLLO DE UN SISTEMA WEB PARA LA GESTIÓN DE
IMÁGENES Y ÁLBUMES
Tabla de contenido
1. Introducción.......................................................................................................9
1.1 Motivación....................................................................................................................9
1.2 Objetivos.......................................................................................................................9
2. HERRAMIENTAS Y TECNOLOGÍAS......................................................................10
2.1 Lenguajes.....................................................................................................................10
2.1.1 PHP...........................................................................................................................10
2.1.2 Javascript..................................................................................................................11
2.1.3 HTML5......................................................................................................................11
2.1.4 CSS3..........................................................................................................................11
2.2 Frameworks y librerías................................................................................................12
2.2.1 Laravel......................................................................................................................12
2.2.2 jQuery.......................................................................................................................36
2.2.3 Bootstrap..................................................................................................................36
2.3 Otras herramientas......................................................................................................36
2.3.1 PhpStorm..................................................................................................................36
2.3.2 MAMP.......................................................................................................................37
2.3.3 MySQL.......................................................................................................................37
2.3.4 Navegadores.............................................................................................................38
2.3.5 Git.............................................................................................................................38
2.3.6 Composer.................................................................................................................39
2.3.7 Masonry....................................................................................................................39
3. Análisis Funcional.............................................................................................40
3.1. Documento de Requisitos...........................................................................................40
3.2 Casos de Uso................................................................................................................43
3.2.1 Definición y anotación..............................................................................................43
3.2.2 Actores......................................................................................................................43
3.2.3 Diagramas de casos de uso.......................................................................................44
3.2.4 Casos de Uso extendidos..........................................................................................45
3.3 Modelo Entidad-Relación............................................................................................55
4 Diseño de la aplicación..........................................................................................56
4.1 Diagramas de flujo......................................................................................................56
4.1.1 Autenticarse en el sistema (accede al panel de administración).............................57
4.1.2 Subir una imagen......................................................................................................58
4.1.3 Editar una imagen.....................................................................................................59
4.1.4 Borrar una imagen....................................................................................................60
4.1.5 Editar un álbum........................................................................................................62
4.1.6 Borrar un álbum........................................................................................................63
4.2. Diagrama de clases.....................................................................................................64
4.3. Diagramas de secuencia.............................................................................................67
4.3.1 Registrarse en el sistema..........................................................................................67
4.3.2 Autenticarse en el sistema........................................................................................68
4.3.3 Subir una foto...........................................................................................................69
4.3.4 Borrar una foto.........................................................................................................70
4.3.5 Borrar un álbum........................................................................................................71
4.3.6 Editar una imagen.....................................................................................................72
7
DESARROLLO DE UN SISTEMA WEB PARA LA GESTIÓN DE
IMÁGENES Y ÁLBUMES
Índice de tablas
Tabla 1 - Atributos de Schema Builder...........................................................................23
Tabla 2 - Lista de requisitos............................................................................................40
Tabla 3 - Caso de uso autenticarse en el sistema............................................................45
Tabla 4 - Caso de uso subir una imagen..........................................................................46
Tabla 5 - Caso de uso crear un álbum.............................................................................47
Tabla 6 - Caso de uso editar una imagen.........................................................................48
Tabla 7 - Caso de uso editar un álbum............................................................................49
Tabla 8 - Caso de uso borrar una imagen........................................................................50
Tabla 9 - Caso de uso borrar un álbum...........................................................................51
Tabla 10 - Caso de uso filtrar una imagen.......................................................................52
Tabla 11 - Caso de uso registrarse...................................................................................53
Tabla 12 - Caso de uso identificarse en el sistema..........................................................54
8
DESARROLLO DE UN SISTEMA WEB PARA LA GESTIÓN DE
IMÁGENES Y ÁLBUMES
1. Introducción
1.1 Motivación
Internet es uno de los mercados más importantes en la actualidad. Para las empresas, es
muy importante tener buena presencia en la web, ya que ayuda a reforzar el aspecto de
una empresa y su seriedad, además de mejorar su publicidad.
El proyecto llevado a cabo surge por la necesidad de un cliente para actualizar su página
web empresarial y mejorar su imagen. Debido a que este cliente trabaja en el mundo de
la moda, su portfolio se basa en galerías de imágenes. Para ello, se ha desarrollado una
página web para la gestión de imágenes y álbumes.
1.2 Objetivos
Este proyecto cuenta con múltiples objetivos, tanto personales como profesionales.
9
DESARROLLO DE UN SISTEMA WEB PARA LA GESTIÓN DE
IMÁGENES
tecnologías Web. Es importante además,Y ÁLBUMES
desarrollar proyectos de alcance real para
ganar experiencia en estas tecnologías, por lo que este proyecto lo he considerado muy
completo para todos mis objetivos.
2. HERRAMIENTAS Y TECNOLOGÍAS
2.1 Lenguajes
2.1.1 PHP
PHP cuenta con una gran comunidad a su espalda, siendo un lenguaje maduro que
cuenta con una gran cantidad de información, fácil de encontrar, tanto en inglés como
en español. Es uno de los lenguajes más utilizados para desarrollar páginas web que
necesiten servicio del lado del servidor. Páginas como Wikipedia, Yahoo! o Facebook
han sido desarrolladas con PHP.
10
DESARROLLO DE UN SISTEMA WEB PARA LA GESTIÓN DE
IMÁGENES Y ÁLBUMES
2.1.2 Javascript
2.1.3 HTML5
HTML5 es la última versión del estándar, la quinta revisión de HTML. En esta última
versión se han añadido una serie de nuevos elementos y atributos para adaptarse a las
páginas web actuales, como puedan ser las etiquetas: <header> para destacar la
cabecera de una web, <nav> para definir el menú de navegación de una web, o
<video> para definir un elemento multimedia para reproducir un vídeo, entre otros.
Además, añade una serie de cambios en la semántica básica que tenía HTML hasta su
versión 4.
Esta es la versión de HTML utilizada para este proyecto. Para ejecutarlo se necesitan
navegadores actuales y se ha de tener en cuenta que no todos los navegadores soportan
todas las etiquetas nuevas.
2.1.4 CSS3
11
DESARROLLO DE UN SISTEMA WEB PARA LA GESTIÓN DE
diseño de una página webIMÁGENES Y ÁLBUMES
o para diseñar interfaces de usuario escritas en HTML. La
última versión de CSS es la versión 3, que es la utilizada en este documento.
CSS está diseñado principalmente para estructurar mejor el desarrollo de páginas web,
pudiendo separar el contenido del documento de los estilos del documento.
CSS cuenta con su propia sintaxis, y se basa en herencia en cascada: esto quiere decir
que si se definen unas propiedades a un elemento padre, también los hijos llevarán estas
propiedades.
Algunos ejemplos de CSS podrían ser el cambio de colores de fuentes, uso de sombras,
degradados, etc.
Una funcionalidad muy buena de CSS son los media queries, puntos de ruptura para
diferenciar estilos dependiendo del dispositivo que se vaya a utilizar (cambia por el
tamaño de la pantalla). A este desarrollo se le conoce como responsive design, o diseño
adaptativo.
2.2.1 Laravel
12
DESARROLLO DE UN SISTEMA WEB PARA LA GESTIÓN DE
IMÁGENES
Gran parte de Laravel está formado porYdependencias
ÁLBUMES de otros sistemas, como
Simfony, por lo que su desarrollo es dependiente de estas dependencias.
Características
Laravel incluye muchas funcionalidades que facilitan al usuario su trabajo, como
puedan ser:
13
DESARROLLO DE UN SISTEMA WEB PARA LA GESTIÓN DE
IMÁGENES
Fue desarrollado por Taylor Otwell, Y ÁLBUMES
intentando mostrar una alternativa más
completa respecto a otros frameworks del mercado. Su primer lanzamiento fue el 9
de junio de 2011. En la actualidad, Laravel es uno de los frameworks web más
utilizados, contando con una gran comunidad creciente. La versión actual de
Laravel, la utilizada en este proyecto, es la versión 5.3, lanzada el 23 de agosto de
2016.
2.2.1.1 Artisan
Artisan es el interfaz de línea de comandos de Laravel. Cuenta con una importante lista
de comandos muy útiles para el desarrollo de una aplicación Laravel.
Crear un controlador:
php artisan make:controller <nombre del controlador>
Crear un modelo
php artisan make:model <nombre del modelo>
Laravel cuenta con un sistema de rutas. Esto es, simplemente, una serie de archivos en
los que se definen las diferentes direcciones que va a tener una página web. Por
ejemplo:
Laravel 5.3 cuenta con una actualización para este sistema de rutas. En el sistema
actual, las rutas se dividen dependiendo de si serán rutas para las API, para la web o
para la consola, definiéndose en los archivos api.php, web.php o console.php
respectivamente. Todos estos archivos se encuentran en la carpeta Routes.
La definición de rutas es simple. Para crear una nueva ruta habrá que utilizar la
siguiente sintaxis:
Por ejemplo:
15
Esto hará que, cuando un usuario acceda a la ruta /foo, vea en el navegador el texto
‘Hello World’.
A una ruta, se le puede pasar una función definida en el mismo método, o una función
definida en un controlador. Por ejemplo:
Al definir la URI de una ruta, también podemos pasarle un parámetro, como pueda ser
un número que será el identificador de un objeto. Por ejemplo:
Por comodidad, se han definido todas las rutas en el archivo web.php (tanto las rutas de
la web como las rutas de la API).
¿Qué es un ORM?
Eloquent
Eloquent relaciona cada tabla de la base de datos con su “modelo” correspondiente, que
es utilizado para interactuar con esta tabla. Estos modelos permiten hacer consultas a la
taba, al igual que insertar nuevos registros a la tabla.
Las tablas de la base de datos se definen mediante las migraciones, que se explicarán a
continuación, y el modelo correspondiente.
2.2.1.3.1 Modelos
Eloquent utiliza los Modelos para recibir o enviar información a la base de datos.
Para generar un Modelo, es necesario utilizar la consola de comandos. Para ello, se debe
utilizar el siguiente comando: php artisan make:model <nombre-del-modelo>
. El archivo generado se guardará en el directorio app/Models, excepto el Modelo User,
17
DESARROLLO DE UN SISTEMA WEB PARA LA GESTIÓN DE
IMÁGENES
que viene definido por defecto Y ÁLBUMES
al iniciar un proyecto de Laravel, y se encuentra en el
directorio app/ Por ejemplo, para generar el Modelo Usuario:
<?php
namespace App;
use Laravel\Passport\HasApiTokens;
use Illuminate\Notifications\Notifiable;
use Illuminate\Foundation\Auth\User as Authenticatable;
/**
The attributes that are mass assignable.
*
@var array
*/
protected $fillable = [
'name', 'email', 'password',
];
/**
The attributes that should be hidden for arrays.
*
@var array
*/
protected $hidden = [
'password', 'remember_token',
];
}
18
DESARROLLO DE UN SISTEMA WEB PARA LA GESTIÓN DE
IMÁGENES Y ÁLBUMES
Con el método all(), se recuperan todos los registros existentes en el modelo Flight. En
el ejemplo, después de recuperar todos los registros, imprime los nombres de cada
registro.
Además de poder recuperar todos los registros de un modelo, se pueden hacer consultas
para realizar una búsqueda selectiva. Por ejemplo, si se quiere recuperar un único
registro del modelo, se puede usar el método find($parámetro-de-búsqueda), siendo el
parámetro de búsqueda, por ejemplo, el identificador del registro:
Para crear un nuevo registro, se debe generar una nueva instancia del modelo. Por
ejemplo:
19
En esta ejemplo se ha creado una instancia de la clase Flight (nuestro modelo). A
continuación, hemos asignado el atributo name con el atributo sacado de la petición, y
por último, hemos guardado el registro.
La actualización es similar a la creación de un registro, solo que en vez de crear una
instancia, se obtiene del modelo el registro que se quiere actualizar. Por ejemplo:
Existen más métodos para realizar las funciones anteriores, además de contar con
métodos para realizar más funcionalidades, pero estas son las funciones básicas.
2.2.1.4 Migraciones
Para crear una migración, debemos usar la consola de comandos y el comando Artisan
(sección 2.1.1.4). Por ejemplo:
A este comando le podemos añadir diferentes parámetros, como --table o --create, que
añadirán distintas funcionalidades a nuestra migración (como crear una plantilla de
trabajo básica).
El Schema Builder
Para crear una nueva tabla, se debe utilizar el método Schema::create, como podemos
ver en la figura anterior.
Schema builder cuenta con una amplia variedad de tipos posibles para crear un atributo.
Algunos de los tipos son:
Comando Descripción
$table->boolean('confirmed'); Equivalente a booleano en una tabla
$table->date('created_at'); Equivalente a DATE en una tabla
$table->string('email'); Equivalente a VARCHAR en una tabla
$table->increments('id’); Para incrementar un ID en la tabla (clave
primaria)
$table->float('equivalente a float'); Equivalente a float en una tabla
$table->integer('votes'); Equivalente a Integer en una tabla
$table->timestamps(); Añade las columas created_at y
updated_at
$table->enum('choices', Equivalente a ENUM en una tabla
[‘foo’,’bar’]);
Estos son algunos de los tipos más típicos, se puede consultar la lista de todos los tipos
posibles en la Documentación de Laravel, en el siguiente enlace:
https://laravel.com/docs/5.0/schema#adding-columns
Las migraciones van de la mano de los Seeders, técnica aportada por Laravel que
consta de una serie de archivos para poblar la base de datos de manera sencilla y rápida.
1. Crear datos de prueba para trabajar con la aplicación web durante su desarrollo.
2. Configurar el estado de las tablas a las que accederá nuestra aplicación web.
Con pocas líneas de código podemos poblar una base de datos entera con multitud de
registros con distintos valores en cuestión de segundos, gracias a los Factories de
Laravel y al componente Faker.
Faker es el componente que se encarga de generar los datos de prueba para poblar
nuestra base de datos (como puedan ser nombres y apellidos aleatorios).
Por ejemplo, para crear 50 usuarios y generar una relación para cada usuario:
24
DESARROLLO DE UN SISTEMA WEB PARA LA GESTIÓN DE
IMÁGENES Y ÁLBUMES
2.2.1.5 Middleware
En este ejemplo, solo permitiremos dar acceso a nuestra ruta a los usuarios que su edad
sea mayor que 200. Si por el contrario, tuvieran menos años, serían redireccionados a la
ruta principal de nuestra página.
25
Para utilizar un Middleware, es necesario incluirlo en el archivo app/Http/Kernel.php,
en el listado de Middlewares. Una vez haya sido definido el Middleware en el listado de
middlewares del archivo Kernel.php, se definirá en que rutas se utilizará cada
Middleware. Por ejemplo, para acceder al perfil del administrador, es necesario
autenticarse. Para ello, utilizaremos el Middleware de autenticación(auth):
Laravel incluye por defecto una serie de Middlewares. Entre ellos, y uno de los
Middlewares más comunes en las páginas web, es el Middleware de autenticación.
DESARROLLO DE UN SISTEMA WEB PARA LA GESTIÓN DE
La autenticación en Laravel IMÁGENES Y ÁLBUMES
está incluida por defecto, aunque es necesario activarla.
Para ello, se debe utilizar el siguiente comando en la consola de comandos:
2.2.1.6 Controladores
Cuando un usuario realiza una petición HTTP (HTTP request), el controlador la recibe,
recogiendo los datos guardados en esta request. A continuación, realiza un proceso para
27
DESARROLLO DE UN SISTEMA WEB PARA LA GESTIÓN DE
IMÁGENES
utilizar estos datos y realizar Y ÁLBUMES
la tarea que ha solicitado el usuario, recuperando los
datos del modelo necesario y procesándolos para cumplir su función. Para finalizar, el
controlador envía una respuesta HTTP (HTTP response) con los datos que ha pedido el
usuario, para que puedan ser mostrador por la vista correspondiente.
28
DESARROLLO DE UN SISTEMA WEB PARA LA GESTIÓN DE
IMÁGENES Y ÁLBUMES
2.1.1.7 Vistas
29
Blade
Las vistas pueden ser invocadas a través de los controladores o las rutas. Para ello, se
debe utilizar el método view(). Para el ejemplo de la figura anterior:
Una de las ventajas que aporta Blade es la herencia entre plantillas. Gracias a la
herencia entre plantillas, podremos simplificar mucho nuestras vistas, generando
plantillas base, y plantillas hijas. Para explicar este concepto, utilizaremos un ejemplo.
</body>
</html>
a_padre')
efinimos cual es la zona en la que se inserta el codigo. Se pueden diferer varias sections--}}
h1>
octype html>
ml>
ad>
ta charset="UTF-8">
ta name="viewport"
tent="width=device-width, user-scalable=no, initial- scale=1.0, maximum-scale=1.0, minimum-scal
ta http-equiv="X-UA-Compatible" content="ie=edge">
tle>Plantilla de prueba</title>
ead>
dy>
>¡Hola Mundo!</h1>
ody>
El disco público
El disco público es el disco destinado a los archivos que son accesibles públicamente.
Por defecto, el disco publico usa el driver local y almacena los archivos en el directorio
storage/app/public. Para hacerlo accesible desde la web, es necesario crear un
DESARROLLO DE UN SISTEMA WEB PARA LA GESTIÓN DE
IMÁGENES Y ÁLBUMES
enlace simbólico desde storage/app/public a public/storage. Para ello, es
necesario utilizar el siguiente comando en la consola de comandos:
Gestión de archivos
Para subir un archivo, se utilizará el método put(). La sintaxis para este método
es Storage::put(‘<nombre del archivo para subir>’,’<archivo
a subir>’). Por ejemplo:
Storage cuenta con más funcionalidad como puedan ser la posibilidad de cambiar la
visibilidad de un archivo, cambiar la localización de un archivo, etc.
Laravel cuenta con una serie de funcionalidades para crear un sistema web en varios
idiomas. Por defecto, el idioma del sistema web es el inglés.
33
DESARROLLO DE UN SISTEMA WEB PARA LA GESTIÓN DE
IMÁGENES
Las traducciones de Laravel se guardanYen
ÁLBUMES
el directorio resources/lang. Dentro de
este directorio, se debe definir un directorio por cada idioma. Si se van a utilizar los
idiomas español e inglés, se deben utilizar las carpetas en/ y es/, quedando el directorio
completo del siguiente modo:
En cada directorio, se deben crear los archivos en los que se definirán las diferentes
traducciones. Por ejemplo, en el archivo messages.php de la figura anterior, crearemos
la traducción del párrafo para la bienvenida a la página:
<?php
return [
‘welcome’ => ‘Bienvenido a nuestra aplicación’
];
Definiendo el locale
Locale es la palabra reservada utilizada para definir el idioma en el que está definida la
web en un momento exacto. Para cambiar el idioma, se debe utilizar el método
setLocale de la clase App. Por ejemplo, cambiaremos al entrar a la ruta
‘ejemplo.com/welcome/es’ el idioma a ‘es’:
34
DESARROLLO DE UN SISTEMA WEB PARA LA GESTIÓN DE
IMÁGENES Y ÁLBUMES
También podemos preguntar cuál es el locale actual con isLocale($idioma), el cuál nos
devolverá true si el idioma es el mismo que el parámetro del método. Por ejemplo:
Otra opción para utilizar las traducciones es usar el decorador @lang(). Por ejemplo:
En este proyecto se han utilizado las traducciones para inglés y para español. Para ello,
se ha hecho uso de las funciones mencionadas anteriormente, y un middleware que
genera una sesión para que se mantenga el idioma elegido.
35
2.2.2 jQuery
Fue publicado en agosto de 2006, y posee una Licencia MIT y una Licencia Pública
General de GNU, lo que da permiso a su uso en proyectos libres y privados.
2.2.3 Bootstrap
2.3.1 PhpStorm
2.3.2 MAMP
2.3.3 MySQL
37
DESARROLLO DE UN SISTEMA WEB PARA LA GESTIÓN DE
Es considerada la base deIMÁGENES Y ÁLBUMES
datos open-source más popular del mundo, especialmente
para el desarrollo web.
2.3.4 Navegadores
Los navegadores web actuales cuentan con un conjunto de herramientas para que los
desarrolladores puedan acceder a distintos datos y funcionalidades del sitio web al que
han accedido, pudiendo ver de forma ordenada la estructura de una página, los atributos
de los elementos o las peticiones realizadas al servidor, entre muchas otras
funcionalidades.
Los navegadores más populares del mercado son Google Chrome, Mozilla Firefox,
Internet Explorer/Microsoft Edge, Opera y Safari. De estos navegadores se han
utilizado la mayoría de los navegadores para realizar pruebas, ya que no todos los
navegadores interpretan la información de la misma manera. Además, no todos los
navegadores cuentan con las mismas herramientas para desarrolladores.
2.3.5 Git
38
DESARROLLO DE UN SISTEMA WEB PARA LA GESTIÓN DE
IMÁGENES
trabajo de un proyecto realizado Y ÁLBUMES
por varias personas. Fue diseñado por Linus Torvald
(creador de Linux).
2.3.6 Composer
Composer instala estas librerías en un directorio local del proyecto llamado “vendor”.
Por defecto, instala todos los paquetes o librerías en local, pero también se le puede
definir que instale una librería en formato global, para que se pueda acceder a ella desde
cualquier directorio del ordenador.
Composer utiliza Packagist (el mayor buscador de paquetes para PHP) para la búsqueda
de las dependencias.
2.3.7 Masonry
Masonry es una librería Javascript que permite colocar de manera óptima los elementos
de una página basándose en el espacio vertical disponible.
Esta librería fue desarrollada por Desandro. En este proyectos se ha utilizado para
organizar las galerías de imágenes. Un ejemplo de Masonry en este proyecto:
DESARROLLO DE UN SISTEMA WEB PARA LA GESTIÓN DE
IMÁGENES Y ÁLBUMES
3. Análisis Funcional
Identificador Requisito
R1 El sistema debe contar con un diseño para web de escritorio.
40
R3.4 El administrador puede crear un nuevo álbum.
R4.2 El panel de administración contará con una sección para subir fotos.
R11.1 La sección bodas estará formada por una galería de imágenes. Cada
imagen tendrá un texto indicando cual es la localización de la boda.
R21 Las imágenes están compuestas por los atributos obligatorios álbum
(al que pertenece), archivo respectivo, URL de la imagen y categoría
y por los atributos opcionales ciudad y autor.
R24 Todas las galerías de imágenes deben ser del tipo “Masonry”.
R25 El color de fondo del sistema web será blanco, exceptuando la página
de inicio.
R26 El color del texto será negro.
3.2 Casos de Uso
Un caso de uso es una representación de la interacción que hay entre un sistema y los
usuarios que utilizan sus funcionalidades. Se utilizan para representar los requisitos
funcionales del sistema.
En este apartado se describirán los casos de uso más importantes, mediante un modelo
de casos de uso y una descripción llevada a cabo con los casos de uso extendidos.
3.2.2 Actores
46
DESARROLLO DE UN SISTEMA WEB PARA LA GESTIÓN DE
CU03 – Crear un álbum IMÁGENES Y ÁLBUMES
Tabla 5 - Caso de uso crear un álbum
47
DESARROLLO DE UN SISTEMA WEB PARA LA GESTIÓN DE
IMÁGENES Y ÁLBUMES
CU04 – Editar una imagen
Tabla 6 - Caso de uso editar una imagen
49
DESARROLLO DE UN SISTEMA WEB PARA LA GESTIÓN DE
IMÁGENES Y ÁLBUMES
CU06 – Borrar una imagen
Tabla 8 - Caso de uso borrar una imagen
50
DESARROLLO DE UN SISTEMA WEB PARA LA GESTIÓN DE
CU07- Borrar un álbum IMÁGENES Y ÁLBUMES
Tabla 9 - Caso de uso borrar un álbum
7 El sistema
automáticamente borra
todas las imágenes que
pertenecen a ese álbum
8 El sistema muestra un
mensaje de éxito de la
operación
CA1 Alternativa al paso 7 del CTE
# Usuario Sistema
Curso alternativo
1 7 El sistema muestra un
mensaje de error de la
operación
51
DESARROLLO DE UN SISTEMA WEB PARA LA GESTIÓN DE
IMÁGENES Y ÁLBUMES
CU08 – Filtrar una imagen
Tabla 10 - Caso de uso filtrar una imagen
1 El administrador accede al
área “Imágenes”
2 El administrador clicka en
el desplegable “Filtrar por
Curso típico de categoría” y selecciona la
eventos categoría deseada
3 El sistema muestra la vista con
las imágenes filtradas por
categoría y muestra un
desplegable para filtrar por
álbum
4 Fin
CA1 Alternativa al paso 4 del CTE
# Administrador Sistema
4 El administrador clicka en
el desplegable “Filtrar por
Curso alternativo
álbum” y selecciona el
1 álbum deseado
5 El sistema muestra la vista con
las imágenes filtradas filtradas
por categoría y álbum
DESARROLLO DE UN SISTEMA WEB PARA LA GESTIÓN DE
CU09- Registrarse IMÁGENES Y ÁLBUMES
Tabla 11 - Caso de uso registrarse
CU09 Registrarse
Versión 1.0
Actores Usuario
Descripción Un usuario se registra en el sistema
Referencias Subir una imagen
# Usuario Sistema
1 El usuario entra en la página
de registro
2 El sistema muestra un formulario
con los campos necesarios para
registrarse
El usuario rellena los campos
Curso típico de requeridos y clicka en el
eventos botón “Register”
4 El sistema valida los datos de
registro
5 Los datos de registro son
correctos
6 Crea un usuario en la base de
datos y el usuario ya puede
acceder al sistema
CA1 Alternativa al paso 5 del CTE
# Usuario Sistema
5 Los datos de registro son
incorrectos
Curso El sistema vuelve a mostrar el
alternativo 1 6 formulario con mensajes de error
para los datos
incorrectos/inválidos
7 El usuario corrige los datos
8 Vuelta al paso 4 del CTE
53
DESARROLLO DE UN SISTEMA WEB PARA LA GESTIÓN DE
CU10- Identificarse en elIMÁGENES
sistema Y ÁLBUMES
Tabla 12 - Caso de uso identificarse en el sistema
Dado que la arquitectura utilizada para este sistema sigue el patrón Modelo-Vista-
Controlador (MVC) las entidades son representadas por los modelos de nuestro sistema.
55
DESARROLLO DE UN SISTEMA WEB PARA LA GESTIÓN DE
o Album_id:IMÁGENES
identificadorY(nombre)
ÁLBUMES del álbum al que pertenece una
imagen.
o Nombre: el nombre de la imagen
o Url: Url de la imagen en el servidor
o Categoría: categoría a la que pertenece la imagen. Es un enumerado con
cinco posibilidades: boda, desfile, sesión de fotos, publicación en prensa
o cursos.
o Autor: nombre del autor de la fotografía.
4 Diseño de la aplicación
56
DESARROLLO DE UN SISTEMA WEB PARA LA GESTIÓN DE
IMÁGENES Y ÁLBUMES
57
4.1.2 Subir una imagen
60
DESARROLLO DE UN SISTEMA WEB PARA LA GESTIÓN DE
IMÁGENES Y ÁLBUMES
61
4.1.5 Editar un álbum
Por ello, se ha decidido formar un diagrama de clases basado en MVC y hacer una
adaptación de las vistas, tratándolas como si fuesen clases. Aun así, como no son clases
reales, no se han tratado ni atributos ni métodos.
Este diagrama de clases solo se basa en las clases principales, ya que Laravel cuenta con
una gran cantidad de componentes conectados unos con otros.
Por ello, se han modelado únicamente las clase de modelos, vistas y controladores.
Ilustración 10 - Diagrama de clases
DESARROLLO DE UN SISTEMA WEB PARA LA GESTIÓN DE
IMÁGENES
Como se puede comprobar Y ÁLBUMES
y se ha explicado anteriormente, existen tres tipos de
componentes: Modelos, Vistas y Controladores.
Modelos: este sistema cuenta con dos modelos: el modelo User (que viene
instanciado por defecto al comenzar un proyecto de Laravel) y el modelo Photo.
Todo modelo en Laravel debe heredar de la clase Model. Por tanto, se han
modelado la clase padre Model y las clases hijas User y Photo.
Controladores: ese sistema cuenta con varios controladores, pero solo se han
modelado los controladores más importantes: PhotoController, que es el
controlador asociado al modelo Photo, y a todas las vistas que dependen de este
modelo, AdminController, que es el controlador asociado a las vistas del panel
de administración, y conectado con el middleware de autenticación, y los
controladores LoginController y RegisterController, dos de los controladores
que incluye Laravel con su módulo de autenticación. Estos controladores se
asocian con el modelo User y con las vistas ‘Login’ y ‘Register’
respectivamente.
o Layout: es la plantilla base (padre) para todas las vistas excepto para el
inicio y para el panel de administración. De Layout, heredan las vistas
“Sobre Mí”, “Bodas”, “Prensa”, “Cursos”, “Contacto”, “Login” y
“Register”.
o Layout_admin: es la plantilla base (padre) para las vistas del panel de
administración. De Layout_admin heredan las vistas “UploadView”,
“Listado_fotos” y “Listado_albums”.
66
DESARROLLO DE UN SISTEMA WEB PARA LA GESTIÓN DE
o IndexView:IMÁGENES Y ÁLBUMES
es la única vista que no hereda de ninguna plantilla base, ni
es plantilla base para otras plantillas. Es la vista de la ruta de inicio del
sistema web.
Un usuario accede a la vista de registro, rellena los campos y envía el formulario. Este
se envía mediante una petición HTTP de tipo POST a la dirección ‘/register’. El
ReigsterController, que es quien recibe esa petición POST, envía los datos de la petición
(request) a la clase RegistersUsers, quien se encarga de procesar los datos y enviarlos a
67
DESARROLLO DE UN SISTEMA WEB PARA LA GESTIÓN DE
IMÁGENES
la base de datos. Si el registro Y ÁLBUMES
ha sido correcto, el usuario será redirigido a la página
de inicio del sistema.
69
4.3.4 Borrar una foto
Controlador: componente que sirve de enlace entre los modelos y las vistas,
tomando los datos del modelo y enviándoselos a una vista, muchas veces
procesados antes de ser enviados (filtrados, aplicando una fórmula, etc).
Características de REST
Sistema de capas: existe una arquitectura jerárquica entre los componentes del
sistema. Cada capa lleva a cabo una funcionalidad concreta dentro del sistema
REST.
76
DESARROLLO DE UN SISTEMA WEB PARA LA GESTIÓN DE
IMÁGENES Y ÁLBUMES
Dado que este proyecto es un trabajo a medida para un cliente, el interfaz está basado en
los requisitos dados por el cliente.
La web cuenta con un menú de 7 ítems, en el cual seis de ellos son secciones y uno es
un enlace. Además, cuenta con las secciones de login, registro y las secciones de admin,
ocultas para un usuario normal.
77
DESARROLLO DE UN SISTEMA WEB PARA LA GESTIÓN DE
IMÁGENES
Todas las secciones cuentan Y ÁLBUMES
con una plantilla base en la que se encuentran la cabecera
(header), donde se encuentra el logo de la página, el menú de navegación y el menú de
cambio de idioma, y el pie de página (footer), donde se encuentran los logos de las
redes sociales e información básica de la web. Todas las secciones tienen un color de
fondo blanco exceptuando la página de inicio, en la que el fondo de pantalla está
formado por un carrusel de imágenes.
Inicio
La pantalla de inicio está compuesta por una cabecera y un pie de página semi-opacos, y
en el fondo de pantalla, un carrusel de imágenes (slider) que ocupa toda la pantalla del
navegador.
78
DESARROLLO DE UN SISTEMA WEB PARA LA GESTIÓN DE
IMÁGENES Y ÁLBUMES
Sobre mí
79
Ilustración 23 - Diseño escritorio página sobre mí (2)
Ilustración 24 - Diseño responsive sobre mí
Ilustración 25 - Diseño responsive sobre mí (2)
Bodas
La sección bodas cuenta con una galería de imágenes en forma de mosaico con el
nombre de la ciudad de la boda debajo de cada imagen:
Ilustración 26 - Diseño escritorio página bodas
Prensa
Se mostrará únicamente una de las categorías ya que todas siguen el mismo diseño.
Ilustración 30 - Diseño escritorio página prensa
Ilustración 31 - Diseño responsive página prensa (1)
Ilustración 32 - Diseño responsive página prensa (2)
Cursos
Contacto
En la sección contacto se encuentra la información de contacto (email y teléfono)
además de la cabecera y el pie de página:
Página en inglés
Panel de administración
El panel de administración cuenta con una interfaz diferente al resto de las secciones. Cuenta con
un menú lateral y no contiene ningún pie de página. Tiene un total de tres secciones: la sección
“Subir fotos”, la sección “Imágenes” y la sección “Galerías”.
Sección “Imágenes”:
5. Despliegue
Como este es un proyecto para un cliente, ha sido necesario ponerlo en producción
(desplegarlo). Esto consiste en pasar el proyecto del servidor local a un servidor real.
Para llevar a cabo el despliegue del proyecto, ha sido necesario configurar diferentes
parámetros del servidor y varias rutas y configuraciones del proyecto, adaptado al
servidor en cuestión.
Para ello, se ha utilizado un servidor compartido con intérprete PHP, configurando los
parámetros de subida de archivos y los permisos del archivo .htaccess. Como se ha
comentado anteriormente, también fue necesario adaptar las rutas a las del servidor,
debido que el servidor que se utilizó divide los archivos públicos de los privados en las
carpetas “html” y “data” respectivamente. Como no es posible la subida de archivos a la
raíz del servidor debido a que es compartido, se tuvieron que dividir todos los archivos
privados de los públicos, yendo todas las carpetas del proyecto a la carpeta “data”
exceptuando el contenido de la carpeta “public”, que se añadió a la carpeta pública
“html”.
94
DESARROLLO DE UN SISTEMA WEB PARA LA GESTIÓN DE
IMÁGENES Y ÁLBUMES
Cabeceras CORS
Para ello, se añadió una clase PHP llamada “Cors.php” en la carpeta de Middlewares, en
el cual se gestionan las cabeceras de control permitidas:
95
<?php
return $next($request);
}
Esta clase actuará como middleware de las peticiones del proyecto, activando las
cabeceras necesarias para las peticiones HTTP de origen cruzado, y sus métodos. Para
ello, se añadió el archivo en la lista de middlewares del proyecto. Por último, se añadió
en el archivo de rutas el siguiente código para permitir las peticiones desde el servidor:
DESARROLLO DE UN SISTEMA WEB PARA LA GESTIÓN DE
IMÁGENES Y ÁLBUMES
<?php
if (isset($_SERVER['HTTP_ORIGIN'])) {
header("Access-Control-Allow-Origin:
{$_SERVER['HTTP_ORIGIN']}");
header('Access-Control-Allow-Credentials: true');
header('Access-Control-Max-Age: 86400'); // cache for
1 day
}
// Access-Control headers are received during OPTIONS
requests
if ($_SERVER['REQUEST_METHOD'] == 'OPTIONS') {
if
(isset($_SERVER['HTTP_ACCESS_CONTROL_REQUEST_METHOD']))
header("Access-Control-Allow-Methods: GET, POST,
PUT, DELETE, OPTIONS");
if
(isset($_SERVER['HTTP_ACCESS_CONTROL_REQUEST_HEADERS']))
header("Access-Control-Allow-Headers:
{$_SERVER['HTTP_ACCESS_CONTROL_REQUEST_HEADERS']}");
exit(0);
}
6. Resultado final
Una vez desarrollado, configurado y desplegado el proyecto, se puede ver el resultado
del sistema web en la URL:
http://www.maytelucas.com
7. Conclusiones
El objetivo principal de este proyecto ha sido crear un sistema web completo que
cumpla los requisitos planteados por el cliente. Para ello, se han utilizado las
tecnologías que se consideraban más adecuadas, buscando en todo momento un sistema
eficiente, intuitivo y estético.
Para conseguir este objetivo, primero se realizó una reunión con el cliente para definir
los requisitos del proyecto. Debido a que el cliente quería contar con un panel de
administración para gestionar el contenido de su página, fue necesario considerar
97
DESARROLLO DE UN SISTEMA WEB PARA LA GESTIÓN DE
IMÁGENES
tecnologías del lado del servidor, y no Y ÁLBUMES
únicamente utilizar tecnologías del lado del
cliente, como se pensó inicialmente.
Se consideró conveniente el uso de un API REST para la gestión de los recursos del
sistema, especialmente debido a que es un sistema dinámico en la que el administrador
puede subir o borrar fotos a su antojo, por lo que es necesario consultar a menudo los
registros de la base de datos. Además, se decidió utilizar la tecnología AJAX para
mejorar la eficiencia del sistema.
98
DESARROLLO DE UN SISTEMA WEB PARA LA GESTIÓN DE
IMÁGENES
A continuación, se desarrolló Y de
el sistema ÁLBUMES
traducciones. Una vez se comprobó que el
sistema funcionaba de manera correcta y que el diseño cumplía los requisitos del
cliente, se pasó a poner en producción el proyecto.
Para realizar un diseño correcto del sistema y una buena documentación, se han
utilizado una serie de técnicas y fundamentos aprendidos en el Grado de Ingeniería de
Software.
Se han realizado distintas reuniones durante todo el desarrollo del proyecto para
comprobar que este cumplía con los requisitos del cliente, y si fuera necesario,
actualizarlos.
8. Futuros proyectos
Al ser un proyecto a medida desarrollado para un cliente concreto, no se tiene intención
de desarrollar ningún futuro proyecto con él. No obstante, al ser un sistema de gestión
de contenido, siendo el contenido las imágenes, el esqueleto de las galerías y el panel de
administración podría ser válido para cual sistema web en el que se pretenda gestionar
imágenes.
DESARROLLO DE UN SISTEMA WEB PARA LA GESTIÓN DE
Como futuras mejoras, seIMÁGENES Y ÁLBUMES
pretende mejorar la estructura de imágenes-álbumes, para
facilitar la organización de ambas, ya que en este momento los álbumes se forman a
partir de las imágenes, y no tienen un modelo propio.
Por otra parte, se estudiará la posibilidad como futuro proyecto ajeno al cliente de
montar un sistema de galerías de imágenes subidas por distintos usuarios. De este
modo, se podría utilizar la estructura completa del sistema, adaptándola a la posibilidad
de que todos los usuarios puedan subir sus álbumes y visitar los álbumes de otros
usuarios, incluyendo un panel de administración de usuarios, la vista de perfil de un
usuario y nuevas vistas más detalladas.
9. Glosario
Acrónimos
- CRUD: Create,Read,Update,Delete.
100
DESARROLLO DE UN SISTEMA WEB PARA LA GESTIÓN DE
IMÁGENES Y ÁLBUMES
10. Bibliografía
- [Consultado en enero-febrero de 2017] Styde Limited: https://styde.net/
101
DESARROLLO DE UN SISTEMA WEB PARA LA GESTIÓN DE
IMÁGENES
- [Consultado en febrero Y ÁLBUMES
de 2017] Fundación Wikimedia Inc:
https://es.wikipedia.org/wiki/JavaScript
102
DESARROLLO DE UN SISTEMA WEB PARA LA GESTIÓN DE
IMÁGENES Y ÁLBUMES
103