Fixed some datamodel elements type

This commit is contained in:
bobopinna 2005-05-19 06:22:37 +00:00
parent 9feb9a19d6
commit 66fc6a1c02
2 changed files with 80 additions and 51 deletions

View File

@ -82,35 +82,3 @@ var errorCode = "0";
function underscore(str) {
return str.replace(/\./g,"__");
}
function AddTime (first, second) {
var sFirst = first.split(":");
var sSecond = second.split(":");
var change = 0;
var secs = (Math.round((parseFloat(sFirst[2],10)+parseFloat(sSecond[2],10))*100))/100; //Seconds
change = Math.floor(secs / 60);
secs = secs - (change * 60);
if (Math.floor(secs) < 10) secs = "0" + secs.toString();
mins = parseInt(sFirst[1],10)+parseInt(sSecond[1],10)+change; //Minutes
change = Math.floor(mins / 60);
mins = mins - (change * 60);
if (mins < 10) mins = "0" + mins.toString();
hours = parseInt(sFirst[0],10)+parseInt(sSecond[0],10)+change; //Hours
if (hours < 10) hours = "0" + hours.toString();
return hours + ":" + mins + ":" + secs;
}
/*
function SCOFinish() {
// Workaround for Safari
if (typeof API != 'undefined') {
result = API.LMSFinish('');
} else {
result = API_1484_11.Terminate('');
}
}
*/

View File

