From: tjhunt Date: Fri, 16 Jan 2009 08:00:06 +0000 (+0000) Subject: question bank: MDL-12787, MDL-17870 field in the question editing form to tag questio... X-Git-Url: http://git.mjollnir.org/gw?a=commitdiff_plain;h=c599a68240e0e58112765947d2c636ee20c72e2c;p=moodle.git question bank: MDL-12787, MDL-17870 field in the question editing form to tag questions, and load and save the tags from the DB. --- diff --git a/lib/questionlib.php b/lib/questionlib.php index a7282a17ce..cd29147101 100644 --- a/lib/questionlib.php +++ b/lib/questionlib.php @@ -836,10 +836,11 @@ function question_load_questions($questionids, $extrafields = '', $join = '') { * Private function to factor common code out of get_question_options(). * * @param object $question the question to tidy. + * @param boolean $loadtags load the question tags from the tags table. Optional, default false. * @return boolean true if successful, else false. */ -function _tidy_question(&$question) { - global $QTYPES; +function _tidy_question(&$question, $loadtags = false) { + global $CFG, $QTYPES; if (!array_key_exists($question->qtype, $QTYPES)) { $question->qtype = 'missingtype'; $question->questiontext = '

' . get_string('warningmissingtype', 'quiz') . '

' . $question->questiontext; @@ -850,6 +851,10 @@ function _tidy_question(&$question) { unset($question->_partiallyloaded); } } + if ($loadtags && !empty($CFG->usetags)) { + require_once($CFG->dirroot . '/tag/lib.php'); + $question->tags = tag_get_tags_array('question', $question->id); + } return $success; } @@ -862,18 +867,19 @@ function _tidy_question(&$question) { * * @param mixed $questions Either an array of question objects to be updated * or just a single question object + * @param boolean $loadtags load the question tags from the tags table. Optional, default false. * @return bool Indicates success or failure. */ -function get_question_options(&$questions) { +function get_question_options(&$questions, $loadtags = false) { if (is_array($questions)) { // deal with an array of questions foreach ($questions as $i => $notused) { - if (!_tidy_question($questions[$i])) { + if (!_tidy_question($questions[$i], $loadtags)) { return false; } } return true; } else { // deal with single question - return _tidy_question($questions); + return _tidy_question($questions, $loadtags); } } diff --git a/question/question.php b/question/question.php index b763976d3e..a93ffaf954 100644 --- a/question/question.php +++ b/question/question.php @@ -46,18 +46,15 @@ if ($cmid){ } $contexts = new question_edit_contexts($thiscontext); - if (!$returnurl) { $returnurl = "{$CFG->wwwroot}/question/edit.php?courseid={$COURSE->id}"; } - - if ($id) { if (!$question = $DB->get_record('question', array('id' => $id))) { print_error('questiondoesnotexist', 'question', $returnurl); } - get_question_options($question); + get_question_options($question, true); } else if ($categoryid && $qtype) { // only for creating new questions $question = new stdClass; $question->category = $categoryid; @@ -72,7 +69,7 @@ if (!$category = $DB->get_record('question_categories', array('id' => $question- } //permissions -$question->formoptions = new object(); +$question->formoptions = new stdClass; $categorycontext = get_context_instance_by_id($category->contextid); $addpermission = has_capability('moodle/question:add', $categorycontext); @@ -99,7 +96,6 @@ if ($id) { } } - } else { // creating a new question require_capability('moodle/question:add', $categorycontext); $formeditable = true; @@ -107,14 +103,12 @@ if ($id) { $question->formoptions->movecontext = false; } - // Validate the question type. if (!isset($QTYPES[$question->qtype])) { print_error('unknownquestiontype', 'question', $returnurl, $question->qtype); } $CFG->pagepath = 'question/type/' . $question->qtype; - // Create the question editing form. if ($wizardnow!=='' && !$movecontext){ if (!method_exists($QTYPES[$question->qtype], 'next_wizard_form')){ @@ -183,7 +177,12 @@ if ($mform->is_cancelled()){ } } - $question = $QTYPES[$question->qtype]->save_question($question, $fromform, $COURSE, $wizardnow); + $question = $QTYPES[$question->qtype]->save_question($question, $fromform, $COURSE, $wizardnow, true); + if (!empty($CFG->usetags)) { + require_once($CFG->dirroot.'/tag/lib.php'); + tag_set('question', $question->id, $fromform->tags); + } + if (($QTYPES[$question->qtype]->finished_edit_wizard($fromform)) || $movecontext){ if ($inpopup) { notify(get_string('changessaved'), ''); @@ -242,7 +241,6 @@ if ($mform->is_cancelled()){ print_header_simple($streditingquestion, '', $navigation); } - // Display a heading, question editing form and possibly some extra content needed for // for this question type. $QTYPES[$question->qtype]->display_question_editing_page($mform, $question, $wizardnow); diff --git a/question/type/edit_question_form.php b/question/type/edit_question_form.php index 8a51868aaf..31c4579b28 100644 --- a/question/type/edit_question_form.php +++ b/question/type/edit_question_form.php @@ -146,6 +146,11 @@ class question_edit_form extends moodleform { // Any questiontype specific fields. $this->definition_inner($mform); + if (!empty($CFG->usetags)) { + $mform->addElement('header', 'tagsheader', get_string('tags')); + $mform->addElement('tags', 'tags', get_string('tags')); + } + if (!empty($this->question->id)){ $mform->addElement('header', 'createdmodifiedheader', get_string('createdmodifiedheader', 'question')); $a = new object();