Copy link to clipboard
Copied
We are creating some online courses for my company. After working with a course designer for several years, I am now going to do this myself and am a beginner.
Two of our courses have a minimum time requirement. The student must spend a certain amount of time taking the course before they can obtain their certificate.
I have a few questions that I haven't been able to find a current answer to and am hoping someone can help:
1. Will the Timer learning interaction display the total time a student spends in the course? Is there a better way to do this? Ideally I would like it to say something like 25/120 mins completed or something along those lines.
2. Within Captivate, is there a way to keep the student from course completion until they have studied course materials for the required time?
3. When publishing to SCORM, is this minimum time requirement one of the features?
I am new at all of this so I would appreciate any help!
Copy link to clipboard
Copied
Yes, I have done this for a client. Sorry, rather complicated, certainly
not for a newbie.
Copy link to clipboard
Copied
OK. maybe I will hire this part out.
Copy link to clipboard
Copied
I remember that solution, which took quite a lot of testing. It was a combination of showing the time with the timer interaction, calculating the exact time (timer is not very exact) with tweaking the score, showing a warning when the minimum time was not reached etc.... At the end it worked fine. Sorry that I told you this was not newbie stuff, think it is a wise decision to hire someone for that part.
Copy link to clipboard
Copied
Lilybiri, your response prompted me to work a little with the cpInfoElapsedTimeMS variable, something I have not used very often since most courses are not timed. I see what you mean by the timer not being very exact. Setting the if test to a specific second did not seem to stop the timer - had to use greater than or less than to have the action work. Is that your experience too?
Copy link to clipboard
Copied
The former timing widget (blogged about is) was more exact. The new ones, although having the possibility to jump to a slide, start only after about 1sec, and when time has elapsed, there is still a delay before the message is shown for another 3 secs before th jump happens.
Do not use the system variable cpInfoElapsedTime but the other one because it gives you an absolute reference point: cpInfoEpochMS.
Copy link to clipboard
Copied
Be sure you check what your LMS vendor can support. Some LMS products may allow you to set the minimum time and track it for you (essentially just tracking the total amount of time from when the student launches the piece to the time they close it).
If the LMS doesn't provide that functionality then, yes, you can code it as Lieve suggests.
Copy link to clipboard
Copied
Sounds like you're in California!
SCORM does keep the time in a session and there are function in Captivate's scormdriver.js to track and convert all of the time information.
SCORM_GetPreviouslyAccumulatedTime() returns time in milliseconds
SCORM_SaveTime(milliseconds) sets time using milliseconds as the argument and sets as 0000:00:00 format:
ConvertMilliSecondsToSCORMTime(intTotalMilliseconds, blnIncludeFraction) converts to 0000:00:00 format:
Example ConvertMilliSecondsToSCORMTime(2400000, false) returns 0000:40:00
ConvertCMITimeSpanToMS(SCORM time format), the argument would be 0000:40:00 and returns milliseconds.
There is a Captivate system variable called cpInfoElapsedTimeMS.
To accurately keep track of the time between sessions you need to figure out if this is the first time entering the course and can be done with SCORM_CallLMSGetValue("cmi.core.entry");
If it returns "ab-initio" it is the first time and you'll need to set the time, else you'll need to get the time and add the time of the current session time to it.
All of this can easily be done with JavaScript running behind the scenes keeping track of the time and setting the time to the LMS at specific intervals or when the window is closing.
You need to have script to show a next button to advance to the screen (last slide) that can set the completion criteria or just register completion. Or if they have spent to applicable amount of time, auto advance to that slide.
If you put this script in the head of your html it should of the trick, you have to name the vaiable to show the time on the slides to "showTime" and set the requiredTime variable in the script to the minimum milliseconds. When the time requirement is completed is sets a variable timeComplete to true, so you can read it when you want in JavaScript action with window.timeComplete.
<script>
var interfaceObj, eventEmitterObj, start, elapsed, runningTime, interval, timeComplete, requiredTime = 7200000;
var netConnected = location.protocol.indexOf( 'http:' ) !== -1 ? true : false;
window.addEventListener( 'moduleReadyEvent', function ( e )
{
interfaceObj = e.Data;
eventEmitterObj = interfaceObj.getEventEmitter();
initializeEventListeners();
});
function initializeEventListeners()
{
if ( interfaceObj )
{
if ( eventEmitterObj )
{
if ( netConnected )
{
if ( SCORM_CallLMSGetValue("cmi.core.entry") !== 'ab-initio' )
{
if ( netConnected )
{
SCORM_GetPreviouslyAccumulatedTime();
}
}
else
{
start = new Date().getTime();
}
}
else
{
start = new Date().getTime();
}
eventEmitterObj.addEventListener( 'CPAPI_SLIDEENTER', function ( e )
{
clearInterval( interval );
if ( !timeComplete )
{
if ( netConnected )
{
SCORM_SaveTime( start + window.cpInfoElapsedTimeMS );
}
checkTime();
}
});
}
}
}
function checkTime()
{
interval = setInterval( function()
{
var getTimeMS = start + window.cpInfoElapsedTimeMS;
var minutesSpent = Math.floor(( getTimeMS / 1000 / 60 ) << 0 );
var minutesRequired = Math.floor(( requiredTime / 1000 / 60 ) << 0 );
window.showTime = minutesSpent + '/' + minutesRequired;
if ( getTimeMS === requiredTime )
{
timeComplete = true;
if ( netConnected )
{
SCORM_SaveTime( start + window.cpInfoElapsedTimeMS );
}
clearInterval( interval );
}
}, 1000 );
}
</script>