jueves, 20 de diciembre de 2007

Reunión y Nueva Tarea (Grades)

El pasado lunes, en la reunión con Marc(Ludo) y Pigui, me explicaron cual sería la última tarea a implementar, grades para páginas wiki en Moodle 1.9. Hoy, empezaré a documentarme y buscar información del funcionamiento de los grades.

La tarea de los grades constará de cuatro etapas (by Ludo):
  1. Documentación: Escribir un informe de los objetivos a cumplir, explicando la semántica del funcionamiento.
  2. Interfaz: Bocetos iniciales de el aspecto que tendrá las páginas html.
  3. Tablas: Diseño de las tablas a añadir en la base de datos. Con la ayuda del incombustible Pigui.
  4. Programar: Implementar



Más sobre la tarea de Wikibooks...

Se han añadido los emoticones para substituir el conjunto de los caracteres que los definen.

Siguiendo con las imágenes, he acabado la tarea de añadir imágenes en el PDF. Una de las muchas limitaciones que tiene la clase TCPDF, es que el método implementado(Image) utiliza como parámetro la dirección completa de disco del archivo que se tiene que añadir, es decir, la imagen tiene que estar almacenada en el disco duro.

El método Image, abre el archivo especificado para lectura (que tiempos aquellos los de S.O.), después calcula la altura y anchura, y finalmente lo guarda en un atributo interno de la clase TCPDF (images, que es un vector de imágenes). Como cada imagen que hay en la página nwiki hay que descargarla al disco y calcular la altura y anchura, el tiempo a la hora de crear el PDF se incrementa, y más si el PDF se tiene que crear dos veces para poder calcular los enlaces internos (de lo contrario, nos sabríamos cuantas páginas ocupa cada nwiki), como este comportamiento es ineficiente, implementé dos métodos nuevos a la clase que sirven para hacer un copy & paste del vector de imágenes. Antes de descargar la imagen se comprueba si ya existe en el vector o no.

Al trabajar con archivos y ficheros hay que tener siempre en cuenta algunas particularidades dependientes del sistema de ficheros del S.O., como por ejemplo los permisos, el espacio disponible en el disco, que no existan conflictos con los ficheros existentes, etc. Los criterios que he escogido son los siguientes:
  • Para cada imagen, se descarga el disco duro una sola vez, si existe cualquier error a la hora de leer la url de la imagen, crear el archivo en el disco o escribir los datos en el disco, se interrumpe la creación del pdf y se elimina del disco duro el archivo.
  • Tras pasar la información de la imagen al vector de imágenes de la clase TCPDF, se elimina la imagen.
  • Cada usuario tendrá una fichero dentro del fichero de /tmp de tcpdf. De está forma se evita que una misma imagen pueda ser sobrescrita o evitar comportamientos inesperados.
  • Habilitar correctamente un fichero en el que poder escribir para poder almacenar imágenes temporalmente.

He añadido como tags soportados: <dl> (definition list), <dt>, <dd> y <div> (tabla de contenidos).

Las páginas nwiki que tengan la cadena " %%% " será sustituida por el tag <br>.

Después de trabajar con la clase TCPDF comentaré algunas impresiones. Dentro de las librerías (o bibliotecas) de Moodle para crear PDFs (que conozca), la librería de TCPDF es la más completa. La clase es bastante modular, pero no es una clase con la que se pueda trabajar únicamente sabiendo las funciones públicas disponibles, hay que tener en cuenta aspecto internos de la clase, como por ejemplo las unidades utilizadas (pixels, mm, cm, puntos, ...). La función que se utiliza como parser, para los documentos html es bastante limitada en algunos aspectos, como por ejemplo, hacer listas de listas (algo que ya comente), introducir imágenes de tamaño considerable (al menos que no definamos para cada imagen la escala que queremos), etc.

Nota: Algunas de las funciones PHP que he utilizado, solo están disponibles a partir de la versión PHP 4. Una consideración importante a tener en cuenta.

No hay comentarios: