[svn r12448] - Added management of SCORM cmi.core.exit value that needs to be kept in-database to allow for better follow-up of the students interruptions

- Fixed returned values for LMSSetValue() and LMSGetValue() in SCORM API, changed from JavaScript boolean to JavaScript strings ("true" and "false") as SCORM requires
skala
Yannick Warnier 18 years ago
parent a631b6f328
commit 70786d04f2
  1. 4
      main/inc/lib/add_course.lib.inc.php
  2. 3
      main/install/migrate-db-1.8.0-1.8.1-pre.sql
  3. 32
      main/newscorm/learnpathItem.class.php
  4. 12
      main/newscorm/lp_comm.server.php
  5. 36
      main/newscorm/scorm_api.php

@ -981,7 +981,9 @@ function update_Db_course($courseDbName)
"score float unsigned not null default 0," . //score returned by SCORM or other techs
"status char(32) not null default 'Not attempted'," . //status for this item (SCORM)
"suspend_data text null default ''," .
"lesson_location text null default '')";
"lesson_location text null default ''," .
"core_exit varchar(32) not null default 'none'" .
")";
if(!api_sql_query($sql))
{
error_log($sql,0);

@ -43,4 +43,5 @@ ALTER TABLE lp_item_view ADD INDEX (lp_view_id);
ALTER TABLE lp_iv_interaction ADD INDEX (lp_iv_id);
ALTER TABLE quiz_question ADD INDEX (position);
ALTER TABLE forum_thread ADD INDEX (forum_id);
ALTER TABLE forum_thread DROP INDEX thread_id;
ALTER TABLE forum_thread DROP INDEX thread_id;
ALTER TABLE lp_item_view ADD core_exit varchar(32) NOT NULL DEFAULT 'none';

@ -221,6 +221,13 @@ class learnpathItem{
}
return $list;
}
/**
* Gets the core_exit value from the database
*/
function get_core_exit()
{
return $this->core_exit;
}
/**
* Gets the credit information (rather scorm-stuff) based on current status and reinit
* autorization. Credit tells the sco(content) if Dokeos will record the data it is sent (credit) or not (no-credit)
@ -1321,7 +1328,11 @@ class learnpathItem{
case 'lesson_location':
$this->set_lesson_location($value);
if($this->debug>2){error_log('New LP - In learnpathItem::save() - setting lesson_location to '.$value,0);}
break;
break;
case 'core_exit':
$this->set_core_exit($value);
if($this->debug>2){error_log('New LP - In learnpathItem::save() - setting core_exit to '.$value,0);}
break;
case 'interactions':
//$interactions = unserialize($value);
//foreach($interactions as $interaction){
@ -1398,6 +1409,24 @@ class learnpathItem{
}
return false;
}
/**
* Sets the core_exit value to the one given
*/
function set_core_exit($value)
{
switch($value){
case '':
$this->core_exit = '';
break;
case 'suspend':
$this->core_exit = 'suspend';
break;
default:
$this->core_exit = 'none';
break;
}
return true;
}
/**
* Sets the item's description
* @param string Description
@ -1455,6 +1484,7 @@ class learnpathItem{
$this->current_start_time = $row['start_time'];
$this->current_stop_time = $this->current_start_time + $row['total_time'];
$this->lesson_location = $row['lesson_location'];
$this->core_exit = $row['core_exit'];
if($this->debug>2){error_log('New LP - In learnpathItem::set_lp_view() - Updated item object with database values',0);}
//now get the number of interactions for this little guy

@ -54,11 +54,12 @@ function backup_item_details($lp_id,$user_id,$view_id,$item_id,$score=-1,$max=-1
* @param string Session time
* @param string Suspend data
* @param string Lesson location
* @param string Core exit SCORM string
*/
function save_item($lp_id,$user_id,$view_id,$item_id,$score=-1,$max=-1,$min=-1,$status='',$time=0,$suspend='',$location='',$interactions=array())
function save_item($lp_id,$user_id,$view_id,$item_id,$score=-1,$max=-1,$min=-1,$status='',$time=0,$suspend='',$location='',$interactions=array(),$core_exit='none')
{
$debug=0;
if($debug>0){error_log('In xajax_save_item('.$lp_id.','.$user_id.','.$view_id.','.$item_id.','.$score.','.$max.','.$min.','.$status.','.$time.',"'.$suspend.'","'.$location.'","'.(count($interactions)>0?$interactions[0]:'').'")',0);}
if($debug>0){error_log('In xajax_save_item('.$lp_id.','.$user_id.','.$view_id.','.$item_id.','.$score.','.$max.','.$min.','.$status.','.$time.',"'.$suspend.'","'.$location.'","'.(count($interactions)>0?$interactions[0]:'').'","'.$core_exit.'")',0);}
$objResponse = new xajaxResponse();
require_once('learnpath.class.php');
require_once('scorm.class.php');
@ -132,6 +133,7 @@ function save_item($lp_id,$user_id,$view_id,$item_id,$score=-1,$max=-1,$min=-1,$
$mylpi->add_interaction($index,$interactions[$index]);
}
}
$mylpi->set_core_exit($core_exit);
$mylp->save_item($item_id,false);
}
@ -280,7 +282,9 @@ function switch_item_details($lp_id,$user_id,$view_id,$current_item,$next_item)
"suspend_data='".$mysuspend_data."';" .
"lesson_location='".$mylesson_location."';" .
"total_time = '".$mytotal_time."';" .
"interactions = new Array();");
"interactions = new Array();" .
"G_lastError = 0;" .
"G_LastErrorMessage = 'No error';");
/*
* and re-initialise the rest
* -saved_lesson_status = 'not attempted'
@ -307,6 +311,7 @@ function switch_item_details($lp_id,$user_id,$view_id,$current_item,$next_item)
$mycredit = $mylpi->get_credit();
$mylaunch_data = $mylpi->get_launch_data();
$myinteractions_count = $mylpi->get_interactions_count();
$mycore_exit = $mylpi->get_core_exit();
$objResponse->addScript(
"saved_lesson_status='not attempted';" .
"lms_lp_id=".$lp_id.";" .
@ -327,6 +332,7 @@ function switch_item_details($lp_id,$user_id,$view_id,$current_item,$next_item)
"lms_item_lesson_mode = '".$mylesson_mode."';" .
"lms_item_launch_data = '".$mylaunch_data."';" .
"lms_item_interactions_count = '".$myinteractions_count."';" .
"lms_item_core_exit = '".$mycore_exit."'" .
"asset_timer = 0;"
);
$objResponse->addScript("update_toc('unhighlight','".$current_item."');");

@ -154,6 +154,7 @@ var lms_item_credit = '<?php echo $oItem->get_credit();?>';
var lms_item_lesson_mode = '<?php echo $oItem->get_lesson_mode();?>';
var lms_item_launch_data = '<?php echo $oItem->get_launch_data();?>';
var lms_item_interactions_count = '<?php echo $oItem->get_interactions_count(); ?>';
var lms_item_core_exit = '<?php echo $oItem->get_core_exit();?>';
var asset_timer = 0;
//Backup for old values
@ -192,7 +193,8 @@ function LMSInitialize() { //this is the initialize function of all APIobjects
//msg_f.src = refresh_url;
}
*/
G_LastError = G_NoError ;
G_LastErrorMessage = 'No error';
lms_initialized=1;
return('true');
}
@ -204,13 +206,27 @@ function Initialize() { //this is the initialize function of all APIobjects
function LMSGetValue(param) {
//logit_scorm("LMSGetValue('"+param+"')",1);
G_LastError = G_NoError ;
G_LastErrorMessage = 'No error';
var result='';
if(param=='cmi.core._children' || param=='cmi.core_children'){
result='entry, exit, lesson_status, student_id, student_name, lesson_location, total_time, credit, lesson_mode, score, session_time';
}else if(param == 'cmi.core.entry'){
result='';
if(lms_item_core_exit=='none')
{
result='ab-initio';
}
else if(lms_item_core_exit=='suspend')
{
result='resume';
}
else
{
result='';
}
}else if(param == 'cmi.core.exit'){
result='';
G_LastError = G_ElementIsWriteOnly;
}else if(param == 'cmi.core.lesson_status'){
if(lesson_status != '') {
result=lesson_status;
@ -351,6 +367,9 @@ function GetValue(param) {
function LMSSetValue(param, val) {
logit_scorm("LMSSetValue\n\t('"+param+"','"+val+"')",0);
G_LastError = G_NoError ;
G_LastErrorMessage = 'No error';
return_value = "true";
switch(param) {
case 'cmi.core.score.raw' : score= val ; break;
case 'cmi.core.score.max' : max = val; break;
@ -368,6 +387,8 @@ function LMSSetValue(param, val) {
case 'cmi.score.scaled' : score = val ; break; //1.3
case 'cmi.success_status' : success_status = val; break; //1.3
case 'cmi.suspend_data' : suspend_data = val; break;
case 'cmi.core.exit' : lms_item_core_exit = val; break;
case 'cmi.core.entry' : return_value = "false"; G_LastError = G_ElementIsReadOnly; break;
default:
var myres = new Array();
if(myres = param.match(/cmi.interactions.(\d+).(id|time|type|correct_responses|weighting|student_response|result|latency)(.*)/)){
@ -417,6 +438,7 @@ function LMSSetValue(param, val) {
break;
}
}else{
return_value = "false";
G_lastError = G_NotImplementedError;
G_lastErrorString = 'Not implemented yet';
}
@ -429,7 +451,7 @@ function LMSSetValue(param, val) {
echo " var mycommit = LMSCommit('force');";
}
?>
return(true);
return(return_value);
}
function SetValue(param, val) {
@ -452,13 +474,15 @@ function savedata(origin) { //origin can be 'commit', 'finish' or 'terminate'
?>/lp_controller.php?cidReq=<?php echo api_get_course_id();?>&action=save&lp_id=<?php echo $oLP->get_id();?>&" + param + "";
*/
logit_lms('saving data (status='+lesson_status+' - interactions: '+ interactions.length +')',1);
xajax_save_item(lms_lp_id, lms_user_id, lms_view_id, lms_item_id, score, max, min, lesson_status, session_time, suspend_data, lesson_location, interactions);
xajax_save_item(lms_lp_id, lms_user_id, lms_view_id, lms_item_id, score, max, min, lesson_status, session_time, suspend_data, lesson_location, interactions, lms_item_core_exit);
//xajax_update_pgs();
//xajax_update_toc();
}
function LMSCommit(val) {
logit_scorm('LMSCommit()',0);
G_LastError = G_NoError ;
G_LastErrorMessage = 'No error';
commit = true ;
savedata('commit');
return('true');
@ -469,6 +493,8 @@ function Commit(val) {
}
function LMSFinish(val) {
G_LastError = G_NoError ;
G_LastErrorMessage = 'No error';
if (( commit == false )) {
logit_scorm('LMSFinish() (no LMSCommit())',1);
}
@ -512,6 +538,8 @@ function GetDiagnostic(errCode){
function Terminate(){
logit_scorm('Terminate()',0);
G_LastError = G_NoError ;
G_LastErrorMessage = 'No error';
commit = true;
savedata('terminate');
return (true);

Loading…
Cancel
Save