diff --git a/lib/db/upgrade.php b/lib/db/upgrade.php
index 09ea47dd0d9..5b079054a8d 100644
--- a/lib/db/upgrade.php
+++ b/lib/db/upgrade.php
@@ -1670,5 +1670,12 @@ function xmldb_main_upgrade($oldversion) {
upgrade_main_savepoint(true, 2013022600.00);
}
+ if ($oldversion < 2013022800.01) {
+ // Cleanup qformat blackboard settings.
+ unset_all_config_for_plugin('qformat_blackboard');
+
+ upgrade_main_savepoint(true, 2013022800.01);
+ }
+
return true;
}
diff --git a/lib/pluginlib.php b/lib/pluginlib.php
index a626ab4881c..fdc95f6b1f1 100644
--- a/lib/pluginlib.php
+++ b/lib/pluginlib.php
@@ -362,6 +362,7 @@ class plugin_manager {
public static function is_deleted_standard_plugin($type, $name) {
static $plugins = array(
// do not add 1.9-2.2 plugin removals here
+ 'qformat' => array('blackboard'),
);
if (!isset($plugins[$type])) {
@@ -508,7 +509,7 @@ class plugin_manager {
),
'qformat' => array(
- 'aiken', 'blackboard', 'blackboard_six', 'examview', 'gift',
+ 'aiken', 'blackboard_six', 'examview', 'gift',
'learnwise', 'missingword', 'multianswer', 'webct',
'xhtml', 'xml'
),
diff --git a/question/format/blackboard/format.php b/question/format/blackboard/format.php
deleted file mode 100644
index 9d30323f773..00000000000
--- a/question/format/blackboard/format.php
+++ /dev/null
@@ -1,494 +0,0 @@
-.
-
-/**
- * Blackboard question importer.
- *
- * @package qformat_blackboard
- * @copyright 2003 Scott Elliott
- * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
- */
-
-
-defined('MOODLE_INTERNAL') || die();
-
-require_once($CFG->libdir . '/xmlize.php');
-
-
-/**
- * Blackboard question importer.
- *
- * @copyright 2003 Scott Elliott
- * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
- */
-class qformat_blackboard extends qformat_based_on_xml {
- // Is the current question's question text escaped HTML (true for most if not all Blackboard files).
- public $ishtml = true;
-
-
- public function provide_import() {
- return true;
- }
-
- /**
- * Check if the given file is capable of being imported by this plugin.
- * As {@link file_storage::mimetype()} now uses finfo PHP extension if available,
- * the value returned by $file->get_mimetype for a .dat file is not the same on all servers.
- * So if the parent method fails we must use mimeinfo on the filename.
- * @param stored_file $file the file to check
- * @return bool whether this plugin can import the file
- */
- public function can_import_file($file) {
- return parent::can_import_file($file) || mimeinfo('type', $file->get_filename()) == $this->mime_type();
- }
-
- public function mime_type() {
- return mimeinfo('type', '.dat');
- }
-
- /**
- * Parse the array of lines into an array of questions
- * this *could* burn memory - but it won't happen that much
- * so fingers crossed!
- * @param array of lines from the input file.
- * @param stdClass $context
- * @return array (of objects) question objects.
- */
- protected function readquestions($lines) {
-
- $text = implode($lines, ' ');
- unset($lines);
-
- // This converts xml to big nasty data structure,
- // the 0 means keep white space as it is.
- try {
- $xml = xmlize($text, 0, 'UTF-8', true);
- } catch (xml_format_exception $e) {
- $this->error($e->getMessage(), '');
- return false;
- }
-
- $questions = array();
-
- $this->process_tf($xml, $questions);
- $this->process_mc($xml, $questions);
- $this->process_ma($xml, $questions);
- $this->process_fib($xml, $questions);
- $this->process_matching($xml, $questions);
- $this->process_essay($xml, $questions);
-
- return $questions;
- }
-
- /**
- * Do question import processing common to every qtype.
- * @param array $questiondata the xml tree related to the current question
- * @return object initialized question object.
- */
- public function process_common($questiondata) {
- global $CFG;
-
- // This routine initialises the question object.
- $question = $this->defaultquestion();
-
- // Determine if the question is already escaped html.
- $this->ishtml = $this->getpath($questiondata,
- array('#', 'BODY', 0, '#', 'FLAGS', 0, '#', 'ISHTML', 0, '@', 'value'),
- false, false);
-
- // Put questiontext in question object.
- $text = $this->getpath($questiondata,
- array('#', 'BODY', 0, '#', 'TEXT', 0, '#'),
- '', true, get_string('importnotext', 'qformat_blackboard'));
-
- if ($this->ishtml) {
- $question->questiontext = $this->cleaninput($text);
- $question->questiontextformat = FORMAT_HTML;
- $question->questiontextfiles = array();
-
- } else {
- $question->questiontext = $text;
- }
- // Put name in question object. We must ensure it is not empty and it is less than 250 chars.
- $id = $this->getpath($questiondata, array('@', 'id'), '', true);
- $question->name = $this->create_default_question_name($question->questiontext,
- get_string('defaultname', 'qformat_blackboard', $id));
-
- $question->generalfeedback = '';
- $question->generalfeedbackformat = FORMAT_HTML;
- $question->generalfeedbackfiles = array();
-
- // TODO : read the mark from the POOL TITLE QUESTIONLIST section.
- $question->defaultmark = 1;
- return $question;
- }
-
- /**
- * Process Essay Questions
- * @param array xml the xml tree
- * @param array questions the questions already parsed
- */
- public function process_essay($xml, &$questions) {
-
- if ($this->getpath($xml, array('POOL', '#', 'QUESTION_ESSAY'), false, false)) {
- $essayquestions = $this->getpath($xml,
- array('POOL', '#', 'QUESTION_ESSAY'), false, false);
- } else {
- return;
- }
-
- foreach ($essayquestions as $thisquestion) {
-
- $question = $this->process_common($thisquestion);
-
- $question->qtype = 'essay';
-
- $question->answer = '';
- $answer = $this->getpath($thisquestion,
- array('#', 'ANSWER', 0, '#', 'TEXT', 0, '#'), '', true);
- $question->graderinfo = $this->text_field($this->cleaninput($answer));
- $question->feedback = '';
- $question->responseformat = 'editor';
- $question->responsefieldlines = 15;
- $question->attachments = 0;
- $question->fraction = 0;
-
- $questions[] = $question;
- }
- }
-
- /**
- * Process True / False Questions
- * @param array xml the xml tree
- * @param array questions the questions already parsed
- */
- public function process_tf($xml, &$questions) {
-
- if ($this->getpath($xml, array('POOL', '#', 'QUESTION_TRUEFALSE'), false, false)) {
- $tfquestions = $this->getpath($xml,
- array('POOL', '#', 'QUESTION_TRUEFALSE'), false, false);
- } else {
- return;
- }
-
- foreach ($tfquestions as $thisquestion) {
-
- $question = $this->process_common($thisquestion);
-
- $question->qtype = 'truefalse';
- $question->single = 1; // Only one answer is allowed.
-
- $choices = $this->getpath($thisquestion, array('#', 'ANSWER'), array(), false);
-
- $correct_answer = $this->getpath($thisquestion,
- array('#', 'GRADABLE', 0, '#', 'CORRECTANSWER', 0, '@', 'answer_id'),
- '', true);
-
- // First choice is true, second is false.
- $id = $this->getpath($choices[0], array('@', 'id'), '', true);
- $correctfeedback = $this->getpath($thisquestion,
- array('#', 'GRADABLE', 0, '#', 'FEEDBACK_WHEN_CORRECT', 0, '#'),
- '', true);
- $incorrectfeedback = $this->getpath($thisquestion,
- array('#', 'GRADABLE', 0, '#', 'FEEDBACK_WHEN_INCORRECT', 0, '#'),
- '', true);
- if (strcmp($id, $correct_answer) == 0) { // True is correct.
- $question->answer = 1;
- $question->feedbacktrue = $this->text_field($this->cleaninput($correctfeedback));
- $question->feedbackfalse = $this->text_field($this->cleaninput($incorrectfeedback));
- } else { // False is correct.
- $question->answer = 0;
- $question->feedbacktrue = $this->text_field($this->cleaninput($incorrectfeedback));
- $question->feedbackfalse = $this->text_field($this->cleaninput($correctfeedback));
- }
- $question->correctanswer = $question->answer;
- $questions[] = $question;
- }
- }
-
- /**
- * Process Multiple Choice Questions with single answer
- * @param array xml the xml tree
- * @param array questions the questions already parsed
- */
- public function process_mc($xml, &$questions) {
-
- if ($this->getpath($xml, array('POOL', '#', 'QUESTION_MULTIPLECHOICE'), false, false)) {
- $mcquestions = $this->getpath($xml,
- array('POOL', '#', 'QUESTION_MULTIPLECHOICE'), false, false);
- } else {
- return;
- }
-
- foreach ($mcquestions as $thisquestion) {
-
- $question = $this->process_common($thisquestion);
-
- $correctfeedback = $this->getpath($thisquestion,
- array('#', 'GRADABLE', 0, '#', 'FEEDBACK_WHEN_CORRECT', 0, '#'),
- '', true);
- $incorrectfeedback = $this->getpath($thisquestion,
- array('#', 'GRADABLE', 0, '#', 'FEEDBACK_WHEN_INCORRECT', 0, '#'),
- '', true);
- $question->correctfeedback = $this->text_field($this->cleaninput($correctfeedback));
- $question->partiallycorrectfeedback = $this->text_field('');
- $question->incorrectfeedback = $this->text_field($this->cleaninput($incorrectfeedback));
-
- $question->qtype = 'multichoice';
- $question->single = 1; // Only one answer is allowed.
-
- $choices = $this->getpath($thisquestion, array('#', 'ANSWER'), false, false);
- $correct_answer_id = $this->getpath($thisquestion,
- array('#', 'GRADABLE', 0, '#', 'CORRECTANSWER', 0, '@', 'answer_id'),
- '', true);
- foreach ($choices as $choice) {
- $choicetext = $this->getpath($choice, array('#', 'TEXT', 0, '#'), '', true);
- // Put this choice in the question object.
- $question->answer[] = $this->text_field($this->cleaninput($choicetext));
-
- $choice_id = $this->getpath($choice, array('@', 'id'), '', true);
- // If choice is the right answer, give 100% mark, otherwise give 0%.
- if (strcmp ($choice_id, $correct_answer_id) == 0) {
- $question->fraction[] = 1;
- } else {
- $question->fraction[] = 0;
- }
- // There is never feedback specific to each choice.
- $question->feedback[] = $this->text_field('');
- }
- $questions[] = $question;
- }
- }
-
- /**
- * Process Multiple Choice Questions With Multiple Answers
- * @param array xml the xml tree
- * @param array questions the questions already parsed
- */
- public function process_ma($xml, &$questions) {
- if ($this->getpath($xml, array('POOL', '#', 'QUESTION_MULTIPLEANSWER'), false, false)) {
- $maquestions = $this->getpath($xml,
- array('POOL', '#', 'QUESTION_MULTIPLEANSWER'), false, false);
- } else {
- return;
- }
-
- foreach ($maquestions as $thisquestion) {
- $question = $this->process_common($thisquestion);
-
- $correctfeedback = $this->getpath($thisquestion,
- array('#', 'GRADABLE', 0, '#', 'FEEDBACK_WHEN_CORRECT', 0, '#'),
- '', true);
- $incorrectfeedback = $this->getpath($thisquestion,
- array('#', 'GRADABLE', 0, '#', 'FEEDBACK_WHEN_INCORRECT', 0, '#'),
- '', true);
- $question->correctfeedback = $this->text_field($this->cleaninput($correctfeedback));
- // As there is no partially correct feedback we use incorrect one.
- $question->partiallycorrectfeedback = $this->text_field($this->cleaninput($incorrectfeedback));
- $question->incorrectfeedback = $this->text_field($this->cleaninput($incorrectfeedback));
-
- $question->qtype = 'multichoice';
- $question->defaultmark = 1;
- $question->single = 0; // More than one answers allowed.
-
- $choices = $this->getpath($thisquestion, array('#', 'ANSWER'), false, false);
- $correct_answer_ids = array();
- foreach ($this->getpath($thisquestion,
- array('#', 'GRADABLE', 0, '#', 'CORRECTANSWER'), false, false) as $correctanswer) {
- if ($correctanswer) {
- $correct_answer_ids[] = $this->getpath($correctanswer,
- array('@', 'answer_id'),
- '', true);
- }
- }
- $fraction = 1/count($correct_answer_ids);
-
- foreach ($choices as $choice) {
- $choicetext = $this->getpath($choice, array('#', 'TEXT', 0, '#'), '', true);
- // Put this choice in the question object.
- $question->answer[] = $this->text_field($this->cleaninput($choicetext));
-
- $choice_id = $this->getpath($choice, array('@', 'id'), '', true);
-
- $iscorrect = in_array($choice_id, $correct_answer_ids);
-
- if ($iscorrect) {
- $question->fraction[] = $fraction;
- } else {
- $question->fraction[] = 0;
- }
- // There is never feedback specific to each choice.
- $question->feedback[] = $this->text_field('');
- }
- $questions[] = $question;
- }
- }
-
- /**
- * Process Fill in the Blank Questions
- * @param array xml the xml tree
- * @param array questions the questions already parsed
- */
- public function process_fib($xml, &$questions) {
- if ($this->getpath($xml, array('POOL', '#', 'QUESTION_FILLINBLANK'), false, false)) {
- $fibquestions = $this->getpath($xml,
- array('POOL', '#', 'QUESTION_FILLINBLANK'), false, false);
- } else {
- return;
- }
-
- foreach ($fibquestions as $thisquestion) {
-
- $question = $this->process_common($thisquestion);
-
- $question->qtype = 'shortanswer';
- $question->usecase = 0; // Ignore case.
-
- $correctfeedback = $this->getpath($thisquestion,
- array('#', 'GRADABLE', 0, '#', 'FEEDBACK_WHEN_CORRECT', 0, '#'),
- '', true);
- $incorrectfeedback = $this->getpath($thisquestion,
- array('#', 'GRADABLE', 0, '#', 'FEEDBACK_WHEN_INCORRECT', 0, '#'),
- '', true);
- $answers = $this->getpath($thisquestion, array('#', 'ANSWER'), false, false);
- foreach ($answers as $answer) {
- $question->answer[] = $this->getpath($answer,
- array('#', 'TEXT', 0, '#'), '', true);
- $question->fraction[] = 1;
- $question->feedback[] = $this->text_field($this->cleaninput($correctfeedback));
- }
- $question->answer[] = '*';
- $question->fraction[] = 0;
- $question->feedback[] = $this->text_field($this->cleaninput($incorrectfeedback));
-
- $questions[] = $question;
- }
- }
-
- /**
- * Process Matching Questions
- * @param array xml the xml tree
- * @param array questions the questions already parsed
- */
- public function process_matching($xml, &$questions) {
- if ($this->getpath($xml, array('POOL', '#', 'QUESTION_MATCH'), false, false)) {
- $matchquestions = $this->getpath($xml,
- array('POOL', '#', 'QUESTION_MATCH'), false, false);
- } else {
- return;
- }
- // Blackboard questions can't be imported in core Moodle without a loss in data,
- // as core match question don't allow HTML in subanswers. The contributed ddmatch
- // question type support HTML in subanswers.
- // The ddmatch question type is not part of core, so we need to check if it is defined.
- $ddmatch_is_installed = question_bank::is_qtype_installed('ddmatch');
-
- foreach ($matchquestions as $thisquestion) {
-
- $question = $this->process_common($thisquestion);
- if ($ddmatch_is_installed) {
- $question->qtype = 'ddmatch';
- } else {
- $question->qtype = 'match';
- }
-
- $correctfeedback = $this->getpath($thisquestion,
- array('#', 'GRADABLE', 0, '#', 'FEEDBACK_WHEN_CORRECT', 0, '#'),
- '', true);
- $incorrectfeedback = $this->getpath($thisquestion,
- array('#', 'GRADABLE', 0, '#', 'FEEDBACK_WHEN_INCORRECT', 0, '#'),
- '', true);
- $question->correctfeedback = $this->text_field($this->cleaninput($correctfeedback));
- // As there is no partially correct feedback we use incorrect one.
- $question->partiallycorrectfeedback = $this->text_field($this->cleaninput($incorrectfeedback));
- $question->incorrectfeedback = $this->text_field($this->cleaninput($incorrectfeedback));
-
- $choices = $this->getpath($thisquestion,
- array('#', 'CHOICE'), false, false); // Blackboard "choices" are Moodle subanswers.
- $answers = $this->getpath($thisquestion,
- array('#', 'ANSWER'), false, false); // Blackboard "answers" are Moodle subquestions.
- $correctanswers = $this->getpath($thisquestion,
- array('#', 'GRADABLE', 0, '#', 'CORRECTANSWER'), false, false); // Mapping between choices and answers.
- $mappings = array();
- foreach ($correctanswers as $correctanswer) {
- if ($correctanswer) {
- $correct_choice_id = $this->getpath($correctanswer,
- array('@', 'choice_id'), '', true);
- $correct_answer_id = $this->getpath($correctanswer,
- array('@', 'answer_id'),
- '', true);
- $mappings[$correct_answer_id] = $correct_choice_id;
- }
- }
-
- foreach ($choices as $choice) {
- if ($ddmatch_is_installed) {
- $choicetext = $this->text_field($this->cleaninput($this->getpath($choice,
- array('#', 'TEXT', 0, '#'), '', true)));
- } else {
- $choicetext = trim(strip_tags($this->getpath($choice,
- array('#', 'TEXT', 0, '#'), '', true)));
- }
-
- if ($choicetext != '') { // Only import non empty subanswers.
- $subquestion = '';
- $choice_id = $this->getpath($choice,
- array('@', 'id'), '', true);
- $fiber = array_search($choice_id, $mappings);
- $fiber = array_keys ($mappings, $choice_id);
- foreach ($fiber as $correct_answer_id) {
- // We have found a correspondance for this choice so we need to take the associated answer.
- foreach ($answers as $answer) {
- $current_ans_id = $this->getpath($answer,
- array('@', 'id'), '', true);
- if (strcmp ($current_ans_id, $correct_answer_id) == 0) {
- $subquestion = $this->getpath($answer,
- array('#', 'TEXT', 0, '#'), '', true);
- break;
- }
- }
- $question->subquestions[] = $this->text_field($this->cleaninput($subquestion));
- $question->subanswers[] = $choicetext;
- }
-
- if ($subquestion == '') { // Then in this case, $choice is a distractor.
- $question->subquestions[] = $this->text_field('');
- $question->subanswers[] = $choicetext;
- }
- }
- }
-
- // Verify that this matching question has enough subquestions and subanswers.
- $subquestioncount = 0;
- $subanswercount = 0;
- $subanswers = $question->subanswers;
- foreach ($question->subquestions as $key => $subquestion) {
- $subquestion = $subquestion['text'];
- $subanswer = $subanswers[$key];
- if ($subquestion != '') {
- $subquestioncount++;
- }
- $subanswercount++;
- }
- if ($subquestioncount < 2 || $subanswercount < 3) {
- $this->error(get_string('notenoughtsubans', 'qformat_blackboard', $question->questiontext));
- } else {
- $questions[] = $question;
- }
-
- }
- }
-}
diff --git a/question/format/blackboard/lang/en/qformat_blackboard.php b/question/format/blackboard/lang/en/qformat_blackboard.php
deleted file mode 100644
index f5fa9576ea4..00000000000
--- a/question/format/blackboard/lang/en/qformat_blackboard.php
+++ /dev/null
@@ -1,29 +0,0 @@
-.
-
-/**
- * Strings for component 'qformat_blackboard', language 'en', branch 'MOODLE_20_STABLE'
- *
- * @package qformat_blackboard
- * @copyright 2010 Helen Foster
- * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
- */
-
-$string['defaultname'] = 'Imported question {$a}';
-$string['importnotext'] = 'Missing question text in XML file';
-$string['notenoughtsubans'] = 'Unable to import matching question \'{$a}\' because a matching question must comprise at least two questions and three answers.';
-$string['pluginname'] = 'Blackboard';
-$string['pluginname_help'] = 'Blackboard format enables questions saved in the Blackboard version 5 "POOL" type export format to be imported.';
diff --git a/question/format/blackboard/tests/blackboardformat_test.php b/question/format/blackboard/tests/blackboardformat_test.php
deleted file mode 100644
index d67e5269702..00000000000
--- a/question/format/blackboard/tests/blackboardformat_test.php
+++ /dev/null
@@ -1,328 +0,0 @@
-.
-
-/**
- * Unit tests for the Moodle Blackboard format.
- *
- * @package qformat_blackboard
- * @copyright 2012 Jean-Michel Vedrine
- * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
- */
-
-
-defined('MOODLE_INTERNAL') || die();
-
-global $CFG;
-require_once($CFG->libdir . '/questionlib.php');
-require_once($CFG->dirroot . '/question/format.php');
-require_once($CFG->dirroot . '/question/format/blackboard/format.php');
-require_once($CFG->dirroot . '/question/engine/tests/helpers.php');
-
-
-/**
- * Unit tests for the blackboard question import format.
- *
- * @copyright 2012 Jean-Michel Vedrine
- * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
- */
-class qformat_blackboard_test extends question_testcase {
-
- public function make_test_xml() {
- $xml = file_get_contents(__DIR__ . '/fixtures/sample_blackboard.dat');
- return $xml;
- }
-
- public function test_import_match() {
-
- $xmldata = xmlize($this->make_test_xml());
- $questions = array();
-
- $importer = new qformat_blackboard();
- $importer->process_matching($xmldata, $questions);
- $q = $questions[0];
- $expectedq = new stdClass();
- $expectedq->qtype = 'match';
- $expectedq->name = 'Classify the animals.';
- $expectedq->questiontext = 'Classify the animals.';
- $expectedq->questiontextformat = FORMAT_HTML;
- $expectedq->correctfeedback = array('text' => '',
- 'format' => FORMAT_HTML, 'files' => array());
- $expectedq->partiallycorrectfeedback = array('text' => '',
- 'format' => FORMAT_HTML, 'files' => array());
- $expectedq->incorrectfeedback = array('text' => '',
- 'format' => FORMAT_HTML, 'files' => array());
- $expectedq->generalfeedback = '';
- $expectedq->generalfeedbackformat = FORMAT_HTML;
- $expectedq->defaultmark = 1;
- $expectedq->length = 1;
- $expectedq->penalty = 0.3333333;
- $expectedq->shuffleanswers = get_config('quiz', 'shuffleanswers');
- $expectedq->subquestions = array(
- array('text' => 'cat', 'format' => FORMAT_HTML, 'files' => array()),
- array('text' => '', 'format' => FORMAT_HTML, 'files' => array()),
- array('text' => 'frog', 'format' => FORMAT_HTML, 'files' => array()),
- array('text' => 'newt', 'format' => FORMAT_HTML, 'files' => array()));
- $expectedq->subanswers = array('mammal', 'insect', 'amphibian', 'amphibian');
-
- $this->assert(new question_check_specified_fields_expectation($expectedq), $q);
- }
-
- public function test_import_multichoice_single() {
-
- $xmldata = xmlize($this->make_test_xml());
- $questions = array();
-
- $importer = new qformat_blackboard();
- $importer->process_mc($xmldata, $questions);
- $q = $questions[0];
-
- $expectedq = new stdClass();
- $expectedq->qtype = 'multichoice';
- $expectedq->single = 1;
- $expectedq->name = 'What\'s between orange and green in the spectrum?';
- $expectedq->questiontext = 'What\'s between orange and green in the spectrum?';
- $expectedq->questiontextformat = FORMAT_HTML;
- $expectedq->correctfeedback = array('text' => 'You gave the right answer.',
- 'format' => FORMAT_HTML, 'files' => array());
- $expectedq->partiallycorrectfeedback = array('text' => '',
- 'format' => FORMAT_HTML, 'files' => array());
- $expectedq->incorrectfeedback = array('text' => 'Only yellow is between orange and green in the spectrum.',
- 'format' => FORMAT_HTML, 'files' => array());
- $expectedq->generalfeedback = '';
- $expectedq->generalfeedbackformat = FORMAT_HTML;
- $expectedq->defaultmark = 1;
- $expectedq->length = 1;
- $expectedq->penalty = 0.3333333;
- $expectedq->shuffleanswers = get_config('quiz', 'shuffleanswers');
- $expectedq->answer = array(
- 0 => array(
- 'text' => 'red',
- 'format' => FORMAT_HTML,
- 'files' => array(),
- ),
- 1 => array(
- 'text' => 'yellow',
- 'format' => FORMAT_HTML,
- 'files' => array(),
- ),
- 2 => array(
- 'text' => 'blue',
- 'format' => FORMAT_HTML,
- 'files' => array(),
- )
- );
- $expectedq->fraction = array(0, 1, 0);
- $expectedq->feedback = array(
- 0 => array(
- 'text' => '',
- 'format' => FORMAT_HTML,
- 'files' => array(),
- ),
- 1 => array(
- 'text' => '',
- 'format' => FORMAT_HTML,
- 'files' => array(),
- ),
- 2 => array(
- 'text' => '',
- 'format' => FORMAT_HTML,
- 'files' => array(),
- )
- );
-
- $this->assert(new question_check_specified_fields_expectation($expectedq), $q);
- }
-
- public function test_import_multichoice_multi() {
-
- $xmldata = xmlize($this->make_test_xml());
- $questions = array();
-
- $importer = new qformat_blackboard();
- $importer->process_ma($xmldata, $questions);
- $q = $questions[0];
-
- $expectedq = new stdClass();
- $expectedq->qtype = 'multichoice';
- $expectedq->single = 0;
- $expectedq->name = 'What\'s between orange and green in the spectrum?';
- $expectedq->questiontext = 'What\'s between orange and green in the spectrum?';
- $expectedq->questiontextformat = FORMAT_HTML;
- $expectedq->correctfeedback = array(
- 'text' => 'You gave the right answer.',
- 'format' => FORMAT_HTML,
- 'files' => array());
- $expectedq->partiallycorrectfeedback = array(
- 'text' => 'Only yellow and off-beige are between orange and green in the spectrum.',
- 'format' => FORMAT_HTML,
- 'files' => array());
- $expectedq->incorrectfeedback = array(
- 'text' => 'Only yellow and off-beige are between orange and green in the spectrum.',
- 'format' => FORMAT_HTML,
- 'files' => array());
- $expectedq->generalfeedback = '';
- $expectedq->generalfeedbackformat = FORMAT_HTML;
- $expectedq->defaultmark = 1;
- $expectedq->length = 1;
- $expectedq->penalty = 0.3333333;
- $expectedq->shuffleanswers = get_config('quiz', 'shuffleanswers');
- $expectedq->answer = array(
- 0 => array(
- 'text' => 'yellow',
- 'format' => FORMAT_HTML,
- 'files' => array(),
- ),
- 1 => array(
- 'text' => 'red',
- 'format' => FORMAT_HTML,
- 'files' => array(),
- ),
- 2 => array(
- 'text' => 'off-beige',
- 'format' => FORMAT_HTML,
- 'files' => array(),
- ),
- 3 => array(
- 'text' => 'blue',
- 'format' => FORMAT_HTML,
- 'files' => array(),
- )
- );
- $expectedq->fraction = array(0.5, 0, 0.5, 0);
- $expectedq->feedback = array(
- 0 => array(
- 'text' => '',
- 'format' => FORMAT_HTML,
- 'files' => array(),
- ),
- 1 => array(
- 'text' => '',
- 'format' => FORMAT_HTML,
- 'files' => array(),
- ),
- 2 => array(
- 'text' => '',
- 'format' => FORMAT_HTML,
- 'files' => array(),
- ),
- 3 => array(
- 'text' => '',
- 'format' => FORMAT_HTML,
- 'files' => array(),
- )
- );
-
- $this->assert(new question_check_specified_fields_expectation($expectedq), $q);
- }
-
- public function test_import_truefalse() {
-
- $xmldata = xmlize($this->make_test_xml());
- $questions = array();
-
- $importer = new qformat_blackboard();
- $importer->process_tf($xmldata, $questions);
- $q = $questions[0];
-
- $expectedq = new stdClass();
- $expectedq->qtype = 'truefalse';
- $expectedq->name = '42 is the Absolute Answer to everything.';
- $expectedq->questiontext = '42 is the Absolute Answer to everything.';
- $expectedq->questiontextformat = FORMAT_HTML;
- $expectedq->generalfeedback = '';
- $expectedq->generalfeedbackformat = FORMAT_HTML;
- $expectedq->defaultmark = 1;
- $expectedq->length = 1;
- $expectedq->correctanswer = 0;
- $expectedq->feedbacktrue = array(
- 'text' => '42 is the Ultimate Answer.',
- 'format' => FORMAT_HTML,
- 'files' => array(),
- );
- $expectedq->feedbackfalse = array(
- 'text' => 'You gave the right answer.',
- 'format' => FORMAT_HTML,
- 'files' => array(),
- );
- $this->assert(new question_check_specified_fields_expectation($expectedq), $q);
- }
-
- public function test_import_fill_in_the_blank() {
-
- $xmldata = xmlize($this->make_test_xml());
- $questions = array();
-
- $importer = new qformat_blackboard();
- $importer->process_fib($xmldata, $questions);
- $q = $questions[0];
-
- $expectedq = new stdClass();
- $expectedq->qtype = 'shortanswer';
- $expectedq->name = 'Name an amphibian: __________.';
- $expectedq->questiontext = 'Name an amphibian: __________.';
- $expectedq->questiontextformat = FORMAT_HTML;
- $expectedq->generalfeedback = '';
- $expectedq->generalfeedbackformat = FORMAT_HTML;
- $expectedq->defaultmark = 1;
- $expectedq->length = 1;
- $expectedq->usecase = 0;
- $expectedq->answer = array('frog', '*');
- $expectedq->fraction = array(1, 0);
- $expectedq->feedback = array(
- 0 => array(
- 'text' => '',
- 'format' => FORMAT_HTML,
- 'files' => array(),
- ),
- 1 => array(
- 'text' => '',
- 'format' => FORMAT_HTML,
- 'files' => array(),
- )
- );
-
- $this->assert(new question_check_specified_fields_expectation($expectedq), $q);
- }
-
- public function test_import_essay() {
-
- $xmldata = xmlize($this->make_test_xml());
- $questions = array();
-
- $importer = new qformat_blackboard();
- $importer->process_essay($xmldata, $questions);
- $q = $questions[0];
-
- $expectedq = new stdClass();
- $expectedq->qtype = 'essay';
- $expectedq->name = 'How are you?';
- $expectedq->questiontext = 'How are you?';
- $expectedq->questiontextformat = FORMAT_HTML;
- $expectedq->generalfeedback = '';
- $expectedq->generalfeedbackformat = FORMAT_HTML;
- $expectedq->defaultmark = 1;
- $expectedq->length = 1;
- $expectedq->responseformat = 'editor';
- $expectedq->responsefieldlines = 15;
- $expectedq->attachments = 0;
- $expectedq->graderinfo = array(
- 'text' => 'Blackboard answer for essay questions will be imported as informations for graders.',
- 'format' => FORMAT_HTML,
- 'files' => array());
-
- $this->assert(new question_check_specified_fields_expectation($expectedq), $q);
- }
-}
diff --git a/question/format/blackboard/tests/fixtures/sample_blackboard.dat b/question/format/blackboard/tests/fixtures/sample_blackboard.dat
deleted file mode 100644
index f4d91831704..00000000000
--- a/question/format/blackboard/tests/fixtures/sample_blackboard.dat
+++ /dev/null
@@ -1,142 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
- 42 is the Absolute Answer to everything.]]>
-
-
-
-
-
-
- False
-
-
- True
-
-
-
-
-
-
-
-
-
- What's between orange and green in the spectrum?]]>
-
-
-
-
-
-
- red]]>
-
-
- yellow]]>
-
-
- blue]]>
-
-
-
-
-
-
-
-
-
- What's between orange and green in the spectrum?]]>
-
-
-
-
-
-
- yellow]]>
-
-
- red]]>
-
-
- off-beige]]>
-
-
- blue]]>
-
-
-
-
-
-
-
-
-
-
- Classify the animals.]]>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Name an amphibian: __________.]]>
-
-
-
-
-
-
- frog
-
-
-
-
-
diff --git a/question/format/blackboard/version.php b/question/format/blackboard/version.php
deleted file mode 100644
index 0c61840950b..00000000000
--- a/question/format/blackboard/version.php
+++ /dev/null
@@ -1,32 +0,0 @@
-.
-
-/**
- * Version information for the calculated question type.
- *
- * @package qformat_blackboard
- * @copyright 2011 The Open University
- * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
- */
-
-defined('MOODLE_INTERNAL') || die();
-
-$plugin->component = 'qformat_blackboard';
-$plugin->version = 2012112900;
-
-$plugin->requires = 2012112900;
-
-$plugin->maturity = MATURITY_STABLE;
diff --git a/question/format/blackboard_six/lang/en/qformat_blackboard_six.php b/question/format/blackboard_six/lang/en/qformat_blackboard_six.php
index c7c925e6ae4..4c3e68cbf54 100644
--- a/question/format/blackboard_six/lang/en/qformat_blackboard_six.php
+++ b/question/format/blackboard_six/lang/en/qformat_blackboard_six.php
@@ -28,6 +28,6 @@ $string['importnotext'] = 'Missing question text in XML file';
$string['filenothandled'] = 'This archive contains reference to a file material {$a} which is not currently handled by import';
$string['imagenotfound'] = 'Image file with path {$a} was not found in the import.';
$string['notenoughtsubans'] = 'Unable to import matching question \'{$a}\' because a matching question must comprise at least two questions and three answers.';
-$string['pluginname'] = 'Blackboard V6+';
-$string['pluginname_help'] = 'Blackboard V6+ format enables questions saved in all Blackboard export formats to be imported via a dat or zip file. For zip files, images import is supported.';
+$string['pluginname'] = 'Blackboard';
+$string['pluginname_help'] = 'Blackboard format enables questions saved in all Blackboard export formats to be imported via a dat or zip file. For zip files, images import is supported.';
$string['unhandledpresblock'] = 'Unhandled presentation block';
diff --git a/version.php b/version.php
index 8d6bcfd0b9e..8625638d72a 100644
--- a/version.php
+++ b/version.php
@@ -31,7 +31,7 @@ defined('MOODLE_INTERNAL') || die();
-$version = 2013022800.00; // YYYYMMDD = weekly release date of this DEV branch
+$version = 2013022800.01; // YYYYMMDD = weekly release date of this DEV branch
// RR = release increments - 00 in DEV branches
// .XX = incremental changes