Mostrando entradas con la etiqueta XML. Mostrar todas las entradas
Mostrando entradas con la etiqueta XML. Mostrar todas las entradas

martes, 13 de noviembre de 2007

TortoiseSVN

Para descargar la API del Timeline he utilizado el programa TortoiseSVN, exactamente el archivo:
“TortoiseSVN-1.4.5.10425-win32-svn-1.4.5.msi”
que se puede encontrar la página oficial.
TortoiseSVN es un programa cliente SVN que se integra en la interfaz de Windows (windows explorer).



Cambiando de tema, dentro de la carpeta de la API de Timeline, existe un directorio llamado “images”, que es donde se almacena las imágenes que utiliza la API para construir las burbujas, los puntos referentes a los eventos, etc. Cambiando las imágenes por otras que conserven el mismo nombre, podemos personalizar, si cabe aún más, la visualización del Timeline. Aunque existen también otras alternativas como personalizar los eventos en el archivo XML, con los campos icon, image, ... (Para más información remítase a la entrada anterior).



viernes, 9 de noviembre de 2007

Formato de los Eventos y Accesibilidad

Sigo programando la ardua tarea de filtrar la información del Timeline, y llegados a este punto he pensado que estaría bien comentar el formato que he utilizado en las burbujas del Timeline, que básicamente es el reflejo de la información almacenada en el archivo XML. He intentado mantener las misma filosofía para mostrar la información como cuando se presenta los registros en formato HTML.



Para formar el título de la burbuja, utilizo el nombre del curso, si es que la acción se asocia alguno, de lo contrario nada acerca del curso (site), el nombre completo del usuario a cargo de la acción, la acción especifica y por último, la imagen para mostrar del usuario.

Dentro de la descripción está la información de la I.P. que tenía el usuario en ese instante además del nombre completo del usuario, la acción que ha realizado y por último la información del evento (nombre del curso completo, Id, etc.). Se repite el nombre completo del usuario como la acción tanto en el título como en la descripción, para poder proporcionar los mismos enlaces que se proporcionan en la versión HTML.



Para completar la disertación dejaré un pequeño ejemplo de como debe de ser el archivo XML (extraído de la página oficial):

