cierre de cursos y API de eventos

cierre de cursos y API de eventos

de Xavier Paz -
Número de respuestas: 2
Buenas, soy nuevo por estos lares pero llevo tiempo trabajando con Moodle, haciendo desarrollos a medida y cosas por el estilo.

El caso es que esta vez me han pedido una cosa algo más complicada. La empresa para la que trabajo quiere que los cursos por temas se cierren (se hagan invisibles a los usuarios) según una fecha marcada. ¿Problemas? primero, por lo que tengo entendido, los cursos por temas no tienen restriccion de tiempo. La empresa no quiere cambiar de formato, y tampoco quiere establecer hitos en los cursos, por tanto no queda otra que buscar la forma de implementar dicha característica.

Inicialmente pensé en hacer un bloque o un módulo pero necesitamos algo que se ejecute de forma automática sin necesidad de control. Fue entonces cuando me enteré del famoso API de eventos, que según parece permite que unos módulos se comuniquen con otros mediante mensajes.

He estado mirando la poca documentación acerca de la API y la verdad es que no da muchas pistas, y en el código de Moodle no hay muchos ejemplos...triste

Por lo que he podido investigar hasta ahora necesitas un manejador del evento (event handler) que se puede meter a mano en la BD, una carpeta db dentro del directorio del módulo en la que tiene que existir un archivo events.php donde debes definir los manejadores asociados a los distintos eventos. Y por último necesitas insertar los desencadenantes (triggers) de los eventos en el código. Por último necesitas un fichero donde esten implementadas las funciones asocidas a dichos eventos.

He podido crear los manejadores de eventos y estos se han insertado en la tabla mdl_events_handlers. He probado los triggers y efectivamente los eventos se insertan en la cola de eventos de mdl_events_queue y los manejadores que van a gestionar dichos eventos se almacenan en mdl_events_queue_handlers. Hasta aquí todo normal.

Lo difícil viene ahora. ¿Como hago para hacer que ese evento ocurra y se ejecute la función del módulo asociada a dicho evento?

Es decir, yo disparo el trigger a través del código, moodle almacena el evento en la cola de eventos y el manejador en la de manejadores. Pero después no pasa nada ¿Cuál es el script o función que gestiona esas tablas y maneja los eventos? ¿Existe algo así como un cron que compruebe estas tablas cada poco tiempo y ejecute los eventos que correspondan?

He probado de todo. Cree un evento en la tabla mdl_events con el mismo id que el de la tabla mdl_events_queue pero el evento no se dispara y la función asociada no se ejecuta.

¿Alguien tiene alguna idea de por donde debo tirar? Se que esta parte está muy verde pero el uso de los eventos entre módulos es, según mi opinión, la forma más facil de hacer esto.

Saludos
Promedio de valoraciones: -
En respuesta a Xavier Paz

Re: cierre de cursos y API de eventos

de ISMERAÍ RUBÍ GARCÍA ROMÁN -

Hola, después de 5 años, me encuentro la misma situación que tu! y veo que no te dieron respuesta....

Ahora te pregunto a ti, encontraste la solución???

Espero que aun sigas por estos lares... 

Saludos Cordiales, espero respuesta sonrisa

En respuesta a ISMERAÍ RUBÍ GARCÍA ROMÁN

Re: cierre de cursos y API de eventos

de David Monllaó -

Hola,

No se como va con la primera version de la events API pero en 2.5 veo un evento course_completed; a partir de 2.6 puedes usar la 2a version de la API de eventos http://docs.moodle.org/dev/Event_2#Existing_events, mirate core\event\course_completed a ver si te sirve.

PD: Perdon por la falta de acentos.