Note:

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

Question formats: Difference between revisions

From MoodleDocs
No edit summary
 
(36 intermediate revisions by 6 users not shown)
Line 1: Line 1:
{{Question development}}
==Importing or exporting questions==
==Importing or exporting questions==
Questions coming from other Moodle courses or from other e-learning systems (i.e. Blackboard, Webct etc.) can be imported in Moodle.
Questions coming from other Moodle courses or from other e-learning systems (i.e. Blackboard, Webct etc.) can be imported in Moodle.
Similarlay Moodle offers a process to export questions to other systems in different format ( XML, QTI etc.).
Similarly, Moodle offers a process to export questions to other systems in different format ( XML, QTI etc.).
The import and export code is mostly written in format.php files located in a directory specific to the type of format files from which the import or export is done.
The import and export code is mostly written in format.php files located in a directory specific to the type of format files from which the import or export is done.
* typically
 
* examples:
** '''question/format/aiken/format.php'''
** '''question/format/aiken/format.php'''
** '''question/format/blackboard/format.php'''
** '''question/format/blackboard/format.php'''
Line 12: Line 16:
* '''question/export.php'''
* '''question/export.php'''


The main difficulty in coding these specific format.php files is that the developpers should be aware of
Import/Export formats are a pluggable resource and will automatically be "discovered" and made available to users simply by adding the plugin to question/format. Cross-support for optional questiontype plugins was added in 1.9 and support for language files (specifically a help file) has been implemented in Moodle 2.0.
* the coding format of the import or export files (XML, QTI etc.)
* the parameters needed for the various question types of Moodle whher new types could easily be introduced in the near future due to the reworking of the question moodle code.


==Where to find the information to code for import/export format.php files.==
=== Developing an import/export plugin ===
As we are developping new questiontypes or new import functions from external files, we need to safeguard the default_questiontype->save_question() from importing bad question data.
We must well document these question parameters and get stronger validation before saving a new question.


The most exhaustive developper documentations rely on the knowledge of the database tables, the tags definition and a good comprehension of the few comments inserted in the code.
The simplest and most comprehensive import/export type is probably the Moodle XML format. There are also a few option plugins in contrib (plugins/question/format) that you can look at. It is worth studying these file (question/format/xml/format.php) along with the parent class (question/format.php) to get an understanding of what is going on. Some other custom formats circumvent the normal rules and structure and should be studied with caution.


Efforts have been made to document the database (i.e. Gustav Delius has work a lot on the question part) but as usual solving the bugs and developping new features took most of the energy.
Some things to note:
 
* Study the question/format.php file to establish which methods must be overridden.  
For the description of the different question parameters you should look at the developper docs  Quiz database structure and the quiz_questions table that have been renamed question when the question code has been replaced as independent from the quiz in moodle  1.6.  
* Each format.php file can support import, export or both indicated by the '''provide_import()''' and '''provide_export()''' methods which must be overridden to return ''true'' as required.
 
* Do not read or write directly to the database, this is handled for you by the parent class
These docs illustrate well the difficulty to maintain an up-to-date, I had to correct it (at least I try...) for the modifications done by Gustav himself in the database .
* when importing, question objects need to be in a format suitable for use by the questiontype->save_options() method (see question/type/questiontype.php class). The easiest way to get this information is to do a '''print_r($question);''' at the start of the '''save_options()''' method for the appropriate question type when a question is saved. The imported object must be the same format.
==The format.php code flow for import==
* when importing, always obtain 'empty' question objects from the '''defaultquestion()''' method, which sets all required properties to their default values.
When importing questions
* for exporting the populated $question object is supplied to the format class. Again, '''print_r($question)''' can be used to learn the format.
* the import.php open the file
* You should add a help file for the plugin using the structure lang/en_utf8/help/''myformat''/''myformat''.html where ''myformat'' is the name of your import/export plugin (Moodle 2.0).
 
* the specific format.php
* the format.php clone in a certain way the '''default_questiontype->save_question()'''  
by saving the question common elements
*afterwards it calls the specific '''qtype->save_question_options()''' function
which are the regular way to save these options that were retrieved from the imported file.
 
The 1.6 question table contains the id,category,parent,name,questiontext,questiontextformat,image,defaultgrade,penalty,qtype,length,stamp,version,hidden as the old quiz_questions table with the following modifications.  
 
It is difficult to  types that can be data structure of  and each question type is expected to implement supply at least Importing or
Importing and exporting have in common the data structure of questions in moodle but different requirements about the import or export modules unless the import or export is related to the same standard (ex.QTI).
The moodle data structure should be avalable elsewhere.


== See also ==
== See also ==
Line 49: Line 36:
[[Category:Quiz]]
[[Category:Quiz]]
[[Category:Lesson]]
[[Category:Lesson]]
[[Category:Plugins]]

Latest revision as of 06:06, 30 January 2012

Importing or exporting questions

Questions coming from other Moodle courses or from other e-learning systems (i.e. Blackboard, Webct etc.) can be imported in Moodle. Similarly, Moodle offers a process to export questions to other systems in different format ( XML, QTI etc.). The import and export code is mostly written in format.php files located in a directory specific to the type of format files from which the import or export is done.

  • examples:
    • question/format/aiken/format.php
    • question/format/blackboard/format.php
    • question/format/qti2/format.php
    • question/format/xml/format.php

there is a default class qformat_default defined in question/format.php and the process is controlled by

  • question/import.php
  • question/export.php

Import/Export formats are a pluggable resource and will automatically be "discovered" and made available to users simply by adding the plugin to question/format. Cross-support for optional questiontype plugins was added in 1.9 and support for language files (specifically a help file) has been implemented in Moodle 2.0.

Developing an import/export plugin

The simplest and most comprehensive import/export type is probably the Moodle XML format. There are also a few option plugins in contrib (plugins/question/format) that you can look at. It is worth studying these file (question/format/xml/format.php) along with the parent class (question/format.php) to get an understanding of what is going on. Some other custom formats circumvent the normal rules and structure and should be studied with caution.

Some things to note:

  • Study the question/format.php file to establish which methods must be overridden.
  • Each format.php file can support import, export or both indicated by the provide_import() and provide_export() methods which must be overridden to return true as required.
  • Do not read or write directly to the database, this is handled for you by the parent class
  • when importing, question objects need to be in a format suitable for use by the questiontype->save_options() method (see question/type/questiontype.php class). The easiest way to get this information is to do a print_r($question); at the start of the save_options() method for the appropriate question type when a question is saved. The imported object must be the same format.
  • when importing, always obtain 'empty' question objects from the defaultquestion() method, which sets all required properties to their default values.
  • for exporting the populated $question object is supplied to the format class. Again, print_r($question) can be used to learn the format.
  • You should add a help file for the plugin using the structure lang/en_utf8/help/myformat/myformat.html where myformat is the name of your import/export plugin (Moodle 2.0).

See also

Lesson question types - both Lesson and Quiz can import the basic Moodle question types.