From: tjhunt Date: Fri, 6 Oct 2006 16:48:54 +0000 (+0000) Subject: Hopefully improve performance on site with lots of question categories Merged from... X-Git-Url: http://git.mjollnir.org/gw?a=commitdiff_plain;h=b20ea66988a0ec4959f4300bcfec43e3ea2699b1;p=moodle.git Hopefully improve performance on site with lots of question categories Merged from MOODLE_16_STABLE. --- diff --git a/lib/questionlib.php b/lib/questionlib.php index 71a1a7b248..51b7b46feb 100644 --- a/lib/questionlib.php +++ b/lib/questionlib.php @@ -1462,14 +1462,19 @@ function add_indented_names($categories) { * @param integer $selected optionally, the id of a category to be selected by default in the dropdown. */ function question_category_select_menu($courseid, $published = false, $only_editable = false, $selected = "") { - + global $CFG; + // get sql fragment for published $publishsql=""; if ($published) { - $publishsql = "or publish=1"; + $publishsql = " OR publish = 1"; } - $categories = get_records_select("question_categories","course=$courseid $publishsql", 'parent, sortorder, name ASC'); + $categories = get_records_sql(" + SELECT cat.*, c.shortname AS coursename + FROM {$CFG->prefix}question_categories cat, {$CFG->prefix}course c + WHERE c.id = cat.course AND (cat.course = $courseid $publishsql) + ORDER BY parent, sortorder, name ASC"); $categories = add_indented_names($categories); @@ -1488,22 +1493,27 @@ function question_category_select_menu($courseid, $published = false, $only_edit echo "\n"; } +/** + * If the category is not from this course, and it is a published category, + * then return the course category name with the course shortname appended in + * brackets. Otherwise, just return the category name. + */ function question_category_coursename($category, $courseid = 0) { -/// if the category is not from this course and is published , adds on the course -/// name $cname = (isset($category->indentedname)) ? $category->indentedname : $category->name; if ($category->course != $courseid && $category->publish) { - if ($catcourse=get_record("course","id",$category->course)) { - $cname .= " ($catcourse->shortname) "; + if (!empty($category->coursename)) { + $coursename = $category->coursename; + } else { + $coursename = get_field('course', 'shortname', 'id', $category->course); } + $cname .= " ($coursename)"; } return $cname; } - /** -* Returns a comma separated list of ids of the category and all subcategories -*/ + * Returns a comma separated list of ids of the category and all subcategories + */ function question_categorylist($categoryid) { // returns a comma separated list of ids of the category and all subcategories $categorylist = $categoryid; diff --git a/question/export.php b/question/export.php index 7ff74b57a8..201a70b93e 100644 --- a/question/export.php +++ b/question/export.php @@ -136,20 +136,6 @@ $exportfilename = default_export_filename($course, $category); } - /// Get all the existing categories now - if (!$categories = get_records_select("question_categories", "course = '{$course->id}' OR publish = '1'", "parent, sortorder, name ASC")) { - error("Could not find any question categories!"); - } - $categories = add_indented_names($categories); - foreach ($categories as $key => $cat) { - if ($catcourse = get_record("course", "id", $cat->course)) { - if ($cat->publish && $cat->course != $course->id) { - $cat->indentedname .= " ($catcourse->shortname)"; - } - $catmenu[$cat->id] = $cat->indentedname; - } - } - print_heading_with_help($strexportquestions, "export", "quiz"); print_simple_box_start("center"); @@ -164,7 +150,7 @@ echo question_category_coursename($category); echo " id\" />"; } else { // no category specified, let user choose - choose_from_menu($catmenu, "category", $category->id, ""); + question_category_select_menu($course->id, true, false, $category->id); } //echo str_replace(' ', '', $category->name) . " ($categorycourse->shortname)"; echo "\n";