From df73f8d4e198bee7749c3895f6940e4fa8e9a49f Mon Sep 17 00:00:00 2001 From: tjhunt Date: Mon, 1 Dec 2008 06:55:11 +0000 Subject: [PATCH] restore: MDL-17480 Potentially expensive function user_can_create_courses called repeatedly from restore UI. --- backup/restore_check.html | 26 ++++++++------------------ backup/restore_form.html | 7 ++++--- lib/datalib.php | 34 ++++++++-------------------------- 3 files changed, 20 insertions(+), 47 deletions(-) diff --git a/backup/restore_check.html b/backup/restore_check.html index 17b2357d59..2cac66f2bd 100644 --- a/backup/restore_check.html +++ b/backup/restore_check.html @@ -218,28 +218,18 @@ // 2-New course: Create the restore object and launch the execute. //If the user is a teacher and not a creator or we are restoring from within SITEID - - if (!user_can_create_courses() || $id == SITEID) { + $cancreatecourses = user_can_create_courses(); + if (!$cancreatecourses || $id == SITEID) { $restore->course_id = $id; - if ($restore->restoreto == 0) { - $restore->deleting = true; - } else { - $restore->deleting = false; - } } - //If the user is a creator (or admin) - if (user_can_create_courses()) { - //Set restore->deleting as needed - if ($restore->restoreto == 0) { - $restore->deleting = true; - } else { - $restore->deleting = false; - } + //Set restore->deleting as needed + if ($restore->restoreto == 0) { + $restore->deleting = true; + } else { + $restore->deleting = false; } - - // Non-cached - get accessinfo if (isset($USER->access)) { $accessinfo = $USER->access; @@ -274,7 +264,7 @@ //Checks everything and execute restore } else if ((($restore->restoreto == 0 or $restore->restoreto == 1) and ($restore->course_id != 0)) or ($restore->restoreto == 2)) { //Final access control check - if ($restore->course_id == 0 and !user_can_create_courses()) { + if ($restore->course_id == 0 and !$cancreatecourses) { print_error("cannotrestoreadminorcreator"); } else if ($restore->course_id != 0 and !has_capability('moodle/site:restore', get_context_instance(CONTEXT_COURSE, $restore->course_id))) { print_error("cannotrestoreadminoredit"); diff --git a/backup/restore_form.html b/backup/restore_form.html index 7bedead232..8f806f681e 100644 --- a/backup/restore_form.html +++ b/backup/restore_form.html @@ -111,8 +111,9 @@ $restore_blogs = 1; } + $cancreatecourses = user_can_create_courses(); if (!isset($restore_restoreto)) { - if (!user_can_create_courses()) { + if (!$cancreatecourses) { $restore_restoreto = 1; } else { $restore_restoreto = 2; @@ -231,7 +232,7 @@ function selectItemInCheckboxByName(formId, checkName, checked ) { } // if user can create any course at all, give the option - if (user_can_create_courses()) { + if ($cancreatecourses) { $restore_restoreto_options[2] = get_string("newcourse"); } @@ -240,7 +241,7 @@ function selectItemInCheckboxByName(formId, checkName, checked ) { choose_from_menu($restore_restoreto_options, "restore_restoreto", $restore_restoreto, ""); echo ""; - if (user_can_create_courses()) { //display these fields conditionally + if ($cancreatecourses) { //display these fields conditionally // find the list of cates user can edit echo ""; diff --git a/lib/datalib.php b/lib/datalib.php index 03f2676684..5396ae137f 100644 --- a/lib/datalib.php +++ b/lib/datalib.php @@ -2255,37 +2255,19 @@ function xmldb_debug($message, $object) { } /** - * true or false function to see if user can create any courses at all - * @return bool + * @return boolean Whether the user can create courses in any category in the system. */ function user_can_create_courses() { - global $USER; - // if user has course creation capability at any site or course cat, then return true; - - if (has_capability('moodle/course:create', get_context_instance(CONTEXT_SYSTEM))) { - return true; - } else { - return (bool) count(get_creatable_categories()); - } - -} - -/** - * Get the list of categories the current user can create courses in - * @return array - */ -function get_creatable_categories() { global $DB; - - $creatablecats = array(); - if ($cats = $DB->get_records('course_categories')) { - foreach ($cats as $cat) { - if (has_capability('moodle/course:create', get_context_instance(CONTEXT_COURSECAT, $cat->id))) { - $creatablecats[$cat->id] = $cat->name; - } + $catsrs = $DB->get_recordset('course_categories'); + foreach ($cats as $cat) { + if (has_capability('moodle/course:create', get_context_instance(CONTEXT_COURSECAT, $cat->id))) { + $catsrs->close(); + return true; } } - return $creatablecats; + $catsrs->close(); + return false; } ?> -- 2.39.5