Scorm Ludiscape
La communication SCORM :
Sharable Content Object Reference Model (SCORM) est une spécification de codage permettant de créer des objets pédagogiques structurés.
Visant à répondre à des exigences d'accessibilité, d'adaptabilité, de durabilité, d'interopérabilité et de ré-utilisabilité, les normes du modèle informatique SCORM cherchent à faciliter les échanges entre plates-formes de formation en ligne en maîtrisant l'agrégation de contenu, l'environnement d'exécution et la navigation Internet.
La couche SCORM via Ludiscape :
La couche de communication Ludiscape SCORM à été pensé pour s'adapter de manière agile aux fonctions SCOME disponibles sur le lecteur intégrer dans le LMS ou sur votre intranet.
Il vérifie que les fonctions SCORM 1.2 ou 2004 sont implementés dans le lecteur et en fonction du résultat envoi les données.
Le deploiement d'un contenu SCORM se veux donc compatible avec tous le lecteurs SCORM d'aujourd'hui quelque soit la norme utilisée.
Activité partielle d'un apprenant :
Pour détecter l'activité partielle d'un apprenant, il peut être utile d'envoyer regulièrement des informations sur le parcours parcouru par l'utilisateur.
Pour cela vous pouvez appeler les fonctions SCORM ou vos propres fonctions via le script présent au démarrage de la page :
Autres liens :
Créer votre lecteur SCORM :
http://www.batisseurs-numeriques.fr/ludiscapeguide/3816-creer-votre-propre-couche-scorm.html
Le fichier scorm.js :
var API = null; /* SCORM API 1.2 & 2004 */
//Log Console
function logconsole(msg){
if (typeof console === "undefined" || typeof console.log === "undefined"){
}else{
console.log(msg)
}
}
/* Check SCORM API or AlterScorm */
function findAPI(win)
{
try{
if (typeof(win.API_1484_11) != "undefined") {
if(win.API_1484_11!=null){
API = win.API_1484_11;
logconsole("FIND win.API_1484_11");
return true;
}
}
while ((win.API_1484_11 == null) && (win.parent != null) && (win.parent != win))
{
var alterwin = win.parent;
if (typeof(alterwin.API_1484_11) != "undefined") {
if(alterwin.API_1484_11!=null){
API = alterwin.API_1484_11;
logconsole("FIND win.API_1484_11");
return true;
}
}
}
while ((win.API == null) && (win.parent != null) && (win.parent != win))
{
win = win.parent;
logconsole("win = win.parent");
}
API = win.API;
}catch(exception){
logconsole("findAPI error");
return false;
}
}
/* initialize the SCORM API */
function initAPI(win)
{
logconsole("initAPI start");
try{
/* look for the SCORM API up in the frameset */
findAPI(win);
/* if we still have not found the API, look at the opener and its frameset */
if ((API == null) && (win.opener != null))
{
findAPI(win.opener);
}
logconsole("initAPI end");
}catch(exception){
logconsole("findAPI error");
return false;
}
}
var ScormSubmitted = false; //use this to check whether LMSFinish has been called later.
function ScormStartCom(){
initAPI(window);
if (API != null){
//SCOMR 1.2
if (typeof(API.LMSInitialize) != "undefined") {
API.LMSInitialize('');
API.LMSSetValue('cmi.core.lesson_status', 'browsed');
API.LMSSetValue('cmi.core.score.min', 0);
API.LMSSetValue('cmi.core.score.max', 100);
API.LMSCommit('');
}
//SCORM 2004
if (typeof(API.Initialize) != "undefined") {
var r = API.Initialize('');
if(r==true||r=='true'){
API.SetValue('cmi.core.lesson_status', 'browsed');
API.SetValue('cmi.core.score.min', 0);
API.SetValue('cmi.core.score.max', 100);
API.Commit('');
API.SetValue('cmi.lesson_status', 'browsed');
API.SetValue('cmi.score.min', 0);
API.SetValue('cmi.score.max', 100);
API.Commit('');
logconsole("Initialize ScormStartCom");
}else{
logconsole("Initialize Error");
}
}
}
}
function CheckLMSFinish(){
if (API != null){
if (ScormSubmitted == false){
//SCORM 1.2
if (typeof(API.LMSCommit) != "undefined") {
API.LMSCommit('');
API.LMSFinish('');
}
//SCORM 2004
if (typeof(API.Terminate) != "undefined") {
API.Commit('');
API.Terminate('');
logconsole("Terminate CheckLMSFinish");
}
ScormSubmitted = true;
}
}
}
function CheckLMSLearnerName(){
if (API != null){
//SCORM 2004
if (typeof(API.data.learner_name) != "undefined") {
return API.data.learner_name;
}
}
return '';
}
function SetScormIncomplete(){
if (ScormSubmitted == true){
return;
}
SetScormScore();
if (API != null){
//SCORM 1.2
if (typeof(API.LMSSetValue) != "undefined") {
API.LMSSetValue('cmi.core.lesson_status', 'incomplete');
API.LMSSetValue('cmi.core.session_time', MillisecondsToTime((new Date()).getTime() - ScormStartTime));
API.LMSCommit('');
}
//SCORM 2004
if (typeof(API.Terminate) != "undefined") {
API.SetValue('cmi.core.lesson_status', 'incomplete');
API.SetValue('cmi.core.session_time', MillisecondsToTime((new Date()).getTime() - ScormStartTime));
API.SetValue('cmi.lesson_status', 'incomplete');
API.SetValue('cmi.session_time', MillisecondsToTime((new Date()).getTime() - ScormStartTime));
API.Commit('');
}
}
}
var isScormFinish = false;
function SetScormComplete(){
if(isScormFinish==false){
if (API != null){
//SCORM 1.2
if (typeof(API.LMSSetValue) != "undefined") {
API.LMSSetValue('cmi.core.session_time', MillisecondsToTime((new Date()).getTime() - ScormStartTime));
API.LMSSetValue('cmi.core.lesson_status', 'completed');
SetScormScore();
API.LMSCommit('');
API.LMSFinish('');
isScormFinish = true;
}
//SCORM 2004
if (typeof(API.Terminate) != "undefined") {
var timefull = MillisecondsToTime2004((new Date()).getTime() - ScormStartTime);
API.SetValue('cmi.core.session_time', timefull);
API.SetValue('cmi.session_time', timefull);
logconsole("session_time = " + timefull);
API.SetValue('cmi.core.lesson_status', 'completed');
API.SetValue('cmi.lesson_status', 'completed');
API.SetValue('cmi.completion_status', 'completed');
SetScormScore();
API.Commit('');
API.Terminate('');
logconsole("Terminate SetScormComplete");
isScormFinish = true;
}
ScormSubmitted = true;
}
}
}
var ScormStartTime = (new Date()).getTime();
var SuspendData = '';
function SetScormTimedOut(){
if (API != null){
if (ScormSubmitted == false){
//SCORM 1.2
if (typeof(API.LMSSetValue) != "undefined") {
SetScormScore();
API.LMSSetValue('cmi.core.exit', 'time-out');
API.LMSCommit('');
CheckLMSFinish();
}
//SCORM 2004
if (typeof(API.Terminate) != "undefined") {
SetScormScore();
API.SetValue('cmi.core.exit', 'time-out');
API.SetValue('cmi.exit', 'time-out');
API.Commit('');
API.Terminate('');
}
}
}
}
function SetScormComments(m){
if (API != null){
if (ScormSubmitted == false){
//SCORM 1.2
if (typeof(API.LMSSetValue) != "undefined") {
API.LMSSetValue('cmi.comments', m);
API.LMSCommit('');
}
//SCORM 2004
if (typeof(API.Terminate) != "undefined") {
API.SetValue('cmi.comments', m);
API.Commit('');
}
}
}
}
//TIME RENDERING FUNCTION
function MillisecondsToTime(Seconds){
Seconds = Math.round(Seconds/1000);
var S = Seconds % 60;
Seconds -= S;
if (S < 10){S = '0' + S;}
var M = (Seconds / 60) % 60;
if (M < 10){M = '0' + M;}
var H = Math.floor(Seconds / 3600);
if (H < 10){H = '0' + H;}
return H + ':' + M + ':' + S;
}
//TIME RENDERING FUNCTION
function MillisecondsToTime2004(Seconds){
Seconds = Math.round(Seconds/1000);
var S = Seconds % 60;
Seconds -= S;
if (S < 10){S = '0' + S;}
var M = (Seconds / 60) % 60;
if (M < 10){M = '0' + M;}
var H = Math.floor(Seconds / 3600);
if (H < 10){H = '0' + H;}
return 'PT' + H + 'H' + M + 'M' + S + 'S';
}
//SetScormScore
function SetScormScore(score){
if (score != null){
if (API != null){
//SCORM 1.2
if (typeof(API.LMSSetValue) != "undefined") {
API.LMSSetValue('cmi.core.score.raw', score);
}
//SCORM 2004
if (typeof(API.Terminate) != "undefined") {
API.SetValue('cmi.core.score.raw', score);
API.SetValue('cmi.score.raw', score);
API.SetValue('cmi.score.scaled', score/100);
}
}
logconsole("SetScormScore " + score);
}
}
Copyright © 2014, Ludiscape