Limiting Quiz attempts

Jun 23, 2011

I am trying to build a course with one quiz . I need to limit the attempts on this quiz to one attempt only.

I have checked the quiz properties, as well as the SCORM 2004 2nd edition publish settings. They seem correct.

However user is still able to attempt the quiz multiple times.  How do i fix this?

37 Replies
Catherine Conley

I found a workaround.

In Articulate: I set the maximum number of attempts to 3. I set both quizmaker and presenter to prompt to resume with the ignore flash cookie checked. I then make sure that the quiz is the final page in the course. When the user clicks "finish" on the quiz, I sent the navigation to Close the window. (Set in Articulate.)

In the LMS, I set minimun grade to 70% and maximum attempts to 1.

After the 3rd try, the user can only click "Review Quiz" or "Finish". Clicking "Finish" registers the attempt in the LMS. If the person failed, the SCORE and a Failed message appear on the Transcript Page. (Wish I could prevent the credits from appearing as well but the LMS doesn't give me that option.)

A very smart user could close the window after two attempts and then re-open the program and be given 3 additional attempts; but there is nothing programatically that would prevent that.

Catherine Conley

If the navigation is open to the user, they can navigate away from the test and then back again. When the user comes back to the test, Articulate resets the counter for number of attempts.

To get around this, I limit the navigation once the user begins the test. I change to Slide Only view then set the the Finish button on the test to close the window. Closing the window tells the LMS to register the attempt. I also set the number of attempts on the LMS side to be 1.

Divya Kapoor

Cathy, 

Your solution is dependent on the LMS and bookmarking. If a user ignores  the bookmarking, then they will get another attempt on the test. The only failproof solution is to build and deploy as a SCORM class, then using the sequencing and navigation rules to limit attempts. Your LMS has to support this behavior.

Some LMS may also have a independent feature that you can turn on/off to limit attempts that you can take advantage of.

Divya Kapoor

When a user exits a course, his/her location in the course is saved to the LMS. This is bookmarking. So when the same user returns, they are prompted to select if they want to resume where they left off in the last session. A user can select 'yes' and directly jump to where they last left off. OR they can select 'no' and go the beginning of the course.

When I say ignore, I mean they can select 'no'. 

Andrew  Thorne

Articulate is extremely lacking when it comes to proper communication to a SCORM compliant LMS. The number of attempts option in quizmaker only works consecutively (in one session) it keeps the count to itself.  Once a user leaves and comes back it's completely unaware of any attempts previously made. Very lazy coding in my opinion, to expect every LMS to count launches. Which might work if the TEST was it's own course (something I haven't verified with my LMS). But in a multiple SCO Course it only passes the score and the completion status. So if in Quizmaker you set it to Pass/Fail you get one attempt only. With pass/incomplete you get an unlimited number of attempts.. until you pass it. But for a limited number of attempts 2 or 3.. better put on your coding hat.

This is something Quizmaker should fix. the average user will not have the coding skills needed to accomplish the above.

Andrew  Thorne

Here is a solid stab at re-writing the code from Quizmaker. Follow these steps after you have published your quiz.

First in the LMS.js file found in the lms folder of the published files add the following code:

function SetStatus(strStatus)

{

// Added

strStatus = (( typeof(g_isAttemptsExceeded) != 'undefined') && (g_isAttemptsExceeded) && (strStatus == "incomplete")) ? "failed" : strStatus;

// End

comment out line 710

case "RR_SetResumeData":

case "CC_SetResumeData":

// g_strResumeData = args;

SaveStateData();

break;

line 721 add;(falls between - g_MasteryScore = arrArgs[4]; and SetStatus(g_Status); )

// added

g_isAttempt = true;

g_intTotalAttempts++;

g_strResumeData = g_intTotalAttempts + "|" + g_strResumeData

SaveStateData();

if ((g_intAllowedAttempts > 0) && (g_intTotalAttempts >= g_intAllowedAttempts))

{

g_isAttemptsExceeded = true;

if (g_Score < g_MasteryScore)

{

g_Status = "failed";

}

}

// End

------------

Create the following new ATFix.js file

------------

// added functionality

var g_intAllowedAttempts = 0;

var g_intTotalAttempts = 0;

var g_isAttempt = false;

var g_isAttemptsExceeded = false;

var strStatus = lmsAPI.GetStatus();

// added function for SuspendData

function CleanData(strData)

{

var returnData = strData;

if (returnData.charAt(1) == "|")

{

g_intTotalAttempts = parseInt(returnData.charAt(0));

returnData = returnData.substring(2);

}

return returnData;

}

function WriteContent(strData)

{

var returnData = strData;

if ((strStatus == 1)||(strStatus == 2))

{

returnData = "<h 2>Assessment Completed</h 2><p >You have successfully completed this assessment in a previous attempt. You are not required to take the assessment again.</ p>";

}

else if (((g_intAllowedAttempts > 0) && (g_intTotalAttempts >= g_intAllowedAttempts)) || (strStatus == 3))

{

returnData = "<h2>Maximum Attempts Exceeded</h2><p>You have already made the maximum number of attempts allowed.</p>";

}

else

{

returnData = strData;

}

return returnData;

}

---------------------------------

In the quiz.js file (found in the quiz_content folder) add/replace at line 121:

// The saved resume data

if (g_bLMSPresent)

{

var strResumeData = lmsAPI.GetDataChunk();

//  added

g_intAllowedAttempts = lmsAPI.GetLaunchData();

strResumeData = CleanData(strResumeData);

// End 

strFlashVars += "&vResumeData=" + encodeURI(strResumeData);

}

and replace line 147:

// replaced - document.write(strHtml);

document.write(WriteContent(strHtml));

// End 

In the function player_DoFSCommand(command, args) - replace:

case "CC_StoreQuizResult":

g_oQuizResults.dtmFinished = new Date();

// Replaced - g_oQuizResults.strResult = arrArgs[0];

g_oQuizResults.strResult = (g_isAttemptsExceeded) ? "failed" : arrArgs[0];

// End 

---------------------------------

In the configuration.js file I recomend the following settings:

var DEFAULT_EXIT_TYPE = EXIT_TYPE_SUSPEND;

var EXIT_BEHAVIOR = "ALWAYS_CLOSE_TOP";

---------------------------------

In the quiz.html file add:

<script language="JavaScript1.2" src="lms/ATFix.js"></script>

This should now check with the LMS to see if there is any launch data (attempts) 

Also when publishing make sure you set the reporting and tracking to passed/incomplete.

Now it wrote this sometime ago to deal with a particular client.. who's changed they're needs since, so there may be some other setting(s) needed.  I am also not tech support so use at your own risk  

Good luck

Divya Kapoor

I was able to build this scenario using Articulate Storyline. Here is how I built it

Create a new variable and increment it with each attempt using triggers on the results slide. Disable the retry 'Quiz button' when the attempt count is  3. Remove the next/previous button from the results slide and also set course to 'Always Resume'.

You will need to set up new triggers to check the value of variable.

Patrizia Gariglio

I created a scorm 1.2  online course for Saba platform using  Storyline.

The course is made of 10 pages and a final test with 10 questions (passing score = 70%)

The course gives as a PASSED result if you give the right answer to 7 questions on 10. If the 70% result is not achieved, the user must quit the course from the final report page, start again the course from the platform, review the course and make the test again. He has three attempts to do the course. After the third attempt the user cannot make the test again. If he reaches the 70% score, the Platform recognize the course as PASSED, if he does not  reach the 70% score, the Platform recognize the course as FAILED.

I made various attempts to satisfy these requirements, setting the attempts by some variable factors and with the “TRY AGAIN THE TEST” button in the final report page, but, if I quit the course and try again from the Platform, I can ALWAYS make the test UNLIMITED times. I need to do ONLY 3 ATTEMPTS.  

I could not find a solution. Can you help me?

Many thanks

Divya Kapoor

Hi Valeria, 

LMS usually have a configuration that allows it to track multiple attempts vs last attempt/ score. highest score. What Articulate product are you using - Storyline or Presenter? What LMS do you have? I may be able to help you if I have worked with the same LMS or you can reach out to your LMS vendor support.

 

 

Laura Douglas

Hi Divya... this seems to be an issue that is happening with cornerstone .... anyways. Here are the details..

Course has the following settings:
SCORM 2004; 3rd Edition
Tracking = Passed/Incomplete
Tracking based on results slide -- passing score of 80%
Course is set up to allow for multiple attempts to achieve passing score.

TO answer your question, yes, cornerstone wants to track each user attempt and the corresponding score for each attempt. What is happening now, is that the latest score overrides all previous scores so the reports only show the last score, and no previous attempts are tracked --- so it always appears like the user just took the course 1x.

This discussion is closed. You can start a new discussion or contact Articulate Support.