4-eeQuiz logo

An LMS for your CMS

Finally... get all your questions answered. From multiple choice to likert scale, weighted to randomized, 4-eeQuiz is a fully integrated solution that passes the test with flying colors. Compatible with EE1 (up to 4-eeQuiz 1.9.4) and EE2. Plus a rock solid
30 day, 100% money back guarantee.

Take an example quiz and see the module in action.

divider

Choose from a variety of question types.

Question configurations include:

• Matching
• Essay
• True/False
• Multiple Choice
• Select All That Apply
• Voting Ballot
• Fill In the Blank
• Likert Scale

screenshot

Fine grain controls and options for every question and quiz.

Do you want a question to be worth more? Perhaps you'd like to allow five attempts on that particularly difficult question? Or maybe you want to show your users an explanation on how the answer can be obtained.

Accomplish all of this and more with a powerful set of options provided for each question type and quiz. Some customizations include:

• email notifications
• question weight
• number of attempts
• explanation
• mandatory or optional
• per-option feedback
• randomized option order
• quiz passing score
• display questions all at once or sequentially

screenshot

Capture, sort, and utilize your data right within the module.

View overall statistics, individual answers, most common answers, and export all user solutions as a spreadsheet.

Need to see how a particular group of users performed? Simply filter the answers by their member group, usernames, or screennames.

screenshot

Easy integration into your site with simple and powerful templates.

Construct your own quiz templates or use our default one to quickly deploy your quizzes. An extensive set of variables allow you to tailor your quizzes specifically to your liking. You can even use other EE tags in your quiz templates (like exp:channel:entries) to pull in any extra data you may want to use (images, files, extra texts, etc).

 

screenshot

Quick Start

  1. Create some questions.
  2. Create a quiz, select 'Full' as its template, and add questions as needed. Submit the quiz.
  3. Create a template group called eequiz and enter the following in its index:

    Select a quiz:
    {exp:eequiz:quizzes}
    <a href="{path=eequiz/take_quiz/{quiz_id}}">{quiz_title}</a><br />
    {/exp:eequiz:quizzes}

  4. Create a template called 'take_quiz', and put the following tag in it. Make sure to include jquery on this page, or refer to the exp:eequiz:questions documentation to use your own javascript:

    {exp:eequiz:questions quiz_id="{segment_3}"}

  5. Refer to the CSS section of this documentation to style your questions. You may use the quick start CSS found on that page as a starting point.
  6. Make sure query caching is disabled (admin->system administration->database settings->"Enable SQL Query Caching" set to "No").
  7. Log in to your site and visit http://www.yoursite.com/index.php/eequiz to start taking quizzes!

Quizzes Tag

Overview:

