2005-05-18 12:58:59 +00:00
< ? php
require_once ( '../../config.php' );
2005-11-15 08:10:26 +00:00
require_once ( 'locallib.php' );
2005-05-18 12:58:59 +00:00
2005-07-08 06:56:49 +00:00
$command = required_param ( 'command' , '' , PARAM_ALPHA );
2005-07-26 11:01:27 +00:00
$sessionid = required_param ( 'session_id' , '' , PARAM_ALPHANUM );
$aiccdata = optional_param ( 'aicc_data' , '' , PARAM_RAW );
2005-07-08 06:56:49 +00:00
2005-07-26 11:01:27 +00:00
require_login ();
2005-05-18 12:58:59 +00:00
2005-07-08 06:56:49 +00:00
if ( ! empty ( $command ) && confirm_sesskey ( $sessionid )) {
$command = strtolower ( $command );
2005-05-23 06:56:10 +00:00
if ( isset ( $SESSION -> scorm_scoid )) {
$scoid = $SESSION -> scorm_scoid ;
} else {
error ( 'Invalid script call' );
}
$mode = 'normal' ;
if ( isset ( $SESSION -> scorm_mode )) {
$mode = $SESSION -> scorm_mode ;
}
2005-05-26 09:48:45 +00:00
$status = 'Not Initialized' ;
if ( isset ( $SESSION -> scorm_status )) {
$status = $SESSION -> scorm_status ;
}
2006-01-10 15:42:36 +00:00
if ( isset ( $SESSION -> attempt )) {
$attempt = $SESSION -> attempt ;
2005-11-15 08:10:26 +00:00
} else {
$attempt = 1 ;
}
2005-05-23 06:56:10 +00:00
if ( $sco = get_record ( 'scorm_scoes' , 'id' , $scoid )) {
if ( ! $scorm = get_record ( 'scorm' , 'id' , $sco -> scorm )) {
error ( 'Invalid script call' );
}
} else {
error ( 'Invalid script call' );
}
2005-05-26 09:48:45 +00:00
2005-05-23 06:56:10 +00:00
if ( $scorm = get_record ( 'scorm' , 'id' , $sco -> scorm )) {
2005-05-26 09:48:45 +00:00
switch ( $command ) {
case 'getparam' :
if ( $status == 'Not Initialized' ) {
$SESSION -> scorm_status = 'Running' ;
$status = 'Running' ;
2005-05-23 06:56:10 +00:00
}
2005-05-26 09:48:45 +00:00
if ( $status != 'Running' ) {
echo " error = 101 \n error_text = Terminated \n " ;
} else {
2006-01-10 15:42:36 +00:00
if ( $usertrack = scorm_get_tracks ( $scoid , $USER -> id , $attempt )) {
2005-05-26 09:48:45 +00:00
$userdata = $usertrack ;
} else {
$userdata -> status = '' ;
2005-07-07 09:24:24 +00:00
$userdata -> score_raw = '' ;
2005-05-26 09:48:45 +00:00
}
$userdata -> student_id = $USER -> username ;
$userdata -> student_name = $USER -> lastname . ', ' . $USER -> firstname ;
$userdata -> mode = $mode ;
2005-07-26 11:01:27 +00:00
if ( $userdata -> mode == 'normal' ) {
$userdata -> credit = 'credit' ;
} else {
$userdata -> credit = 'no-credit' ;
}
2005-05-23 06:56:10 +00:00
2005-05-26 09:48:45 +00:00
if ( $sco = get_record ( 'scorm_scoes' , 'id' , $scoid )) {
2005-06-27 07:26:49 +00:00
$userdata -> course_id = $sco -> identifier ;
2005-05-26 09:48:45 +00:00
$userdata -> datafromlms = $sco -> datafromlms ;
$userdata -> masteryscore = $sco -> masteryscore ;
$userdata -> maxtimeallowed = $sco -> maxtimeallowed ;
$userdata -> timelimitaction = $sco -> timelimitaction ;
2005-07-26 11:01:27 +00:00
2005-05-26 09:48:45 +00:00
echo " error = 0 \n error_text = Successful \n aicc_data= \n " ;
echo " [Core] \n " ;
echo 'Student_ID = ' . $userdata -> student_id . " \n " ;
echo 'Student_Name = ' . $userdata -> student_name . " \n " ;
if ( isset ( $userdata -> { 'cmi.core.lesson_location' })) {
echo 'Lesson_Location = ' . $userdata -> { 'cmi.core.lesson_location' } . " \n " ;
} else {
echo 'Lesson_Location = ' . " \n " ;
}
echo 'Credit = ' . $userdata -> credit . " \n " ;
2005-07-26 11:01:27 +00:00
if ( isset ( $userdata -> status )) {
if ( $userdata -> status == '' ) {
$userdata -> entry = ', ab-initio' ;
} else {
if ( isset ( $userdata -> { 'cmi.core.exit' }) && ( $userdata -> { 'cmi.core.exit' } == 'suspend' )) {
$userdata -> entry = ', resume' ;
} else {
$userdata -> entry = '' ;
}
}
}
2005-05-26 09:48:45 +00:00
if ( isset ( $userdata -> { 'cmi.core.lesson_status' })) {
2005-07-26 11:01:27 +00:00
echo 'Lesson_Status = ' . $userdata -> { 'cmi.core.lesson_status' } . $userdata -> entry . " \n " ;
$SESSION -> scorm_lessonstatus = $userdata -> { 'cmi.core.lesson_status' };
2005-05-26 09:48:45 +00:00
} else {
2005-07-26 11:01:27 +00:00
echo 'Lesson_Status = not attempted' . $userdata -> entry . " \n " ;
$SESSION -> scorm_lessonstatus = 'not attempted' ;
2005-05-26 09:48:45 +00:00
}
if ( isset ( $userdata -> { 'cmi.core.score.raw' })) {
2005-07-26 11:01:27 +00:00
$max = '' ;
$min = '' ;
if ( isset ( $userdata -> { 'cmi.core.score.max' }) && ! empty ( $userdata -> { 'cmi.core.score.max' })) {
$max = ', ' . $userdata -> { 'cmi.core.score.max' };
if ( isset ( $userdata -> { 'cmi.core.score.min' }) && ! empty ( $userdata -> { 'cmi.core.score.min' })) {
$min = ', ' . $userdata -> { 'cmi.core.score.min' };
}
}
echo 'Score = ' . $userdata -> { 'cmi.core.score.raw' } . $max . $min . " \n " ;
2005-05-26 09:48:45 +00:00
} else {
echo 'Score = ' . " \n " ;
}
if ( isset ( $userdata -> { 'cmi.core.total_time' })) {
echo 'Time = ' . $userdata -> { 'cmi.core.total_time' } . " \n " ;
} else {
echo 'Time = ' . '00:00:00' . " \n " ;
}
2005-07-26 11:01:27 +00:00
echo 'Lesson_Mode = ' . $userdata -> mode . " \n " ;
2005-05-26 09:48:45 +00:00
if ( isset ( $userdata -> { 'cmi.suspend_data' })) {
echo " [Core_Lesson] \n " . $userdata -> { 'cmi.suspend_data' } . " \n " ;
} else {
echo " [Core_Lesson] \n " . " \n " ;
}
echo " [Core_Vendor] \n " . $userdata -> datafromlms . " \n " ;
2005-06-27 07:26:49 +00:00
echo " [Evaluation] \n Course_ID = { " . $userdata -> course_id . " } \n " ;
2005-07-26 11:01:27 +00:00
echo " [Student_Data] \n " ;
echo 'Mastery_Score = ' . $userdata -> masteryscore . " \n " ;
echo 'Max_Time_Allowed = ' . $userdata -> maxtimeallowed . " \n " ;
echo 'Time_Limit_Action = ' . $userdata -> timelimitaction . " \n " ;
2005-05-23 06:56:10 +00:00
} else {
2005-05-26 09:48:45 +00:00
error ( 'Sco not found' );
}
}
break ;
case 'putparam' :
if ( $status == 'Running' ) {
2005-09-13 06:50:55 +00:00
if ( ! empty ( $aiccdata ) && isstudent ( $scorm -> course )) {
2005-07-26 11:01:27 +00:00
$initlessonstatus = 'not attempted' ;
$lessonstatus = 'not attempted' ;
if ( isset ( $SESSION -> scorm_lessonstatus )) {
$initlessonstatus = $SESSION -> scorm_lessonstatus ;
}
$score = '' ;
$datamodel [ 'lesson_location' ] = 'cmi.core.lesson_location' ;
$datamodel [ 'lesson_status' ] = 'cmi.core.lesson_status' ;
$datamodel [ 'score' ] = 'cmi.core.score.raw' ;
$datamodel [ 'time' ] = 'cmi.core.session_time' ;
$datamodel [ '[core_lesson]' ] = 'cmi.suspend_data' ;
$datamodel [ '[comments]' ] = 'cmi.comments' ;
$datarows = explode ( " \n " , $aiccdata );
reset ( $datarows );
while (( list (, $datarow ) = each ( $datarows )) !== false ) {
if (( $equal = strpos ( $datarow , '=' )) !== false ) {
$element = strtolower ( trim ( substr ( $datarow , 0 , $equal )));
$value = trim ( substr ( $datarow , $equal + 1 ));
if ( isset ( $datamodel [ $element ])) {
$element = $datamodel [ $element ];
switch ( $element ) {
case 'cmi.core.lesson_location' :
2005-11-15 08:10:26 +00:00
$id = scorm_insert_track ( $USER -> id , $scorm -> id , $sco -> id , $attempt , $element , $value );
2005-07-26 11:01:27 +00:00
break ;
case 'cmi.core.lesson_status' :
$statuses = array (
'passed' => 'passed' ,
'completed' => 'completed' ,
'failed' => 'failed' ,
'incomplete' => 'incomplete' ,
'browsed' => 'browsed' ,
'not attempted' => 'not attempted' ,
'p' => 'passed' ,
'c' => 'completed' ,
'f' => 'failed' ,
'i' => 'incomplete' ,
'b' => 'browsed' ,
'n' => 'not attempted'
);
$exites = array (
'logout' => 'logout' ,
'time-out' => 'time-out' ,
'suspend' => 'suspend' ,
'l' => 'logout' ,
't' => 'time-out' ,
's' => 'suspend' ,
);
$values = explode ( ',' , $value );
$value = '' ;
if ( count ( $values ) > 1 ) {
$value = trim ( strtolower ( $values [ 1 ]));
if ( isset ( $exites [ $value ])) {
$value = $exites [ $value ];
}
}
if ( empty ( $value ) || isset ( $exites [ $value ])) {
$subelement = 'cmi.core.exit' ;
2005-11-15 08:10:26 +00:00
$id = scorm_insert_track ( $USER -> id , $scorm -> id , $sco -> id , $attempt , $subelement , $value );
2005-07-26 11:01:27 +00:00
}
$value = trim ( strtolower ( $values [ 0 ]));
if ( isset ( $statuses [ $value ]) && ( $mode == 'normal' )) {
$value = $statuses [ $value ];
2005-11-15 08:10:26 +00:00
$id = scorm_insert_track ( $USER -> id , $scorm -> id , $sco -> id , $attempt , $element , $value );
2005-07-26 11:01:27 +00:00
}
$lessonstatus = $value ;
break ;
case 'cmi.core.score.raw' :
$values = explode ( ',' , $value );
if (( count ( $values ) > 1 ) && ( $values [ 1 ] >= $values [ 0 ]) && is_numeric ( $values [ 1 ])) {
$subelement = 'cmi.core.score.max' ;
$value = trim ( $values [ 1 ]);
2005-11-15 08:10:26 +00:00
$id = scorm_insert_track ( $USER -> id , $scorm -> id , $sco -> id , $attempt , $subelement , $value );
2005-07-26 11:01:27 +00:00
if (( count ( $values ) == 3 ) && ( $values [ 2 ] <= $values [ 0 ]) && is_numeric ( $values [ 2 ])) {
$subelement = 'cmi.core.score.min' ;
$value = trim ( $values [ 2 ]);
2005-11-15 08:10:26 +00:00
$id = scorm_insert_track ( $USER -> id , $scorm -> id , $sco -> id , $attempt , $subelement , $value );
2005-07-26 11:01:27 +00:00
}
}
$value = '' ;
if ( is_numeric ( $values [ 0 ])) {
$value = trim ( $values [ 0 ]);
2005-11-15 08:10:26 +00:00
$id = scorm_insert_track ( $USER -> id , $scorm -> id , $sco -> id , $attempt , $element , $value );
2005-07-26 11:01:27 +00:00
}
$score = $value ;
break ;
case 'cmi.core.session_time' :
$SESSION -> scorm_session_time = $value ;
break ;
}
}
} else {
if ( isset ( $datamodel [ strtolower ( trim ( $datarow ))])) {
$element = $datamodel [ strtolower ( trim ( $datarow ))];
$value = '' ;
while ((( $datarow = current ( $datarows )) !== false ) && ( substr ( $datarow , 0 , 1 ) != '[' )) {
$value .= $datarow ;
next ( $datarows );
}
2005-11-15 08:10:26 +00:00
$id = scorm_insert_track ( $USER -> id , $scorm -> id , $sco -> id , $attempt , $element , $value );
2005-07-26 11:01:27 +00:00
}
}
}
if (( $mode == 'browse' ) && ( $initlessonstatus == 'not attempted' )){
$lessonstatus = 'browsed' ;
2005-11-15 08:10:26 +00:00
$id = scorm_insert_track ( $USER -> id , $scorm -> id , $sco -> id , $attempt , 'cmi.core.lesson_status' , 'browsed' );
2005-07-26 11:01:27 +00:00
}
if ( $mode == 'normal' ) {
if ( $lessonstatus == 'completed' ) {
if ( ! empty ( $sco -> masteryscore ) && ! empty ( $score ) && ( $score >= $sco -> masteryscore )) {
$lessonstatus = 'passed' ;
} else {
$lessonstatus = 'failed' ;
}
2005-11-15 08:10:26 +00:00
$id = scorm_insert_track ( $USER -> id , $scorm -> id , $sco -> id , $attempt , 'cmi.core.lesson_status' , $lessonstatus );
2005-07-26 11:01:27 +00:00
}
}
}
2005-05-26 09:48:45 +00:00
echo " error = 0 \n error_text = Successful \n " ;
2005-06-27 07:26:49 +00:00
} else if ( $status == 'Terminated' ) {
echo " error = 1 \n error_text = Terminated \n " ;
} else {
echo " error = 1 \n error_text = Not Initialized \n " ;
2005-05-26 09:48:45 +00:00
}
break ;
case 'putcomments' :
if ( $status == 'Running' ) {
echo " error = 0 \n error_text = Successful \n " ;
2005-06-27 07:26:49 +00:00
} else if ( $status == 'Terminated' ) {
echo " error = 1 \n error_text = Terminated \n " ;
} else {
echo " error = 1 \n error_text = Not Initialized \n " ;
2005-05-23 06:56:10 +00:00
}
2005-05-26 09:48:45 +00:00
break ;
case 'putinteractions' :
if ( $status == 'Running' ) {
echo " error = 0 \n error_text = Successful \n " ;
2005-06-27 07:26:49 +00:00
} else if ( $status == 'Terminated' ) {
echo " error = 1 \n error_text = Terminated \n " ;
} else {
echo " error = 1 \n error_text = Not Initialized \n " ;
2005-05-26 09:48:45 +00:00
}
break ;
case 'putobjectives' :
if ( $status == 'Running' ) {
echo " error = 0 \n error_text = Successful \n " ;
2005-06-27 07:26:49 +00:00
} else if ( $status == 'Terminated' ) {
echo " error = 1 \n error_text = Terminated \n " ;
} else {
echo " error = 1 \n error_text = Not Initialized \n " ;
2005-05-26 09:48:45 +00:00
}
break ;
case 'putpath' :
if ( $status == 'Running' ) {
echo " error = 0 \n error_text = Successful \n " ;
2005-06-27 07:26:49 +00:00
} else if ( $status == 'Terminated' ) {
echo " error = 1 \n error_text = Terminated \n " ;
} else {
echo " error = 1 \n error_text = Not Initialized \n " ;
2005-05-26 09:48:45 +00:00
}
break ;
case 'putperformance' :
if ( $status == 'Running' ) {
echo " error = 0 \n error_text = Successful \n " ;
2005-06-27 07:26:49 +00:00
} else if ( $status == 'Terminated' ) {
echo " error = 1 \n error_text = Terminated \n " ;
} else {
echo " error = 1 \n error_text = Not Initialized \n " ;
2005-05-26 09:48:45 +00:00
}
break ;
case 'exitau' :
if ( $status == 'Running' ) {
2005-07-26 11:01:27 +00:00
if ( isset ( $SESSION -> scorm_session_time ) && ( $SESSION -> scorm_session_time != '' )) {
if ( $track = get_record_select ( 'scorm_scoes_track' , " userid=' $USER->id ' AND scormid=' $scorm->id ' AND scoid=' $sco->id ' AND element='cmi.core.total_time' " )) {
// Add session_time to total_time
$value = scorm_add_time ( $track -> value , $SESSION -> scorm_session_time );
$track -> value = $value ;
$track -> timemodified = time ();
$id = update_record ( 'scorm_scoes_track' , $track );
} else {
$track -> userid = $USER -> id ;
$track -> scormid = $scorm -> id ;
$track -> scoid = $sco -> id ;
$track -> element = 'cmi.core.total_time' ;
$track -> value = $SESSION -> scorm_session_time ;
$track -> timemodified = time ();
$id = insert_record ( 'scorm_scoes_track' , $track );
}
}
$SESSION -> scorm_status = 'Terminated' ;
$SESSION -> scorm_session_time = '' ;
2005-05-26 09:48:45 +00:00
echo " error = 0 \n error_text = Successful \n " ;
2005-06-27 07:26:49 +00:00
} else if ( $status == 'Terminated' ) {
echo " error = 1 \n error_text = Terminated \n " ;
} else {
echo " error = 1 \n error_text = Not Initialized \n " ;
2005-05-26 09:48:45 +00:00
}
break ;
2005-06-27 07:26:49 +00:00
default :
echo " error = 1 \n error_text = Invalid Command \n " ;
break ;
2005-05-26 09:48:45 +00:00
}
2005-05-23 06:56:10 +00:00
}
2005-06-27 07:26:49 +00:00
} else {
if ( empty ( $command )) {
echo " error = 1 \n error_text = Invalid Command \n " ;
} else {
echo " error = 3 \n error_text = Invalid Session ID \n " ;
}
2005-05-18 12:58:59 +00:00
}
2005-09-13 06:50:55 +00:00
?>