diff --git a/course/manage.php b/course/manage.php index df8c5f473ef..d7d4a2dc1e5 100644 --- a/course/manage.php +++ b/course/manage.php @@ -26,6 +26,16 @@ require_once("../config.php"); require_once($CFG->dirroot.'/course/lib.php'); require_once($CFG->libdir.'/coursecatlib.php'); +/** + * Limit the total number of categories where user has 'moodle/course:manage' + * permission in order for "Move categories" dropdown to be displayed on this page. + * If number of categories exceeds this limit, user can always use edit category + * form to change the parent. Otherwise the page size becomes too big. + */ +if (!defined('COURSECAT_QUICKMOVE_LIMIT')) { + define('COURSECAT_QUICKMOVE_LIMIT', 200); +} + // Category id. $id = optional_param('categoryid', 0, PARAM_INT); // Which page to show. @@ -322,6 +332,8 @@ if (!empty($searchcriteria)) { echo $OUTPUT->heading(new lang_string('searchresults')); } else if (!$coursecat->id) { // Print out the categories with all the knobs. + $manageablecategories = coursecat::make_categories_list('moodle/category:manage'); + $displaymovecategoryto = !empty($manageablecategories) && (count($manageablecategories) <= COURSECAT_QUICKMOVE_LIMIT); $table = new html_table; $table->id = 'coursecategories'; $table->attributes['class'] = 'admintable generaltable editcourse'; @@ -329,17 +341,21 @@ if (!empty($searchcriteria)) { get_string('categories'), get_string('courses'), get_string('edit'), - get_string('movecategoryto'), ); + if ($displaymovecategoryto) { + $table->head[] = get_string('movecategoryto'); + } $table->colclasses = array( 'leftalign name', 'centeralign count', 'centeralign icons', - 'leftalign actions' ); + if ($displaymovecategoryto) { + $table->colclasses[] = 'leftalign actions'; + } $table->data = array(); - print_category_edit($table, $coursecat); + print_category_edit($table, $coursecat, -1, false, false, $displaymovecategoryto); echo html_writer::table($table); } else { @@ -627,8 +643,9 @@ echo $OUTPUT->footer(); * @param int $depth The depth of the category. * @param bool $up True if this category can be moved up. * @param bool $down True if this category can be moved down. + * @param bool $displaymovecategoryto whether to display a dropdown for quick category move. */ -function print_category_edit(html_table $table, coursecat $category, $depth = -1, $up = false, $down = false) { +function print_category_edit(html_table $table, coursecat $category, $depth = -1, $up = false, $down = false, $displaymovecategoryto = true) { global $OUTPUT; static $str = null; @@ -716,7 +733,7 @@ function print_category_edit(html_table $table, coursecat $category, $depth = -1 } $actions = ''; - if (has_capability('moodle/category:manage', $categorycontext)) { + if ($displaymovecategoryto && has_capability('moodle/category:manage', $categorycontext)) { $popupurl = new moodle_url('/course/manage.php', array('movecat' => $category->id, 'sesskey' => sesskey())); $tempdisplaylist = array(0 => get_string('top')) + coursecat::make_categories_list('moodle/category:manage', $category->id); $select = new single_select($popupurl, 'movetocat', $tempdisplaylist, $category->parent, null, "moveform$category->id"); @@ -724,16 +741,19 @@ function print_category_edit(html_table $table, coursecat $category, $depth = -1 $actions = $OUTPUT->render($select); } - $table->data[] = new html_table_row(array( + $thisrowdata = array( // Category name. new html_table_cell($categoryname), // Course count. new html_table_cell($category->coursecount), // Icons. new html_table_cell(join(' ', $icons)), + ); + if ($displaymovecategoryto) { // Actions. - new html_table_cell($actions) - )); + $thisrowdata[] = new html_table_cell($actions); + } + $table->data[] = new html_table_row($thisrowdata); } if ($categories = $category->get_children()) { @@ -751,7 +771,7 @@ function print_category_edit(html_table $table, coursecat $category, $depth = -1 $down = $last ? false : true; $first = false; - print_category_edit($table, $cat, $depth+1, $up, $down); + print_category_edit($table, $cat, $depth+1, $up, $down, $displaymovecategoryto); } } }