The XML format used for Timeline goes somewhat like this:

  • Everything is contained by a <data /> element
    • The <data /> element can have the following attributes:
      • wiki-url -- Base url used to gin up url's for each event; by appending the wiki-section and the event's title; often a MediaWiki wiki URL
      • wiki-section -- MediaWiki wiki section

    • Inside <data>events</data> go a number of <event>content</event> elements, the order of these is unimportant.

    • Each <event /> element can have the following attributes:
      • start -- in full date format (e.g. "May 20 1961 00:00:00 GMT-0600"")
      • latestStart -- for imprecise beginnings...
      • earliestEnd -- for imprecise ends...
      • end -- same date format as start
      • isDuration -- either "true" or "false", if false the item will be drawn as a dot with a pale bar drawn behind it
      • title -- text title that goes next to the bar in the timeline
      • description -- more text for the bubble
      • image -- url to an image that will be displayed in the bubble
      • link -- the bubble's title text will become a hyper-link to this address.
      • icon -- this image will appear next to the title text in the bubble.
      • color -- color of the bar to display in the timeline
      • textColor -- color of the text to display next to the bars


  • The "content" part is what will be displayed inside the bubble that pops up when the event is clicked
    • Should be escaped/formated HTML.

A example:

<data
wiki-url="http://simile.mit.edu/shelf/"
wiki-section="Simile JFK Timeline">
<event
start="Sat May 20 1961 00:00:00 GMT-0600"
title="'Bay of Pigs' Invasion">

</event>
<event
start="Wed May 01 1963 00:00:00 GMT-0600"
end="Sat Jun 01 1963 00:00:00 GMT-0600"
isDuration="true"
title="Oswald moves to New Orleans">
Oswald moves to New Orleans, and finds employment at the William
<!-- This is "content" -->


B. Riley Coffee Company. <i>ref. Treachery in Dallas, p 320</i>
<!-- This is "content" -->

</event>
<event>

...
</event>
</data>

domingo, 4 de noviembre de 2007

Filtros & Eventos

Para filtrar los eventos podemos utilizar nuestras propias funciones. Dichas funciones pueden utilizan el potencial que nos brindan las expresiones regulares de Javascript. Un ejemplo de definición de una función de filtraje sería:

var regex = new RegExp(chain /* Patrón o cadena a filtrar */, "i");

filterMatcher = function(evt) {

return regex.test(evt.getDescription());

};

Se define una expresión regular con la cadena o patrón a buscar. En este caso, se buscará el string dentro de la descripción de cada evento (el texto que hay entre las etiquetas de <event></event>), los que valúen a cierto serán visibles y los que valúen a falso no se mostrarán. Después se asigna está función a las bandas del Timeline que queremos filtrar, y por último repintamos el Timeline:

for (var i = 0; bandIndices.length; i++)
{
var bandIndex = bandIndices[i];
timeline.getBand(bandIndex).getEventPainter().
setFilterMatcher(filterMatcher);

}

timeline.paint();

Para poder trabajar con filtros es necesario saber algunos métodos de la clase Event, estos métodos nos sirven para acceder a la información (los eventos) ya cargada con el método loadXML del objeto Timeline:

Straight from the code:
Timeline.DefaultEventSource.Event.prototype
Event Methods:
getID: function() { return this._id; },
isInstant: function() { return this._instant; },
isImprecise: function() { return this._start != this._latestStart
|| this._end != this._earliestEnd; },
getStart: function() { return this._start; },
getEnd: function() { return this._end; },
getLatestStart: function() { return this._latestStart; },
getEarliestEnd: function() { return this._earliestEnd; },
getText: function() { return this._text; },
getDescription: function() { return this._description; },
getImage: function() { return this._image; },
getLink: function() { return this._link; },
getIcon: function() { return this._icon; },
getColor: function() { return this._color; },
getTextColor: function() { return this._textColor; },
getProperty: ...
getWikiURL: function() { return this._wikiURL; },
getWikiSection: function() { return this._wikiSection; },
setWikiInfo: function(wikiURL, wikiSection) { ... }

Por último decir, que tengo la pestaña de Participante casi acabada. Tengo que ir implementando los demás filtros de forma más personalizada. Aparentemente la pestaña de Fechas y Acciones dentro de la página de registros, supondrán un poco más de dedicación.

“No cambié de canal, mañana más”

jueves, 1 de noviembre de 2007

getxml.php v2.0

He corregido un pequeño fallo dentro de dicho archivo.

En resumen, el archivo getxml.php crea a partir de la base de datos de Moodle el archivo xml con la información de los eventos solicitados a través de la página /moodle/course/report/log/index.php. En dicho archivo se va concatenando la información de los eventos en una variable de tipo string (llamada, $file_xml) y al final se imprime todo (echo($file_xml);). Pero esta forma de almacenar la información implicaba que cuando el numero de eventos excedía una cantidad limitada (unos XX KBytes) se producía este error:



Como no sabía si existían limitaciones de variables con Moodle o en PHP, opté por ir imprimiendo en cada iteración un evento para solucionar el problema, y funcionó. El Guru Pigui, me dijo que seguramente existe una limitación de tamaño a nivel de programación en PHP o en el servidor.

domingo, 28 de octubre de 2007

Change the course

Jordi, me comentó que para evitar la carga completa de la página de Informes->Registros, la página de Moodle en la que estoy trabajando, exactamente el fichero moodle/course/report/log/index.php, modificara únicamente el Timeline para agilizar el servidor y mejorar la eficiencia.

Actualmente, estoy trabajando en esta tarea, que consiste en que al cambiar los selectores no se tenga que volver a pedir el documento HTML entero al servidor, sino que solo se actualice el Timeline. Para hacerlo utilizaré filtros, es decir, modificar el Timeline desde el cliente y sin necesida de establecer conexión con el servidor. Pero el problema es que existen algunos casos donde filtrando la información mostrada no es suficiente y hay que recargar los eventos. Para ilustrar este ejemplo supondré que tengo que cambiar una fecha determinada para ver la actividad de todos los días (opción disponible). A la hora de hacer esto hay que controlar los eventos que ya existen y los que tengo que añadir, este punto requiere trabajo en el cliente (administración de eventos) y en el servidor (la petición de los eventos a añadir en el Timeline). Por eso he pensado que sería mejor volver a cargar el archivo XML entero (donde está la información necesaria para dibujar los eventos), una solución sencilla y en la que estoy trabajando actualmente.

De esta forma dependiendo del estado estableceré dos posibles acciones:
  • Si falta información
    • Recargo los eventos del XML(getxml.php)
    • Filtrar dependiendo del estado anterior

  • Filtro los eventos liberando el servidor más trabajo

La tarea propuesta por Jordi, empieza ha dar sus frutos después de un tiempo. He conseguido que al cambiar el curso se cambie el Timeline sin tener que recargar la página pero si pidiendo de nuevo la información de los eventos. El visitar la Wiki de Timelines fue decisivo.

... to be continued

lunes, 15 de octubre de 2007

getxml.php, O.K.

He acabado de solucionar los problemas que había descrito anteriormente.

El primer problema es que habían caracteres inválidos en la variable $getaxml, dicha variable tenía comillas dobles repetidas e innecesarias. Que afectaban directamente a la función loadXML.

El segundo problema era que se realizaba una llamada a la función build_logs_array en de la librería /moodle/course/lib.php con un parámetro incorrecto.

También he creado el archivo /moodle/course/report/log/timeline.lib.php con dos sencillas funciones que se utilizan en /moodle/course/report/log/getxml.php, comentadas en formato javadoc.

jueves, 11 de octubre de 2007

Reordenando

Hoy, he estado trabajando en cambiar la función que generaba el archivo xml, que estaba almacenada en /moodle/course/report/log/lib.php al nuevo archivo /moodle/course/report/log/get_xml.php.

Me he encontrado con dos problemas que espero solucionar lo antes posible. El primero es que el timeline no se muestra bien y el segundo que es independiente del primero, la información de los eventos que genera el archivo get_xml.php, no inserta ningún evento, seguramente se trata de una llamada errónea en la obtención de los logs de la base de datos de Moodle.

martes, 9 de octubre de 2007

"Revisando código"

Tras la reunión del pasado lunes, estoy revisando el código ya hecho de timelines por los compañeros del DFWikiteam.

De momento tengo que cambiar el funcionamiento de generar un archivo para cada usuario, donde se encuentran los eventos solicitados, por el de llamar a una nueva página php para generar el xml de forma más dinámica, con el fin de evitar que cualquier persona pueda ver los logs (xml’s guardados en el disco) solicitados por los demás. La idea propuesta por Jordi Piguillem, es de los más acertada. Primero me centraré en conseguir esto y después comprobaré la seguridad, al igual que lo hace Moodle.

He conseguido solucionar el problema que tenía con la API de Timelines. Resulta que no había descargado todos los archivos necesarios para el correcto funcionamiento del Timeline. Y por este motivo tenía que acceder constantemente a la página oficial.

jueves, 4 de octubre de 2007

Identifícate

Había detectado un fallo cuando se cambiaban los participante.

Cuando se seleccionaba de “Todos los usuarios” a “Invitado”, siempre se pintaban en el timeline los mismos eventos. Esto era debido a que tras haber conseguido los registros de todos los usuarios, se creaba el archivo 0_info_timeline.xml (“id. del participante solicitado”_info_timeline.xml, en este caso todos) y al pedir el registro del invitado creaba otro archivo con un número distinto, pero en la inicialización de variables del timeline solo se utilizaba el archivo 0_info_timeline.xml.

Este error conceptual lo he solucionado cambiando la “id. del participante” por la “id. de la persona que esta accediendo a los registros” que era en principio lo que tenia en mente, de esta forma solo hay un archivo por usuario en el servidor. Otra razón era la de evitar conflictos con los archivos.

Más detalladamente, he insertado un input hidden con el número de identificación del usuario y desde el JavaScript tomo el valor guardado, esto implica que la inicialización de las variables del timeline debe ser posterior a la definición del input.