'.$lt{'gmem'}.' '.$lt{'picr'});
if ($action eq 'create') {
- $r->print($lt{'meof'}.' '.$lt{'ifno'});
+ $r->print($lt{'meof'}.' '.$lt{'ifno'}.' '.$lt{'asub'});
} else {
$r->print($lt{'admg'});
}
@@ -1248,8 +1306,8 @@ sub membership_options {
$r->print(&Apache::lonhtmlcommon::role_select_row(\@roles));
if (@sections > 0) {
@sections = sort {$a cmp $b} @sections;
- unshift(@sections,'_all'); # Put 'all' at the front of the list
- unshift(@sections,'_nosec'); # Put 'no sections' next
+ unshift(@sections,'all'); # Put 'all' at the front of the list
+ unshift(@sections,'none'); # Put 'no sections' next
$r->print('
');
@@ -1270,9 +1328,9 @@ sub sections_selection {
$numvisible = @{$sections};
}
foreach my $sec (@{$sections}) {
- if ($sec eq '_all') {
+ if ($sec eq 'all') {
$section_sel .= ' all sections'."\n";
- } elsif ($sec eq '_nosec') {
+ } elsif ($sec eq 'none') {
$section_sel .= ' no section'."\n";
} else {
$section_sel .= ' '.$sec."\n";
@@ -2072,11 +2130,14 @@ sub current_membership {
my($end,$start,@userprivs) = split(/:/,$membership{$key});
unless ($start == -1) {
$allnames{$udom}{$uname} = 1;
- %{$current{$user}} = ();
- $current{$user}{uname} = $uname;
- $current{$user}{udom} = $udom;
- $current{$user}{start} =
- &Apache::lonlocal::locallocaltime($start);
+ $current{$user} = {
+ uname => $uname,
+ udom => $udom,
+ start => &Apache::lonlocal::locallocaltime($start),
+ currtools => [],
+ newtools => [],
+ };
+
if ($end == 0) {
$current{$user}{end} = 'No end date';
} else {
@@ -2094,8 +2155,6 @@ sub current_membership {
$current{$user}{changestate} = 'expire';
$num_expire ++;
}
- @{$current{$user}{currtools}} = ();
- @{$current{$user}{newtools}} = ();
if (@userprivs > 0) {
foreach my $tool (sort(keys(%{$fixedprivs}))) {
foreach my $priv (keys(%{$$fixedprivs{$tool}})) {
@@ -2589,7 +2648,9 @@ sub member_privileges_form {
}
$specificity = $env{'form.specificity'};
} else {
- @defprivs = @{$$stored{'defpriv'}};
+ if (defined($$stored{'defpriv'})) {
+ @defprivs = @{$$stored{'defpriv'}};
+ }
$specificity = $$stored{'specificity'};
}
my @showtools;
@@ -2773,7 +2834,9 @@ sub process_request {
@defprivs = @temp;
}
} else {
- @defprivs = @{$$stored{'defpriv'}};
+ if (defined($$stored{'defpriv'})) {
+ @defprivs = @{$$stored{'defpriv'}};
+ }
}
my $outcome;
@@ -2804,7 +2867,7 @@ sub write_group_data {
$creation = $$stored{'creation'};
$creator = $$stored{'creator'};
}
- my $esc_description = &Apache::lonnet::escape($description);
+ my $esc_description = &escape($description);
my @single_attributes = ('description','functions','startdate','enddate',
'creation','modified','creator','granularity',
'specificity','autoadd','autodrop');
@@ -2853,9 +2916,6 @@ sub write_group_data {
if (defined($env{'form.sec_'.$role})) {
my @autosections=&Apache::loncommon::get_env_multiple('form.sec_'.
$role);
- if (grep/^_all$/,@autosections) {
- @autosections = sort {$a cmp $b} keys(%{$sectioncount});
- }
$autosec .= '';
foreach my $sec (@autosections) {
$autosec .= ''.$sec.'';
@@ -2899,6 +2959,9 @@ sub process_membership {
my $num_ok = 0;
my $num_fail = 0;
my %group_privs = ();
+ my %curr_privs = ();
+ my %curr_start = ();
+ my %curr_end = ();
my %tooltype = ();
foreach my $tool (@{$tools}) {
@@ -2917,7 +2980,7 @@ sub process_membership {
}
} else {
if (@{$defprivs} > 0) {
- foreach my $priv (@{$defprivs}) {
+ if (grep/^\Q$priv\E$/,@{$defprivs}) {
foreach my $user (sort(keys(%{$usertools}))) {
if ($$usertools{$user}{$tool}) {
$group_privs{$user} .= $priv.':';
@@ -2937,6 +3000,7 @@ sub process_membership {
my @expire = ();
my @deletion = ();
my @reenable = ();
+ my @unchanged = ();
if ($state eq 'memresult') {
if (ref($$memchg{'activate'}) eq 'ARRAY') {
@activate = @{$$memchg{'activate'}};
@@ -2950,21 +3014,25 @@ sub process_membership {
if (ref($$memchg{'reenable'}) eq 'ARRAY') {
@reenable = @{$$memchg{'reenable'}};
}
+ my %membership = &Apache::lonnet::get_group_membership($cdom,$cnum,
+ $groupname);
+ foreach my $key (sort(keys(%membership))) {
+ if ($key =~ /^\Q$groupname\E:([^:]+:[^:]+)$/) {
+ ($curr_end{$1},$curr_start{$1},$curr_privs{$1}) =
+ split(/:/,$membership{$key},3);
+ }
+ }
if (@expire + @deletion > 0) {
- my %membership = &Apache::lonnet::get_group_membership($cdom,$cnum,
- $groupname);
foreach my $user (@expire) {
- my ($currend,$currstart,@userprivs) =
- split(/:/,$membership{$groupname.':'.$user});
- $group_privs{$user} = join(':',@userprivs);
- if ($currstart > $now) {
- $currstart = $now;
+ my $savestart = $curr_start{$user};
+ if ($savestart > $now) {
+ $savestart = $now;
}
- $usersettings{$groupname.':'.$user} = $now.':'.$currstart.':'.
- $group_privs{$user};
+ $usersettings{$groupname.':'.$user} = $now.':'.$savestart.':'.
+ $curr_privs{$user};
if (&Apache::lonnet::modify_group_roles($cdom,$cnum,$groupname,
- $user,$now,$currstart,
- $group_privs{$user}) eq 'ok') {
+ $user,$now,$savestart,
+ $curr_privs{$user}) eq 'ok') {
push(@{$added{'expired'}},$user);
$num_ok ++;
} else {
@@ -2988,19 +3056,35 @@ sub process_membership {
}
foreach my $user (sort(keys(%{$usertools}))) {
+ if ((grep(/^$user$/,@expire)) || (grep(/^$user$/,@deletion))) {
+ next;
+ }
my $type;
my $start = $startdate;
my $end = $enddate;
if ($state eq 'memresult') {
+ if ($curr_privs{$user} eq $group_privs{$user}) {
+ push(@unchanged,$user);
+ next;
+ }
+ if (exists($curr_start{$user})) {
+ $start = $curr_start{$user};
+ }
+ if (exists($curr_end{$user})) {
+ $end = $curr_end{$user};
+ }
$type = 'modified';
if (@activate > 0) {
if (grep/^$user$/,@activate) {
$start = $now;
+ $end = $enddate;
$type = 'activated';
}
}
if (@reenable > 0) {
if (grep/^$user$/,@reenable) {
+ $start = $startdate;
+ $end = $enddate;
$type = 'reenabled';
}
}
@@ -3024,7 +3108,7 @@ sub process_membership {
if ($num_ok) {
foreach my $type (sort(keys(%added))) {
$r->print(&mt('The following users were successfully [_1]',$type));
- if (!($type eq 'deleted' || $type eq 'expired')) {
+ if (!($type eq 'deleted' || $type eq 'expired')) {
$r->print(&mt(' with the following privileges'));
}
$r->print(': ');
@@ -3045,6 +3129,7 @@ sub process_membership {
}
$r->print($$userdata{$user}[$$idx{fullname}].' - '.$user.$privlist.' ');
}
+ $r->print(' ');
}
}
if ($num_fail) {
@@ -3054,11 +3139,19 @@ sub process_membership {
$r->print($$userdata{$user}[$$idx{fullname}].' - '.$user.' ');
}
}
+ $r->print(' ');
+ }
+ if (@unchanged > 0) {
+ $r->print(&mt('No change occurred for the following users: '));
+ foreach my $user (sort(@unchanged)) {
+ $r->print($$userdata{$user}[$$idx{fullname}].' - '.$user.' ');
+ }
+ $r->print(' ');
}
if ($roster_result eq 'ok') {
- $r->print(' Group membership list updated.');
+ $r->print(' '.&mt('Group membership list updated.'));
} else {
- $r->print(' An error occurred while updating the group membership list -'.$roster_result.' ');
+ $r->print(' '.&mt('An error occurred while updating the group membership list -').$roster_result.' ');
}
return;
}
@@ -3116,7 +3209,7 @@ sub automapping {
'.$$lt{'auad'}.':
- on off');
+ ');
if ($action eq 'modify') {
$r->print(' ('.$$lt{'curr'}.' '.$$lt{$add}.')');
}
@@ -3128,7 +3221,7 @@ sub automapping {
'.$$lt{'auex'}.':
- on off');
+ ');
if ($action eq 'modify') {
$r->print(' ('.$$lt{'curr'}.' '.$$lt{$drop}.')');
}
@@ -3151,8 +3244,8 @@ sub mapping_settings {
my @sections = keys(%{$sectioncount});
if (@sections > 0) {
@sections = sort {$a cmp $b} @sections;
- unshift(@sections,'_nosec'); # Put 'no sections' next
- unshift(@sections,'_all'); # Put 'all' at the front of the list
+ unshift(@sections,'none'); # Put 'no sections' next
+ unshift(@sections,'all'); # Put 'all' at the front of the list
}
&topic_bar($r,$tabcol,$image,$$lt{'pirs'});
$r->print('
@@ -3176,8 +3269,15 @@ sub mapping_settings {
my $plrole=&Apache::lonnet::plaintext($role);
my $sections_sel;
if (@sections > 0) {
- $sections_sel='