--- loncom/interface/loncreateuser.pm 2009/11/04 14:13:32 1.323 +++ loncom/interface/loncreateuser.pm 2009/11/12 15:58:22 1.324 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # Create a user # -# $Id: loncreateuser.pm,v 1.323 2009/11/04 14:13:32 raeburn Exp $ +# $Id: loncreateuser.pm,v 1.324 2009/11/12 15:58:22 raeburn Exp $ # # Copyright Michigan State University Board of Trustees # @@ -51,13 +51,14 @@ In LON-CAPA, roles are actually collecti Assistant", "Course Coordinator", and other such roles are really just collection of privileges that are useful in many circumstances. -Creating custom roles can be done by the Domain Coordinator through -the Create User functionality. That screen will show all privileges -that can be assigned to users. For a complete list of privileges, -please see C. +Custom roles can be defined by a Domain Coordinator, Course Coordinator +or Community Coordinator via the Manage User functionality. +The custom role editor screen will show all privileges which can be +assigned to users. For a complete list of privileges, please see +C. -Custom role definitions are stored in the C file of the role -author. +Custom role definitions are stored in the C file of the creator +of the role. =cut @@ -487,6 +488,11 @@ sub print_username_entry_form { '// ]]>'."\n". ''."\n"; + my %existingroles=&Apache::lonuserutils::my_custom_roles($crstype); + if (($env{'form.action'} eq 'custom') && (keys(%existingroles) > 0) + && (&Apache::lonnet::allowed('mcr','/'))) { + $jscript .= &customrole_javascript(); + } my %loaditems = ( 'onload' => "javascript:setFormElements(document.$formtoset)", ); @@ -512,31 +518,53 @@ sub print_username_entry_form { } my $crumbs = &Apache::lonhtmlcommon::breadcrumbs('User Management', $helpitem); - my %existingroles=&Apache::lonuserutils::my_custom_roles(); - my $choice=&Apache::loncommon::select_form('make new role','rolename', - ('make new role' => 'Generate new role ...',%existingroles)); my %lt=&Apache::lonlocal::texthash( 'srst' => 'Search for a user and enroll as a student', 'srme' => 'Search for a user and enroll as a member', 'srad' => 'Search for a user and modify/add user information or roles', 'usr' => "Username", 'dom' => "Domain", - 'ecrp' => "Edit Custom Role Privileges", - 'nr' => "Name of Role", + 'ecrp' => "Define or Edit Custom Role", + 'nr' => "role name", 'cre' => "Next", ); $r->print($start_page."\n".$crumbs); if ($env{'form.action'} eq 'custom') { if (&Apache::lonnet::allowed('mcr','/')) { - $r->print(< - - -

$lt{'ecrp'}

