--- loncom/interface/lonuserutils.pm 2007/12/22 04:23:05 1.25
+++ loncom/interface/lonuserutils.pm 2008/01/02 08:01:22 1.40
@@ -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.40 2008/01/02 08:01:22 raeburn Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -76,7 +76,7 @@ sub modifystudent {
}
}
if ($result eq '') {
- $result = 'Unable to find section for this student';
+ $result = &mt('Unable to find section for this student');
} else {
$result =~ s/(ok:)+/ok/g;
}
@@ -304,7 +304,7 @@ sub print_upload_manager_header {
my $javascript_validations =
&javascript_validations('upload',$krbdefdom,$password_choice,undef,
$env{'request.role.domain'},$context,
- $permission,$groupslist);
+ $groupslist);
my $checked=(($env{'form.noFirstLine'})?' checked="checked" ':'');
$r->print(&mt('Total number of records found in file: [_1].',$distotal).
"
\n");
@@ -332,18 +332,13 @@ sub print_upload_manager_header {
###############################################################
sub javascript_validations {
my ($mode,$krbdefdom,$curr_authtype,$curr_authfield,$domain,
- $context,$permission,$groupslist)=@_;
-
+ $context,$groupslist)=@_;
my %param = (
kerb_def_dom => $krbdefdom,
curr_authtype => $curr_authtype,
);
- if ($mode eq 'createuser') {
- $param{'formname'} = 'cu';
- } elsif ($mode eq 'upload') {
+ if ($mode eq 'upload') {
$param{'formname'} = 'studentform';
- } elsif ($mode eq 'singlestudent') {
- $param{'formname'} = 'cu';
} elsif ($mode eq 'createcourse') {
$param{'formname'} = 'ccrs';
} elsif ($mode eq 'modifycourse') {
@@ -367,7 +362,7 @@ sub javascript_validations {
}
} elsif ($context eq 'domain') {
$setsection_call = 'setCourse()';
- $setsections_js = &dc_setcourse_js($param{'formname'},$mode);
+ $setsections_js = &dc_setcourse_js($param{'formname'},$mode,$context);
}
$finish = " var checkSec = $setsection_call\n".
" if (checkSec == 'ok') {\n".
@@ -389,8 +384,7 @@ sub javascript_validations {
role => 'The optional role field was not specified.',
continue => 'Continue adding users?',
);
-
- my $function_name =(<
'.&mt('Students selected from this list can be dropped.').'
'.&list_submit_button(&mt('Update Display')). - "\n
\n"); + "\n".''.&mt('Warning: data retrieval for multiple courses can take considerable time, as this operation is not currently optimized.').''."\n"); if ($env{'form.coursepick'}) { $r->print('\n". @@ -2124,6 +2257,17 @@ END $index{$idx} = $i++; } my $usercount = 0; + my ($secfilter,$grpfilter); + if ($context eq 'course') { + $secfilter = $env{'form.secfilter'}; + $grpfilter = $env{'form.grpfilter'}; + if ($secfilter eq '') { + $secfilter = 'all'; + } + if ($grpfilter eq '') { + $grpfilter = 'all'; + } + } # Get groups, role, permanent e-mail so we can sort on them if # necessary. foreach my $user (keys(%{$userlist})) { @@ -2161,11 +2305,40 @@ END delete($userlist->{$user}); next; } - if (ref($classgroups) eq 'HASH') { - $groups = $classgroups->{$user}; - } - if (ref($groups->{active}) eq 'HASH') { - $userlist->{$user}->[$index{'groups'}] = join(', ',keys(%{$groups->{'active'}})); + if ($context eq 'course') { + my @ac_groups; + if (ref($classgroups) eq 'HASH') { + $groups = $classgroups->{$user}; + } + if (ref($groups->{'active'}) eq 'HASH') { + @ac_groups = keys(%{$groups->{'active'}}); + $userlist->{$user}->[$index{'groups'}] = join(', ',@ac_groups); + } + if ($mode ne 'autoenroll') { + my $section = $userlist->{$user}->[$index{'section'}]; + if ($secfilter eq 'none') { + if ($section ne '') { + delete($userlist->{$user}); + next; + } + } elsif ($secfilter ne 'all') { + if ($section ne $secfilter) { + delete($userlist->{$user}); + next; + } + } + if ($grpfilter eq 'none') { + if (@ac_groups > 0) { + delete($userlist->{$user}); + next; + } + } elsif ($grpfilter ne 'all') { + if (!grep(/^\Q$grpfilter\E$/,@ac_groups)) { + delete($userlist->{$user}); + next; + } + } + } } my %emails = &Apache::loncommon::getemails($uname,$udom); if ($emails{'permanentemail'} =~ /\S/) { @@ -2240,20 +2413,39 @@ END $r->print("
'.$lt{'fors'}.'
'. ''.$lt{'forn'}.' ';
$info = $lt{'reta'};
@@ -2604,7 +2818,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,13 +2882,48 @@ sub results_header_row {
$description .= &mt('All users in course with [_1] roles',$rolefilter);
}
}
- if (exists($permission->{'view_section'})) {
+ my $constraint;
+ 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'});
+ $constraint = &mt('only users in section "[_1]"',$viewablesec);
+ } elsif ($env{'form.showrole'} ne 'cc') {
+ $constraint = &mt('only users affiliated with no section or section "[_1]"',$viewablesec);
+ }
+ if (($env{'form.grpfilter'} ne 'all') && ($env{'form.grpfilter'} ne '')) {
+ if ($env{'form.grpfilter'} eq 'none') {
+ $constraint .= &mt(' and not in any group');
+ } else {
+ $constraint .= &mt(' and members of group: "[_1]"',$env{'form.grpfilter'});
+ }
+ }
+ } else {
+ if (($env{'form.secfilter'} ne 'all') && ($env{'form.secfilter'} ne '')) {
+ if ($env{'form.secfilter'} eq 'none') {
+ $constraint = &mt('only users affiliated with no section');
+ } else {
+ $constraint = &mt('only users affiliated with section "[_1]"',$env{'form.secfilter'});
+ }
+ }
+ if (($env{'form.grpfilter'} ne 'all') && ($env{'form.grpfilter'} ne '')) {
+ if ($env{'form.grpfilter'} eq 'none') {
+ if ($constraint eq '') {
+ $constraint = &mt('only users not in any group');
+ } else {
+ $constraint .= &mt(' and also not in any group');
+ }
+ } else {
+ if ($constraint eq '') {
+ $constraint = &mt('only members of group: "[_1]"',$env{'form.grpfilter'});
+ } else {
+ $constraint .= &mt(' and also members of group: "[_1]"'.$env{'form.grpfilter'});
+ }
+ }
}
}
+ if ($constraint ne '') {
+ $description .= ' ('.$constraint.')';
+ }
} elsif ($context eq 'author') {
$description =
&mt('Author space for [_1]',
@@ -2773,8 +3021,8 @@ sub viewable_section {
#################################################
#################################################
sub show_drop_list {
- my ($r,$classlist,$keylist,$nosort,$permission)=@_;
- my $cid=$env{'request.course.id'};
+ my ($r,$classlist,$nosort,$permission) = @_;
+ my $cid = $env{'request.course.id'};
my ($cnum,$cdom) = &get_course_identity($cid);
if (! exists($env{'form.sortby'})) {
&Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'},
@@ -2784,9 +3032,6 @@ sub show_drop_list {
if ($sortby !~ /^(username|domain|section|groups|fullname|id|start|end)$/) {
$sortby = 'username';
}
- my ($classgroups) = &Apache::loncoursedata::get_group_memberships(
- $classlist,$keylist,$cdom,$cnum);
- #
my $action = "drop";
my $check_uncheck_js = &Apache::loncommon::check_uncheck_jscript();
$r->print(<
+
$username
$domain
$id
$name
$section
- $start
+ $start $startitem
$end
$active_groups
END
@@ -2917,7 +3174,7 @@ END
}
$r->print(&Apache::loncommon::end_data_table().'
');
%lt=&Apache::lonlocal::texthash(
- 'dp' => "Expire Users' Roles",
+ 'dp' => "Drop Students",
'ca' => "check all",
'ua' => "uncheck all",
);
@@ -2974,6 +3231,10 @@ sub upfile_drop_add {
$fields{$env{'form.f'.$i}}=$keyfields[$i];
}
}
+ if ($env{'form.fullup'} ne 'yes') {
+ $r->print('
\n".&mt('Processed [_1] user(s).',$counts{'user'}). + $r->print("
\n\n".&mt('Processed [quant,_1,user].',$counts{'user'}). "
\n"); if ($counts{'role'} > 0) { $r->print("\n". - &mt('Roles added for [_1] users. If user is active, the new role will be available when the user next logs in to LON-CAPA.',$counts{'role'})."
\n"); + &mt('Roles added for [quant,_1,user].',$counts{'role'}).' '.&mt('If a user is currently logged-in to LON-CAPA, any new roles which are active will be available when the user next logs in.')."\n"); + } else { + $r->print(''.&mt('No roles added').'
'); } if ($counts{'auth'} > 0) { $r->print("\n". @@ -3293,23 +3717,22 @@ sub upfile_drop_add { $counts{'auth'})."
\n"); } $r->print(&print_namespacing_alerts($domain,\%alerts,\%curr_rules)); - $r->print(''); ##################################### - # Drop students # + # Display list of students to drop # ##################################### if ($env{'form.fullup'} eq 'yes') { - $r->print(''.&mt("$result_text{'ok'}{$choice} role(s) for [quant,_1,user,users,users].",$count).'
'); + $r->print(''."\n"); } sub classlist_drop { - my ($scope,$uname,$udom,$now,$action) = @_; + my ($scope,$uname,$udom,$now) = @_; my ($cdom,$cnum) = ($scope=~m{^/($match_domain)/($match_courseid)}); - my $cid=$cdom.'_'.$cnum; - my $user = $uname.':'.$udom; - if ($action eq 'drop') { + if (&Apache::lonnet::is_course($cdom,$cnum)) { + my $user = $uname.':'.$udom; if (!&active_student_roles($cnum,$cdom,$uname,$udom)) { my $result = &Apache::lonnet::cput('classlist', - { $user => $now }, - $env{'course.'.$cid.'.domain'}, - $env{'course.'.$cid.'.num'}); + { $user => $now },$cdom,$cnum); return &mt('Drop from classlist: [_1]', ''.$result.'').'