@ -16,22 +16,23 @@
//
function SCORMapi1_2() {
// Standard Data Type Definition
CMIString255 = '^.{0,255}$';
CMIString4096 = '^[.|\\n|\\r]{0,4096}$';
CMIString256 = '^.{0,255}$';
//CMIString4096 = '^[.|\\n|\\r]{0,4095}$';
CMIString4096 = '^.{0,4095}$';
CMITime = '^([0-9]{2}):([0-9]{2}):([0-9]{2})(\.[0-9]{1,2})?$';
CMITimespan = '^([0-9]{2,4}):([0-9]{2}):([0-9]{2})(\.[0-9]{1,2})?$';
CMIInteger = '^\\d+$';
CMISInteger = '^-?([0-9]+)$';
CMIDecimal = '^([0-9]{0,3})(\.[0-9]{1,2})?$';
CMIDecimal = '^-?([0-9]{0,3})(\.[0-9]{1,2})?$';
CMIIdentifier = '^\\w{0,255}$';
CMIFeedback = CMIString255; // This must be redefined
CMIFeedback = CMIString256; // This must be redefined
CMIIndex = '[._](\\d+).';
// Vocabulary Data Type Definition
CMIStatus = '^passed|completed|failed|incomplete|browsed|not attempted$';
CMIExit = '^time-out|suspend|logout|$';
CMIType = '^true-false|choice|fill-in|matching|performance|sequencing|likert|numeric$';
CMIResult = '^correct|wrong|unanticipated|neutral|[0-9]?(\.[0-9]{1,2})?$';
NAVEvent = '^previous|continue$';
CMIStatus = '^passed$|^completed$|^failed$|^incomplete$|^browsed$|^not attempted$';
CMIExit = '^time-out$|^suspend$|^logout$|^$';
CMIType = '^true-false$|^choice$|^fill-in$|^matching$|^performance$|^sequencing$|^likert$|^numeric$';
CMIResult = '^correct$|^wrong$|^unanticipated$|^neutral$|^[0-9]?(\.[0-9]{1,2})?$';
NAVEvent = '^previous$|^continue$';
// Children lists
cmi_children = 'core, suspend_data, launch_data, comments, objectives, student_data, student_preference, interactions';
core_children = 'student_id, student_name, lesson_location, credit, lesson_status, entry, score, total_time, lesson_mode, exit, session_time';
@ -44,6 +45,7 @@ function SCORMapi1_2() {
score_range = '0#100';
audio_range = '-1#100';
speed_range = '-100#100';
weighting_range = '-100#100';
text_range = '-1#1';
// The SCORM 1.2 data model
var datamodel = {
@ -52,7 +54,7 @@ function SCORMapi1_2() {
'cmi.core._children':{'defaultvalue':core_children, 'mod':'r', 'writeerror':'402'},
'cmi.core.student_id':{'defaultvalue':'<?php echo $userdata->student_id ?>', 'mod':'r', 'writeerror':'403'},
'cmi.core.student_name':{'defaultvalue':'<?php echo $userdata->student_name ?>', 'mod':'r', 'writeerror':'403'},
'cmi.core.lesson_location':{'defaultvalue':'<?php echo isset($userdata->{'cmi.core.lesson_location'})?$userdata->{'cmi.core.lesson_location'}:'' ?>', 'format':CMIString255, 'mod':'rw', 'writeerror':'405'},
'cmi.core.lesson_location':{'defaultvalue':'<?php echo isset($userdata->{'cmi.core.lesson_location'})?$userdata->{'cmi.core.lesson_location'}:'' ?>', 'format':CMIString256, 'mod':'rw', 'writeerror':'405'},
'cmi.core.credit':{'defaultvalue':'<?php echo $userdata->credit ?>', 'mod':'r', 'writeerror':'403'},
//'cmi.core.credit':{'defaultvalue':'credit', 'mod':'r', 'writeerror':'403'},
'cmi.core.lesson_status':{'defaultvalue':'<?php echo isset($userdata->{'cmi.core.lesson_status'})?$userdata->{'cmi.core.lesson_status'}:'' ?>', 'format':CMIStatus, 'mod':'rw', 'writeerror':'405'},
@ -69,7 +71,7 @@ function SCORMapi1_2() {
'cmi.launch_data':{'defaultvalue':'<?php echo $userdata->datafromlms ?>', 'mod':'r', 'writeerror':'403'},
'cmi.comments':{'defaultvalue':'<?php echo isset($userdata->{'cmi.comments'})?$userdata->{'cmi.comments'}:'' ?>', 'format':CMIString4096, 'mod':'rw', 'writeerror':'405'},
'cmi.comments_from_lms':{'mod':'r', 'writeerror':'403'},
'cmi.objectives._children':{'defaultvalue':objectives_children, 'mod':'r', 'writeerror':'403'},
'cmi.objectives._children':{'defaultvalue':objectives_children, 'mod':'r', 'writeerror':'402'},
'cmi.objectives._count':{'mod':'r', 'defaultvalue':'0', 'writeerror':'402'},
'cmi.objectives.n.id':{'pattern':CMIIndex, 'format':CMIIdentifier, 'mod':'rw', 'writeerror':'405'},
'cmi.objectives.n.score._children':{'pattern':CMIIndex, 'mod':'r', 'writeerror':'402'},
@ -77,16 +79,16 @@ function SCORMapi1_2() {
'cmi.objectives.n.score.min':{'defaultvalue':'', 'pattern':CMIIndex, 'format':CMIDecimal, 'range':score_range, 'mod':'rw', 'writeerror':'405'},
'cmi.objectives.n.score.max':{'defaultvalue':'', 'pattern':CMIIndex, 'format':CMIDecimal, 'range':score_range, 'mod':'rw', 'writeerror':'405'},
'cmi.objectives.n.status':{'pattern':CMIIndex, 'format':CMIStatus, 'mod':'rw', 'writeerror':'405'},
'cmi.student_data._children':{'defaultvalue':student_data_children, 'mod':'r', 'writeerror':'403'},
'cmi.student_data._children':{'defaultvalue':student_data_children, 'mod':'r', 'writeerror':'402'},
'cmi.student_data.mastery_score':{'defaultvalue':'<?php echo $userdata->masteryscore ?>', 'mod':'r', 'writeerror':'403'},
'cmi.student_data.max_time_allowed':{'defaultvalue':'<?php echo $userdata->maxtimeallowed ?>', 'mod':'r', 'writeerror':'403'},
'cmi.student_data.time_limit_action':{'defaultvalue':'<?php echo $userdata->timelimitaction ?>', 'mod':'r', 'writeerror':'403'},
'cmi.student_preference._children':{'defaultvalue':student_preference_children, 'mod':'r', 'writeerror':'403'},
'cmi.student_preference._children':{'defaultvalue':student_preference_children, 'mod':'r', 'writeerror':'402'},
'cmi.student_preference.audio':{'defaultvalue':'0', 'format':CMISInteger, 'range':audio_range, 'mod':'rw', 'writeerror':'405'},
'cmi.student_preference.language':{'defaultvalue':'', 'format':CMIString255, 'mod':'rw', 'writeerror':'405'},
'cmi.student_preference.language':{'defaultvalue':'', 'format':CMIString256, 'mod':'rw', 'writeerror':'405'},
'cmi.student_preference.speed':{'defaultvalue':'0', 'format':CMISInteger, 'range':speed_range, 'mod':'rw', 'writeerror':'405'},
'cmi.student_preference.text':{'defaultvalue':'0', 'format':CMISInteger, 'range':text_range, 'mod':'rw', 'writeerror':'405'},
'cmi.interactions._children':{'defaultvalue':interactions_children, 'mod':'r', 'writeerror':'403'},
'cmi.interactions._children':{'defaultvalue':interactions_children, 'mod':'r', 'writeerror':'402'},
'cmi.interactions._count':{'mod':'r', 'defaultvalue':'0', 'writeerror':'402'},
'cmi.interactions.n.id':{'pattern':CMIIndex, 'format':CMIIdentifier, 'mod':'w', 'readerror':'404', 'writeerror':'405'},
'cmi.interactions.n.objectives._count':{'pattern':CMIIndex, 'mod':'r', 'defaultvalue':'0', 'writeerror':'402'},
@ -95,7 +97,7 @@ function SCORMapi1_2() {
'cmi.interactions.n.type':{'pattern':CMIIndex, 'format':CMIType, 'mod':'w', 'readerror':'404', 'writeerror':'405'},
'cmi.interactions.n.correct_responses._count':{'pattern':CMIIndex, 'mod':'r', 'defaultvalue':'0', 'writeerror':'402'},
'cmi.interactions.n.correct_responses.n.pattern':{'pattern':CMIIndex, 'format':CMIFeedback, 'mod':'w', 'readerror':'404', 'writeerror':'405'},
'cmi.interactions.n.weighting':{'pattern':CMIIndex, 'format':CMIDecimal, 'mod':'w', 'readerror':'404', 'writeerror':'405'},
'cmi.interactions.n.weighting':{'pattern':CMIIndex, 'format':CMIDecimal, 'range':weighting_range, 'mod':'w', 'readerror':'404', 'writeerror':'405'},
'cmi.interactions.n.student_response':{'pattern':CMIIndex, 'format':CMIFeedback, 'mod':'w', 'readerror':'404', 'writeerror':'405'},
'cmi.interactions.n.result':{'pattern':CMIIndex, 'format':CMIResult, 'mod':'w', 'readerror':'404', 'writeerror':'405'},
'cmi.interactions.n.latency':{'pattern':CMIIndex, 'format':CMITimespan, 'mod':'w', 'readerror':'404', 'writeerror':'405'},
@ -226,7 +228,7 @@ function SCORMapi1_2() {
errorCode = eval('datamodel["'+elementmodel+'"].readerror');
}
} else {
errorCode = "401"
errorCode = "201"
}
} else {
errorCode = "201";
@ -247,6 +249,7 @@ function SCORMapi1_2() {
expression = new RegExp(eval('datamodel["'+elementmodel+'"].format'));
value = value+'';
matches = value.match(expression);
//alert('Format: '+eval('datamodel["'+elementmodel+'"].format')+'\nMatches: '+matches);
if (matches != null) {
//Create dynamic data model element
if (element != elementmodel) {
@ -263,7 +266,7 @@ function SCORMapi1_2() {
eval(subelement+'.'+elementIndex+'._count++;');
}
if (elementIndexes[i+1] > eval(subelement+'.'+elementIndex+'._count')) {
errorCode = eval('datamodel["'+elementmodel+'"].writeerror');
errorCode = "201";
}
subelement = subelement.concat('.'+elementIndex+'_'+elementIndexes[i+1]);
i++;
@ -279,13 +282,22 @@ function SCORMapi1_2() {
eval(subelement+'.score.min = "";');
eval(subelement+'.score.max = "";');
}
if (subelement.substr(0,16) == 'cmi.interactions') {
eval(subelement+'.objectives = new Object();');
eval(subelement+'.objectives._count = 0;');
eval(subelement+'.correct_responses = new Object();');
eval(subelement+'.correct_responses._count = 0;');
}
}
}
element = subelement.concat('.'+elementIndexes[elementIndexes.length-1]);
}
//alert('Error Code: '+errorCode+'\nElement: '+element+'\nValue: '+value);
//Store data
if (errorCode == "0") {
//alert('Value: '+value);
if ((typeof eval('datamodel["'+elementmodel+'"].range')) != "undefined") {
//alert('Ranged: '+value);
range = eval('datamodel["'+elementmodel+'"].range');
ranges = range.split('#');
value = value*1.0;
@ -297,6 +309,7 @@ function SCORMapi1_2() {
errorCode = eval('datamodel["'+elementmodel+'"].writeerror');
}
} else {
//alert('Not Ranged: '+value);
if (element == 'cmi.comments') {
eval(element+'+="'+value+'";');
} else {
@ -313,7 +326,7 @@ function SCORMapi1_2() {
errorCode = eval('datamodel["'+elementmodel+'"].writeerror');
}
} else {
errorCode = "401"
errorCode = "201"
}
} else {
errorCode = "201";
@ -368,6 +381,54 @@ function SCORMapi1_2() {
return param;
}
function AddTime (first, second) {
var sFirst = first.split(":");
var sSecond = second.split(":");
var cFirst = sFirst[2].split(".");
var cSecond = sSecond[2].split(".");
var change = 0;
FirstCents = 0; //Cents
if (cFirst.length > 1) {
FirstCents = parseInt(cFirst[1],10);
}
SecondCents = 0;
if (cSecond.length > 1) {
SecondCents = parseInt(cSecond[1],10);
}
var cents = FirstCents + SecondCents;
change = Math.floor(cents / 100);
cents = cents - (change * 100);
if (Math.floor(cents) < 10) {
cents = "0" + cents.toString();
}
var secs = parseInt(cFirst[0],10)+parseInt(cSecond[0],10)+change; //Seconds
change = Math.floor(secs / 60);
secs = secs - (change * 60);
if (Math.floor(secs) < 10) {
secs = "0" + secs.toString();
}
mins = parseInt(sFirst[1],10)+parseInt(sSecond[1],10)+change; //Minutes
change = Math.floor(mins / 60);
mins = mins - (change * 60);
if (mins < 10) {
mins = "0" + mins.toString();
}
hours = parseInt(sFirst[0],10)+parseInt(sSecond[0],10)+change; //Hours
if (hours < 10) {
hours = "0" + hours.toString();
}
if (cents != '0') {
return hours + ":" + mins + ":" + secs + '.' + cents;
} else {
return hours + ":" + mins + ":" + secs;
}
}
function TotalTime() {
total_time = AddTime(cmi.core.total_time, cmi.core.session_time);
return '&'+underscore('cmi.core.total_time')+'='+escape(total_time);