Realizado

Autoescuela Programación en Codeigniter3

Publicado em 01 de Dezembro de 2016 dias na TI e Programação

Sobre este projeto

Aberto

Autoescuela es una aplicación web en CodeIgniter 3 (modelo vista controlador) para llevar el control de Alumnos, Temarios, Videoclases, y Tests para practicar sacarse Permisos de Conducción, con sistemas de Cuentas de Usuario, Temas, Tests, Videoclases, Evolución de Alumnos y Mensajería interna.

Tiene dos tipos de Usuarios con vistas muy distintas de las mismas cosas: Profesores y Alumnos. Los Profesores pueden crear y editar Usuarios, Temas, Videoclases y Tests, ver la Evolución de cualquier Alumno y enviar Mensajes internos. Los Alumnos pueden ver Temas, Videoclases y su propia Evolución, y hacer Tests de prueba.


Existe la particularidad de que hay dos "versiones" de la aplicación, una local y otra remota. Las dos usan la misma base de datos y la diferencia entre ellas es que sólo en la local pueden los Alumnos acceder a una función para hacer Tests con ayuda.

Una descripción más detallada y casi completa está en el adjunto documentacion.pdf.

Mucha de la funcionalidad está terminada, pero no toda; hay bugs y ciertas modificaciones pendientes. Hay una lista de tareas al final de este texto. El código está en un repositorio GIT en Bitbucket.
Tenemos una demo con la versión actual en http://s570327198.mialojamiento.es/autorocha

Las credenciales de prueba son:
- Profesor:
    usuario 494949
    contraseña 797019
- Alumno:
    usuario 67768678
    contraseña 933630

El objetivo es terminar el proyecto y las modificaciones pendientes.

