Note:

If you want to create a new page for developers, you should create it on the Moodle Developer Resource site.

Calculated question type creation: Difference between revisions

From MoodleDocs
No edit summary
Line 37: Line 37:


==NOTHING is SAVED UNTIL you CLICK the ADD BUTTON==
==NOTHING is SAVED UNTIL you CLICK the ADD BUTTON==
The creation of a calculated question is a process which can abort easily if the user do not follow exactly all the steps in the order the PHP code expect them.
Because of this three steps procedure, the creation of a calculated question is a process which can abort easily if the user do not follow exactly all the three steps in the order the Moodle code expect them.
The code should be improved to obtain a '''FULL PROOF PROCESS''' at least in the technical aspects of creating a somewhat complex calculated question.
However, the teacher should always verify that for each added data item set, a valid answer, minimum and maximum value are obtained.
We could not easily debug errors in the answer formula which can be a supplementary difficulty for a user (i.e.teacher) that is not familiar with the PHP coding of mathematical operation.
Fortunately, at this step the newly created calculated question is saved in the database.
Improvements to obtain a '''FULL PROOF PROCESS''' are in described in the next section.
 
==A more FULL PROOF code==  
==A more FULL PROOF code==  
The code can be improved
The code can be improved

Revision as of 12:17, 19 June 2006

I will use this page and the followings to describe the PHP code principal processes of the calculated question creation and see how it could be improved.

Calculated question parameters

Calculated question is an extended numerical question where parameters of a mathematical problems are generated and used to calculate the answer using a mathematical formula.

So the answer parameter of a numerical question is replaced by the mathematical formula using the same answer database structure that the numerical question.

The generated parameters are identified by a special format that is not used in a mathematical PHP equation {param} where the param name begins by a letter and can include alphanumerics symbol a-z A-Z _ 0-9

ex. {ad} {a_2} {a4_r} are valid parameter names 
{1a} {a+1} {a(0)} are invalid parameter names
 

These parameters are transform in datasets defined by a min,max,decimal and generation mode. Using these datasets definitions a number of different values are generated (the dataset items) and used to generate different question instances where the parameters have different values although the question structure and answer formula are constant.

Creating a calculated question

Actually the creation of a calculated question is a three step process

  • Defining the common question parameters
    • Question name
    • Question text
    • answer formula, limit, units
  • Defining the dataset definitions range for each of them. The dataset definition ({params}) can be used in this new question only or could be used or add been already created by other questions in the question category in which the new question is created.
 question category is a set of questions that can contain various question types
  • Defining the dataset definitions parameters (min,max, decimal and generation mode and adding at least one data item for each dataset definitions
Actually a set of all the data items is created when you click the add button
  • Saving the question parameters,dataset definitions parameters and data items.

The real saving procedure is done when you add the first set of data items.

Because in the actual code a calculated question needs that
all these components be defined to be a valid calculated question,
the saving is postponed until you click the add button to add the first set of data items.
The parameters already entered are stored in the $Session object
even if you click Saving changes at least
twice 
  1.Defining the common question parameters 
  2.Defining the dataset definitions range steps.
before adding your first set of data items.

NOTHING is SAVED UNTIL you CLICK the ADD BUTTON

Because of this three steps procedure, the creation of a calculated question is a process which can abort easily if the user do not follow exactly all the three steps in the order the Moodle code expect them. However, the teacher should always verify that for each added data item set, a valid answer, minimum and maximum value are obtained. Fortunately, at this step the newly created calculated question is saved in the database. Improvements to obtain a FULL PROOF PROCESS are in described in the next section.

A more FULL PROOF code

The code can be improved

  • by not allowing the user do an operation when all the preceedings steps have not be done.
If the user at the third step click BACK TO QUIZ EDITING when NO dataset items added, 
he LOOSE all his work because the question general parameters where not solved.
see Calculated question back to quiz button
  • by allowing user to do normal browser operations like a click on the BACK button to comeback at the first step and correct the question text
If the HTML editor of the question text is activated, all the text already written will be lost.
If the HTML editor is not activated (ex. on MACs with OS 9) and the simple HTML textarea is used, the text already written is not lost.
  • by checking ALL the content of the first form elements (i.e. name, question text, answer formula etc.) when the user click the SAVE CHANGES button.
If the javascript perform all the tests done in the PHP code before saving the calculated question parameters, we eliminate almost all the possibility of loosing the work when clicking the ADD button in the third form.

The editquestion.html being specific to each questiontype can perform tests specific to the calculated question which are known to the developpers of the calculated questiont PHP code.

  • by adding supplementary PHP code to eliminate the conditions that could lead to problems
    • when creating or editing the calculated questions
    • using them in quizzes, lessons etc.
These steps require more complex coding and should be done when the simpler and safer preceeding problems have been resolved.