Intercettare l'evento di fine corso
Intercettare l'evento di fine corso
E' possibile intercettare l'evento di fine corso per poter eseguire del codice custom?
Grazie,
Luca
Grazie,
Luca
Re: Intercettare l'evento di fine corso
Una soluzione da poter integrare nella nuova versione potrebbe essere la seguente?
Nel file /appLms/lib/lib.stats.php:
......
296: //increment coursecompleted if this course is in a coursepath
297: require_once(_lms_.'/lib/lib.coursepath.php');
298: $cpmodel = new CoursePath_Manager();
299: $cpmodel->assignComplete($idCourse, $idUser);
300:
301: courseCompletedEvent($idUser, $idCourse, date("Y-m-d H:i:s",time()));
302: }
303: return true;
304:}
305:
306:function courseCompletedEvent($idUser, $idCourse, $completeDate) {
307:
308: require_once(_lms_.'/lib/lib.course.php');
309: require_once(_base_.'/lib/lib.eventmanager.php');
310:
311: $event =& DoceboEventManager::newEvent('UserCourseCompleted', 'status', 'completed', '1', 'Course Completed');
312:
313: $event->deleteOldProperty();
314: $event->setProperty('idUser', $idUser);
315: $event->setProperty('idCourse', $idCourse);
316: $event->setProperty('completeDate', $completeDate);
317:
318: DoceboEventManager::dispatch($event);
319:}
320:
321:?>
Creazione del nuovo file /appCore/lib/lib.coursecompletednotifier.php che fondamentalmente non fa niente ma così si può fare l'override da customscripts:
<?php defined("IN_FORMA") or die('Direct access is forbidden.');
require_once(_base_.'/lib/lib.event.php' );
/**
* This is the class for ClassEvents in Docebo
*
* @package admin-core
* @subpackage event
* @version $Id: lib.coursecompletednotifier.php 2019-02-12 15:44:42Z luca $
*/
class DoceboCourseCompletedNotifier extends DoceboEventConsumer {
function _getConsumerName() {
return "DoceboCourseCompletedNotifier";
}
function actionEvent( &$event ) {
/*require_once(_lms_.'/lib/lib.course.php');
require_once($GLOBALS['where_lms'].'/lib/lib.subscribe.php');
parent::actionEvent($event);
$idUser = $event->getProperty('idUser');
$idCourse = $event->getProperty('idCourse');
$completeDate = $event->getProperty('completeDate');
$course = new DoceboCourse($idCourse);
$acl_man =& Docebo::user()->getACLManager();*/
return true;
}
}
?>
Su MySql sarebbero da aggiungere i seguenti record:
In core_event_class: INSERT INTO core_event_class (idClass, class, platform, description) VALUES (44, 'UserCourseCompleted', 'lms-a', '');
In core_event_consumer: INSERT INTO core_event_consumer (idConsumer, consumer_class, consumer_file) VALUES (6, 'DoceboCourseCompletedNotifier', '/lib/lib.coursecompletednotifier.php');
In core_event_consumer_class: INSERT INTO core_event_consumer (idConsumer, idClass) VALUES (6, 44);
Sarebbe possibile sapere se risulta essere una soluzione percorribile e soprattutto performante e se fosse possibile integrarla nelle prossime release così da non dover effettuare customizzazioni al codice core?
Grazie,
Luca
Nel file /appLms/lib/lib.stats.php:
......
296: //increment coursecompleted if this course is in a coursepath
297: require_once(_lms_.'/lib/lib.coursepath.php');
298: $cpmodel = new CoursePath_Manager();
299: $cpmodel->assignComplete($idCourse, $idUser);
300:
301: courseCompletedEvent($idUser, $idCourse, date("Y-m-d H:i:s",time()));
302: }
303: return true;
304:}
305:
306:function courseCompletedEvent($idUser, $idCourse, $completeDate) {
307:
308: require_once(_lms_.'/lib/lib.course.php');
309: require_once(_base_.'/lib/lib.eventmanager.php');
310:
311: $event =& DoceboEventManager::newEvent('UserCourseCompleted', 'status', 'completed', '1', 'Course Completed');
312:
313: $event->deleteOldProperty();
314: $event->setProperty('idUser', $idUser);
315: $event->setProperty('idCourse', $idCourse);
316: $event->setProperty('completeDate', $completeDate);
317:
318: DoceboEventManager::dispatch($event);
319:}
320:
321:?>
Creazione del nuovo file /appCore/lib/lib.coursecompletednotifier.php che fondamentalmente non fa niente ma così si può fare l'override da customscripts:
<?php defined("IN_FORMA") or die('Direct access is forbidden.');
require_once(_base_.'/lib/lib.event.php' );
/**
* This is the class for ClassEvents in Docebo
*
* @package admin-core
* @subpackage event
* @version $Id: lib.coursecompletednotifier.php 2019-02-12 15:44:42Z luca $
*/
class DoceboCourseCompletedNotifier extends DoceboEventConsumer {
function _getConsumerName() {
return "DoceboCourseCompletedNotifier";
}
function actionEvent( &$event ) {
/*require_once(_lms_.'/lib/lib.course.php');
require_once($GLOBALS['where_lms'].'/lib/lib.subscribe.php');
parent::actionEvent($event);
$idUser = $event->getProperty('idUser');
$idCourse = $event->getProperty('idCourse');
$completeDate = $event->getProperty('completeDate');
$course = new DoceboCourse($idCourse);
$acl_man =& Docebo::user()->getACLManager();*/
return true;
}
}
?>
Su MySql sarebbero da aggiungere i seguenti record:
In core_event_class: INSERT INTO core_event_class (idClass, class, platform, description) VALUES (44, 'UserCourseCompleted', 'lms-a', '');
In core_event_consumer: INSERT INTO core_event_consumer (idConsumer, consumer_class, consumer_file) VALUES (6, 'DoceboCourseCompletedNotifier', '/lib/lib.coursecompletednotifier.php');
In core_event_consumer_class: INSERT INTO core_event_consumer (idConsumer, idClass) VALUES (6, 44);
Sarebbe possibile sapere se risulta essere una soluzione percorribile e soprattutto performante e se fosse possibile integrarla nelle prossime release così da non dover effettuare customizzazioni al codice core?
Grazie,
Luca
Re: Intercettare l'evento di fine corso
Ciao Luca
la tua proposta è interessante .
ti segnalo che con la 2.0 è già stato introdotto un gestore di eventi / hook e sono stati inseriti diversi eventi nel sistema a cui funzioni esterne possono attaccarsi per eseguire codice custom .
con la 2.2 il sistema viene ulteriormente potenziato, sono meglio definiti gli standard degli eventi sollevati , gil numero di eventi segnalati aumenta
Claudio
la tua proposta è interessante .
ti segnalo che con la 2.0 è già stato introdotto un gestore di eventi / hook e sono stati inseriti diversi eventi nel sistema a cui funzioni esterne possono attaccarsi per eseguire codice custom .
con la 2.2 il sistema viene ulteriormente potenziato, sono meglio definiti gli standard degli eventi sollevati , gil numero di eventi segnalati aumenta
Claudio
Cercate nel forum le riposte prima di chiedere. Check the forum before posting
---------------
Claudio Anelli
Joint Technologies - Sistemi avanzati per l'information technology
http://www.joint-tech.com
---------------
---------------
Claudio Anelli
Joint Technologies - Sistemi avanzati per l'information technology
http://www.joint-tech.com
---------------
Re: Intercettare l'evento di fine corso
Ciao Claudio,
purtroppo posso solo scaricare la 2.0 e in quella guardando il codice ho visto che ci sono degli Events nello specifico quelli in appLms/Events/Lms ma non ho trovato nulla che si riferisse alla conclusione del corso.
Inoltre sarebbe possibile avere qualche delucidazione su come intercettarli per poter eseguire codice custom magari con un esempio?
Grazie,
Luca
purtroppo posso solo scaricare la 2.0 e in quella guardando il codice ho visto che ci sono degli Events nello specifico quelli in appLms/Events/Lms ma non ho trovato nulla che si riferisse alla conclusione del corso.
Inoltre sarebbe possibile avere qualche delucidazione su come intercettarli per poter eseguire codice custom magari con un esempio?
Grazie,
Luca