From: piers Date: Mon, 10 Nov 2008 23:56:54 +0000 (+0000) Subject: MDL-16949 - fix wrong addition of times in SCORM API, thanks Xabi Martin. X-Git-Url: http://git.mjollnir.org/gw?a=commitdiff_plain;h=d6d1f9b3bef8cabf2712740e397bc4ff7baccf6e;p=moodle.git MDL-16949 - fix wrong addition of times in SCORM API, thanks Xabi Martin. --- diff --git a/mod/scorm/datamodels/scorm_13.js.php b/mod/scorm/datamodels/scorm_13.js.php index 2224bc1179..8ee312e890 100644 --- a/mod/scorm/datamodels/scorm_13.js.php +++ b/mod/scorm/datamodels/scorm_13.js.php @@ -1110,18 +1110,42 @@ function SCORMapi1_3() { var firstarray = first.match(matchexpr); var secondarray = second.match(matchexpr); if ((firstarray != null) && (secondarray != null)) { - var secs = parseFloat(firstarray[13],10)+parseFloat(secondarray[13],10); //Seconds - var change = Math.floor(secs / 60); - secs = secs - (change * 60); - var mins = parseInt(firstarray[11],10)+parseInt(secondarray[11],10)+change; //Minutes + var firstsecs=0; + if(parseFloat(firstarray[13],10)>0){ firstsecs=parseFloat(firstarray[13],10); } + var secondsecs=0; + if(parseFloat(secondarray[13],10)>0){ secondsecs=parseFloat(secondarray[13],10); } + var secs = firstsecs+secondsecs; //Seconds + var change = Math.floor(secs/60); + secs = Math.round((secs-(change*60))*100)/100; + var firstmins=0; + if(parseInt(firstarray[11],10)>0){ firstmins=parseInt(firstarray[11],10); } + var secondmins=0; + if(parseInt(secondarray[11],10)>0){ secondmins=parseInt(secondarray[11],10); } + var mins = firstmins+secondmins+change; //Minutes change = Math.floor(mins / 60); - mins = mins - (change * 60); - var hours = parseInt(firstarray[9],10)+parseInt(secondarray[9],10)+change; //Hours - change = Math.floor(hours / 24); - hours = hours - (change * 24); - var days = parseInt(firstarray[6],10)+parseInt(secondarray[6],10)+change; // Days - var months = parseInt(firstarray[4],10)+parseInt(secondarray[4],10) - var years = parseInt(firstarray[2],10)+parseInt(secondarray[2],10) + mins = Math.round(mins-(change*60)); + var firsthours=0; + if(parseInt(firstarray[9],10)>0){ firsthours=parseInt(firstarray[9],10); } + var secondhours=0; + if(parseInt(secondarray[9],10)>0){ secondhours=parseInt(secondarray[9],10); } + var hours = firsthours+secondhours+change; //Hours + change = Math.floor(hours/24); + hours = Math.round(hours-(change*24)); + var firstdays=0; + if(parseInt(firstarray[6],10)>0){ firstdays=parseInt(firstarray[6],10); } + var seconddays=0; + if(parseInt(secondarray[6],10)>0){ firstdays=parseInt(secondarray[6],10); } + var days = Math.round(firstdays+seconddays+change); // Days + var firstmonths=0; + if(parseInt(firstarray[4],10)>0){ firstmonths=parseInt(firstarray[4],10); } + var secondmonths=0; + if(parseInt(secondarray[4],10)>0){ secondmonths=parseInt(secondarray[4],10); } + var months = Math.round(firstmonths+secondmonths); + var firstyears=0; + if(parseInt(firstarray[2],10)>0){ firstyears=parseInt(firstarray[2],10); } + var secondyears=0; + if(parseInt(secondarray[2],10)>0){ secondyears=parseInt(secondarray[2],10); } + var years = Math.round(firstyears+secondyears); } if (years > 0) { timestring += years + 'Y';