MDL-41885 modules now declare use of question bank
authorDan Poltawski <dan@moodle.com>
Thu, 19 Sep 2013 06:26:37 +0000 (14:26 +0800)
committerDan Poltawski <dan@moodle.com>
Thu, 26 Sep 2013 01:49:34 +0000 (09:49 +0800)
* FEATURE_USES_QUESTION_BANK is now a module_supports flag which declares
  that an activity uses the question engine.

* question_module_uses_questions can be used to determine if a module
  uses the question bank.

lib/moodlelib.php
lib/questionlib.php
mod/quiz/lib.php
mod/upgrade.txt
question/upgrade.txt

index 0190090..dd596a4 100644 (file)
@@ -433,6 +433,9 @@ define('FEATURE_BACKUP_MOODLE2', 'backup_moodle2');
 /** True if module can show description on course main page */
 define('FEATURE_SHOW_DESCRIPTION', 'showdescription');
 
+/** True if module uses the question bank */
+define('FEATURE_USES_QUESTIONS', 'usesquestions');
+
 /** Unspecified module archetype */
 define('MOD_ARCHETYPE_OTHER', 0);
 /** Resource-like type module */
index 9984b71..5cdfb69 100644 (file)
@@ -2054,3 +2054,23 @@ function question_page_type_list($pagetype, $parentcontext, $currentcontext) {
         return $types;
     }
 }
+
+/**
+ * Does an activity module use the question bank?
+ *
+ * @param string $modname The name of the module (without mod_ prefix).
+ * @return bool true if the module uses questions.
+ */
+function question_module_uses_questions($modname) {
+    if (plugin_supports('mod', $modname, FEATURE_USES_QUESTIONS)) {
+        return true;
+    }
+
+    $component = 'mod_'.$modname;
+    if (component_callback_exists($component, 'question_pluginfile')) {
+        debugging("{$component} uses questions but doesn't declare FEATURE_USES_QUESTIONS", DEBUG_DEVELOPER);
+        return true;
+    }
+
+    return false;
+}
index c6394ad..7aa48c5 100644 (file)
@@ -1547,6 +1547,7 @@ function quiz_supports($feature) {
         case FEATURE_BACKUP_MOODLE2:            return true;
         case FEATURE_SHOW_DESCRIPTION:          return true;
         case FEATURE_CONTROLS_GRADE_VISIBILITY: return true;
+        case FEATURE_USES_QUESTIONS:            return true;
 
         default: return null;
     }
index bc46994..0f66936 100644 (file)
@@ -1,6 +1,10 @@
 This files describes API changes in /mod/* - activity modules,
 information provided here is intended especially for developers.
 
+=== 2.6 ===
+
+* Modules using the question bank MUST now declare their use of it with the xxx_supports()
+  flag FEATURE_USES_QUESTIONS.
 
 === 2.5 ===
 
index 32ad8f2..4b4a9ba 100644 (file)
@@ -2,7 +2,11 @@ This files describes API changes for code that uses the question API.
 
 === 2.6 ===
 
-1) It is sometimes necessary to display bits of question content without having
+1) Modules using the question bank MUST now declare their use of it with the xxx_supports()
+   flag FEATURE_USES_QUESTIONS. question_module_uses_questions() should be used to determine
+   if a module uses questions.
+
+2) It is sometimes necessary to display bits of question content without having
    and attempt (question_usage) in progress. Two examples of this are the option
    in the question bank to display the questiontext, and in the quiz statistics
    report, where it displays the question text above the report.