forked from moodle/moodle
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
MDL-11543 Temporary solution originally proposed by Martin
- Loading branch information
nicolasconnault
committed
Oct 9, 2007
1 parent
ca3b6e5
commit 1f68258
Showing
2 changed files
with
406 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,345 @@ | ||
<?php // $Id$ | ||
/** | ||
* Displays a category and all its sub-categories. | ||
* In editing mode, allows admins to move/delete/hide categories | ||
*/ | ||
|
||
require_once("../config.php"); | ||
require_once("lib.php"); | ||
require_once('editcategory_form.php'); | ||
|
||
$id = optional_param('id', 0, PARAM_INT); // Category id: if not given, show Add a Category form. If given and 'categoryupdate': show edit form | ||
$page = optional_param('page', 0, PARAM_INT); // which page to show | ||
$perpage = optional_param('perpage', $CFG->coursesperpage, PARAM_INT); // how many per page | ||
$hide = optional_param('hide', 0, PARAM_INT); | ||
$show = optional_param('show', 0, PARAM_INT); | ||
$moveup = optional_param('moveup', 0, PARAM_INT); | ||
$movedown = optional_param('movedown', 0, PARAM_INT); | ||
$moveto = optional_param('moveto', 0, PARAM_INT); | ||
$categoryedit = optional_param('categoryedit', -1, PARAM_BOOL); // Enables Move/Delete/Hide icons near each category in the list | ||
$categoryadd = optional_param('categoryadd', 0, PARAM_BOOL); // Enables the Add Category form | ||
$categoryupdate = optional_param('categoryupdate', 0, PARAM_BOOL); // Enables the Edit Category form | ||
$resort = optional_param('resort', 0, PARAM_BOOL); | ||
|
||
if (!$site = get_site()) { | ||
error("Site isn't defined!"); | ||
} | ||
|
||
if ($categoryadd) { // Show Add category form: if $id is given, it is used as the parent category | ||
$context = get_context_instance(CONTEXT_SYSTEM); | ||
$category = new stdClass(); | ||
$strtitle = get_string("addnewcategory"); | ||
$mform = new editcategory_form('editcategory.php', compact(array('category', 'id'))); | ||
|
||
if (($data = $mform->get_data()) && has_capability('moodle/category:create', $context)) { | ||
$category->name = stripslashes_safe($data->name); | ||
$category->description = $data->description; | ||
$category->sortorder = 999; | ||
$category->parent = $data->parent; // if $id = 0, the new category will be a top-level category | ||
|
||
if (!empty($data->theme) && !empty($CFG->allowcategorythemes)) { | ||
$category->theme = $data->theme; | ||
theme_setup(); | ||
} | ||
|
||
if (!$category->id = insert_record('course_categories', $category)) { | ||
notify( "Could not insert the new category '$category->name' "); | ||
} else { | ||
$category->context = get_context_instance(CONTEXT_COURSECAT, $category->id); | ||
mark_context_dirty($category->context->path); | ||
redirect('index.php?categoryedit=on', get_string('categoryadded', null, $category->name)); | ||
} | ||
} | ||
} | ||
|
||
// Prepare context if category id is given, or use System context if not | ||
if ($id && !$categoryadd) { | ||
$context = get_context_instance(CONTEXT_COURSECAT, $id); | ||
if (!$category = get_record("course_categories", "id", $id)) { | ||
error("Category not known!"); | ||
} | ||
} elseif ($categoryadd) { | ||
$context = get_context_instance(CONTEXT_SYSTEM); | ||
$category = new stdClass(); | ||
} else { | ||
error("You must provide either an id or the categoryadd switch"); | ||
} | ||
|
||
// If id is given, but not categoryadd or categoryupdate, we show the category with its list of subcategories | ||
if ($id && !$categoryadd && !$categoryupdate && false) { | ||
/* TODO implement | ||
if ($CFG->forcelogin) { | ||
require_login(); | ||
} | ||
// Determine whether to allow user to see this category | ||
if (has_capability('moodle/course:create', $context)) { | ||
if ($categoryedit !== -1) { | ||
$USER->categoryediting = $categoryedit; | ||
} | ||
$navbaritem = update_category_button($category->id); | ||
$creatorediting = !empty($USER->categoryediting); | ||
$adminediting = (has_capability('moodle/site:config', get_context_instance(CONTEXT_SYSTEM, SITEID)) and $creatorediting); | ||
} else { | ||
if (!$category->visible) { | ||
error(get_string('notavailable', 'error')); | ||
} | ||
$navbaritem = print_course_search("", true, "navbar"); | ||
$adminediting = false; | ||
$creatorediting = false; | ||
} | ||
// Resort the category if requested | ||
if ($resort and confirm_sesskey()) { | ||
if ($courses = get_courses($id, "fullname ASC", 'c.id,c.fullname,c.sortorder')) { | ||
// move it off the range | ||
$count = get_record_sql('SELECT MAX(sortorder) AS max, 1 | ||
FROM ' . $CFG->prefix . 'course WHERE category=' . $category->id); | ||
$count = $count->max + 100; | ||
begin_sql(); | ||
foreach ($courses as $course) { | ||
set_field('course', 'sortorder', $count, 'id', $course->id); | ||
$count++; | ||
} | ||
commit_sql(); | ||
fix_course_sortorder($category->id); | ||
} | ||
} | ||
// Print headings | ||
$numcategories = count_records("course_categories"); | ||
$stradministration = get_string("administration"); | ||
$strcategories = get_string("categories"); | ||
$strcategory = get_string("category"); | ||
$strcourses = get_string("courses"); | ||
$navlinks = array(); | ||
$navlinks[] = array('name' => $strcategories, 'link' => 'index.php', 'type' => 'misc'); | ||
$navlinks[] = array('name' => $category->name, 'link' => null, 'type' => 'misc'); | ||
$navigation = build_navigation($navlinks); | ||
if ($creatorediting) { | ||
if ($adminediting) { | ||
// modify this to treat this as an admin page | ||
require_once($CFG->libdir.'/adminlib.php'); | ||
admin_externalpage_setup('categorymgmt'); | ||
admin_externalpage_print_header(); | ||
} else { | ||
print_header("$site->shortname: $category->name", "$site->fullname: $strcategories", $navigation, "", "", true, $navbaritem); | ||
} | ||
} else { | ||
print_header("$site->shortname: $category->name", "$site->fullname: $strcategories", $navigation, "", "", true, $navbaritem); | ||
} | ||
// Print button to turn editing off | ||
if ($adminediting) { | ||
echo '<div class="categoryediting button" align="right">'.update_category_button($category->id).'</div>'; | ||
} | ||
// Print link to roles | ||
if (has_capability('moodle/role:assign', $context)) { | ||
echo '<div class="rolelink"><a href="'.$CFG->wwwroot.'/'.$CFG->admin.'/roles/assign.php?contextid='. | ||
$context->id.'">'.get_string('assignroles','role').'</a></div>'; | ||
} | ||
// Print the category selector | ||
$displaylist = array(); | ||
$parentlist = array(); | ||
make_categories_list($displaylist, $parentlist, ""); | ||
echo '<div class="categorypicker">'; | ||
popup_form('category.php?id=', $displaylist, 'switchcategory', $category->id, '', '', '', false, 'self', $strcategories.':'); | ||
echo '</div>'; | ||
// Print current category description | ||
if ($category->description) { | ||
print_box_start(); | ||
print_heading(get_string('description')); | ||
echo $category->description; | ||
print_box_end(); | ||
} | ||
// Editing functions | ||
if ($creatorediting) { | ||
// Move a specified category to a new category | ||
if (!empty($moveto) and $data = data_submitted() and confirm_sesskey()) { // Some courses are being moved | ||
// user must have category update in both cats to perform this | ||
require_capability('moodle/category:update', $context); | ||
require_capability('moodle/category:update', get_context_instance(CONTEXT_COURSECAT, $moveto)); | ||
if (!$destcategory = get_record("course_categories", "id", $data->moveto)) { | ||
error("Error finding the destination category"); | ||
} | ||
// TODO function to move the category | ||
} | ||
// Hide or show a category | ||
if ((!empty($hide) or !empty($show)) and confirm_sesskey()) { | ||
require_capability('moodle/category:visibility', $context); | ||
if (!empty($hide)) { | ||
$category = get_record("course_categories", "id", $hide); | ||
$visible = 0; | ||
} else { | ||
$category = get_record("course_categories", "id", $show); | ||
$visible = 1; | ||
} | ||
if ($category) { | ||
if (! set_field("course_categories", "visible", $visible, "id", $category->id)) { | ||
notify("Could not update that category!"); | ||
} | ||
} | ||
} | ||
// Move a category up or down | ||
if ((!empty($moveup) or !empty($movedown)) and confirm_sesskey()) { | ||
require_capability('moodle/category:update', $context); | ||
$movecategory = NULL; | ||
$swapcategory = NULL; | ||
// TODO something like fix_course_sortorder() ? | ||
// we are going to need to know the range | ||
$max = get_record_sql('SELECT MAX(sortorder) AS max, 1 FROM ' . $CFG->prefix . 'course_categories WHERE id=' . $category->id); | ||
$max = $max->max + 100; | ||
if (!empty($moveup)) { | ||
$movecategory = get_record('course_categories', 'id', $moveup); | ||
$swapcategory = get_record('course_categories', | ||
'category', $category->id, | ||
'sortorder', $movecategory->sortorder - 1); | ||
} else { | ||
$movecategory = get_record('course_categories', 'id', $movedown); | ||
$swapcategory = get_record('course_categories', | ||
'category', $category->id, | ||
'sortorder', $movecategory->sortorder + 1); | ||
} | ||
if ($swapcourse and $movecourse) { // Renumber everything for robustness | ||
begin_sql(); | ||
if (!( set_field("course", "sortorder", $max, "id", $swapcourse->id) | ||
&& set_field("course", "sortorder", $swapcourse->sortorder, "id", $movecourse->id) | ||
&& set_field("course", "sortorder", $movecourse->sortorder, "id", $swapcourse->id) | ||
)) { | ||
notify("Could not update that course!"); | ||
} | ||
commit_sql(); | ||
} | ||
} | ||
} // End of editing stuff | ||
// Print out all the sub-categories | ||
if ($subcategories = get_records("course_categories", "parent", $category->id, "sortorder ASC")) { | ||
$firstentry = true; | ||
foreach ($subcategories as $subcategory) { | ||
if ($subcategory->visible or has_capability('moodle/course:create', $context)) { | ||
$subcategorieswereshown = true; | ||
if ($firstentry) { | ||
echo '<table border="0" cellspacing="2" cellpadding="4" class="generalbox boxaligncenter">'; | ||
echo '<tr><th scope="col">'.get_string('subcategories').'</th></tr>'; | ||
echo '<tr><td style="white-space: nowrap">'; | ||
$firstentry = false; | ||
} | ||
$catlinkcss = $subcategory->visible ? "" : " class=\"dimmed\" "; | ||
echo '<a '.$catlinkcss.' href="category.php?id='.$subcategory->id.'">'. | ||
format_string($subcategory->name).'</a><br />'; | ||
} | ||
} | ||
if (!$firstentry) { | ||
echo "</td></tr></table>"; | ||
echo "<br />"; | ||
} | ||
} | ||
// print option to add a subcategory | ||
if (has_capability('moodle/category:create', $context) && $creatorediting) { | ||
$cat->id = $id; | ||
$mform->set_data($cat); | ||
$mform->display(); | ||
} | ||
*/ | ||
} elseif (!is_null($id) && !$categoryadd) { // Show Edit category form: $id is given as the identifier of the category being edited | ||
$strtitle = get_string("editcategorysettings"); | ||
$mform = new editcategory_form('editcategory.php', compact(array('id', 'category'))); | ||
if (has_capability('moodle/category:update', $context)) { | ||
if ($data = $mform->get_data()) { | ||
$category->name = $data->name; | ||
$category->description = $data->description; | ||
$category->sortorder = 999; | ||
|
||
if ($category->parent != $data->parent) { | ||
$parent_cat = get_record('course_categories', 'id', $data->parent); | ||
move_category($category, $parent_cat); | ||
$category->parent = $data->parent; | ||
} | ||
|
||
if (!empty($data->theme) && !empty($CFG->allowcategorythemes)) { | ||
$category->theme = $data->theme; | ||
theme_setup(); | ||
} | ||
|
||
if (!update_record('course_categories', $category)) { | ||
notice( "Could not update the category '$category->name' "); | ||
} else { | ||
if ($category->parent == 0) { | ||
$redirect_link = 'index.php?categoryedit=on'; | ||
} else { | ||
$redirect_link = 'category.php?id='.$category->id.'&categoryedit=on'; | ||
} | ||
fix_course_sortorder(); | ||
redirect($redirect_link, get_string('categoryupdated', null, $category->name)); | ||
} | ||
} | ||
} else { | ||
notice("You do not have the permission to update this category."); | ||
} | ||
} | ||
|
||
// Print the form | ||
|
||
$site = get_site(); | ||
|
||
$straddnewcategory = get_string("addnewcategory"); | ||
$stradministration = get_string("administration"); | ||
$strcategories = get_string("categories"); | ||
$navlinks = array(); | ||
|
||
if (!empty($category->name)) { | ||
$navlinks[] = array('name' => $strtitle, | ||
'link' => null, | ||
'type' => 'misc'); | ||
$title = $strtitle; | ||
$fullname = $category->name; | ||
} else { | ||
$navlinks[] = array('name' => $stradministration, | ||
'link' => "$CFG->wwwroot/$CFG->admin/index.php", | ||
'type' => 'misc'); | ||
$navlinks[] = array('name' => $strcategories, | ||
'link' => 'index.php', | ||
'type' => 'misc'); | ||
$navlinks[] = array('name' => $straddnewcategory, | ||
'link' => null, | ||
'type' => 'misc'); | ||
$title = "$site->shortname: $straddnewcategory"; | ||
$fullname = $site->fullname; | ||
} | ||
|
||
$navigation = build_navigation($navlinks); | ||
print_header($title, $fullname, $navigation, $mform->focus()); | ||
print_heading($strtitle); | ||
|
||
$mform->display(); | ||
|
||
print_footer(); | ||
?> |
Oops, something went wrong.