-$choice $lt{'nr'}:
- - -ENDCUSTOM + my $newroletext = &mt('Define new custom role:'); + $r->print('
'. + ''. + ''. + '

'.$lt{'ecrp'}.'

'. + &Apache::loncommon::start_data_table(). + &Apache::loncommon::start_data_table_row(). + ''); + if (keys(%existingroles) > 0) { + $r->print('
'); + } else { + $r->print('
'.$newroletext.''); + } + $r->print(''.$lt{'nr'}.'
'. + &Apache::loncommon::end_data_table_row()); + if (keys(%existingroles) > 0) { + $r->print(&Apache::loncommon::start_data_table_row().'
'. + ''. + '
'. + ''. + ''. + &Apache::loncommon::end_data_table_row()); + } + $r->print(&Apache::loncommon::end_data_table().'

'. + '

'. + '
'); } } else { my $actiontext = $lt{'srad'}; @@ -547,8 +575,7 @@ ENDCUSTOM $actiontext = $lt{'srst'}; } } - $r->print(" -

$actiontext

"); + $r->print("

$actiontext

"); if ($env{'form.origform'} ne 'crtusername') { $r->print("\n".$response); } @@ -557,6 +584,44 @@ ENDCUSTOM $r->print(&Apache::loncommon::end_page()); } +sub customrole_javascript { + my $js = <<"END"; + +END + return $js; +} + sub entry_form { my ($dom,$srch,$forcenewuser,$context,$responsemsg,$crstype) = @_; my %domconf = &Apache::lonnet::get_dom('configuration',['usercreation'],$dom); @@ -3478,18 +3543,27 @@ sub build_roles { sub custom_role_editor { my ($r) = @_; - my $rolename=$env{'form.rolename'}; - - if ($rolename eq 'make new role') { - $rolename=$env{'form.newrolename'}; + my $action = $env{'form.customroleaction'}; + my $rolename; + if ($action eq 'new') { + $rolename=$env{'form.newrolename'}; + } else { + $rolename=$env{'form.rolename'}; } $rolename=~s/[^A-Za-z0-9]//gs; - if (!$rolename || $env{'form.phase'} eq 'pickrole') { &print_username_entry_form($r); return; } + my ($crstype,$context); + if ($env{'request.course.id'}) { + $crstype = &Apache::loncommon::course_type(); + $context = 'course'; + } else { + $context = 'domain'; + $crstype = $env{'form.templatecrstype'}; + } # ------------------------------------------------------- What can be assigned? my %full=(); my %courselevel=(); @@ -3507,6 +3581,9 @@ sub custom_role_editor { $body_top .= &mt('Existing Role').' "'; # ------------------------------------------------- Get current role privileges ($syspriv,$dompriv,$coursepriv)=split(/\_/,$roledef); + if ($crstype eq 'Community') { + $syspriv =~ s/bre\&S//; + } } else { $body_top .= &mt('New Role').' "'; $roledef=''; @@ -3548,20 +3625,50 @@ sub custom_role_editor { my $head_script = "\n"; $head_script .= ''."\n"; @@ -3583,13 +3690,22 @@ sub custom_role_editor { 'dml' => "Domain Level", 'ssl' => "System Level"); - $r->print('
' + + $r->print('
' .'
' .''.&mt('Select a Template').'' .$button_code - .'
' - .'
' - ); + .'
'); + if ($context_code) { + $r->print('
' + .'
' + .''.&mt('Context').'' + .$context_code + .'' + .'
' + ); + } + $r->print('
'); $r->print(< @@ -3601,7 +3717,7 @@ ENDCCF ''.$lt{'prv'}.''.$lt{'crl'}.''.$lt{'dml'}. ''.$lt{'ssl'}.''. &Apache::loncommon::end_data_table_header_row()); - foreach my $priv (sort keys %full) { + foreach my $priv (sort(keys(%full))) { my $privtext = &Apache::lonnet::plaintext($priv,$crstype); $r->print(&Apache::loncommon::start_data_table_row(). ''.$privtext.''. @@ -3610,11 +3726,15 @@ ENDCCF ''. ($domainlevel{$priv}?'':' '). - ''. - ($systemlevel{$priv}?'':' '). - ''. - &Apache::loncommon::end_data_table_row()); + ''); + if ($priv eq 'bre' && $crstype eq 'Community') { + $r->print(' '); + } else { + $r->print($systemlevel{$priv}?'':' '); + } + $r->print(''. + &Apache::loncommon::end_data_table_row()); } $r->print(&Apache::loncommon::end_data_table(). ''. @@ -3626,7 +3746,7 @@ ENDCCF } # -------------------------------------------------------- sub make_script_template { - my ($role) = @_; + my ($role,$crstype) = @_; my %full_c=(); my %full_d=(); my %full_s=(); @@ -3640,6 +3760,7 @@ sub make_script_template { $full_d{$priv}=1; } foreach my $item (split(/\:/,$Apache::lonnet::pr{'cr:s'})) { + next if (($crstype eq 'Community') && ($item eq 'bre&S')); my ($priv,$restrict)=split(/\&/,$item); $full_s{$priv}=1; } @@ -5882,7 +6003,8 @@ sub course_level_table { } } if (&Apache::lonnet::allowed('ccr',$thiscourse)) { - foreach my $cust (sort keys %customroles) { + foreach my $cust (sort(keys(%customroles))) { + next if ($crstype eq 'Community' && $customroles{$cust} =~ /bre\&S/); my $role = 'cr_cr_'.$env{'user.domain'}.'_'.$env{'user.name'}.'_'.$cust; $table .= &course_level_row($protectedcourse,$role,$area,$domain, $cust,\%sections_count,\%lt);