2006-08-08 05:13:06 +00:00
< ? php // $Id$
// Script to assign students to courses
require_once ( " ../../config.php " );
define ( " MAX_USERS_PER_PAGE " , 5000 );
$contextid = required_param ( 'contextid' , PARAM_INT ); // context id
2006-08-11 03:24:37 +00:00
$roleid = optional_param ( 'roleid' , 0 , PARAM_INT ); // required role id
2006-08-08 05:13:06 +00:00
$add = optional_param ( 'add' , 0 , PARAM_BOOL );
$remove = optional_param ( 'remove' , 0 , PARAM_BOOL );
$showall = optional_param ( 'showall' , 0 , PARAM_BOOL );
$searchtext = optional_param ( 'searchtext' , '' , PARAM_RAW ); // search string
$previoussearch = optional_param ( 'previoussearch' , 0 , PARAM_BOOL );
2006-08-09 13:18:33 +00:00
$hidden = optional_param ( 'hidden' , 0 , PARAM_BOOL ); // whether this assignment is hidden
2006-08-08 05:13:06 +00:00
$previoussearch = ( $searchtext != '' ) or ( $previoussearch ) ? 1 : 0 ;
2006-08-11 03:24:37 +00:00
$timestart = optional_param ( 'timestart' , 0 , PARAM_INT );
2006-08-09 13:18:33 +00:00
$timeend = optional_param ( 'timened' , 0 , PARAM_INT );
2006-08-14 08:46:44 +00:00
$userid = optional_param ( 'userid' , 0 , PARAM_INT ); // needed for user tabs
$courseid = optional_param ( 'courseid' , 0 , PARAM_INT ); // needed for user tabs
2006-08-08 05:13:06 +00:00
2006-08-14 08:46:44 +00:00
if ( $courseid ) {
$course = get_record ( 'course' , 'id' , $courseid );
}
2006-08-08 05:13:06 +00:00
if ( ! $site = get_site ()) {
redirect ( " $CFG->wwwroot / $CFG->admin /index.php " );
}
2006-08-14 05:55:40 +00:00
if ( ! $context = get_context_instance_by_id ( $contextid )) {
2006-08-08 05:13:06 +00:00
error ( " Context ID was incorrect (can't find it) " );
}
2006-08-14 05:55:40 +00:00
require_login ();
require_capability ( 'moodle/role:assign' , $context );
2006-08-08 05:13:06 +00:00
2006-08-11 03:24:37 +00:00
/**
2006-08-14 05:55:40 +00:00
* TODO XXX :
2006-08-11 03:24:37 +00:00
* Permission check to see whether this user can assign people to this role
2006-08-09 13:18:33 +00:00
* needs to be :
2006-08-08 05:13:06 +00:00
* 1 ) has the capability to assign
* 2 ) not in role_deny_grant
* end of permission checking
2006-08-09 13:18:33 +00:00
*/
2006-08-08 05:13:06 +00:00
2006-08-09 13:18:33 +00:00
$strassignusers = get_string ( 'assignusers' , 'role' );
$strpotentialusers = get_string ( 'potentialusers' , 'role' );
$strexistingusers = get_string ( 'existingusers' , 'role' );
$straction = get_string ( 'assignroles' , 'role' );
2006-08-28 07:12:10 +00:00
$strroletoassign = get_string ( 'roletoassign' , 'role' );
2006-08-09 13:18:33 +00:00
$strcurrentcontext = get_string ( 'currentcontext' , 'role' );
$strsearch = get_string ( 'search' );
$strshowall = get_string ( 'showall' );
2006-08-14 08:46:44 +00:00
$context = get_record ( 'context' , 'id' , $contextid );
2006-08-23 06:36:08 +00:00
$assignableroles = get_assignable_roles ( $context );
2006-08-09 13:18:33 +00:00
2006-08-18 08:01:16 +00:00
// role assigning permission checking
if ( $roleid ) {
if ( ! user_can_assign ( $context , $roleid )) {
error ( 'you can not override this role in this context' );
}
}
2006-08-16 09:11:43 +00:00
$participants = get_string ( " participants " );
$user = get_record ( 'user' , 'id' , $userid );
2006-08-22 05:35:52 +00:00
$fullname = fullname ( $user , has_capability ( 'moodle/site:viewfullnames' , $context ));
2006-08-21 05:19:16 +00:00
2006-08-14 08:46:44 +00:00
// we got a few tabs there
2006-08-21 05:19:16 +00:00
if ( $context -> aggregatelevel == CONTEXT_USERID ) {
2006-08-16 09:11:43 +00:00
/// course header
if ( $courseid != SITEID ) {
print_header ( " $fullname " , " $fullname " ,
" <a href= \" ../course/view.php?id= $course->id\ " > $course -> shortname </ a > ->
< a href = \ " " . $CFG -> wwwroot . " /user/index.php?id= $course->id\ " > $participants </ a > -> < a href = \ " " . $CFG -> wwwroot . " /user/view.php?id= " . $userid . " &course= " . $courseid . " \" > $fullname </a> -> " . get_string ( 'assign' , 'roles' ),
" " , " " , true , " " , navmenu ( $course ));
/// site header
} else {
print_header ( " $course->fullname : $fullname " , " $course->fullname " ,
" <a href= \" " . $CFG -> wwwroot . " /user/view.php?id= " . $userid . " &course= " . $courseid . " \" > $fullname </a> -> $straction " , " " , " " , true , " " , navmenu ( $course ));
}
2006-08-15 08:29:29 +00:00
$showroles = 1 ;
$currenttab = 'assign' ;
2006-08-14 08:46:44 +00:00
include_once ( $CFG -> dirroot . '/user/tabs.php' );
} else {
$currenttab = '' ;
$tabsmode = 'assign' ;
include_once ( 'tabs.php' );
}
2006-08-08 05:13:06 +00:00
/// Print a help notice about the need to use this page
if ( ! $frm = data_submitted ()) {
/// A form was submitted so process the input
} else {
if ( $add and ! empty ( $frm -> addselect ) and confirm_sesskey ()) {
2006-08-09 13:18:33 +00:00
//$timestart = ????
// time end = ????
$timemodified = time ();
2006-08-08 05:13:06 +00:00
foreach ( $frm -> addselect as $adduser ) {
$adduser = clean_param ( $adduser , PARAM_INT );
2006-08-14 05:55:40 +00:00
if ( ! role_assign ( $roleid , $adduser , 0 , $context -> id , $timestart , $timeend , $hidden )) {
2006-08-08 05:13:06 +00:00
error ( " Could not add user with id $adduser to this role! " );
}
}
} else if ( $remove and ! empty ( $frm -> removeselect ) and confirm_sesskey ()) {
foreach ( $frm -> removeselect as $removeuser ) {
$removeuser = clean_param ( $removeuser , PARAM_INT );
2006-08-14 05:55:40 +00:00
if ( ! role_unassign ( $roleid , $removeuser , 0 , $context -> id )) {
2006-08-08 05:13:06 +00:00
error ( " Could not remove user with id $removeuser from this role! " );
}
}
} else if ( $showall ) {
$searchtext = '' ;
$previoussearch = 0 ;
}
}
/// Get all existing students and teachers for this course.
$existinguserarray = array ();
2006-08-14 05:55:40 +00:00
$SQL = " select u.* from { $CFG -> prefix } role_assignments r, { $CFG -> prefix } user u where contextid = $context->id and roleid = $roleid and u.id = r.userid " ; // join now so that we can just use fullname() later
2006-08-09 05:37:53 +00:00
2006-08-08 05:13:06 +00:00
if ( ! $contextusers = get_records_sql ( $SQL )) {
2006-08-09 13:18:33 +00:00
$contextusers = array ();
2006-08-08 05:13:06 +00:00
}
2006-08-09 13:18:33 +00:00
foreach ( $contextusers as $contextuser ) {
$existinguserarray [] = $contextuser -> id ;
}
$existinguserlist = implode ( ',' , $existinguserarray );
2006-08-08 05:13:06 +00:00
unset ( $existinguserarray );
/// Get search results excluding any users already in this course
if (( $searchtext != '' ) and $previoussearch ) {
$searchusers = get_users ( true , $searchtext , true , $existinguserlist , 'firstname ASC, lastname ASC' ,
'' , '' , 0 , 99999 , 'id, firstname, lastname, email' );
$usercount = get_users ( false , '' , true , $existinguserlist );
}
/// If no search results then get potential students for this course excluding users already in course
if ( empty ( $searchusers )) {
$usercount = get_users ( false , '' , true , $existinguserlist , 'firstname ASC, lastname ASC' , '' , '' ,
0 , 99999 , 'id, firstname, lastname, email' ) ;
$users = array ();
if ( $usercount <= MAX_USERS_PER_PAGE ) {
$users = get_users ( true , '' , true , $existinguserlist , 'firstname ASC, lastname ASC' , '' , '' ,
0 , 99999 , 'id, firstname, lastname, email' );
}
}
// prints a form to swap roles
print ( '<form name="rolesform" action="assign.php" method="post">' );
2006-08-14 05:55:40 +00:00
print ( '<div align="center">' . $strcurrentcontext . ': ' . print_context_name ( $context ) . '<br/>' );
2006-08-14 08:46:44 +00:00
if ( $userid ) {
print ( '<input type="hidden" name="userid" value="' . $userid . '" />' );
}
2006-08-28 06:14:06 +00:00
if ( $courseid ) {
2006-08-14 08:46:44 +00:00
print ( '<input type="hidden" name="courseid" value="' . $courseid . '" />' );
}
2006-08-28 07:12:10 +00:00
print ( '<input type="hidden" name="contextid" value="' . $context -> id . '" />' . $strroletoassign . ': ' );
2006-08-23 06:36:08 +00:00
choose_from_menu ( $assignableroles , 'roleid' , $roleid , 'choose' , $script = 'rolesform.submit()' );
2006-08-09 13:18:33 +00:00
print ( '</div></form>' );
if ( $roleid ) {
2006-08-08 05:13:06 +00:00
2006-08-09 13:18:33 +00:00
print_simple_box_start ( " center " );
include ( 'assign.html' );
2006-08-08 05:13:06 +00:00
2006-08-09 13:18:33 +00:00
print_simple_box_end ();
2006-08-08 05:13:06 +00:00
2006-08-09 13:18:33 +00:00
}
2006-08-08 05:13:06 +00:00
print_footer ( $course );
2006-08-13 07:01:57 +00:00
?>