This is a tag pair. It outputs overview information pertaining to quizzes (titles, descriptions, the logged-in user's score, etc).

Options:

quiz_id
Optional. The id of a specific quiz to get data for. Will iterate through all quizzes if not specified.
url_title
Optional. The url_title of a specific quiz to get data for. Will iterate through all quizzes if not specified.
tags
Optional. Use this to only show quizzes of certain tags, separated by "|". ex: math|science
member_id
Optional. If specified, the quiz will use results for that member, instead of the currently logged in member (currently logged in member is default).
disable="grades"
Optional. Will speed up the tag by disabling any variables and conditionals relating to user scores and progress.

Variables:

quiz_title
The title of this quiz.
quiz_description
The description of this quiz.
tags
The tags for this quiz.
passing_grade
The passing grade for this quiz.
num_questions
The number of questions contained in this quiz.
--- grades tag option must NOT be disabled for the following conditionals ---
grade_score
The raw score of the currently logged in member.
grade_percent
A percentage score (earned score divided by max possible score) of the currently logged in member.
max_score
The max possible score that can be obtained on this quiz.
last_answer_time format="m/d/Y"
The time of the user's last answered question. If this quiz has been completed, this can be used to show when the user completed the quiz. The format parameter is mandatory; use the example here or see php's date documentation for more control. Ex: {last_answer_time format="m/d/Y"}

Conditionals:

quiz_title
The title of this quiz.
quiz_description
The description of this quiz.
enabled
TRUE if the quiz is enabled.
passing_grade
The passing grade for this quiz.
one_at_a_time
TRUE if the quiz displays questions one at a time.
all_at_once
TRUE if the quiz displays all questions at the same time.
anonymous
TRUE if the quiz is set to anonymous.
num_questions
The number of questions contained in this quiz.
--- grades tag option must NOT be disabled for the following conditionals ---
attempted_all
TRUE if the currently logged in member has attempted every question.
attempted_all_mandatory
TRUE if the currently logged in member has attempted all mandatory questions.
passing
TRUE if the currently logged in member is passing the quiz.
failing
TRUE if the currently logged in member is failing the quiz.
grade_score
The raw score of the currently logged in member.
grade_percent
A percentage score of the currently logged in member.
max_score
The max possible score that can be obtained on this quiz.

Template Example:

Select a Quiz:
{exp:eequiz:quizzes}
   <h1><a href="{path=eequiz/{quiz_id}}">{quiz_title}</a></h1>
   <p>
      description: {quiz_description}<br />
      score: {grade_score} out of {max_score}<br />
      percent: {grade_percent}%<br />
      {if passing}you are currently passing this quiz{/if}<br />
   </p>
{/exp:eequiz:quizzes}

Questions Tag

Overview:

This is a single tag. It outputs the question form(s) corresponding to the provided quiz_id. * NOTE: jQuery is required with this tag, and only one of these tags are allowed per page *

Options:

quiz_id
Required. The id the quiz for which to get questions for.
url_title
Required if quiz_id is not set. The url_title of a specific quiz to get data for.
continue
Optional. If this is set to "yes","true", or "retake" and the quiz is sequential, then the quiz will start after the user's last answered question.
include_js
Optional. Defaults to "yes". If set to "no", you must include the {exp:eequiz:javascript} tag in your page.
retake
Optional. If this is set to "yes","true", or "retake", the quiz answers for the current user will be erased when starting the quiz. Use this when you want to automate user retakes. WARNING: if you have the questions tag with retake="yes" anywhere on the page, even if guarded with conditional template logic, it will still parse and therefore clear the current user's answers. See the following example for correct way to use this tag.

good example (eequiz module will determine whether to clear answers):

{exp:eequiz:questions quiz_id="{segment_2}" retake="{segment_3}"}

bad example (both tags will execute behind the scenes, therefore clearing the current user's answers):

{if segment_3=="retake"}
   {exp:eequiz:questions quiz_id="{segment_2}" retake="yes"}
{if:else}
   {exp:eequiz:questions quiz_id="{segment_2}"}
{/if}

js_on_load_start
Optional. Provide the name of a javascript function to add custom behavior for when loading begins.
js_on_load_end
Optional. Provide the name of a javascript function to add custom behavior for when loading ends.
js_on_update
Optional. An optional javascript callback when a question is updated on the page. Must receive one parameter (ex: onQuestionUpdate(json){} ).
The json sent to the callback has the following properties:
  • json.updated_answer : true if the user submitted an answer, false if the user changed to a different question
  • json.quiz_id : the quiz id
  • json.question_number : the question number
  • json.num_questions : the number of questions in this quiz
  • json.attempted_all : true if the user has attempted all questions in the quiz
  • json.attempted_all_mandatory : true if the user has attempted all mandatory questions in the quiz
  • json.all_correct_or_no_more_attempts : true if the user has gotten every question right and/or has no more attempts
  • json.quiz_passing_grade : the passing grade for this quiz
  • json.quiz_max_score : the max possible score possible for this quiz
  • json.quiz_score : the user's current quiz score, as the number of earned points
  • json.quiz_percent : the user's current quiz score, as a number between 0 and 100
  • json.last_answer : the user's last answer to the question
  • json.correctness : the correctness of the user's answer. Can be correct, incorrect, partially_correct, or blank (if there is no answer).
  • json.attempts : the amount of attempts the user used
  • json.max_attempts : the max amount of attempts allowed for this question
  • json.weight : the question's total weight
  • json.score : the user's earned score for the question
  • json.submitted_all : will be true if the user has just pressed submitted all

Examples:

standard quiz form

{exp:eequiz:questions quiz_id="1"}

quiz form with extra javascript behavior

javascript code:
function questionCallback(results) {
   if (results.updated_answer) {
      alert("Your answer is: "+results.correctness);
   }
}
function loadStart() {
   $("#loading_gif").show();
}
function loadEnd() {
   $("#loading_gif").hide();
}

template code:
{exp:eequiz:questions quiz_id="1" js_on_update="questionCallback" js_on_load_start="loadStart" js_on_load_end="loadEnd"}

Answer Data Tag

Overview:

This is a tag pair. It gives access to both user and global quiz score variables. This can be used to show some overall data to the user (percentile, average scores, etc).

Options:

quiz_id
Optional. Similar to channel:entries tag, this can be one id, a pipe separated list, or "not". If omitted, default will be all quizzes. Ex: quiz_id="1", quiz_id="1|2|3", quiz_id="not 1|2|3".

Variables:

max_score
The max possible total score of the specified quizzes.
user_score
The current user's total score for the specified quizzes.
user_percent
The current user's percentage for the specified quizzes.
user_percentile
The user's percentile compared to other users for the specified quizzes.
num_users
The number of people who have attempted the specified quizzes.
average_percent
The average percent of all people who have attempted the specified quizzes.
average_score
The average cumulative score of all people who have attempted the specified quizzes.

Conditionals:

***
All the variables listed above can be used with conditionals.
passing_all
TRUE if the current user is passing all the quizzes specified with the quiz_id parameter.

Examples:

a simple results page

<h1>THIS QUIZ</h1>
{exp:eequiz:answer_data quiz_id="{segment_3}"}
score: {user_percent}%<br />
percentile: {user_percentile}%<br />
{/exp:eequiz:answer_data}

<h1>ALL QUIZZES</h1>
{exp:eequiz:answer_data}
score: {user_percent}%<br />
percentile: {user_percentile}%<br />
{if passing_all}You are passing every quiz! Congrats!<br />
{if:else}You are not yet passing every quiz... keep trying!<br />{/if}
{/exp:eequiz:answer_data}

Results Tag

Overview:

This is a tag pair. It gives access to question variables, including user data (score, last answer, number of attempts, etc). This can be used to create a custom results page.

Options:

quiz_id
Required. The id of the quiz.
url_title
Required if quiz_id is not set. The url_title of the quiz.
unrolled
Optional. If this is set to "yes" or "true", the tag will no longer loop through each question. Instead, all variables will be available on the spot, but with prefixes of q#_, where # is the question number. (ex: q1_title is the first question's title). This is useful if you want to test for advanced conditionals (for example, if user answered A to the first question, and C to the second question, etc).

Variables:

* If "unrolled" is being used, these variables will be prefixed by "q#_", where # is the question number.

number
The current question number.
title
The title of the question.
text
The text of the question.
explanation
The explanation of the question.
user_answer
The user's last answer for this question, in its raw form. See "Using Answer Tags" below for more detail on this tag.
user_answer_formatted
The user's last answer for this question, formatted to be more readable.
correct_answer
The correct answer for this question. See "Using Answer Tags" below for more detail on this tag.
score
The user's current score for this question.
max_score
The max possible score for this question.
num_attempts
The number of times the user has attempted this question.
max_attempts
The max number of attempts this question allows.
correctness
Can be either "correct", "incorrect", "partially correct", or empty (if they have not attempted).
options
* Only applies to multiple choice questions; use conditional "type" to verify *
Tag pair. Contains variables: option_number, option_text, option_feedback, option_weight. Contains conditionals: option_number, option_is_selected, and option_is_answer.
matching_problems
* Only applies to matching questions; use conditional "type" to verify *
Tag pair. Contains variables: problem_number, problem_text, problem_answer, problem_selection. Contains conditionals: problem_number, problem_answer, problem_selection.
matching_choices
* Only applies to matching questions; use conditional "type" to verify *
Tag pair. Contains variables: choice_number, choice_text. Contains conditionals: choice_number.
num_questions
The number of questions contained in this quiz.
NOTE: this is unaffected by the "unrolled" parameter.

Conditionals:

* If "unrolled" is being used, these conditionals will be prefixed by "q#_", where # is the question number.

number
The current question number.
type
The current question type. Possible values are: "multiple_choice", "true_false", "fill_in_the_blank", "essay", or "matching".
user_answer
The user's last answer for this question, in its raw form. See "Using Answer Tags" below for more detail on this tag.
correct_answer
The correct answer for this question. See "Using Answer Tags" below for more detail on this tag.
score
The user's current score for this question.
max_score
The max possible score for this question.
num_attempts
The number of times the user has attempted this question.
max_attempts
The max number of attempts this question allows.
correct
True if the user's answer is correct.
incorrect
True if the user's answer is incorrect.
partially_correct
True if the user's answer is partially correct.
num_questions
The number of questions contained in this quiz.
NOTE: this is unaffected by the "unrolled" parameter.

Using Answer Tags:

Here is a breakdown of how answers are output, so you will have a better idea how to use them with conditionals.

multiple choice - single answer
Outputs the number of the option the user selected. For example, it outputs "1" if the user selects the first option. If randomized, it uses the option order from when you submitted the question.
multiple choice - multiple answer
Outputs the number of the options the user selected, separated by spaces. For example, it outputs "1 3" if the user selects the first and third options. This is sorted in order.
multiple choice - write-in
If the user does a write-in, it outputs "WRITE-IN:answer". For example, if the user wrote-in "4-ee", it outputs "WRITE-IN:4-ee".
true/false
Outputs "1" for true, "0" for false.
matching
Outputs each problem selection, separated by spaces, in problem-order. For example, if the user matched 1->3, 2->2, and 3->1, the output would be "3 2 1".
fill in the blank
Outputs exactly as the user entered, but with html characters escaped and new lines to break tags.
essay
Outputs exactly as the user entered, but with html characters escaped and new lines to break tags.

Examples:

a simple results page

{exp:eequiz:results quiz_id="1"}
   {number}. {text}<br />
   Your answer is {correctness}.<br />
   Your answer: {user_answer_formatted}<br />
   Correct answer: {correct_answer}<br />
   <hr />
{/exp:eequiz:results}

an in-depth results page using the "unrolled" parameter, with custom logic based on user answers

{exp:eequiz:results quiz_id="1" unrolled="yes"}
   {if q1_user_answer==1 && q2_user_answer==2}You answered A to the first question and B to the second, so that means you are...{/if}
   {if q1_user_answer==2 && q2_user_answer==2}You answered B to the first question and B to the second, which means you should...{/if}
{/exp:eequiz:results}

Javascript Tag

Overview:

This is a single tag. Add it to your page if you did include_js="no" on your {exp:eequiz:questions} tag. Note: if you use any of the options below, you MUST define the javascript functions before you insert this tag!

Options:

js_on_load_start
Optional. Provide the name of a javascript function to add custom behavior for when loading begins.
js_on_load_end
Optional. Provide the name of a javascript function to add custom behavior for when loading ends.
js_on_update
Optional. An optional javascript callback when a question is updated on the page. Must receive one parameter (ex: onQuestionUpdate(json){} ). Refer to the questions tag for more information.

Quiz Template Reference

Simple Value Tags

The following tags are values only and include no html/css. Feel free to use them in conditionals.

  • {num_questions}
  • {question_number}
  • {question_title}
  • {question_shortname}
  • {question_tags}
  • {text}
  • {attempts}
  • {max_attempts}
  • {remaining_attempts}
  • {answer_time format="m/d/Y"} : The time the user entered their last answer. The format parameter is optional; see php's date documentation for details on how to use it.
  • {score} : The user's earned score for this question
  • {weight} : The amount of points this question is worth
  • {correctness} : Will be either "correct", "incorrect", "partially_correct", depending on the user's answer.
  • {feedback_explanation} : This is the overall question explanation, with no extra html. Use this if you want to get at what's inside {feedback_section}
  • {feedback_extra} : This is question-specific extra feedback, with no html. Use this if you want to get at what's inside {feedback_section}
  • {quiz_title}
  • {quiz_id}
  • {quiz_description}
  • {quiz_score} : The amount of points the user has earned on this quiz
  • {quiz_percent} : The user's current score for this quiz, expressed as a number between 0 and 100
  • {quiz_max_score} : The max amount of points possible on this quiz
  • {quiz_passing_score} : The amount of points to be considered passing for this quiz

Section Tags

The following tags include html and css classes. See documentation for styling guidelines.

{answer_section}
The section where the user enters their answer
{feedback_section}
The section where feedback is provided to the user
{correctness}
The section that tells whether the user got the problem right or wrong (ex: <div class='correct_mark'><span>correct</span><div>). If used within a conditional, it will evaluate to "", "correct", "incorrect", or "partially_correct".
{previous label="optional label"}
The button to go to the previous question. Will automatically evaluate to nothing if quiz display is set to 'view all at once'. Use the optional label param to customize the button.
{next label="optional label"}
The button to go to the next question. Will automatically evaluate to nothing if quiz display is set to 'view all at once'. Use the optional label param to customize the button.
{submit label="optional label"}
The button to submit the user's answer. Use the optional label param to customize the button.
{submit_and_advance label="optional label"}
This button will submit the user's answer and automatically advance to the next question. If this is on an all-at-once quiz, it will revert to a regular submit button. Use the optional label param to customize the button.

CSS Styles

General Styles

div.eequiz
Div that wraps each question.
div.eequiz_loading
Div that wraps each question when loading is happening. Use this to add custom load styles, or to show/hide loading gifs.
div.eequiz div.answer_section
Wraps the answer section.
div.eequiz div.answer_footer
Goes right before the closing div of the answer section; commonly used to clear floats.
div.eequiz div.feedback_section
Wraps the feedback section.
div.eequiz div.incorrect_mark
Indicates in incorrect answer.
div.eequiz div.partially_correct_mark
Indicates a partially correct answer.
div.eequiz div.correct_mark
Indicates a correct answer.
div.eequiz div span.mark_text
The text inside a correctness mark.
div.eequiz a.next_link
A link to the next question.
div.eequiz a.previous_link
A link to the previous question.
div.eequiz a.disabled
A next or previous button that is disabled.
div.eequiz input.submit_answer_button
The button that submits the user's answer.
input.eequiz_submit_all_button
The button that submits all the user's answers (only applicable to all-at-once quizzes).

Question-Type Styles

div.eequiz ol.multiple_choice_options
Ordered list that contains the choices for a multiple choice question.
div.eequiz ol.matching_problems
List that contains the problems for a matching question.
div.eequiz ol.matching_choices
Ordered list that contains the choices for a matching question.

Quick Start / Example CSS

The following styles were designed according to the default quiz template.

/* ======================================================== */
/* general question styles */

div.eequiz {
   width: 400px;
   padding: 5px;
   margin: 5px auto;
   background-color: #eee;
}

div.eequiz h1 {
   padding: 5px;
   margin: 5px;
   font-size: 24px;
   font-weight: normal;
   color: #000;
}

div.eequiz div.question_info {
   padding: 5px;
   margin: 5px;
   color: #555;
   background-color: #ccc;
   font-style: italic;
   font-size: 12px;
   line-height: 1.2em;
}

div.eequiz div.question_text {
   clear: both;
   border-bottom: 1px solid #ccc;
   padding: 10px;
}

div.eequiz div.answer_section {
   padding: 10px;
   border-bottom: 1px solid #ccc;
}
div.eequiz div.answer_footer {
   clear: both;
}

div.eequiz div.feedback_section {
   margin-bottom: 10px;
}

/* ======================================================== */
/* answer mark styles */

div.eequiz div.incorrect_mark {
   padding: 5px;
   margin-bottom: 10px;
   color: #F00;
   background-color: #FEE;
}
div.eequiz div.partially_correct_mark {
   padding: 5px;
   margin-bottom: 10px;
   color: #BB0;
   background-color: #FFE;
}
div.eequiz div.correct_mark {
   padding: 5px;
   margin-bottom: 10px;
   color: #0F0;
   background-color: #EFE;
}
div.eequiz div span.mark_text {
}

/* ======================================================== */
/* controls styles */

div.eequiz div.question_controls {
   margin-top: 20px;
   clear: both;
}
div.eequiz a.next_link {
   float: right;
   margin-right: 10px;
}
div.eequiz a.previous_link {
   float: left;
   margin-left: 10px;
}
div.eequiz a.disabled {
   color: #CCC;
   cursor: default;
}
div.eequiz input.submit_answer_button {
   display: block;
   width: 150px;
   margin: 0 auto;
}

/* ======================================================== */
/* multiple choice styles */

div.eequiz ol.multiple_choice_options {
}

/* ======================================================== */
/* matching styles */

div.eequiz ol.matching_problems {
   width: 150px;
   float: left;
}
div.eequiz ol.matching_problems li select {
   margin-right: 5px;
}
div.eequiz ol.matching_choices {
   width: 150px;
   float: right;
   list-style-type: decimal;
}
div.eequiz ol.matching_choices li {
   margin-left: 30px;
   padding-left: 5px;
}

FAQ

When I submit a question, it just redirects me to a blank page with some jibberish (json). What's wrong?

You probably don't have jquery included on your page, which is required.

How can I add extra data to questions, such as images, files, and custom text fields?

Create a new channel and add any custom fields you want to it. Then, in your quiz template, add the following code (example):

{exp:channel:entries url_title="{question_shortname}" dynamic="off"}
Here is a custom text: {custom_text_1}<br />
Here is an image: <img src={my_custom_image} />
{/exp:channel:entries}

Now as you create questions, if you want extra data to be pulled in, simply publish an entry with the same url_title as your question_shortname. Note: dynamic="off" is very important, since you do not want to pull data using the uri.

How can I make my quiz redirect to a new page, once the user has finished taking it?

First add js_on_update="questionCallback" to your {exp:eequiz:questions} tag. Then, add the following javascript to your page (edit as needed):

function questionCallback(results) {
   if (results.attempted_all) {
      window.location = "http://www.[REDIRECT PAGE].com";
   }
}

Don't let that scare you, if you don't know javascript! It's very simple. Here's an english translation: "if the user has attempted every question, then redirect them."

Changelog

2.1.2 (4/30/2013)

  • [tweak] added 'submitted_this' property to js callback
  • [tweak] optimized the answers page in the control panel
  • [tweak] added class parameter to the control buttons in the quiz templates

2.1.1 (3/24/2013)

  • [tweak] added url_title to quizzes tag
  • [tweak] added member_id parameter to results tag

2.1 (12/15/2012)

  • [feature] added export buttons per-quiz, so you can easily export data for a single quiz
  • [feature] made it so you can easily customize the buttons with the label parameter. ex: {next label="proceed"}
  • [tweak] added question_id to the results tag

2.0.4 (10/7/2012)

  • [tweak] minor additions

2.0.3 (8/27/2012)

  • [tweak] added passing_all conditional to the answer_data tag pair

2.0.2 (8/21/2012)

  • [bug-fix] fixed an issue with relocated front-end messages (they can now be edited in front_end_messages.php)

2.0.1 (8/19/2012)

  • [bug-fix] fixed an issue with include_js incorrectly defaulting to no

2.0 (8/17/2012)

  • [feature] added a 4-eeQuiz field type. Add it to a channel to be able to select a quiz from a dropdown, then use it in your templates to show that quiz.
  • [tweak] moved some more front-end messages to the language file
  • [tweak] added an automatic tag to questions when adding them to a quiz: "unused". If you type unused into the filter field, it will only show questions that aren't in any quiz.
  • [tweak] added an extra tag: {exp:eequiz:javascript}. Use this with the new {exp:eequiz:questions} parameter include_js="no" parameter if you wish to put the javascript in the header or footer.
  • [tweak] added {feedback_explanation} and {feedback_extra} to the 4-eeQuiz template tags. They are the question's main feedback and the question's extra feedback (per-option feedback, etc), with no extra html. Use these if you don't want the html that is included with {feedback_section}.
  • [bug-fix] fixed an when typing periods into the shortname field

1.9.4 (4/16/2012)

  • [ee1] this is the last update for 4-eeQuiz for Expression Engine version 1. This module will continue to be updated for Expression Engine 2+.
  • [feature] you can now tag quizzes, which means you can then show organize quizzes when displaying to users. For example, you can show all "math" quizzes.
  • [tweak] moved the "correct", "incorrect", "partially correct" messages to the language file
  • [tweak] added quiz_id to the question javascript callback json
  • [tweak] added screen_name and username to the built-in variables in quiz email notifications
  • [bug fix] fixed a bug with fill-in-the-blank upper/lower case scoring

1.9.3 (2/13/2012)

  • [feature] you can now specify member_id in the quizzes tag, allowing for a publicly seen quiz "profile" page
  • [feature] added a new email notification mode: email if user has either gotten every question correct or has no more attempts left
  • [feature] added "all_correct_or_no_more_attempts" conditional to quizzes tag
  • [feature] added "quiz_passing_grade" and "all_correct_or_no_more_attempts" to the json returned in the javascript callbacks

1.9.2 (1/19/2012)

  • [bug fix] fixed a bug where email notifications would resend every time a user attempted a question after they had completed/passed the quiz

1.9.1 (1/16/2012)

  • [bug fix] fixed a bug that would prevent users from creating quizzes after a fresh install of 4-eeQuiz

1.9 (1/14/2012)

  • [feature] added email notifications on quiz completion or on quiz pass
  • [feature] added last_question_time to quizzes tag, which can be used to show when the user's last activity was (or when the completed this quiz)
  • [tweak] quiz url_title is no longer a required field

1.8.3 (12/18/2011)

  • [feature] added url_title to quizzes, which you can now use with quizzes, questions, and results tags
  • [tweak] added quiz_id to quiz template variables
  • [tweak] added data-ajax='false' to question form, for compatibility with jQuery mobile

1.8.2 (9/21/2011)

  • [bug fix] fixed a bug where tags after the {exp:eequiz:questions} tag would break
  • [bug fix] module plays nicely with apps that create folders in directories (svn, dreamweaver _notes, etc... thanks coffeebean!)

1.8.1 (9/18/2011)

  • [feature] added {question_tags} to template variables and conditionals
  • [tweak] optimized "export answers"

1.8 (9/4/2011)

  • [feature] quiz templates now work with the normal EE tags! This is pretty big, because your questions are now much more flexible. Simply create a new channel with any extra fields you want (images, file fields, extra text fields, etc), and then pull that data into your questions by putting something like this in your quiz template (this example assumes you're naming your entries the same as your {question_shortname}):

    {exp:channel:entries url_title="{question_shortname}" dynamic="off"}
    <img src="{my_custom_image}" />
    {/exp:channel:entries}

  • [doc] added FAQ section to documentation
  • [bug fix] fixed an issue with {avg_percent} in {answer_data} not working when the current user hasn't attempted the quiz yet.

1.7.4 (8/17/2011)

  • [feature] added a new "Export Scores" button. Use this to export a tab delimited list of all user quiz attempts (quiz-member-score-percent).
  • [bug fix] fixed various issues with answer_data tag. For groups of quizzes, it will now only pull quiz scores for which the user has attempted at least one question.

1.7.3 (8/10/2011)

  • [tweak] answer_data tag now rounds avg_score to one decimal point
  • [bug fix] fixed some answer_data tags not working if max quiz score was 0 (only affected ee2 builds)

1.7.2 (8/9/2011)

  • [bug fix] fixed a critical bug that would cause the question submits not to work (only affected fresh installs of version 1.6 - 1.7.1)

1.7.1 (8/1/2011)

  • [feature] quizzes now support both anonymous and members
  • [bug fix] fixed some issues that arose with latest jquery (corresponds with ee 2.2 updates)
  • [bug fix] fixed some issues with cached scores not updating (for answer_data tags)

1.6 (7/25/2011)

  • [feature] added a new tag pair: answer_data. Use it to show some scoring info, like the current user's score, the current user's percentile compared to others, global average score, etc.
  • [feature] added "continue" parameter to questions tag, which will start the user off after their last answered question (sequential quizzes only)

1.5.1 (7/4/2011)

  • [tweak] added a feedback option for showing feedback if answered incorrectly
  • [tweak] added quiz_title and quiz_description to template vars, and correctness to template conditionals
  • [tweak] changed some documentation wording to give better info

1.5 (6/27/2011)

  • [feature] added tags to questions, which allows for filtering and better management when adding to quizzes
  • [tweak] added {options}, {matching_problems}, and {matching_choices} tag pairs to the {results} tag. also added a conditional for question type.
  • [tweak] added a "submitted_all" boolean to the on_js_update callback, which is set to true if the user has just submitted all questions

1.4 (6/13/2011)

  • [feature] module now records the times of user answers. The time is now available in the quiz templates and also displayed on the admin answer screen.
  • [tweak] added quiz_score, quiz_percent, and quiz_max_score to the json variables passed to the javascript handlers
  • [bug fix] essay questions will now properly hide their explanation when necessary (ee1)

1.3.3 (5/15/2011)

  • [feature] added results tag for generating advanced results pages; allows complete user answer conditional logic
  • [tweak] added label tags around radio and checkbox inputs, for a better user experience (thanks Bryan!)

1.3.2 (5/9/2011)

  • [feature] added duplicate quiz functionality
  • [feature] added the ability for the admin to delete all answers to a question, all user’s answers to a quiz, or a user’s answer to a particular quiz question
  • [bug fix] quizzes now work even if there are other forms on the page with input elements that have name=”name”
  • [bug fix] fixed a problem where the action urls in the quiz forms could have a trailing slash

1.3.1 (4/19/2011)

  • [feature] added new quiz variables to the quiz-question templates

1.3 (4/17/2011)

  • [feature] added the ability to style (with css) and/or handle (with javascript) loading
  • [feature] added a retake parameter to eequiz:questions, which will wipe the current user’s existing answers if set to "yes", "true", or "retake"
  • [tweak] made it so submit_and_advance will gracefully ignore user answers that are the same as their last answers
  • [bug fix] multiple choice questions will now properly cancel a submission if the answer is blank
  • [bug fix] fixed a problem when submitting multiple choice, multiple select with an empty answer
  • [bug fix] fixed an issue when submitting all questions at once
  • [deprecated] removed non-jquery javascript

1.2.1 (4/4/2011)

  • [feature] added weighted-by-option answer type to multiple choice questions
  • [bug fix] fixed a problem with ee1 cp theme not loading when missing a trailing slash on the site url

1.2 (3/28/2011)

  • [feature] added anonymous answer tracking. Users don’t have to be logged in, and their answers will be captured anonymously on the backend
  • [feature] added a “submit all answers” button option to "display all at once" quizzes
  • [bug fix] fixed issues with anonymously tracked quizzes while logged in at the same time (was only present with ee1 build)
  • [bug fix] auto-advance submit buttons on anonymously tracked quizzes will now have correct question callback json on the last question (attempted_all, etc)

1.1 (3/13/2011)

  • [feature] added a new quiz mode where users don’t have to register or log in and their answers are temporarily tracked via cookies
  • [feature] implemented a {submit_and_advance} button tag to quiz templates which submits the current question and automatically advances to the next one
  • [tweak] added num_questions to the javascript callback variable
  • [tweak] when adding questions to a quiz, the unused questions are sorted by title
  • [bug fix] whether or not a quiz is enabled is now a recognized conditional
  • [bug fix] fixed shortname auto-complete so it will stop automatically updating once you manually edit it, or if you’re editing an existing question

1.0.3 (3/4/2011)

  • [feature] compatible with foreign languages

1.0.2 (3/1/2011)

  • [feature] changed the addition and removal of questions on quizzes to drag-and-drop
  • [feature] added export of all answers as a tab-delimited file (for use as a spreadsheet)
  • [bug fix] fixed a rare case of php warnings when viewing quiz answers
  • [bug fix] fixed open ended answers from getting escaped twice

1.0.1 (2/24/2011)

  • [bug fix] feedback section will evaluate to nothing if there is no feedback present (no longer an empty div)
  • [bug fix] multiple choice feedback will no longer prepend a <br /> when there is option feedback, but no overall explanation

1.0 (2/23/2011)

  • initial release