123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279 |
- <?php
- /*
- ==============================================================================
- Dokeos - elearning and course management software
-
- Copyright (c) 2004 Dokeos S.A.
- Copyright (c) Denes Nagy (darkden@freemail.hu)
-
- For a full list of contributors, see "credits.txt".
- The full license can be read in "license.txt".
-
- This program is free software; you can redistribute it and/or
- modify it under the terms of the GNU General Public License
- as published by the Free Software Foundation; either version 2
- of the License, or (at your option) any later version.
-
- See the GNU General Public License for more details.
-
- Contact: Dokeos, 181 rue Royale, B-1000 Brussels, Belgium, info@dokeos.com
- ==============================================================================
- */
- /**
- ==============================================================================
- * API event handler functions for Scorm 1.1 and 1.2 and 1.3
- *
- * @author Denes Nagy <darkden@freemail.hu>
- * @version v 1.0
- * @access public
- * @package dokeos.scorm
- ==============================================================================
- */
- /*
- ==============================================================================
- INIT SECTION
- ==============================================================================
- */
- // if you open the imsmanifest.xml via local machine (f.ex.: file://c:/...), then the Apiwrapper.js
- // of Maritime Navigation when trying to execute this row
- // var result = api.LMSInitialize("");
- // get the error response : you are not authorized to call this function
- include('../inc/global.inc.php');
- $this_section=SECTION_COURSES;
- $TBL_SCORM_SCO_DATA=$scormDbName.".scorm_sco_data";
- $_uid = $_SESSION['_uid'];
- $_user = $_SESSION['_user'];
- $old_s_identifier = $_SESSION['old_sco_identifier'];
- $my_s_identifier = $_SESSION['s_identifier'];
- $file = $_SESSION['file'];
- //in some cases (manual clicks), there is no "old" s_identifier because there is no "new" one.
- if(empty($old_s_identifier)){
- $old_s_identifier = $my_s_identifier;
- }
- /*
- ==============================================================================
- JavaScript Functions
- ==============================================================================
- */
- ?>
- <html><head><script type='text/javascript'>
- /* <![CDATA[ */
- var alerts=0; //debug output level. 0 = none, 1=light, 2=a lot, 3(not implemented)=all
- if (alerts>1) { alert('scormfunctions.php included'); }
- function APIobject() {
- this.LMSInitialize=LMSInitialize; //for Scorm 1.2
- this.Initialize=LMSInitialize; //for Scorm 1.3
- this.LMSGetValue=LMSGetValue;
- this.GetValue=LMSGetValue;
- this.LMSSetValue=LMSSetValue;
- this.SetValue=LMSSetValue;
- this.LMSCommit=LMSCommit;
- this.Commit=LMSCommit;
- this.LMSFinish=LMSFinish;
- this.Finish=LMSFinish;
- this.LMSGetLastError=LMSGetLastError;
- this.GetLastError=LMSGetLastError;
- this.LMSGetErrorString=LMSGetErrorString;
- this.GetErrorString=LMSGetErrorString;
- this.LMSGetDiagnostic=LMSGetDiagnostic;
- this.GetDiagnostic=LMSGetDiagnostic;
- this.Terminate=Terminate; //only in Scorm 1.3
- }
- //it is not sure that the scos use the above declarations
- API = new APIobject(); //for scrom 1.2
- api = new APIobject(); //for scrom 1.2
- API_1484_11 = new APIobject(); //for scrom 1.3
- api_1484_11 = new APIobject(); //for scrom 1.3
- var G_NoError = 0;
- var G_GeneralException = 101;
- var G_ServerBusy = 102;
- var G_InvalidArgumentError = 201;
- var G_ElementCannotHaveChildren = 202;
- var G_ElementIsNotAnArray = 203;
- var G_NotInitialized = 301;
- var G_NotImplementedError = 401;
- var G_InvalidSetValue = 402;
- var G_ElementIsReadOnly = 403;
- var G_ElementIsWriteOnly = 404;
- var G_IncorrectDataType = 405;
- var G_LastError = G_NoError ;
- var commit = false ;
- var score=0;
- var max=0;
- var min=0;
- var lesson_status='';
- var session_time=0;
- function LMSInitialize() { //this is the initialize function of all APIobjects
- if (alerts>0) { alert('LMSInitialise() called (by SCORM content)'); }
- //initialise the lesson status between two lessons, to avoid status override
- lesson_status = '';
- return('true');
- }
- function Initialize() { //this is the initialize function of all APIobjects
- return LMSInitialize();
- }
- function LMSGetValue(param) {
- var result;
- switch(param) {
- case 'cmi.core._children' :
- case 'cmi.core_children' :
- result='entry, exit, lesson_status, student_id, student_name, lesson_location, total_time, credit, lesson_mode, score, session_time'; break;
- case 'cmi.core.entry' : result=''; break;
- case 'cmi.core.exit' : result=''; break;
- case 'cmi.core.lesson_status' :
- if(lesson_status != '') {result=lesson_status;}
- else{<?php
- $result = api_sql_query("SELECT status FROM $TBL_SCORM_SCO_DATA WHERE (studentId='$_uid' and scoIdentifier='$my_s_identifier')");
- $ar=mysql_fetch_array($result);
- $status=$ar['status'];
- if(empty($ar['status'])){$status = "not attempted";}
- #echo "{ if (alerts>1) { alert('Status of $s_identifier : $status'); }
- # TODO: implement this better thanks to the runtime environment doc of SCORM
- echo " result='$status';";?>
- }
- break;
- case 'cmi.core.student_id' : <?php echo "result='$_uid';"; ?> break;
- case 'cmi.core.student_name' :
- <?php
- $who=$_user ['firstName']." ".$_user ['lastName'];
- echo "{ result='$who'; }";
- ?> break;
- case 'cmi.core.lesson_location' : result=''; break;
- case 'cmi.core.total_time' : result='0000:00:00.00';break;
- case 'cmi.core.score._children' : result='raw,min,max'; break;
- case 'cmi.core.score.raw' : result=score; break;
- case 'cmi.core.score.max' : result='100'; break;
- case 'cmi.core.score.min' : result='0'; break;
- case 'cmi.core.score' : result='0'; break;
- case 'cmi.core.credit' : result='credit'; break;
- case 'cmi.core.lesson_mode' : result='normal'; break;
- case 'cmi.suspend_data' : result=''; break;
- case 'cmi.launch_data' : result=''; break;
- case 'cmi.objectives._count' : result='0'; break;
- default : result=''; break;
- }
- if (alerts>0) { alert("SCORM calls LMSGetValue('"+param+"')\nReturned '"+result+"'"); }
- return result;
- }
- function GetValue(param) {
- return LMSGetValue(param);
- }
- function LMSSetValue(param, val) {
- if (alerts>0) { alert("SCORM calls LMSSetValue('"+param+"','"+val+"')"); }
- switch(param) {
- case 'cmi.core.score.raw' : score= val ; break;
- case 'cmi.core.score.max' : max = val; break;
- case 'cmi.core.score.min' : min = val; break;
- case 'cmi.core.lesson_status' : lesson_status = val; break;
- case 'cmi.completion_status' : lesson_status = val; break; //1.3
- case 'cmi.core.session_time' : session_time = val; break;
- case 'cmi.score.scaled' : score = val ; break; //1.3
- case 'cmi.success_status' : success_status = val; break; //1.3
- }
- return(true);
- }
- function SetValue(param, val) {
- return LMSSetValue(param, val);
- }
- function savedata(origin) { //origin can be 'commit', 'finish' or 'terminate'
- //if( ( lesson_status == 'incomplete') && (score >= (0.8*max) ) ){
- // lesson_status = 'completed';
- //}
- param = 'origin='+origin+'&score='+score+'&max='+max+'&min='+min+'&lesson_status='+lesson_status+'&time='+session_time;
-
- url="http://<?php
- $self=$_SERVER['PHP_SELF'];
- $url=$_SERVER['HTTP_HOST'].$self;
- $url=substr($url,0,-19);//19 is the length of this file's name (/scormfunctions.php)
- echo $url;
- ?>/closesco.php?<?php echo "sco_identifier=$old_s_identifier&file=$file&"; ?>" + param + "";
- scowindow=open(url,'message');
- //the window.location command does not work here !!!!
- //and for some reason if I just call closesco.php without http//..., it does not work either
- if (alerts>1) { alert('saving data : '+url); }
- }
- function LMSCommit(val) {
- if (alerts>0) { alert('LMSCommit() called'); }
- commit = true ;
- savedata('commit');
- return('true');
- }
- function Commit(val) {
- return LMSCommit(val);
- }
- function LMSFinish(val) {
- if (( commit == false ) && (alerts>0)) { alert('LMSFinish() called without LMSCommit()'); }
- if ( commit == true ) {
- if(alerts>0) { alert('LMSFinish() called');}
- savedata('finish');
- }
- return('true');
- }
- function Finish(val) {
- return LMSFinish(val);
- }
- function LMSGetLastError() {
- if (alerts>1) { alert('LMSGetLastError() called'); }
- return(G_LastError);
- }
- function GetLastError() {
- return LMSGetLastError();
- }
- function LMSGetErrorString(errCode){
- if (alerts>1) { alert('LMSGetErrorString() called'); }
- return('No error !');
- }
- function GetErrorString(errCode){
- return LMSGetErrorString(errCode);
- }
- function LMSGetDiagnostic(errCode){
- if (alerts>1) { alert('LMSGetDiagnostic() called'); }
- return(API.LMSGetLastError());
- }
- function GetDiagnostic(errCode){
- return LMSGetDiagnostic(errCode);
- }
- function Terminate(){
- if (alerts>0) { alert('Terminate() called'); }
- commit = true;
- savedata('terminate');
- return (true);
- }
- /* ]]> */
- </script>
- </head>
- <body><i><b>This is an API / API_1484_11 system window. Nothing to be worried about!</b></i></body></html>
|