--- loncom/interface/lonuserutils.pm 2007/12/05 16:49:55 1.8
+++ loncom/interface/lonuserutils.pm 2007/12/12 19:47:56 1.14
@@ -1,7 +1,7 @@
# The LearningOnline Network with CAPA
# Utility functions for managing LON-CAPA user accounts
#
-# $Id: lonuserutils.pm,v 1.8 2007/12/05 16:49:55 raeburn Exp $
+# $Id: lonuserutils.pm,v 1.14 2007/12/12 19:47:56 raeburn Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -96,7 +96,7 @@ sub modifyuserrole {
}
} elsif ($context eq 'domain') {
$scope = '/'.$env{'request.role.domain'}.'/';
- } elsif ($context eq 'construction_space') {
+ } elsif ($context eq 'author') {
$scope = '/'.$env{'user.domain'}.'/'.$env{'user.name'};
}
if ($context eq 'domain') {
@@ -136,22 +136,30 @@ sub modifyuserrole {
sub propagate_id_change {
my ($uname,$udom,$user) = @_;
- my (@types,@roles,@cdoms);
+ my (@types,@roles);
@types = ('active','future');
@roles = ('st');
my $idresult;
my %roleshash = &Apache::lonnet::get_my_roles($uname,
- $udom,'userroles',\@types,\@roles,\@cdoms);
+ $udom,'userroles',\@types,\@roles);
+ my %args = (
+ one_time => 1,
+ );
foreach my $item (keys(%roleshash)) {
my ($cnum,$cdom,$role) = split(/:/,$item);
my ($start,$end) = split(/:/,$roleshash{$item});
if (&Apache::lonnet::is_course($cdom,$cnum)) {
- my %userupdate;
- my $result = &update_classlist($cdom,$cnum,$udom,$uname,\%userupdate);
+ my $result = &update_classlist($cdom,$cnum,$udom,$uname,$user);
+ my %coursehash =
+ &Apache::lonnet::coursedescription($cdom.'_'.$cnum,\%args);
+ my $cdesc = $coursehash{'description'};
+ if ($cdesc eq '') {
+ $cdesc = $cdom.'_'.$cnum;
+ }
if ($result eq 'ok') {
- $idresult .= "Classlist change: $uname:$udom - class -> $cnum:$cdom\n";
+ $idresult .= &mt('Classlist update for "[_1]" in "[_2]".',$uname.':'.$udom,$cdesc).'
'."\n";
} else {
- $idresult .= "Error - $result -during classlist update for $uname:$udom in $cnum:$cdom\n";
+ $idresult .= &mt('Error: "[_1]" during classlist update for "[_2]" in "[_3]".',$result,$uname.':'.$udom,$cdesc).'
'."\n";
}
}
}
@@ -203,7 +211,7 @@ sub domain_roles_select {
# domain context
#
# Role types
- my @roletypes = ('domain','construction_space','course');
+ my @roletypes = ('domain','author','course');
my %lt = &role_type_names();
#
# build up the menu information to be passed to
@@ -225,7 +233,7 @@ sub domain_roles_select {
my @roles;
if ($roletype eq 'domain') {
@roles = &domain_roles();
- } elsif ($roletype eq 'construction_space') {
+ } elsif ($roletype eq 'author') {
@roles = &construction_space_roles();
} else {
@roles = &course_roles('domain');
@@ -246,7 +254,7 @@ sub domain_roles_select {
}
my $result = &Apache::loncommon::linked_select_forms
('studentform',(' 'x3).&mt('Role: '),$env{'form.roletype'},
- 'roletype','showrole',\%select_menus,['domain','construction_space','course']);
+ 'roletype','showrole',\%select_menus,['domain','author','course']);
return $result;
}
@@ -651,7 +659,7 @@ sub print_upload_manager_footer {
my $formname;
if ($context eq 'course') {
$formname = 'document.studentform';
- } elsif ($context eq 'construction_space') {
+ } elsif ($context eq 'author') {
$formname = 'document.studentform';
} elsif ($context eq 'domain') {
$formname = 'document.studentform';
@@ -702,7 +710,7 @@ sub print_upload_manager_footer {
$Str .= '
'.&mt('role').': '.
@@ -755,7 +763,7 @@ sub forceid_change {
if ($context eq 'domain') {
$output .= ''."\n";
}
return $output;
@@ -846,7 +854,7 @@ sub print_upload_manager_form {
}
sub setup_date_selectors {
- my ($starttime,$endtime,$mode) = @_;
+ my ($starttime,$endtime,$mode,$nolink) = @_;
if (! defined($starttime)) {
$starttime = time;
unless ($mode eq 'create_enrolldates' || $mode eq 'create_defaultdates') {
@@ -867,12 +875,15 @@ sub setup_date_selectors {
}
}
}
- my $startdateform = &Apache::lonhtmlcommon::date_setter('studentform',
- 'startdate',
- $starttime);
- my $enddateform = &Apache::lonhtmlcommon::date_setter('studentform',
- 'enddate',
- $endtime);
+
+ my $startdateform =
+ &Apache::lonhtmlcommon::date_setter('studentform','startdate',$starttime,
+ undef,undef,undef,undef,undef,undef,undef,$nolink);
+
+ my $enddateform =
+ &Apache::lonhtmlcommon::date_setter('studentform','enddate',$endtime,
+ undef,undef,undef,undef,undef,undef,undef,$nolink);
+
if ($mode eq 'create_enrolldates') {
$startdateform = &Apache::lonhtmlcommon::date_setter('ccrs',
'startenroll',
@@ -903,35 +914,44 @@ sub get_dates_from_form {
}
sub date_setting_table {
- my ($starttime,$endtime,$mode) = @_;
- my ($startform,$endform)=&setup_date_selectors($starttime,$endtime,$mode);
+ my ($starttime,$endtime,$mode,$bulkaction) = @_;
+ my $nolink;
+ if ($bulkaction) {
+ $nolink = 1;
+ }
+ my ($startform,$endform) =
+ &setup_date_selectors($starttime,$endtime,$mode,$nolink);
my $dateDefault;
if ($mode eq 'create_enrolldates' || $mode eq 'create_defaultdates') {
$dateDefault = ' ';
- } elsif ($mode ne 'construction_space' && $mode ne 'domain') {
- $dateDefault = ' '; + my $result = &Apache::lonhtmlcommon::start_pick_box()."\n"; + $result .= &Apache::lonhtmlcommon::row_title(&mt('Starting Date'), + 'LC_oddrow_value')."\n". + $startform."\n". + &Apache::lonhtmlcommon::row_closure(1). + &Apache::lonhtmlcommon::row_title(&mt('Ending Date'), + 'LC_oddrow_value')."\n". + $endform.' '.$perpetual. + &Apache::lonhtmlcommon::row_closure(1). + &Apache::lonhtmlcommon::end_pick_box().' '; if ($dateDefault) { $result .= $dateDefault.' '."\n"; } @@ -948,7 +968,8 @@ sub make_dates_default { {'default_enrollment_start_date'=>$startdate, 'default_enrollment_end_date' =>$enddate},$dom,$crs); if ($put_result eq 'ok') { - $result .= "Set default start and end dates for course "; + $result .= &mt('Set default start and end dates for course'). + ' '."\n"; # # Refresh the course environment &Apache::lonnet::coursedescription($env{'request.course.id'}, @@ -965,7 +986,7 @@ sub default_role_selector { my ($context,$checkpriv) = @_; my %customroles; my ($options,$coursepick,$cb_jscript); - if ($context ne 'construction_space') { + if ($context ne 'author') { %customroles = &my_custom_roles(); } @@ -979,7 +1000,7 @@ sub default_role_selector { ' '."\n"; if ($context eq 'course') { $options .= &default_course_roles($context,$checkpriv,%customroles); - } elsif ($context eq 'construction_space') { + } elsif ($context eq 'author') { my @roles = &construction_space_roles($checkpriv); foreach my $role (@roles) { my $plrole=&Apache::lonnet::plaintext($role); @@ -1108,7 +1129,7 @@ sub course_roles { sub curr_role_permissions { my ($context,$setting,$checkpriv) = @_; my @roles; - if ($context eq 'construction_space') { + if ($context eq 'author') { @roles = &construction_space_roles($checkpriv); } elsif ($context eq 'domain') { if ($setting eq 'course') { @@ -1149,7 +1170,11 @@ sub print_userlist { ($env{'form.Status'}); if ($env{'form.showrole'} eq '') { - $env{'form.showrole'} = 'Any'; + if ($context eq 'course') { + $env{'form.showrole'} = 'st'; + } else { + $env{'form.showrole'} = 'Any'; + } } if (! defined($env{'form.output'}) || $env{'form.output'} !~ /^(csv|excel|html)$/ ) { @@ -1240,8 +1265,12 @@ sub print_userlist { &Apache::lonhtmlcommon::end_pick_box().''. ' '.&list_submit_button(&mt('Update Display')). "\n \n"); + if ($env{'form.coursepick'}) { + $r->print(''.&mt('Searching').' ... '); + } + } else { + $r->print(' '.&mt('Searching').' ... '); } - $r->print(' '.&mt('Searching').' ... '); $r->rflush(); if ($context eq 'course') { my $classlist = &Apache::loncoursedata::get_classlist(); @@ -1269,33 +1298,33 @@ sub print_userlist { my %advrolehash = &Apache::lonnet::get_my_roles($cnum,$cdom,undef, \@statuses,$showroles); &gather_userinfo($context,$format,\%userlist,$indexhash,\%userinfo, - \%advrolehash); + \%advrolehash,$permission); } else { my (%cstr_roles,%dom_roles); - if ($context eq 'construction_space') { + if ($context eq 'author') { # List co-authors and assistant co-authors my @possroles = ('ca','aa'); %cstr_roles = &Apache::lonnet::get_my_roles(undef,undef,undef, \@statuses,\@possroles); &gather_userinfo($context,$format,\%userlist,$indexhash,\%userinfo, - \%cstr_roles); + \%cstr_roles,$permission); } elsif ($context eq 'domain') { if ($env{'form.roletype'} eq 'domain') { %dom_roles = &Apache::lonnet::get_domain_roles($env{'request.role.domain'}); foreach my $key (keys(%dom_roles)) { if (ref($dom_roles{$key}) eq 'HASH') { &gather_userinfo($context,$format,\%userlist,$indexhash, - \%userinfo,$dom_roles{$key}); + \%userinfo,$dom_roles{$key},$permission); } } - } elsif ($env{'form.roletype'} eq 'construction_space') { + } elsif ($env{'form.roletype'} eq 'author') { my %dom_roles = &Apache::lonnet::get_domain_roles($env{'request.role.domain'},['au']); my %coauthors; foreach my $key (keys(%dom_roles)) { if (ref($dom_roles{$key}) eq 'HASH') { if ($env{'form.showrole'} eq 'au') { &gather_userinfo($context,$format,\%userlist,$indexhash, - \%userinfo,$dom_roles{$key}); + \%userinfo,$dom_roles{$key},$permission); } else { my @possroles; if ($env{'form.showrole'} eq 'Any') { @@ -1311,7 +1340,7 @@ sub print_userlist { $authordom,undef,\@statuses,\@possroles); } &gather_userinfo($context,$format,\%userlist, - $indexhash,\%userinfo,\%coauthors); + $indexhash,\%userinfo,\%coauthors,$permission); } } } @@ -1324,6 +1353,7 @@ sub print_userlist { &Apache::lonnet::coursedescription($cid,{'one_time' => 1}); my $cdom = $coursehash{'domain'}; my $cnum = $coursehash{'num'}; + next if ($cnum eq '' || $cdom eq ''); my $cdesc = $coursehash{'description'}; my (@roles,@sections,%access,%users,%userdata, %statushash); @@ -1356,20 +1386,22 @@ sub print_userlist { } } &gather_userinfo($context,$format,\%userlist,$indexhash, - \%userinfo,\%allusers); + \%userinfo,\%allusers,$permission); } else { + $r->print(''); return; } } } } if (keys(%userlist) == 0) { - if ($context eq 'construction_space') { + if ($context eq 'author') { $r->print(&mt('There are no co-authors to display.')."\n"); } elsif ($context eq 'domain') { if ($env{'form.roletype'} eq 'domain') { $r->print(&mt('There are no users with domain roles to display.')."\n"); - } elsif ($env{'form.roletype'} eq 'construction_space') { + } elsif ($env{'form.roletype'} eq 'author') { $r->print(&mt('There are no authors or co-authors to display.')."\n"); } elsif ($env{'form.roletype'} eq 'course') { $r->print(&mt('There are no course users to display')."\n"); @@ -1381,30 +1413,31 @@ sub print_userlist { # Print out the available choices my $usercount; if ($env{'form.action'} eq 'modifystudent') { - ($usercount) = &show_users_list($r,$context,'view','modify', + ($usercount) = &show_users_list($r,$context,'view',$permission, $env{'form.Status'},\%userlist,$keylist); } else { ($usercount) = &show_users_list($r,$context,$env{'form.output'}, - 'aboutme',$env{'form.Status'},\%userlist,$keylist); + $permission,$env{'form.Status'},\%userlist,$keylist); } if (!$usercount) { $r->print(' '.&mt('There are no users matching the search criteria.')); } } - $r->print(''); + $r->print(''); } sub list_submit_button { my ($text) = @_; - return ''; + return ''; } sub gather_userinfo { - my ($context,$format,$userlist,$indexhash,$userinfo,$rolehash) = @_; + my ($context,$format,$userlist,$indexhash,$userinfo,$rolehash,$permission) = @_; foreach my $item (keys(%{$rolehash})) { @{$userlist->{$item}} = (); my %userdata; - if ($context eq 'construction_space' || $context eq 'course') { + if ($context eq 'author' || $context eq 'course') { ($userdata{'username'},$userdata{'domain'},$userdata{'role'}) = split(/:/,$item); ($userdata{'start'},$userdata{'end'})=split(/:/,$rolehash->{$item}); @@ -1415,7 +1448,7 @@ sub gather_userinfo { split(/:/,$item); ($userdata{'end'},$userdata{'start'})=split(/:/,$rolehash->{$item}); &build_user_record(\%userdata,$userinfo,$indexhash,$item,$userlist); - } elsif ($env{'form.roletype'} eq 'construction_space') { + } elsif ($env{'form.roletype'} eq 'author') { if (ref($rolehash->{$item}) eq 'HASH') { $userdata{'extent'} = $item; foreach my $key (keys(%{$rolehash->{$item}})) { @@ -1430,6 +1463,7 @@ sub gather_userinfo { ($userdata{'username'},$userdata{'domain'},$userdata{'role'}) = split(/:/,$item); if (ref($rolehash->{$item}) eq 'HASH') { + my $numcids = keys(%{$rolehash->{$item}}); foreach my $cid (sort(keys(%{$rolehash->{$item}}))) { if (ref($rolehash->{$item}{$cid}) eq 'HASH') { my $spanstart = ''; @@ -1437,6 +1471,13 @@ sub gather_userinfo { my $space = ', '; if ($format eq 'html' || $format eq 'view') { $spanstart = ''; + if ($permission->{'cusr'}) { + if ($numcids > 1) { + $spanstart .= ''; + } else { + $spanstart .= ''; + } + } $spanend = ' '; $space = ', '; } @@ -1459,6 +1500,7 @@ sub gather_userinfo { sub build_user_record { my ($userdata,$userinfo,$indexhash,$record_key,$userlist) = @_; + next if ($userdata->{'start'} eq '-1' && $userdata->{'end'} eq '-1'); &process_date_info($userdata); my $username = $userdata->{'username'}; my $domain = $userdata->{'domain'}; @@ -1696,7 +1738,7 @@ sub process_date_info { } sub show_users_list { - my ($r,$context,$mode,$linkto,$statusmode,$userlist,$keylist)=@_; + my ($r,$context,$mode,$permission,$statusmode,$userlist,$keylist)=@_; # # Variables for excel output my ($excel_workbook, $excel_sheet, $excel_filename,$row,$format); @@ -1714,6 +1756,7 @@ sub show_users_list { if (!grep(/^\Q$sortby\E$/,@sortable)) { $sortby = 'username'; } + my $setting = $env{'form.roleaction'}; my ($cid,$cdom,$cnum,$classgroups,$displayphotos,$displayclickers); if ($context eq 'course') { $cid=$env{'request.course.id'}; @@ -1748,7 +1791,69 @@ function photowindow(photolink) { END } unless ($mode eq 'autoenroll') { + my $check_uncheck_js = &Apache::loncommon::check_uncheck_jscript(); + my $alert = &mt("You must select at least one user by checking a user's 'Select' checkbox"); + my $singconfirm = &mt(' for a single user'); + my $multconfirm = &mt(' for multiple users'); + my $date_sec_selector = &date_section_javascript($context,$setting,$statusmode); $r->print(< '); - my $output; + my ($output,$actionselect); if ($mode eq 'html' || $mode eq 'view') { + if ($permission->{'cusr'}) { + $actionselect = &select_actions($context,$setting,$statusmode); + } $r->print(< ';
+ my @linkdests = ('aboutme');
+ if ($permission->{'cusr'}) {
+ push (@linkdests,'modify');
+ $output .= ''.$lt{'link'}.': ';
+ my $usernamelink = $env{'form.usernamelink'};
+ if ($usernamelink eq '') {
+ $usernamelink = 'aboutme';
+ }
+ foreach my $item (@linkdests) {
+ my $checkedstr = '';
+ if ($item eq $usernamelink) {
+ $checkedstr = ' checked="checked" ';
+ }
+ $output .= ' + END - if ($linkto eq 'aboutme') { - $output = &mt("Select a user name to view the user's personal page."); - } elsif ($linkto eq 'modify') { - $output = &mt("Select a user name to modify the user's information"); + } } $output .= "\n \n". &Apache::loncommon::start_data_table(). @@ -1829,9 +1971,10 @@ END $lt{'type'} |
";
} else {
- $output .= "
-Count |
- ";
+ $output .= "\n".''.&mt('Count').' | '."\n";
+ if ($actionselect) {
+ $output .= ''.&mt('Select').' | '."\n";
+ }
}
foreach my $item (@cols) {
$output .= "$lt{$item} | \n";
@@ -1916,6 +2059,10 @@ END
# Get groups, role, permanent e-mail so we can sort on them if
# necessary.
foreach my $user (keys(%{$userlist})) {
+ if ($context eq 'domain' && $user eq $env{'request.role.domain'}.'-domainconfig:'.$env{'request.role.domain'}) {
+ delete($userlist->{$user});
+ next;
+ }
my ($uname,$udom,$role,$groups,$email);
if (($statusmode ne 'Any') &&
($userlist->{$user}->[$index{'status'}] ne $statusmode)) {
@@ -1925,8 +2072,12 @@ END
if ($context eq 'domain') {
if ($env{'form.roletype'} eq 'domain') {
($role,$uname,$udom) = split(/:/,$user);
-
- } elsif ($env{'form.roletype'} eq 'construction_space') {
+ if (($uname eq $env{'request.role.domain'}.'-domainconfig') &&
+ ($udom eq $env{'request.role.domain'})) {
+ delete($userlist->{$user});
+ next;
+ }
+ } elsif ($env{'form.roletype'} eq 'author') {
($uname,$udom,$role) = split(/:/,$user,-1);
} elsif ($env{'form.roletype'} eq 'course') {
($uname,$udom,$role) = split(/:/,$user);
@@ -1986,6 +2137,7 @@ END
foreach my $item (@{$keylist}) {
$in{$item} = $sdata->[$index{$item}];
}
+ my $role = $in{'role'};
$in{'role'}=&Apache::lonnet::plaintext($sdata->[$index{'role'}]);
if (! defined($in{'start'}) || $in{'start'} == 0) {
$in{'start'} = &mt('none');
@@ -2000,22 +2152,29 @@ END
if ($mode eq 'view' || $mode eq 'html' || $mode eq 'autoenroll') {
$r->print(&Apache::loncommon::start_data_table_row());
$r->print("$rowcount | \n");
- if ($linkto eq 'aboutme') {
- $in{'username'} =
- &Apache::loncommon::aboutmewrapper($in{'username'},
- $in{'username'},
- $in{'domain'});
- } elsif ($linkto eq 'modify') {
- $in{'username'} = ''.
- $in{'username'}."\n";
+ my $checkval;
+ if ($mode ne 'autoenroll' && $actionselect) {
+ $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('');
}
foreach my $item (@cols) {
- $r->print(' | '.$in{$item}.' | '."\n");
+ if ($item eq 'username') {
+ $r->print(''.&print_username_link($permission,\%in).' | ');
+ } elsif (($item eq 'start' || $item eq 'end') && ($mode ne 'autoeroll') && ($actionselect)) {
+ $r->print(''.$in{$item}.' | '."\n");
+ } else {
+ $r->print(''.$in{$item}.' | '."\n");
+ }
}
if ($context eq 'course') {
if ($env{'form.showrole'} eq 'st' || $env{'form.showrole'} eq 'Any') {
@@ -2096,15 +2255,280 @@ END
}
}
+sub print_username_link {
+ my ($permission,$in) = @_;
+ my $output;
+ if (!$permission->{'cusr'}) {
+ $output = &Apache::loncommon::aboutmewrapper($in->{'username'},
+ $in->{'username'},
+ $in->{'domain'});
+ } else {
+ $output = '{'username'}','$in->{'domain'}'".')" />'.
+ $in->{'username'}.'';
+ }
+ return $output;
+}
+
sub role_type_names {
my %lt = &Apache::lonlocal::texthash (
- 'domain' => 'Domain Roles',
- 'construction_space' => 'Co-Author Roles',
- 'course' => 'Course Roles',
+ 'domain' => 'Domain Roles',
+ 'author' => 'Co-Author Roles',
+ 'course' => 'Course Roles',
);
return %lt;
}
+sub select_actions {
+ my ($context,$setting,$statusmode) = @_;
+ my %lt = &Apache::lonlocal::texthash(
+ revoke => "Revoke user roles",
+ delete => "Delete user roles",
+ reenable => "Re-enable expired user roles",
+ activate => "Make future user roles active now",
+ chgdates => "Change starting/ending dates",
+ chgsec => "Change section associated with user roles",
+ );
+ my ($output,$options,%choices);
+ if ($statusmode eq 'Any') {
+ $options .= '
+';
+ $choices{'dates'} = 1;
+ } else {
+ if ($statusmode eq 'Future') {
+ $options .= '
+';
+ $choices{'dates'} = 1;
+ } elsif ($statusmode eq 'Expired') {
+ $options .= '
+';
+ $choices{'dates'} = 1;
+ }
+ if ($statusmode eq 'Active' || $statusmode eq 'Future') {
+ $options .= '
+
+';
+ $choices{'dates'} = 1;
+ }
+ }
+ if ($context eq 'domain') {
+ $options .= '
+';
+ }
+ if (($context eq 'course') || ($context eq 'domain' && $setting eq 'course')) {
+ if ($statusmode ne 'Expired') {
+ $options .= '
+';
+ $choices{'sections'} = 1;
+ }
+ }
+ if ($options) {
+ $output = ''."\n".
+ ''."\n".$options."\n".'';
+ if ($choices{'dates'}) {
+ $output .=
+ ''."\n".
+ ''."\n".
+ ''."\n".
+ ''."\n".
+ ''."\n".
+ ''."\n".
+ ''."\n".
+ ''."\n".
+ ''."\n".
+ ''."\n".
+ ''."\n".
+ ''."\n";
+ if ($context eq 'course') {
+ $output .= ''."\n";
+ }
+ }
+ if ($choices{'sections'}) {
+ $output .= ''."\n".
+ ''."\n";
+ }
+ }
+ return $output;
+}
+
+sub date_section_javascript {
+ my ($context,$setting) = @_;
+ my $title;
+ if (($context eq 'course') || ($context eq 'domain' && $setting eq 'course')) {
+ $title = &mt('Date and Section selector');
+ } else {
+ $title = &mt('Date selector');
+ }
+ my $output = '
+
+ENDTWO
+ return $output;
+}
+
+sub date_section_selector {
+ my ($context) = @_;
+ my $callingform = $env{'form.callingform'};
+ my $formname = 'dateselect';
+ my $groupslist = &get_groupslist();
+ my $sec_js = &setsections_javascript($formname,$groupslist);
+ my $output = <<"END";
+
+';
+ my %lt = &Apache::lonlocal::texthash (
+ chac => 'Access dates to apply for selected users',
+ chse => 'Changes in section affiliation to apply to selected users',
+ fors => 'For student roles changing the section, will result in a section switch as students may only be in one section of a course at a time.',
+ forn => 'For a role in a course that is not a student role, a user may have roles in more than one section of a course at a time.',
+ reta => "Retain each user's current section affiliations?",
+ dnap => '(Does not apply to student roles).',
+ );
+ my ($date_items,$headertext);
+ if ($env{'form.bulkaction'} eq 'chgsec') {
+ $headertext = $lt{'chse'};
+ } else {
+ $headertext = $lt{'chac'};
+ my $starttime;
+ if (($env{'form.bulkaction'} eq 'activate') ||
+ ($env{'form.bulkaction'} eq 'reenable')) {
+ $starttime = time;
+ }
+ $date_items = &date_setting_table($starttime,undef,$context,
+ $env{'form.bulkaction'});
+ }
+ $output .= ''.$headertext.''. + ''; + return $output; +} + sub results_header_row { my ($rolefilter,$statusmode,$context) = @_; my ($description,$showfilter); @@ -2115,8 +2539,7 @@ sub results_header_row { $description = &mt('Course - ').$env{'course.'.$env{'request.course.id'}.'.description'}.': '; if ($statusmode eq 'Expired') { $description .= &mt('Users in course with expired [_1] roles',$showfilter); - } - if ($statusmode eq 'Future') { + } elsif ($statusmode eq 'Future') { $description .= &mt('Users in course with future [_1] roles',$showfilter); } elsif ($statusmode eq 'Active') { $description .= &mt('Users in course with active [_1] roles',$showfilter); @@ -2127,8 +2550,10 @@ sub results_header_row { $description .= &mt('All users in course with [_1] roles',$rolefilter); } } - } elsif ($context eq 'construction_space') { - $description = &mt('Author space for [_1].').' '; + } elsif ($context eq 'author') { + $description = + &mt('Author space for [_1]', + &Apache::loncommon::plainname($env{'user.name'},$env{'user.domain'})).': '; if ($statusmode eq 'Expired') { $description .= &mt('Co-authors with expired [_1] roles',$showfilter); } elsif ($statusmode eq 'Future') { @@ -2159,7 +2584,7 @@ sub results_header_row { $description .= &mt('All users in domain with [_1] roles',$rolefilter); } } - } elsif ($env{'form.roletype'} eq 'construction_space') { + } elsif ($env{'form.roletype'} eq 'author') { if ($statusmode eq 'Expired') { $description .= &mt('Co-authors in domain with expired [_1] roles',$showfilter); } elsif ($statusmode eq 'Future') { @@ -2485,7 +2910,7 @@ sub upfile_drop_add { } elsif ($setting eq 'course') { $defaultrole = $env{'form.courserole'}; } - } elsif ($context eq 'construction_space') { + } elsif ($context eq 'author') { $defaultrole = $env{'form.defaultrole'}; } if ($context eq 'domain' && $setting eq 'course') { @@ -2508,7 +2933,7 @@ sub upfile_drop_add { ####################################### if ($context eq 'course') { $r->print(''.&mt('Enrolling Users')."\n\n"); - } elsif ($context eq 'construction_space') { + } elsif ($context eq 'author') { $r->print(' '.&mt('Updating Co-authors')."\n\n"); } else { $r->print(' '.&mt('Adding/Modifying Users')."\n\n");
@@ -2648,6 +3073,8 @@ sub upfile_drop_add {
next if ($alerts{'username'}{$domain}{$username});
}
}
+ } else {
+# FIXME check if user info can be updated.
}
if ($id ne '') {
if (!$newuser) {
@@ -2700,7 +3127,7 @@ sub upfile_drop_add {
$r->print(' '); + $r->print(&mt("$result_text{'ok'}{$choice} role of '[_1]' in [_2] for [_3]", + $plrole,$scope,$uname.':'.$udom).' '); $count++; } else { $r->print( - &mt('Error dropping [_1]:[_2]',$uname.'@'.$udom,$result). - ' '); + &mt("Error $result_text{'error'}{$choice} [_1] in [_2] for [_3]:[_4]", + $plrole,$scope,$uname.':'.$udom,$result).' '); + } + } + $r->print(' '.&mt("$result_text{'ok'}{$choice} role(s) for [quant,_1,user,users,users].",$count).' '); + if ($count > 0) { + if ($choice eq 'revoke') { + $r->print(''.&mt('Re-enabling will re-activate data for the role. ')); + } + # Flush the course logs so reverse user roles immediately updated + &Apache::lonnet::flushcourselogs(); + } + if ($env{'form.makedatesdefault'}) { + if ($choice eq 'chgdates' || $choice eq 'reenable' || $choice eq 'activate') { + $r->print(&make_dates_default($startdate,$enddate)); } } - $r->print(''.&mt('Dropped [_1] user(s).',$count).' '); - $r->print(''.&mt('Re-enrollment will re-activate data.')) if ($count); } sub classlist_drop { @@ -2904,7 +3507,7 @@ sub section_check_js { my $groupslist= &get_groupslist(); return <<"END"; function validate(caller) { - var groups = new Array("$groupslist"); + var groups = new Array($groupslist); var secname = caller.value; if ((secname == 'all') || (secname == 'none')) { alert("'"+secname+"' may not be used as the name for a section, as it is a reserved word.\\nPlease choose a different section name."); @@ -2980,7 +3583,7 @@ sub get_groupslist { $groupslist = join('","',sort(keys(%curr_groups))); $groupslist = '"'.$groupslist.'"'; } - return $groupslist; + return $groupslist; } sub setsections_javascript { @@ -2991,10 +3594,10 @@ sub setsections_javascript { $finish = 'formname.submit()'; $roleplace = 3; } else { - $checkincluded = 'formname.name == "'.$form.'"'; + $checkincluded = 'formname.name == "'.$form.'"'; $finish = "seccheck = 'ok';"; $roleplace = 1; - $setsection_js = "var seccheck = 'alert';"; + $setsection_js = "var seccheck = 'alert';"; } my %alerts = &Apache::lonlocal::texthash( secd => 'Section designations do not apply to Course Coordinator roles.', @@ -3007,7 +3610,7 @@ sub setsections_javascript { plch => 'Please choose a different section name.', mnot => 'may not be used as a section name, as it is the name of a course group.', secn => 'Section names and group names must be distinct. Please choose a different section name.', - ); + ); $setsection_js .= <<"ENDSECCODE"; function setSections(formname) { @@ -3087,7 +3690,7 @@ function setSections(formname) { $finish } ENDSECCODE - return $setsection_js; + return $setsection_js; } 1; |