2004-09-12 12:21:27 +00:00
< ? php // $Id$
2003-08-07 16:01:31 +00:00
// For most people, just lists the course categories
// Allows the admin to create, delete and rename course categories
2001-11-22 06:23:56 +00:00
2004-05-30 00:33:45 +00:00
require_once ( " ../config.php " );
require_once ( " lib.php " );
2001-11-22 06:23:56 +00:00
2006-08-18 07:27:05 +00:00
$categoryedit = optional_param ( 'categoryedit' , - 1 , PARAM_BOOL );
2006-04-11 20:39:30 +00:00
$delete = optional_param ( 'delete' , 0 , PARAM_INT );
$hide = optional_param ( 'hide' , 0 , PARAM_INT );
$show = optional_param ( 'show' , 0 , PARAM_INT );
$sure = optional_param ( 'sure' , '' , PARAM_ALPHANUM );
$move = optional_param ( 'move' , 0 , PARAM_INT );
$moveto = optional_param ( 'moveto' , - 1 , PARAM_INT );
$moveup = optional_param ( 'moveup' , 0 , PARAM_INT );
$movedown = optional_param ( 'movedown' , 0 , PARAM_INT );
2006-08-08 05:13:06 +00:00
$context = get_context_instance ( CONTEXT_SYSTEM , SITEID );
2005-06-14 09:21:09 +00:00
2003-08-07 16:01:31 +00:00
if ( ! $site = get_site ()) {
error ( " Site isn't defined! " );
}
2004-01-14 08:27:40 +00:00
if ( $CFG -> forcelogin ) {
require_login ();
}
2006-09-08 08:46:26 +00:00
if ( has_capability ( 'moodle/category:update' , get_context_instance ( CONTEXT_SYSTEM , SITEID ))) {
2006-08-18 07:27:05 +00:00
if ( $categoryedit !== - 1 ) {
$USER -> categoryediting = $categoryedit ;
2003-08-07 16:01:31 +00:00
}
2006-04-11 20:39:30 +00:00
$adminediting = ! empty ( $USER -> categoryediting );
} else {
$adminediting = false ;
2003-08-07 16:01:31 +00:00
}
/// Unless it's an editing admin, just print the regular listing of courses/categories
if ( ! $adminediting ) {
$countcategories = count_records ( " course_categories " );
2006-02-08 04:21:22 +00:00
if ( $countcategories > 1 || ( $countcategories == 1 && count_records ( 'course' ) > 200 )) {
2003-08-07 16:01:31 +00:00
$strcourses = get_string ( " courses " );
2004-02-20 12:56:17 +00:00
$strcategories = get_string ( " categories " );
print_header ( " $site->shortname : $strcategories " , $strcourses ,
$strcategories , " " , " " , true , update_categories_button ());
print_heading ( $strcategories );
2003-09-03 15:25:08 +00:00
print_simple_box_start ( " center " , " 50% " , " #FFFFFF " , 5 , " categorybox " );
2003-08-07 16:01:31 +00:00
print_whole_category_list ();
print_simple_box_end ();
2003-08-11 09:45:50 +00:00
print_course_search ();
2003-08-07 16:01:31 +00:00
} else {
$strfulllistofcourses = get_string ( " fulllistofcourses " );
2005-01-11 07:01:04 +00:00
print_header ( " $site->shortname : $strfulllistofcourses " , $strfulllistofcourses , $strfulllistofcourses ,
'' , '' , true , update_categories_button ());
2003-08-07 16:01:31 +00:00
print_courses ( 0 , " 80% " );
}
2003-08-22 12:15:35 +00:00
2005-08-16 06:15:49 +00:00
echo " <center> " ;
2006-09-08 08:46:26 +00:00
/// I am not sure this context in the next has_capability call is correct.
if ( isloggedin () and ! isguest () and ! has_capability ( 'moodle/course:create' , get_context_instance ( CONTEXT_SYSTEM , SITEID ))) { // Print link to request a new course
2006-07-31 09:18:52 +00:00
print_single_button ( " request.php " , NULL , get_string ( " courserequest " ), " get " );
}
2006-09-12 08:56:10 +00:00
if ( has_capability ( 'moodle/course:create' , get_context_instance ( CONTEXT_SYSTEM , SITEID ))) { // Print link to create a new course
2004-03-10 07:20:42 +00:00
print_single_button ( " edit.php " , NULL , get_string ( " addnewcourse " ), " get " );
2003-08-22 12:15:35 +00:00
}
2006-09-08 15:53:24 +00:00
if ( has_capability ( 'moodle/site:approvecourse' , get_context_instance ( CONTEXT_SYSTEM , SITEID )) and ! empty ( $CFG -> enablecourserequests )) {
2006-04-12 16:41:10 +00:00
print_single_button ( 'pending.php' , NULL , get_string ( 'coursespending' ), " get " );
2005-08-16 06:15:49 +00:00
}
echo " </center> " ;
2003-08-07 16:01:31 +00:00
print_footer ();
exit ;
}
/// From now on is all the admin functions
2006-09-02 13:14:57 +00:00
require_once ( $CFG -> libdir . '/adminlib.php' );
$adminroot = admin_get_root ();
admin_externalpage_setup ( 'coursemgmt' , $adminroot );
2006-08-18 07:27:05 +00:00
2003-08-07 16:01:31 +00:00
/// Print headings
$stradministration = get_string ( " administration " );
2002-09-09 12:37:34 +00:00
$strcategories = get_string ( " categories " );
2003-08-07 16:01:31 +00:00
$strcategory = get_string ( " category " );
$strcourses = get_string ( " courses " );
$stredit = get_string ( " edit " );
$strdelete = get_string ( " delete " );
$straction = get_string ( " action " );
$straddnewcategory = get_string ( " addnewcategory " );
2002-09-09 11:48:11 +00:00
2006-08-18 07:27:05 +00:00
2006-09-02 13:14:57 +00:00
admin_externalpage_print_header ( $adminroot );
2002-09-09 11:48:11 +00:00
2003-08-07 16:01:31 +00:00
print_heading ( $strcategories );
/// If data for a new category was submitted, then add it
2006-08-14 05:55:40 +00:00
if ( $form = data_submitted () and confirm_sesskey () and has_capability ( 'moodle/category:create' , $context )) {
2003-08-07 16:01:31 +00:00
if ( ! empty ( $form -> addcategory )) {
unset ( $newcategory );
$newcategory -> name = $form -> addcategory ;
$newcategory -> sortorder = 999 ;
if ( ! insert_record ( " course_categories " , $newcategory )) {
notify ( " Could not insert the new category ' $newcategory->name ' " );
} else {
notify ( get_string ( " categoryadded " , " " , $newcategory -> name ));
}
}
}
/// Delete a category if necessary
2005-06-14 09:21:09 +00:00
if ( ! empty ( $delete ) and confirm_sesskey ()) {
2006-09-20 20:31:09 +00:00
// context is coursecat, if not present admins should have it set in site level
$context = get_context_instance ( CONTEXT_COURSECAT , $delete );
if ( $deletecat = get_record ( " course_categories " , " id " , $delete ) and has_capability ( 'moodle/category:delete' , $context )) {
2004-11-16 02:21:31 +00:00
if ( ! empty ( $sure ) && $sure == md5 ( $deletecat -> timemodified )) {
/// Send the children categories to live with their grandparent
if ( $childcats = get_records ( " course_categories " , " parent " , $deletecat -> id )) {
foreach ( $childcats as $childcat ) {
if ( ! set_field ( " course_categories " , " parent " , $deletecat -> parent , " id " , $childcat -> id )) {
error ( " Could not update a child category! " , " index.php " );
}
2003-08-07 16:01:31 +00:00
}
}
2004-11-16 02:21:31 +00:00
/// If the grandparent is a valid (non-zero) category, then
/// send the children courses to live with their grandparent as well
if ( $deletecat -> parent ) {
if ( $childcourses = get_records ( " course " , " category " , $deletecat -> id )) {
foreach ( $childcourses as $childcourse ) {
if ( ! set_field ( " course " , " category " , $deletecat -> parent , " id " , $childcourse -> id )) {
error ( " Could not update a child course! " , " index.php " );
}
2004-01-09 16:54:10 +00:00
}
2003-12-21 05:10:13 +00:00
}
}
2004-11-16 02:21:31 +00:00
/// Finally delete the category itself
if ( delete_records ( " course_categories " , " id " , $deletecat -> id )) {
notify ( get_string ( " categorydeleted " , " " , $deletecat -> name ));
}
2003-12-21 05:10:13 +00:00
}
2004-11-16 02:21:31 +00:00
else {
$strdeletecategorycheck = get_string ( " deletecategorycheck " , " " , $deletecat -> name );
notice_yesno ( " $strdeletecategorycheck " ,
" index.php?delete= $delete &sure= " . md5 ( $deletecat -> timemodified ) . " &sesskey= $USER->sesskey " ,
" index.php?sesskey= $USER->sesskey " );
exit ();
2004-01-09 16:54:10 +00:00
}
2003-08-07 16:01:31 +00:00
}
2002-09-09 11:48:11 +00:00
}
2002-09-09 12:37:34 +00:00
2002-09-09 11:48:11 +00:00
2003-08-07 16:01:31 +00:00
/// Create a default category if necessary
if ( ! $categories = get_categories ()) { /// No category yet!
// Try and make one
unset ( $tempcat );
$tempcat -> name = get_string ( " miscellaneous " );
if ( ! $tempcat -> id = insert_record ( " course_categories " , $tempcat )) {
error ( " Serious error: Could not create a default category! " );
}
}
/// Move a category to a new parent if required
2005-06-14 09:21:09 +00:00
if ( ! empty ( $move ) and ( $moveto >= 0 ) and confirm_sesskey ()) {
2003-08-07 16:01:31 +00:00
if ( $tempcat = get_record ( " course_categories " , " id " , $move )) {
if ( $tempcat -> parent != $moveto ) {
if ( ! set_field ( " course_categories " , " parent " , $moveto , " id " , $tempcat -> id )) {
notify ( " Could not update that category! " );
}
}
}
}
/// Hide or show a category
2005-06-14 09:21:09 +00:00
if (( ! empty ( $hide ) or ! empty ( $show )) and confirm_sesskey ()) {
if ( ! empty ( $hide )) {
2003-08-07 16:01:31 +00:00
$tempcat = get_record ( " course_categories " , " id " , $hide );
$visible = 0 ;
} else {
$tempcat = get_record ( " course_categories " , " id " , $show );
$visible = 1 ;
}
if ( $tempcat ) {
if ( ! set_field ( " course_categories " , " visible " , $visible , " id " , $tempcat -> id )) {
notify ( " Could not update that category! " );
}
if ( ! set_field ( " course " , " visible " , $visible , " category " , $tempcat -> id )) {
notify ( " Could not hide/show any courses in this category ! " );
}
}
}
/// Move a category up or down
2005-06-14 09:21:09 +00:00
if (( ! empty ( $moveup ) or ! empty ( $movedown )) and confirm_sesskey ()) {
2003-08-07 16:01:31 +00:00
$swapcategory = NULL ;
$movecategory = NULL ;
2005-06-14 09:21:09 +00:00
if ( ! empty ( $moveup )) {
2003-08-07 16:01:31 +00:00
if ( $movecategory = get_record ( " course_categories " , " id " , $moveup )) {
$categories = get_categories ( " $movecategory->parent " );
foreach ( $categories as $category ) {
if ( $category -> id == $movecategory -> id ) {
break ;
}
$swapcategory = $category ;
}
}
}
2005-06-14 09:21:09 +00:00
if ( ! empty ( $movedown )) {
2003-08-07 16:01:31 +00:00
if ( $movecategory = get_record ( " course_categories " , " id " , $movedown )) {
$categories = get_categories ( " $movecategory->parent " );
2002-09-09 11:48:11 +00:00
2003-08-07 16:01:31 +00:00
$choosenext = false ;
foreach ( $categories as $category ) {
if ( $choosenext ) {
$swapcategory = $category ;
break ;
}
if ( $category -> id == $movecategory -> id ) {
$choosenext = true ;
}
}
}
}
if ( $swapcategory and $movecategory ) { // Renumber everything for robustness
$count = 0 ;
foreach ( $categories as $category ) {
$count ++ ;
if ( $category -> id == $swapcategory -> id ) {
$category = $movecategory ;
} else if ( $category -> id == $movecategory -> id ) {
$category = $swapcategory ;
}
if ( ! set_field ( " course_categories " , " sortorder " , $count , " id " , $category -> id )) {
notify ( " Could not update that category! " );
}
}
}
}
/// Find the default category (the one with the lowest ID)
2003-07-30 13:02:45 +00:00
$categories = get_categories ();
2003-08-07 16:01:31 +00:00
$default = 99999 ;
foreach ( $categories as $category ) {
if ( $category -> id < $default ) {
$default = $category -> id ;
}
}
/// Find any orphan courses that don't yet have a valid category and set to default
2006-09-17 18:07:35 +00:00
if ( $courses = get_courses ( NULL , NULL , 'c.id, c.category, c.sortorder, c.visible' )) {
2003-08-07 16:01:31 +00:00
foreach ( $courses as $course ) {
2003-08-22 12:49:37 +00:00
if ( $course -> category and ! isset ( $categories [ $course -> category ])) {
2003-08-07 16:01:31 +00:00
set_field ( " course " , " category " , $default , " id " , $course -> id );
}
}
}
2004-05-30 00:33:45 +00:00
fix_course_sortorder ();
2003-08-07 16:01:31 +00:00
/// Print form for creating new categories
2006-09-20 20:31:09 +00:00
if ( has_capability ( 'moodle/category:create' , $context )) {
echo " <center> " ;
echo " <form name= \" addform \" action= \" index.php \" method= \" post \" > " ;
echo " <input type= \" text \" size= \" 30 \" alt= \" $straddnewcategory\ " name = \ " addcategory \" /> " ;
echo " <input type= \" submit \" value= \" $straddnewcategory\ " /> " ;
echo " <input type= \" hidden \" name= \" sesskey \" value= \" $USER->sesskey\ " /> " ;
echo " </form> " ;
echo " </center> " ;
echo " <br /> " ;
}
2003-08-07 16:01:31 +00:00
/// Print out the categories with all the knobs
$strcategories = get_string ( " categories " );
$strcourses = get_string ( " courses " );
$strmovecategoryto = get_string ( " movecategoryto " );
$stredit = get_string ( " edit " );
$displaylist = array ();
$parentlist = array ();
$displaylist [ 0 ] = get_string ( " top " );
make_categories_list ( $displaylist , $parentlist , " " );
2004-09-12 12:21:27 +00:00
echo " <table align= \" center \" border= \" 0 \" cellspacing= \" 2 \" cellpadding= \" 5 \" class= \" generalbox \" ><tr> " ;
2003-08-07 16:01:31 +00:00
echo " <th> $strcategories </th> " ;
echo " <th> $strcourses </th> " ;
echo " <th> $stredit </th> " ;
echo " <th> $strmovecategoryto </th> " ;
2004-09-23 12:25:49 +00:00
echo " </tr> " ;
2003-08-07 16:01:31 +00:00
print_category_edit ( NULL , $displaylist , $parentlist );
echo " </table> " ;
2003-08-09 16:53:30 +00:00
echo " <br /> " ;
2003-08-07 16:01:31 +00:00
2003-08-09 16:53:30 +00:00
/// Print link to create a new course
2003-08-22 12:15:35 +00:00
echo " <center> " ;
2003-08-09 16:53:30 +00:00
unset ( $options );
2003-09-08 12:59:04 +00:00
$options [ " category " ] = $category -> id ;
2006-08-08 05:13:06 +00:00
2006-08-14 05:55:40 +00:00
if ( has_capability ( 'moodle/course:create' , $context )) {
2006-09-20 20:31:09 +00:00
print_single_button ( " edit.php " , $options , get_string ( " addnewcourse " ), " get " );
2006-08-08 05:13:06 +00:00
}
2005-08-16 06:15:49 +00:00
print_single_button ( 'pending.php' , NULL , get_string ( 'coursespending' ), " get " );
2003-08-09 16:53:30 +00:00
echo " <br /> " ;
echo " </center> " ;
2003-07-30 13:02:45 +00:00
2006-09-02 13:14:57 +00:00
admin_externalpage_print_footer ( $adminroot );
2003-08-07 16:01:31 +00:00
function print_category_edit ( $category , $displaylist , $parentslist , $depth =- 1 , $up = false , $down = false ) {
/// Recursive function to print all the categories ready for editing
2005-01-25 14:03:43 +00:00
global $CFG , $USER ;
2003-08-07 16:01:31 +00:00
static $str = '' ;
if ( empty ( $str )) {
$str -> delete = get_string ( " delete " );
$str -> moveup = get_string ( " moveup " );
$str -> movedown = get_string ( " movedown " );
$str -> edit = get_string ( " editthiscategory " );
$str -> hide = get_string ( " hide " );
$str -> show = get_string ( " show " );
}
2003-07-30 13:02:45 +00:00
2003-08-07 16:01:31 +00:00
if ( $category ) {
2006-09-20 20:31:09 +00:00
$context = get_context_instance ( CONTEXT_COURSECAT , $category -> id );
2005-01-25 14:03:43 +00:00
echo " <tr><td align= \" left \" nowrap= \" nowrap \" > " ;
2003-08-07 16:01:31 +00:00
for ( $i = 0 ; $i < $depth ; $i ++ ) {
echo " " ;
}
$linkcss = $category -> visible ? " " : " class= \" dimmed \" " ;
2006-08-18 07:27:05 +00:00
echo " <a $linkcss title= \" $str->edit\ " href = \ " category.php?id= $category->id &categoryedit=on&sesskey= $USER->sesskey\ " > $category -> name </ a > " ;
2003-08-07 16:01:31 +00:00
echo " </td> " ;
2003-08-19 09:26:36 +00:00
echo " <td align= \" right \" > $category->coursecount </td> " ;
2003-08-07 16:01:31 +00:00
echo " <td nowrap= \" nowrap \" > " ; /// Print little icons
2006-09-20 20:31:09 +00:00
if ( has_capability ( 'moodle/category:delete' , $context )) {
echo " <a title= \" $str->delete\ " href = \ " index.php?delete= $category->id &sesskey= $USER->sesskey\ " >< img " .
" src= \" $CFG->pixpath /t/delete.gif \" height= \" 11 \" width= \" 11 \" border= \" 0 \" alt= \" \" /></a> " ;
}
if ( has_capability ( 'moodle/category:visibility' , $context )) {
if ( ! empty ( $category -> visible )) {
echo " <a title= \" $str->hide\ " href = \ " index.php?hide= $category->id &sesskey= $USER->sesskey\ " >< img " .
" src= \" $CFG->pixpath /t/hide.gif \" height= \" 11 \" width= \" 11 \" border= \" 0 \" alt= \" \" /></a> " ;
} else {
echo " <a title= \" $str->show\ " href = \ " index.php?show= $category->id &sesskey= $USER->sesskey\ " >< img " .
" src= \" $CFG->pixpath /t/show.gif \" height= \" 11 \" width= \" 11 \" border= \" 0 \" alt= \" \" /></a> " ;
}
}
2003-08-07 16:01:31 +00:00
if ( $up ) {
2004-10-09 13:22:59 +00:00
echo " <a title= \" $str->moveup\ " href = \ " index.php?moveup= $category->id &sesskey= $USER->sesskey\ " >< img " .
2006-06-02 13:18:49 +00:00
" src= \" $CFG->pixpath /t/up.gif \" height= \" 11 \" width= \" 11 \" border= \" 0 \" alt= \" $str->moveup\ " /></ a > " ;
2003-08-07 16:01:31 +00:00
}
if ( $down ) {
2004-10-09 13:22:59 +00:00
echo " <a title= \" $str->movedown\ " href = \ " index.php?movedown= $category->id &sesskey= $USER->sesskey\ " >< img " .
2006-06-02 13:18:49 +00:00
" src= \" $CFG->pixpath /t/down.gif \" height= \" 11 \" width= \" 11 \" border= \" 0 \" alt= \" $str->movedown\ " /></ a > " ;
2003-08-07 16:01:31 +00:00
}
echo " </td> " ;
echo " <td align= \" left \" width= \" 0 \" > " ;
$tempdisplaylist = $displaylist ;
unset ( $tempdisplaylist [ $category -> id ]);
foreach ( $parentslist as $key => $parents ) {
if ( in_array ( $category -> id , $parents )) {
unset ( $tempdisplaylist [ $key ]);
}
}
2004-10-09 13:22:59 +00:00
popup_form ( " index.php?move= $category->id &sesskey= $USER->sesskey &moveto= " , $tempdisplaylist , " moveform $category->id " , " $category->parent " , " " , " " , " " , false );
2003-08-07 16:01:31 +00:00
echo " </td> " ;
echo " </tr> " ;
2003-07-30 13:02:45 +00:00
} else {
2003-08-07 16:01:31 +00:00
$category -> id = " 0 " ;
2003-07-30 13:02:45 +00:00
}
2001-11-22 06:23:56 +00:00
2003-08-07 16:01:31 +00:00
if ( $categories = get_categories ( $category -> id )) { // Print all the children recursively
$countcats = count ( $categories );
$count = 0 ;
$first = true ;
$last = false ;
foreach ( $categories as $cat ) {
$count ++ ;
if ( $count == $countcats ) {
$last = true ;
}
$up = $first ? false : true ;
$down = $last ? false : true ;
$first = false ;
2001-11-22 06:23:56 +00:00
2003-08-07 16:01:31 +00:00
print_category_edit ( $cat , $displaylist , $parentslist , $depth + 1 , $up , $down );
}
}
}
2001-11-22 06:23:56 +00:00
2003-08-07 16:01:31 +00:00
?>