Normas de trabajo:
- Comentar el código. Toda función que cambies o crees, debe tener un comentario (en español) estilo PHPdoc (https://www.phpdoc.org/docs/latest/index.html). Imita los que ya haya en el código.
Ignorar los que no tienen comentario, salvo que te sobre tiempo.
- No reinventes la rueda. Busca funciones en los helpers y libraries que ya estén en el proyecto antes de crear tus propias funciones. Usa Query Builder (http://www.codeigniter.com/user_guide/database/query_builder.html) para acceder a la base de datos, no consultas directas, salvo que sea absolutamente necesario (como un insert on duplicate key.)

- Consúltanos cualquier detalle sobre la aplicación sobre el que tengas dudas, especialmente sobre el PDF de documentación y la estructura jerárquica de los Temas.

Tareas Prioritarias (numeradas para fácil referencia, pero no ordenadas):
1.- Profesor Nuevo Test: añadir campo "Tiempo" para el examen.
2.- Parte de Alumno como está en la documentación PDF, más estas tareas.
3.- Alumno Temario: el menú de la columna derecha no sale en responsive. Que salga antes de las Diapositivas.
4.- Alumno Listado de Test Programados/Examen: falta realizar test sin ayuda.
5.- Alumno Listado de Test Programados/Examen: añadir columnas "Preguntas" (número de preguntas del Test), "Tiempo" (tiempo del Test), "Resultado" (icono de aprobado ¿verde? si alguno de los intentos fue aprovado, icono de suspendido ¿rojo? en otro caso).
6.- Alumno Test Programados/Examen Con Ayuda/Sin Ayuda: las preguntas no contestadas cuentan como fallos en los intentos. La condición de aprobado es tener como máximo 3 fallos.
7.- Alumno Test Programados/Examen Con Ayuda/Sin Ayuda: falta el tiempo. Temporizador que muestre el tiempo que se está empleando cada segundo, con el tiempo del Test al lado: "00:21.36 de 01:30". Si se acaba el tiempo sin darle a Finalizar, guardar el intento tal y como esté (¿AJAX?).
Por robustez, cuando empiece a guardar automáticamente, deshabilita el botón "Finalizar" y cámbiale el texto a "Autoguardando". Cuando haya guardado, cambia el texto del botón a "Volver", y que ya no guarde nada del intento.
8.- Alumno Test Programados/Examen Con Ayuda: La explicaciones de cada pregunta empiezan ocultas. Al marcar alguna respuesta, aparecen (es la "ayuda").
9.- Alumno Test Programados/Examen Con Ayuda/Sin Ayuda/Preguntas & Respuestas: Falta slider para cambiar la fuente a demanda.
10.- Listado de Test Programados/Examen: no está ventana modal de Información del Test, pero esto déjalo sin hacer porque tenemos que revisar si hay realmente info que mostrar, que no esté ya en el listado de Tests.
11.- Profesor Editar Test/Listado de Tests [Bug]: cuando se borra una pregunta sin imagen, o un Test con una pregunta sin imagen, se intenta borrar la ruta y lógicamente falla.
12.- Alumno Listado de Test Programados/Examen [Bug]: Si se alcanza el número de intentos, realizar test con ayuda se rompe.
13.- Alumno Test Examen con Ayuda [Bug]: se rompe al finalizar.

Tareas No Prioritarias (numeradas para fácil referencia, pero no ordenadas):
50.- Login: El link "olvidaste tu contraseña" no funciona. Te debe llevar a un formulario que pide un usuario. Cuando suba el formulario, el sistema regenera el password de ese usuario y le manda un mensaje de email a un "email del sistema" diciendo "La nueva contraseña del usuario X es Y."
Ya se lo comunicarán fuera del sistema.
51.- En general, todos los títulos, etiquetas, etc. Que estén con la primera letra de todas las palabras en mayúsculas.
52.- Barra de navegación: poner icono que avise de mensajes nuevos y enlace a verlos.
53.- Base de datos: campos opcionales que sean default null. No guardar cadena vacía.
54.- Base de datos: en la tabla `temas_permisos` se generan asociaciones tema-permiso repetidas. En realidad, podrías usar la terna (`tema_id`, `permiso_id`) como primary key, en vez de `id`. Como mínimo, debe haber un index unique en el par (`tema_id`, `permiso_id`).

55.- Profesor Listado de Temas: Cualquier Tema o Tema Padre se puede arrastrar y soltar para cambiar su Padre (como en los menús en Wordpress).
56.- Profesor Lista de Usuarios: No está el botón Redactar Mensaje, que es una ventana modal con un autocompletar de usuario y texto de mensaje a enviar. Añadir a la columna Opciones un botón para abrir la misma ventana modal, pero ya con el usuario rellenado (o incluso sin mostrar el autocompletar.)
57.- Profesor Crear Nuevo Usuario: la validación deja pasar DNIs con letras, sólo pueden ser números.
58.- Profesor Editar Usuario: siempre falla la validación del campo DNI.
59.- Profesor Editar Usuario: etiqueta del campo "Nombres" que sea "Nombre".
60.- Profesor Editar Tema: mejor que pinchar en una Diapositiva para borrarla, botón de borrar en la esquina superior derecha (una X o algo) y la Diapositiva que sea un link a verla completa (ponle target="_blank").
61.- Profesor Nuevo Test/Otras Pantallas: si falla la validación, hay que mantener el valor de los campos que hayan pasado la validación. Esto seguro que pasa también en otras pantallas. Codeigniter tiene soporte para esto con la función set_value().

62.- Profesor Autoescuelas: pantallas para crear, editar y deshabilitar Autoescuelas. Campos de una Autoescuela: Nombre, Dirección, Municipio, Provincia, Teléfono, Email.
63.- Base de datos: la Provincia y Municipio de la nueva entidad, "Autoescuela" son selectores con datos de tablas estándares de provincias y municipios de España, que tenemos disponibles. Se supone que la Autoescuela sólo necesita guardar una referencia a un municipio. Cuando creas una Autoescuela, el selector de Municipio empieza deshabilitado y vacío.
Cuando seleccionas Provincia, el selector de Municipio se rellena con sólo los Municipios de la Provincia seleccionada, mediante AJAX. Te digo directamente AJAX porque tener cargados ocho mil municipios es ineficiente. Esto lo hemos hecho igual en varias aplicaciones en Codeigniter, si quieres te paso código de ejemplo.

64.- Usuarios de tipo Alumno: campo Autoescuela. Selector para asociar el Alumno a una Autoescuela.
65.- Usuarios de tipo Alumno: el campo número de veces a realizar el test es las veces que se le permite hacer cada test. Por defecto es 3.
66.- Pregunta de Test: Enunciado que sea textarea.
67.- Pregunta de Test: Resumen se llama Explicación y es la explicación de la respuesta correcta. Que ocupe todo el ancho y sea más alto.
68.- Pregunta de Test: que se previsualice el vídeo encima de la URL. Columna un poco más ancha para ello.
69.- Permisos para que usuarios de tipo Alumno no tengan acceso a Temarios concretos, Tests concretos, Videoclases concretas. Además permiso para que pueda ver un Test concreto en el mismo modo que se ve en el modo local (vista completa).
70.- Alumno Videoclases/Temario: que empiece abierto el árbol del tema que se carga por defecto.
71.- Profesor Editar Tema [Bug]: si edito un Tema "temario" (raíz) para colocarlo como hijo de un Tema padre (no raíz), dicho Tema padre se convierte en "temario". Es decir, pierde la relación con su padre. Esto entristece a sus hermanos.
Si te sirve de algo, se trata de que cuando se inserta o elimina un elemento en/de una jerarquía, el resto de las relaciones se mantengan iguales. Por ejemplo, dada la jerarquía de Temas padre:
        Temario [Permiso A1]
            |_ Hijo1
                |_ Nieto1
            |_ Hijo2
            |_ Hijo3
    la operación "hacer que Temario sea hijo de Nieto1" debería provocar esta jerarquía:
        Hijo1 [Permiso A1]
            |_ Nieto1
                |_ Temario
                    |_ Hijo2
                    |_ Hijo3
    si sobre esta jerarquía ahora hago la operación "hacer que Hijo1 sea hijo de Temario", debería quedar la jerarquía original. Se podría hacer de otra forma, pero esto parece lo más intuitivo a la hora de modelar Temas.
Si quiero mover Temario de esa forma, querría que se mantuviesen las relaciones con Hijo2 e Hijo3, no romperlas. Mantener la relación entre Temario e Hijo1 lógicamente es imposible en este ejemplo.

Categoria TI e Programação
Subcategoria Programação
Qual é o alcance do projeto? Alteração média
Isso é um projeto ou uma posição de trabalho? Um projeto
Tenho, atualmente Eu tenho especificações
Disponibilidade requerida Período integral
Experiência nesse tipo de projeto Sim (Eu já gerenciei esse tipo de projeto)
Funções necessárias Desenvolvedor

Prazo de Entrega: 31 de Dezembro de 2016

Habilidades necessárias

Outro projetos publicados por D. O. L.