--- loncom/interface/loncoursegroups.pm 2006/05/18 22:13:48 1.20 +++ loncom/interface/loncoursegroups.pm 2006/05/22 22:35:46 1.21 @@ -83,10 +83,16 @@ sub handler { my $rowColor2 = "#eeeeee"; my $action = $env{'form.action'}; + my $state = $env{'form.state'}; + if ((!defined($action)) || ($action eq 'view')) { + if (!defined($state)) { + $state = 'view'; + } + } if ($action eq 'create' || $action eq 'modify' || $action eq 'view') { if ($view_permission || $manage_permission) { - &group_administration($r,$action,$cdom,$cnum,$function,$tabcol, - \%functions,\%idx,$view_permission, + &group_administration($r,$action,$state,$cdom,$cnum,$function, + $tabcol,\%functions,\%idx,$view_permission, $manage_permission,$rowColor1,$rowColor2); } else { $r->print(&mt('You do not have group administration '. @@ -94,7 +100,7 @@ sub handler { } } else { &print_main_menu($r,$cdom,$cnum,$function,$tabcol,\%functions,\%idx, - $view_permission,$manage_permission,$action, + $view_permission,$manage_permission,$action,$state, $rowColor1,$rowColor2); } return OK; @@ -102,31 +108,36 @@ sub handler { sub print_main_menu { my ($r,$cdom,$cnum,$function,$tabcol,$functions,$idx,$view_permission, - $manage_permission,$action,$rowColor1,$rowColor2) = @_; - $r->print(&header('Course Groups',undef,undef,undef,undef,$function)); + $manage_permission,$action,$state,$rowColor1,$rowColor2) = @_; + my $jscript = qq| +function changeSort(caller) { + document.$state.sortby.value = caller; + document.$state.submit(); +}\n|; + $r->print(&header('Course Groups',$jscript,$action,$state, + undef,$function)); &Apache::lonhtmlcommon::add_breadcrumb ({href=>"/adm/coursegroups", text=>"Course Groups",}); $r->print(&Apache::lonhtmlcommon::breadcrumbs('Course Groups')); &display_groups($r,$cdom,$cnum,$function,$tabcol,$functions,$idx, - $view_permission,$manage_permission,$action,$rowColor1, - $rowColor2); + $view_permission,$manage_permission,$action,$state, + $rowColor1,$rowColor2); $r->print(&footer()); return; } sub display_groups { my ($r,$cdom,$cnum,$function,$tabcol,$functions,$idx,$view_permission, - $manage_permission,$action,$rowColor1,$rowColor2) = @_; + $manage_permission,$action,$state,$rowColor1,$rowColor2) = @_; my %curr_groups = (); my %grp_info = (); - my %actionlinks = ( - modify => '$lt{'func'} $lt{'quot'} - $lt{'memb'} + $lt{'memb'} $lt{'file'} $lt{'dibd'} $lt{'dius'} @@ -248,13 +259,29 @@ END } else { $link .= $group.'/grppg'; } - $link .= '">'.$lt{$action}.''; + $link .= '">'.$lt{$action}.''; + if ($action eq 'view') { + if (($manage_permission) && + ($env{'form.refpage'} ne 'enrl')) { + $link .= '  '.$actionlinks{'modify'}. + $group.'">'.$lt{'modify'}.''; + } + } $r->print(''.$link.''.$group.''.$description.''.$creator.''. &Apache::lonnavmaps::timeToHumanString($creation).''. &Apache::lonnavmaps::timeToHumanString($modified).''.$functionality.''.$quota.''.$totalmembers.''.$totalfiles.''.$boards.''.$diskuse.''); $rowNum ++; } } $r->print(''); $r->print(&Apache::lonhtmlcommon::end_pick_box()); + $r->print(''); + if ($action eq 'view') { + if (!defined($state)) { + $state = 'view'; + } + $r->print(''); + } } else { $r->print($lt{'nogr'}); if ($manage_permission) { @@ -288,7 +315,7 @@ END } sub group_administration { - my ($r,$action,$cdom,$cnum,$function,$tabcol,$functions,$idx, + my ($r,$action,$state,$cdom,$cnum,$function,$tabcol,$functions,$idx, $view_permission,$manage_permission,$rowColor1,$rowColor2) = @_; my %sectioncount = (); my @tools = (); @@ -303,7 +330,6 @@ sub group_administration { my %memchg; my @member_changes = ('deletion','expire','activate','reenable', 'changefunc','changepriv'); - my $state = $env{'form.state'}; my ($groupname,$description,$startdate,$enddate,$granularity,$specificity); if (defined($env{'form.groupname'})) { @@ -342,7 +368,11 @@ sub group_administration { if ($action eq 'modify') { if ($state eq '') { - $state = 'pick_group'; + if (defined($env{'form.groupname'})) { + $state = 'pick_task'; + } else { + $state = 'pick_group'; + } } else { %stored = &retrieve_settings($cdom,$cnum,$groupname); if (ref($stored{'types'}) eq 'ARRAY') { @@ -560,11 +590,17 @@ sub group_administration { } if (($state eq 'pick_privs') || ($state eq 'change_privs') || - (($specificity eq 'No') && - (($state eq 'addresult') || ($state eq 'memresult')))) { + (($specificity eq 'No') && + ($state eq 'memresult' || $state eq 'result' || $state eq 'addresult'))) { foreach my $tool (@tools) { my @values = &Apache::loncommon::get_env_multiple('form.user_'.$tool); foreach my $user (@values) { + if ($state eq 'pick_privs' || $state eq 'result' + || $state eq 'addresult') { + if (!grep(/^\Q$user\E$/,@members)) { + next; + } + } unless(exists($usertools{$user}{$tool})) { $usertools{$user}{$tool} = 1; } @@ -705,7 +741,7 @@ function changeSort(caller) { @{$branchstates{'members'}} = ('change_members','change_privs','memresult'); @{$branchstates{'adds'}} = ('add_members','pick_members','pick_privs', 'addresult'); - + if (defined($env{'form.branch'})) { push (@{$states{$action}},@{$branchstates{$env{'form.branch'}}}); } @@ -801,7 +837,7 @@ function changeSort(caller) { $r->print(&Apache::lonhtmlcommon::breadcrumbs ('Course Groups Manager')); &display_groups($r,$cdom,$cnum,$function,$tabcol,$functions,$idx, - $view_permission,$manage_permission,$action, + $view_permission,$manage_permission,$action,$state, $rowColor1,$rowColor2); } @@ -903,7 +939,7 @@ sub display_control { my $groupname = $env{'form.groupname'}; if ($state eq 'pick_group') { &display_groups($r,$cdom,$cnum,$function,$tabcol,$functions,$idx, - $view_permission,$manage_permission,$action, + $view_permission,$manage_permission,$action,$state, $rowColor1,$rowColor2); } elsif ($state eq 'pick_task') { &modify_menu($r,$groupname,$page); @@ -1207,7 +1243,8 @@ sub membership_options { 'meof' => 'members of the new group.', 'admg' => 'additional members of the group.', 'ifno' => 'If you do not wish to add members when you first '. - 'create the group, do not make any selections', + 'create the group, do not make any selections.', + 'asub' => 'A subsequent step will also allow you to specify automatic adding/dropping of group members triggered by specified role and section changes.', 'acty' => 'Access types', 'coro' => 'Course roles', 'cose' => 'Course sections', @@ -1229,7 +1266,7 @@ sub membership_options { '.$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'}); } @@ -2906,6 +2943,8 @@ sub process_membership { my $num_fail = 0; my %group_privs = (); my %curr_privs = (); + my %curr_start = (); + my %curr_end = (); my %tooltype = (); foreach my $tool (@{$tools}) { @@ -2962,21 +3001,21 @@ sub process_membership { $groupname); foreach my $key (sort(keys(%membership))) { if ($key =~ /^\Q$groupname\E:([^:]+:[^:]+)$/) { - (undef,undef,$curr_privs{$1})=split(/:/,$membership{$key},3); + ($curr_end{$1},$curr_start{$1},$curr_privs{$1}) = + split(/:/,$membership{$key},3); } } if (@expire + @deletion > 0) { foreach my $user (@expire) { - my ($currend,$currstart,$grp_privs) = - split(/:/,$membership{$groupname.':'.$user},3); - if ($currstart > $now) { - $currstart = $now; + my $savestart = $curr_start{$user}; + if ($savestart > $now) { + $savestart = $now; } - $usersettings{$groupname.':'.$user} = $now.':'.$currstart.':'. - $grp_privs; + $usersettings{$groupname.':'.$user} = $now.':'.$savestart.':'. + $curr_privs{$user}; if (&Apache::lonnet::modify_group_roles($cdom,$cnum,$groupname, - $user,$now,$currstart, - $grp_privs) eq 'ok') { + $user,$now,$savestart, + $curr_privs{$user}) eq 'ok') { push(@{$added{'expired'}},$user); $num_ok ++; } else { @@ -3011,15 +3050,24 @@ sub process_membership { 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'; } }