Intercettare l'evento di fine corso

Cosa cambiereste? Che funzionalità aggiungereste? Discutiamone qui ....
Post Reply
User avatar
lgreco82
FormaLms User
Posts: 38
Joined: Wed Jun 27, 2018 2:24 pm
Version: forma.lms 2.0

Intercettare l'evento di fine corso

Post by lgreco82 »

E' possibile intercettare l'evento di fine corso per poter eseguire del codice custom?

Grazie,
Luca
User avatar
lgreco82
FormaLms User
Posts: 38
Joined: Wed Jun 27, 2018 2:24 pm
Version: forma.lms 2.0

Re: Intercettare l'evento di fine corso

Post by lgreco82 »

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
User avatar
canelli
FormaLms Guru
Posts: 496
Joined: Thu Nov 08, 2012 12:21 pm
Version: forma.lms 2.0
Contact:

Re: Intercettare l'evento di fine corso

Post by canelli »

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
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
---------------
User avatar
lgreco82
FormaLms User
Posts: 38
Joined: Wed Jun 27, 2018 2:24 pm
Version: forma.lms 2.0

Re: Intercettare l'evento di fine corso

Post by lgreco82 »

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
Post Reply