MDL-28075 question editing: sort out nav bar when editing in a quiz

If you edited a question from the Edit quiz page in a quiz, the navigation
bar was far too long. This was due to some odd code that was trying too
hard to be clever.

Instead, editing a question is now always treated as being logically within
the question bank for the purposes of navigation. That is, even if the
returnurl will end up taking you back to where you where when you have finished.
This commit is contained in:
Tim Hunt
2014-10-02 21:54:29 +01:00
parent 29507f2816
commit e680e70098
2 changed files with 19 additions and 37 deletions
+9 -16
View File
@@ -72,29 +72,22 @@ if (!empty($appendqnumstring)) {
}
$PAGE->set_url('/question/addquestion.php', $hiddenparams);
if ($cmid) {
$questionbankurl = new moodle_url('/question/edit.php', array('cmid' => $cmid));
} else {
$questionbankurl = new moodle_url('/question/edit.php', array('courseid' => $courseid));
}
navigation_node::override_active_url($questionbankurl);
$chooseqtype = get_string('chooseqtypetoadd', 'question');
$PAGE->set_heading($COURSE->fullname);
if ($cm !== null) {
// Nasty hack, but we don't want this link if returnurl returns to view.php
if (stripos($returnurl, "/mod/{$cm->modname}/view.php")!== 0) {
$PAGE->navbar->add(get_string('editinga', 'moodle', get_string('modulename', $cm->modname)),$returnurl);
}
$PAGE->navbar->add($chooseqtype);
$PAGE->set_title($chooseqtype);
echo $OUTPUT->header();
} else {
$PAGE->navbar->add(get_string('questionbank', 'question'),$returnurl);
$PAGE->navbar->add($chooseqtype);
$PAGE->set_title($chooseqtype);
echo $OUTPUT->header();
}
$PAGE->navbar->add($chooseqtype);
$PAGE->set_title($chooseqtype);
// Display a form to choose the question type.
echo $OUTPUT->header();
echo $OUTPUT->notification(get_string('youmustselectaqtype', 'question'));
echo $OUTPUT->box_start('generalbox boxwidthnormal boxaligncenter', 'chooseqtypebox');
print_choose_qtype_to_add_form($hiddenparams, null, false);
echo $OUTPUT->box_end();
echo $OUTPUT->footer();
+10 -21
View File
@@ -78,15 +78,20 @@ if ($scrollpos) {
}
$PAGE->set_url($url);
if ($cmid) {
$questionbankurl = new moodle_url('/question/edit.php', array('cmid' => $cmid));
} else {
$questionbankurl = new moodle_url('/question/edit.php', array('courseid' => $courseid));
}
navigation_node::override_active_url($questionbankurl);
if ($originalreturnurl) {
if (strpos($originalreturnurl, '/') !== 0) {
throw new coding_exception("returnurl must be a local URL starting with '/'. $originalreturnurl was given.");
}
$returnurl = new moodle_url($originalreturnurl);
} else if ($cmid) {
$returnurl = new moodle_url('/question/edit.php', array('cmid' => $cmid));
} else {
$returnurl = new moodle_url('/question/edit.php', array('courseid' => $courseid));
$returnurl = $questionbankurl;
}
if ($scrollpos) {
$returnurl->param('scrollpos', $scrollpos);
@@ -312,27 +317,11 @@ if ($mform->is_cancelled()) {
$streditingquestion = $qtypeobj->get_heading();
$PAGE->set_title($streditingquestion);
$PAGE->set_heading($COURSE->fullname);
if ($cm !== null) {
$strmodule = get_string('modulename', $cm->modname);
$streditingmodule = get_string('editinga', 'moodle', $strmodule);
$PAGE->navbar->add(get_string('modulenameplural', $cm->modname), new moodle_url('/mod/'.$cm->modname.'/index.php', array('id'=>$cm->course)));
$PAGE->navbar->add(format_string($module->name), new moodle_url('/mod/'.$cm->modname.'/view.php', array('id'=>$cm->id)));
if (stripos($returnurl, "$CFG->wwwroot/mod/{$cm->modname}/view.php")!== 0){
//don't need this link if returnurl returns to view.php
$PAGE->navbar->add($streditingmodule, $returnurl);
}
$PAGE->navbar->add($streditingquestion);
echo $OUTPUT->header();
} else {
$strediting = '<a href="edit.php?courseid='.$COURSE->id.'">'.get_string('editquestions', 'question').'</a> -> '.$streditingquestion;
$PAGE->navbar->add(get_string('editquestions', 'question'), $returnurl);
$PAGE->navbar->add($streditingquestion);
echo $OUTPUT->header();
}
$PAGE->navbar->add($streditingquestion);
// Display a heading, question editing form and possibly some extra content needed for
// for this question type.
echo $OUTPUT->header();
$qtypeobj->display_question_editing_page($mform, $question, $wizardnow);
echo $OUTPUT->footer();
}