Proyecto de la agenda de Palabras Menores
- Introduccion =============== El proyecto trata sobre el desarrollo de una agenda para el producto Palabras menores.
Desde la vista de uso. (A desarrollar).
Desde la vista técnica. Se desea crear una agenda con diferentes frameworks portable e independiende del producto principal. Se creara un sistema cliente/servidor donde la mayoria del peso estara en el servidor tanto para consultas como para insercion de datos.
A su vez el producto es completo puesto que se ha de pensar no solo en en como se va a crear, sino la estructura (base de datos), gestion de la misma (modelos), como explotarla (controladores) y como visualizar la misma (vistas) de forma que sea obvia para el usuaio (UX) y que, a traves de esa obviedad sea sencilla (UI).
Es decir una aplicación web estandar desde principio a fin.
Se pretende desarrollar un sistema basado en cliente/servidor tipico delegando, en un futuro, responsabilidad al cliente a traves de un sistema REST por JSON o XML (con XQuery) y la creación de webservices para la consulta de los datos de la agenda.
Es decir se pretende realizar una gradeful upgrade comenzando desde una gestion total desde el servidor a, gradualmente ir pasando peso a los clientes eliminando el máximo posible de carga y llegando a un sistema cliente/servidor.
- Plan de Gestion ==================
Hito 1: Defininir el sistema tanto XXXXX como informaticamente - en proceso
Hito 2: Creacion de la base de datos - hecho
Hito 3: Creacion de los modelos - hecho
Hito 4: Creacion de los controladores de gestion de usuario - en proceso
Hito 5: Creacion de las vistas de gestion de usuairo - en proceso
Hito 6: Creacion de los controladores de introduccion de datos
Hito 7: Creacion de las vistas de introduccionde datos
Hito 8: Creacion de los controladores de explotacion de datos
Hito 9: Creacion de las vistas de explotacion de datos
Hito 10: Baterias de pruebas con usuarios reales
Hito 11: Paso de modelos a REST
Hito 12: En las vistas paso a comprobaciones JS
Hito 13: Paso a framework JS
Hito 14: Test finales
La creacion de los hitos 4 y 5, 6 y 7, 8 y 9 van juntas.
Las fases coinciden practicamente con los hitos.
- Especificaciones =================== A continuación se relatan las especificaciones técnicas del producto.
Aplicacion realizada en PHP usando el framework de Codeigniter.
Necesario un servidor LAMP tipico (Apache + PHP + MySQL).
/Admin
Login.php --> Controlador de sesion<br/>
index: Valida los datos del usuario para iniciar sesion<br/>
salir: Salir de la sesion<br/>
Actividades.php --> Controlador de actividades:<br/>
add_actividad: Añadir<br/>
modifica_actividad: Modificar<br/>
buscar_actividad: Buscar<br/>
publicar: Publicar o despublicar una actividad<br/>
Funciones Privadas:<br/>
esta_vacio: retorna true si un campo no esta vacio<br/>
retorna false si un campo si esta vacio<br/>
Barrios.php --> Controlador de barrios:<br/>
add_barrio: Añadir<br/>
modifica_barrio: Modificar<br/>
buscar_barrio: Buscar<br/>
Funciones Privadas:<br/>
esta_vacio: retorna true si un campo no esta vacio<br/>
retorna false si un campo si esta vacio<br/>
Secciones.php --> Controlador de secciones:<br/>
add_seccion: Añadir<br/>
modifica_seccion: Modificar<br/>
buscar_seccion: Buscar<br/>
Funciones Privadas:<br/>
esta_vacio: retorna true si un campo no esta vacio<br/>
retorna false si un campo si esta vacio<br/>
Usuarios.php --> Controlador de usuarios:<br/>
add_usuario: Añadir<br/>
modifica_usuario: Modificar<br/>
buscar_usuario: Buscar<br/>
Funciones Privadas:<br/>
esta_vacio: retorna true si un campo no esta vacio<br/>
retorna false si un campo si esta vacio<br/>
Principal.php --> Controlador de entrada
Modelo_actividades. Métodos:
Añadir una actividad
public function add_actividad ($campanya, $actividad, $descripcion, $organiza, $lugar, $idbarrio, $idseccion, $fecha, $usuario, $publicada)
Parámetros entrada:
$campanya --> Nombre de la campanya de la actividad
$actividad --> Nombre de la actividad
$descripcion --> Descripcion de la actividad
$organiza --> Nombre del organizador u organizadores
$lugar --> Direccion donde tiene lugar
$idbarrio --> ID del barrio donde se realiza la actividad
$idseccion --> ID de la seccion a la que pertenece la actividad
$fecha --> Fecha y Hora de comienzo de la actividad
$usuario --> login del usuario
$publicada --> Si está o no publicada la actividad, al crearla vendrá con valor 0
Actualizar una actividad
public function update_actividad ($idactividades, $campanya, $actividad, $descripcion, $organiza, $lugar, $idbarrio, $idseccion, $fecha, $usuario, $publicada)
Parámetros entrada:
$idactividades --> Identificador de la actividad que se va a actualizar
$campanya --> Nombre de la campanya de la actividad
$actividad --> Nombre de la actividad
$descripcion --> Descripcion de la actividad
$organiza --> Nombre del organizador u organizadores
$lugar --> Direccion donde tiene lugar
$idbarrio --> ID del barrrio donde se realiza la actividad
$idseccion --> ID de la seccion a la que pertenece la actividad
$fecha --> Fecha y Hora de comienzo de la actividad
$usuario --> login del usuario
$publicada --> Si está o no publicada la actividad 1- Publicada 0 - No publicada
Borrar una actividad
public function del_actividad ($idactividades)
Parámetros entrada:
$idactividades --> Identificador de la actividad que se va a eliminar
Antes de borrar la actividad:
Borra del fichero imagenes, las imagenes de esa actividad.
Borra del fichero documentos, los documentos de esa actividad.
Borra la actividad.
Actividades de un usuario por orden descendente de fecha
public function actividad_usuario_fecha($idusuario)
Parámetros entrada:
$idusuario --> Identificador del usuario del que se van a obtener las actividades
Salida:
Array con las actividades
Datos de una actividad a partir del id de la actividad
public function actividad_id($idactividades)
Parámetros entrada:
$idactividades --> Identificador de la actividad
Salida:
Array con los datos de la actividad
Devuelve las actividades, resultado de la busqueda de un texto en cualquier campos de actividades sobre el que se va a buscar, ordenadas por fecha descendente
public function buscar_cajetin($texto)
Parámetros entrada:
$texto --> texto que se va a buscar
Campos sobre los que se va a buscar: campanya, actividad, descripcion, organiza, lugar, usuario
Salida:
Array con los datos de las actividades ordenadas por fecha descendente.
Devuelve las actividades, resultado de la busqueda en campos con un determinado texto, ordenadas por fecha descendente
public function buscar_actividad($array_datos)
Parámetros entrada:
$array_datos --> array con el texto de los campos de actividades por los que se va a buscar
Estos textos corresponden a los campos: campanya, actividad, organiza y fecha
Salida:
Array con los datos de las actividades ordenadas por fecha descendente.
Publica o Despublica una actividad
public function publicar_actividad($idactividades, $publicada)
Parámetros entrada:
$idactividades --> ID de la actividad que se quiere cambiar el valor de publicada
$publicada --> 0 - Si despublica, 1 - si publica
Salida:
true
Modelo_barrios. Métodos:
Añadir un barrio
public function add_barrio ($nombre)
Parámetros entrada:
$nombre --> Nombre del barrio que se va a añadir
Actualizar un barrio
public function update_barrio ($idbarrios, $nombre)
Parámetros entrada:
$idbarrios --> Identificador del barrio que se va a actualizar
$nombre --> Nombre del barrio que se va a actualizar
Borrar un barrio
public function del_barrio ($idbarrios)
Parámetros entrada:
$idbarrios --> Identificador del barrio que se va a eliminar
Antes de borrar el barrio:
Borra del fichero imagenes, las imagenes de las actividades del barrio.
Borra del fichero documentos, los documentos de las actividades del barrio.
Borra del ficheros actividades, las actividades del barrio.
Borra el barrio.
Datos de un barrio a partir del id
public function barrio_id($idbarrios)
Parámetros entrada:
$idbarrios --> id del barrio
Salida:
Array con los datos del barrio
Devuelve los barrios, resultado de la busqueda en campos con un determinado texto, ordenados por nombre
public function buscar_barrio($array_datos){
Parámetros entrada:
$array_datos --> array con el texto de los campos de barrios por los que se va a buscar
Estos textos corresponden a los campos: nombre
Salida:
Array con los datos de los barrios ordenados por nombre.
NOTA: No se está utilizando
Devuelve los barrios, resultado de la busqueda de un texto en cualquier campos de barrios sobre el que se va a buscar, ordenadas por nombre
public function buscar_cajetin($texto)
Parámetros entrada:
$texto --> texto que se va a buscar
Campos sobre los que se va a buscar: nombre
Salida:
Array con los datos de los barrios ordenados por nombres.
Devuelve todos los barrios ordenados por nombre
public function devuelve_barrios()
Parámetros entrada:
Ninguno
Salida:
Array con los datos de todos los barrios
Devuelve los ultimos barrios
public function ultimos_barrios($numero)
Parámetros entrada:
$numero --> Numero de barrios a devolver
Salida:
Array con los datos de los ultimos barrios
Modelo_documentos. Métodos:
Añadir un documento a la actividad
public function add_documento ($idactividad, $nombredocumento, $descripcion)
Parámetros entrada:
$idactividad --> ID de la actividad a la que pertenece el documento
$nombredocumento --> Nombre del documento
$descripcion --> Descripcion del documento
Actualizar un documento de una actividad
public function update_documento ($iddocumentos, $idactividad, $nombredocumento, $descripcion)
Parámetros entrada:
$iddocumentos --> Identificador del documento que se va a actualizar
$idactividad --> ID de la actividad a la que pertenece el documento
$nombredocumento --> Nombre del documento
$descripcion --> Descripcion del documento
Borrar un documento de una actividad
public function del_documento ($iddocumentos) {
Parámetros entrada:
iddocumentos --> Identificador del documento que se va a eliminar
Modelo_imagenes. Métodos:
Añadir una imagen a una actividad
public function add_imagen ($idactividad, $nombreimagen, $descripcion)
Parámetros entrada:
$idactividad --> ID de la actividad a la que pertenece la imagen
$nombreimagen --> Nombre de la imagen
$descripcion --> Descripcion de la imagen
Actualizar una imagen de una actividad
public function update_imagen ($idimagenes, $idactividad, $nombreimagen, $descripcion)
Parámetros entrada:
$idimagenes --> Identificador de la imagen que se va a actualizar
$idactividad --> ID de la actividad a la que pertenece la imagen
$nombreimagen --> Nombre de la imagen
$descripcion --> Descripcion de la imagen
Borrar una imagen de una actividad
public function del_imagen ($idimagenes)
Parámetros entrada:
$idimagenes --> Identificador de la imagen que se va a eliminar
Modelo_secciones. Métodos:
Añadir una seccion
public function add_seccion ($nombre)
Parámetros entrada:
$nombre --> Nombre de la seccion que se va a añadir
Actualizar una seccion
public function update_seccion ($idsecciones, $nombre)
Parámetros entrada:
$idsecciones --> Identificador de la seccion que se va a actualizar
$nombre --> Nombre de la seccion que se va a actualizar
Borrar una seccion
public function del_seccion ($idsecciones)
Parámetros entrada:
$idsecciones --> Identificador de la seccion que se va a eliminar
Antes de borrar la seccion:
Borra del fichero imagenes, las imagenes de las actividades de la seccion.
Borra del fichero documentos, los documentos de las actividades de la seccion.
Borra del ficheros actividades, las actividades de la seccion.
Borra la seccion.
Datos de una seccion a partir del id
public function seccion_id($idsecciones)
Parámetros entrada:
$idsecciones --> id de la seccion
Salida:
Array con los datos de la seccion
Devuelve las secciones, resultado de la busqueda en campos con un determinado texto, ordenados por nombre
public function buscar_seccion($array_datos){
Parámetros entrada:
$array_datos --> array con el texto de los campos de secciones por los que se va a buscar
Estos textos corresponden a los campos: nombre
Salida:
Array con los datos de las secciones ordenados por nombre.
NOTA: No se está utilizando
Devuelve las secciones, resultado de la busqueda de un texto en cualquier campos de secciones sobre el que se va a buscar, ordenadas por nombre
public function buscar_cajetin($texto)
Parámetros entrada:
$texto --> texto que se va a buscar
Campos sobre los que se va a buscar: nombre
Salida:
Array con los datos de los barrios ordenados por nombres.
Devuelve todas las secciones ordenados por nombre
public function devuelve_secciones()
Parámetros entrada:
Ninguno
Salida:
Array con los datos de todas las secciones
Devuelve las ultimas secciones
public function ultimas_secciones($numero)
Parámetros entrada:
$numero --> Numero de secciones a devolver
Salida:
Array con los datos de las ultimas secciones
Modelo_usuarios. Métodos:
Añadir un usuario
public function add_usuario ($login, $password, $nombre, $idacl)
Parámetros entrada:
$login --> Login de entrada del usuario
$password --> Password, md5
$nombre --> Nombre del usuario
$idacl --> Identificador de la ACL. 1-Administrador, 2-Usuario, 3-Desactivado
Actualizar un usuario
public function add_usuario ($login, $password, $nombre, $idacl)
Parámetros entrada:
$login --> Login de entrada del usuario
$password --> Password, md5
$nombre --> Nombre del usuario
$idacl --> Identificador de la ACL. 1-Administrador, 2-Usuario, 3-Desactivado
Borrar un usuario
public function del_usuario ($login)
Parámetros entrada:
$login --> Login de entrada del usuario que se va a eliminar
Antes de borrar el usuario:
Borra del fichero imagenes, las imagenes de las actividades del usuario.
Borra del fichero documentos, los documentos de las actividades del usuario.
Borra del ficheros actividades, las actividades del usuario.
Borra el usuario.
Comprobar en la base de datos si existe un usuario con un password
public function checkusuario($login, $password)
Parámetros entrada:
$login --> login del usuario que se va a chequear
$password --> password del usuario que se va a chequear
Salida:
0 --> no existe usuario y password
1 --> existe y es correcto
2 --> existe y deshabilitado
Datos de un usuario a partir del login del usuario
public function usuario_id($login){
Parámetros entrada:
$login --> login del usuario
Salida:
Array con los datos del usuario
Devuelve los usuarios, resultado de la busqueda en campos con un determinado texto, ordenados por nombre
public function buscar_usuario($array_datos)
Parámetros entrada:
$array_datos --> array con el texto de los campos de usuarios por los que se va a buscar
Estos textos corresponden a los campos: login, nombre
Salida:
Array con los datos de los usuarios ordenados por nombre.
Devuelve los usuarios, resultado de la busqueda de un texto en cualquier campos de usuarios sobre el que se va a buscar, ordenadas por nombre
public function buscar_cajetin($texto)
Parámetros entrada:
$texto --> texto que se va a buscar
Campos sobre los que se va a buscar: login, nombre
Salida:
Array con los datos de los usuarios ordenados por nombres.
Devuelve los ultimos usuarios
public function ultimos_usuarios($numero)
Parámetros entrada:
$numero --> Numero de usuarios a devolver
Salida:
Array con los datos de los ultimos usuarios
admin/
actividades/<br/>
add_actividades.php --> Añadir actividades<br/>
buscar_actividad.php --> Muestra el resultado de las búsquedas</br>
formbuscar_actividad.php --> Formulario para buscar actividades<br/>
modificar_actividad.php --> Modificar actividades<br/>
principal.php --> Principal tras un login correcto<br/>
Muestra actividades de un usuario<br/>
barrios/<br/>
add_barrio.php --> Añadir barrios<br/>
buscar_barrio.php --> Muestra el resultado de las búsquedas</br>
formbuscar_barrio.php --> Formulario para buscar barrios<br/>
modificar_barrio.php --> Modificar barrio<br/>
secciones/<br/>
add_seccion.php --> Añadir secciones<br/>
buscar_seccion.php --> Muestra el resultado de las búsquedas</br>
formbuscar_seccion.php --> Formulario para buscar secciones<br/>
modificar_seccion.php --> Modificar seccion<br/>
usuarios/<br/>
add_usuario.php --> Añadir usuarios<br/>
buscar_usuario.php --> Muestra el resultado de las búsquedas</br>
desconectar.php --> Desconexion o salida del usuario<br/>
formbuscar_usuario.php --> Formulario para buscar usuarios<br/>
modificar_usuarios.php --> Modificar usuario<br/>
footer.php --> Pie de las páginas<br/>
header.php --> Cabecera de las páginas<br/>
index.php --> Entrada de usuario<br/>
menu.php --> Menu<br/>
principal.php --><br/>
Librería_sesiones. Métodos:
Comprobar si hay sesion
public function comprobar_session()
Salida:
TRUE --> Si hay sesion iniciada.
FALSE --> Si no hay sesion iniciada.
Registrar una sesión de usuario
public function registrar($estado, $idusuario)
Parámetros entrada:
$estado = true
$idusuario = login del usuario que se va a registrar en la sesion.
Salida:
TRUE --> Si el registro de sesion es correcto.
FALSE --> Si no es correcto.
Des-registrar o des-logear al usuario
public function des_registrar()
Salida:
TRUE --> Si el des-registro es correcto.
FALSE --> Si no es correcto.
Devolver datos de una sesion
public function devuelve_datos_session()
Salida: Array con los datos de la sesion
Meter datos en la sesion
public function mete_datos_sesion($idsesion, $registrado, $login, $nombre, $acl)
Parámetros entrada:
$idsesion = el identificador que es el login
$registrado = TRUE o FALSE, autoexplicativo
$login = El login del usuario
$nombre = el nombre real del usuario
$acl = el identificador de acl
Salida:
TRUE
/js/
comprobaciones:
Función que comprueba si está vacio algo o no
function esta_vacio(cadena)
Parámetros de entrada:
cadena --> el valor que se va a comprobar
Salida:
true --> si NO lo esta
false --> si SI está vacia
actividades:
Funcion para revisar los campos del formulario
function revisa_form(form)
Parámetros de entrada:
form --> Nombre del formulario que se va a revisar
barrios:
Funcion para revisar los campos del formulario
function revisa_form(form)
Parámetros de entrada:
form --> Nombre del formulario que se va a revisar
secciones:
Funcion para revisar los campos del formulario
function revisa_form(form)
Parámetros de entrada:
form --> Nombre del formulario que se va a revisar
usuarios:
Funcion para revisar los campos del formulario
function revisa_form(form)
Parámetros de entrada:
form --> Nombre del formulario que se va a revisar
Default collation: utf8_spanish-ci
Default characterset: utf8
Número de Tablas: 6
actividades Engine=MyISAM Default Charset=utf8 Collate=utf8_spanish_ci
campos:
idactividades: int(11) NOT NULL AUTO_INCREMENT COMMENT 'Identificador de la actividad, UNICO',
campanya: varchar(100) COLLATE utf8_spanish_ci DEFAULT NULL COMMENT 'Nombre de la campanya',
actividad: varchar(150) COLLATE utf8_spanish_ci NOT NULL COMMENT 'Nombre de la actividad',
descripcion: text COLLATE utf8_spanish_ci COMMENT 'Descripcion de la actividad',
organiza: varchar(150) COLLATE utf8_spanish_ci DEFAULT NULL COMMENT 'Nombre del organizador u organizadores (separados por - )',
lugar: varchar(100) COLLATE utf8_spanish_ci NOT NULL COMMENT 'Direccion donde tiene lugar la actividad',
idbarrio: int(11) NOT NULL COMMENT 'ID del barrio donde se realiza la actividad',
idseccion: int(11) NOT NULL COMMENT 'ID de la seccion a la que pertenece',
fecha: datetime NOT NULL COMMENT 'Fecha y hora de comienzo de la actividad',
usuario: varchar(45) COLLATE utf8_spanish_ci NOT NULL COMMENT 'login del usuario',
publicada: tinyint(1) DEFAULT '0' COMMENT 'Si esta publicada o no la actividad (1- Publicada, 0 - No publicada)',
PRIMARY KEY (`idactividades`)
barrios Engine=MyISAM Default Charset=utf8 Collate=utf8_spanish_ci
campos:
idbarrios: int(11) NOT NULL AUTO_INCREMENT COMMENT 'Identificador del barrio, UNICO',
nombre: varchar(45) COLLATE utf8_spanish_ci NOT NULL COMMENT 'Nombre del barrio',
PRIMARY KEY (`idbarrios`)
documentos Engine=MyISAM Default Charset=utf8 Collate=utf8_spanish_ci
campos:
iddocumentos: int(11) NOT NULL AUTO_INCREMENT COMMENT 'Identificador del documento, UNICO',
idactividad; int(11) NOT NULL COMMENT 'ID de la actividad a la que pertenece el documento',
nombredocumento: varchar(100) COLLATE utf8_spanish_ci NOT NULL COMMENT 'Nombre del documento ',
descripcion: varchar(100) COLLATE utf8_spanish_ci DEFAULT NULL COMMENT 'Descripcion del documento',
PRIMARY KEY (`iddocumentos`)
imagenes Engine=MyISAM Default Charset=utf8 Collate=utf8_spanish_ci
campos:
idimagenes: int(11) NOT NULL AUTO_INCREMENT COMMENT 'Identificador de la imagen, UNICO',
idactividad: int(11) NOT NULL COMMENT 'ID de la actividad a la que pertenece',
nombreimagen: varchar(100) COLLATE utf8_spanish_ci NOT NULL COMMENT 'Nombre de la imagen',
descripcion: varchar(100) COLLATE utf8_spanish_ci DEFAULT NULL COMMENT 'Descripcion de la imagen',
PRIMARY KEY (`idimagenes`)
secciones Engine=MyISAM Default Charset=utf8 Collate=utf8_spanish_ci
campos:
idsecciones: int(11) NOT NULL AUTO_INCREMENT COMMENT 'Identificador de la seccion, UNICO',
nombre: varchar(100) COLLATE utf8_spanish_ci NOT NULL COMMENT 'Nombre de la seccion',
PRIMARY KEY (`idsecciones`)
usuarios Engine=MyISAM Default Charset=utf8 Collate=utf8_spanish_ci
campos:
login varchar(45) COLLATE utf8_spanish_ci NOT NULL COMMENT 'Login de entrada del usuario, UNICO',
password varchar(45) COLLATE utf8_spanish_ci NOT NULL COMMENT 'Password. md5',
nombre varchar(100) COLLATE utf8_spanish_ci NOT NULL COMMENT 'Nombre del usuario',
idacl int(11) NOT NULL COMMENT 'Identificador de la ACL: 0-Disabled, 1-Super Administrador, 2-Redactor, 3-Editor',
PRIMARY KEY (`login`)
- Test/Pruebas/Instalacion ===========================
Clonar el git en un directorio (se incluye el codeigniter) y volcar en la base de datos el fichero .sql que se encuentra en la carpeta SQL.
Hay que crear, ademas la capeta uploads para los ficheros y darla permisos de escritura para el servicio web,
Poner un usuario con las siguientes características: login: administrador --> Por ejemplo password: 81dc9bdb52d04dc20036dbd8313ed055 --> hash(md5) de la contraseña 1234 nombre: Super Administrador --> Por ejemplo idacl: 1 --> Corresponde al Super Administrador que tiene todos los derechos.
- Funcionacionamiento - Manual de Uso ======================================