--- loncom/interface/lonuserutils.pm 2007/12/22 04:23:05 1.25 +++ loncom/interface/lonuserutils.pm 2007/12/22 04:58:45 1.26 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # Utility functions for managing LON-CAPA user accounts # -# $Id: lonuserutils.pm,v 1.25 2007/12/22 04:23:05 raeburn Exp $ +# $Id: lonuserutils.pm,v 1.26 2007/12/22 04:58:45 raeburn Exp $ # # Copyright Michigan State University Board of Trustees # @@ -1990,7 +1990,7 @@ END $context,$permission,$mode); $r->print(''.$results_description.'
'); } - my ($output,$actionselect); + my ($output,$actionselect,%canchange,%canchangesec); if ($mode eq 'html' || $mode eq 'view' || $mode eq 'autoenroll') { if ($mode ne 'autoenroll') { if ($permission->{'cusr'}) { @@ -2029,6 +2029,40 @@ $lt{'ac'}: $actionselect   END + my @allroles; + if ($env{'form.showrole'} eq 'Any') { + my $custom = 1; + if ($context eq 'domain') { + @allroles = &roles_by_context($setting,$custom); + } else { + @allroles = &roles_by_context($context,$custom); + } + } else { + @allroles = ($env{'form.showrole'}); + } + foreach my $role (@allroles) { + if ($context eq 'domain') { + if ($setting eq 'domain') { + if (&Apache::lonnet::allowed('c'.$role, + $env{'request.role.domain'})) { + $canchange{$role} = 1; + } + } + } elsif ($context eq 'author') { + if (&Apache::lonnet::allowed('c'.$role, + $env{'user.domain'}.'/'.$env{'user.name'})) { + $canchange{$role} = 1; + } + } elsif ($context eq 'course') { + if (&Apache::lonnet::allowed('c'.$role,$env{'request.course.id'})) { + $canchange{$role} = 1; + } elsif ($env{'request.course.sec'} ne '') { + if (&Apache::lonnet::allowed('c'.$role,$env{'request.course.id'}.'/'.$env{'request.course.sec'})) { + $canchangesec{$role} = $env{'request.course.sec'}; + } + } + } + } } } $output .= "\n

\n". @@ -2242,18 +2276,38 @@ END $r->print("$rowcount\n"); $checkval; if ($actionselect) { - $checkval = $user; - if ($context eq 'course') { - if ($role eq 'st') { - $checkval .= ':st'; + my $showcheckbox; + if ($role =~ /^cr\//) { + $showcheckbox = $canchange{'cr'}; + } else { + $showcheckbox = $canchange{$role}; + } + if (!$showcheckbox) { + if ($context eq 'course') { + if ($canchangesec{$role} ne '') { + if ($canchangesec{$role} eq $in{'section'}) { + $showcheckbox = 1; + } + } } - $checkval .= ':'.$in{'section'}; - if ($role eq 'st') { - $checkval .= ':'.$in{'type'}.':'.$in{'lockedtype'}; + } + if ($showcheckbox) { + $checkval = $user; + if ($context eq 'course') { + if ($role eq 'st') { + $checkval .= ':st'; + } + $checkval .= ':'.$in{'section'}; + if ($role eq 'st') { + $checkval .= ':'.$in{'type'}.':'. + $in{'lockedtype'}; + } } + $r->print(''); + } else { + $r->print(' '); } - $r->print(''); } } foreach my $item (@cols) { @@ -2386,6 +2440,20 @@ sub select_actions { if ($context eq 'domain' && $setting eq 'course') { return; } + if ($context eq 'course') { + if ($env{'form.showrole'} ne 'Any') { + if (!&Apache::lonnet::allowed('c'.$env{'form.showrole'}, + $env{'request.course.id'})) { + if ($env{'request.course.sec'} eq '') { + return; + } else { + if (!&Apache::lonnet::allowed('c'.$env{'form.showrole'},$env{'request.course.id'}.'/'.$env{'request.course.sec'})) { + return; + } + } + } + } + } if ($statusmode eq 'Any') { $options .= ' '; @@ -2412,7 +2480,7 @@ sub select_actions { '; } if (($context eq 'course') || ($context eq 'domain' && $setting eq 'course')) { - if ($statusmode ne 'Expired') { + if (($statusmode ne 'Expired') && ($env{'request.course.sec'} eq '')) { $options .= ' '; $choices{'sections'} = 1; @@ -2519,7 +2587,8 @@ END if (($env{'form.bulkaction'} eq 'reenable') || ($env{'form.bulkaction'} eq 'activate') || ($env{'form.bulkaction'} eq 'chgdates')) { - $output .= <<"END"; + if ($env{'request.course.sec'} eq '') { + $output .= <<"END"; if (formname.makedatesdefault.checked == true) { opener.document.$callingform.makedatesdefault.value = 1; @@ -2529,6 +2598,7 @@ END } END + } } } $output .= <<"END"; @@ -2578,12 +2648,10 @@ END $date_items; if ($context eq 'course' && $env{'form.bulkaction'} eq 'chgsec') { my ($cnum,$cdom) = &get_course_identity(); - my %sections_count = - &Apache::loncommon::get_sections($cdom,$cnum); my $info; if ($env{'form.showrole'} eq 'st') { $output .= '

'.$lt{'fors'}.'

'; - } elsif ($env{'form.shorole'} eq 'Any') { + } elsif ($env{'form.showrole'} eq 'Any') { $output .= '

'.$lt{'fors'}.'

'. '

'.$lt{'forn'}.' '; $info = $lt{'reta'}; @@ -2604,7 +2672,6 @@ END } else { $info = ''; } - my $sections_select .= &course_sections(\%sections_count,$env{'form.showrole'}); my $rowtitle = &mt('New section to assign'); my $secbox = §ion_picker($cdom,$cnum,$env{'form.showrole'},$rowtitle,$permission,$context); $output .= $info.$secbox; @@ -2669,11 +2736,12 @@ sub results_header_row { $description .= &mt('All users in course with [_1] roles',$rolefilter); } } - if (exists($permission->{'view_section'})) { + my $viewablesec = &viewable_section($permission); + if ($viewablesec ne '') { if ($env{'form.showrole'} eq 'st') { - $description .= ' '.&mt('(section [_1] only)',$permission->{'view_section'}); - } elsif ($env{'form.showrole'} eq 'any') { - $description .= ' '.&mt('(section [_1] only)',$permission->{'view_section'}); + $description .= ' '.&mt('(section [_1] only)',$viewablesec); + } elsif ($env{'form.showrole'} ne 'cc') { + $description .= ' '.&mt('(only users affiliated with no section or section [_1])',$viewablesec); } } } elsif ($context eq 'author') {