Diff for /loncom/interface/loncoursegroups.pm between versions 1.11 and 1.22

version 1.11, 2006/03/21 20:18:18 version 1.22, 2006/05/25 22:39:59
Line 30  use Apache::loncommon; Line 30  use Apache::loncommon;
 use Apache::lonhtmlcommon;  use Apache::lonhtmlcommon;
 use Apache::lonlocal;  use Apache::lonlocal;
 use Apache::lonnavmaps;  use Apache::lonnavmaps;
   use Apache::longroup;
 use Apache::Constants qw(:common :http);  use Apache::Constants qw(:common :http);
   
 sub handler {  sub handler {
Line 37  sub handler { Line 38  sub handler {
   
     &Apache::loncommon::content_type($r,'text/html');      &Apache::loncommon::content_type($r,'text/html');
     $r->send_http_header;      $r->send_http_header;
                                                                                   
     if ($r->header_only) {      if ($r->header_only) {
         return OK;          return OK;
     }      }
Line 82  sub handler { Line 83  sub handler {
     my $rowColor2 = "#eeeeee";      my $rowColor2 = "#eeeeee";
   
     my $action = $env{'form.action'};      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 ($action eq 'create' || $action eq 'modify' || $action eq 'view') { 
         if ($view_permission || $manage_permission) {          if ($view_permission || $manage_permission) {
             &group_administration($r,$action,$cdom,$cnum,$function,$tabcol,              &group_administration($r,$action,$state,$cdom,$cnum,$function,
                                   \%functions,\%idx,$view_permission,                                    $tabcol,\%functions,\%idx,$view_permission,
                                   $manage_permission,$rowColor1,$rowColor2);                                    $manage_permission,$rowColor1,$rowColor2);
         } else {          } else {
             $r->print(&mt('You do not have group administration '.              $r->print(&mt('You do not have group administration '.
Line 93  sub handler { Line 100  sub handler {
         }          }
     } else {      } else {
         &print_main_menu($r,$cdom,$cnum,$function,$tabcol,\%functions,\%idx,          &print_main_menu($r,$cdom,$cnum,$function,$tabcol,\%functions,\%idx,
                          $view_permission,$manage_permission,$action,                           $view_permission,$manage_permission,$action,$state,
                          $rowColor1,$rowColor2);                           $rowColor1,$rowColor2);
     }      }
     return OK;      return OK;
Line 101  sub handler { Line 108  sub handler {
   
 sub print_main_menu {  sub print_main_menu {
     my ($r,$cdom,$cnum,$function,$tabcol,$functions,$idx,$view_permission,      my ($r,$cdom,$cnum,$function,$tabcol,$functions,$idx,$view_permission,
         $manage_permission,$action,$rowColor1,$rowColor2) = @_;          $manage_permission,$action,$state,$rowColor1,$rowColor2) = @_;
     $r->print(&header('Course Groups',undef,undef,undef,undef,$function));      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      &Apache::lonhtmlcommon::add_breadcrumb
         ({href=>"/adm/coursegroups",          ({href=>"/adm/coursegroups",
           text=>"Course Groups",});            text=>"Course Groups",});
     $r->print(&Apache::lonhtmlcommon::breadcrumbs      $r->print(&Apache::lonhtmlcommon::breadcrumbs('Course Groups'));
               (undef,'Course Groups'));  
     &display_groups($r,$cdom,$cnum,$function,$tabcol,$functions,$idx,      &display_groups($r,$cdom,$cnum,$function,$tabcol,$functions,$idx,
                     $view_permission,$manage_permission,$action,$rowColor1,                      $view_permission,$manage_permission,$action,$state,
                     $rowColor2);                      $rowColor1,$rowColor2);
     $r->print(&footer());      $r->print(&footer());
     return;      return;
 }  }
   
 sub display_groups {  sub display_groups {
     my ($r,$cdom,$cnum,$function,$tabcol,$functions,$idx,$view_permission,      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 %curr_groups = ();
     my %grp_info = ();      my %grp_info = ();
   
     my %actionlinks = (      my %actionlinks = (
       modify => '<a href="/adm/coursegroups?action=modify&state=pick_task&refpage='.        modify => '<a href="/adm/coursegroups?action=modify&refpage='.
                 $env{'form.refpage'}.'&groupname=',                           $env{'form.refpage'}.'&groupname=',
       view => '<a href="/adm/'.$cdom.'/'.$cnum.'/',        view => '<a href="/adm/'.$cdom.'/'.$cnum.'/',
       delete => '<a href="/adm/coursegroups?action=delete&refpage='.        delete => '<a href="/adm/coursegroups?action=delete&refpage='.
                 $env{'form.refpage'}.'&groupname=',                           $env{'form.refpage'}.'&groupname=',
     );      );
     my %lt = &Apache::lonlocal::texthash(       my %lt = &Apache::lonlocal::texthash( 
                           modify => 'Modify',                            modify => 'Modify',
Line 155  sub display_groups { Line 166  sub display_groups {
         if (!defined($action)) {          if (!defined($action)) {
             $action = 'view';              $action = 'view';
         }          }
         my %curr_groups;          my %curr_groups = &Apache::longroup::coursegroups($cdom,$cnum);
         if (&Apache::loncommon::coursegroups(\%curr_groups,$cdom,$cnum)) {          if (%curr_groups) {
             $r->print('<br /><br />');              $r->print('<br /><br />');
             $r->print(&Apache::lonhtmlcommon::start_pick_box());              $r->print(&Apache::lonhtmlcommon::start_pick_box());
             $r->print(<<"END");              $r->print(<<"END");
Line 174  sub display_groups { Line 185  sub display_groups {
         <td><b>$lt{'func'}</b>          <td><b>$lt{'func'}</b>
         </td>          </td>
         <td><b><a href="javascript:changeSort('quota')">$lt{'quot'}</a></b></td>          <td><b><a href="javascript:changeSort('quota')">$lt{'quot'}</a></b></td>
         <td><b><a href="javascript:changeSort('totalmembers)">$lt{'memb'}</a></b></td>          <td><b><a href="javascript:changeSort('totalmembers')">$lt{'memb'}</a></b></td>
         <td><b><a href="javascript:changeSort('totalfiles')">$lt{'file'}</a></b></td>          <td><b><a href="javascript:changeSort('totalfiles')">$lt{'file'}</a></b></td>
         <td><b><a href="javascript:changeSort('boards')">$lt{'dibd'}</a></b></td>          <td><b><a href="javascript:changeSort('boards')">$lt{'dibd'}</a></b></td>
         <td><b><a href="javascript:changeSort('diskuse')">$lt{'dius'}</a></b></td>          <td><b><a href="javascript:changeSort('diskuse')">$lt{'dius'}</a></b></td>
Line 183  END Line 194  END
             my %Sortby = ();              my %Sortby = ();
             foreach my $group (sort(keys(%curr_groups))) {              foreach my $group (sort(keys(%curr_groups))) {
                 %{$grp_info{$group}} =                   %{$grp_info{$group}} = 
                                   &Apache::loncommon::get_group_settings(                                    &Apache::longroup::get_group_settings(
                                                          $curr_groups{$group});                                                           $curr_groups{$group});
                 my $members_result = &group_members($cdom,$cnum,$group,                  my $members_result = &group_members($cdom,$cnum,$group,
                                                     \%grp_info);                                                      \%grp_info);
Line 246  END Line 257  END
                     if ($action eq 'modify' || $action eq 'delete') {                      if ($action eq 'modify' || $action eq 'delete') {
                         $link .= $group;                          $link .= $group;
                     } else {                      } else {
                         $link .= $group.'/grppg?register=1';                          $link .= $group.'/grppg';
                       }
                       $link .= '">'.$lt{$action}.'</a>';
                       if ($action eq 'view') { 
                           if (($manage_permission) && 
                               ($env{'form.refpage'} ne 'enrl')) {
                               $link .= '&nbsp;&nbsp;'.$actionlinks{'modify'}.
                                         $group.'">'.$lt{'modify'}.'</a>';
                           }
                     }                      }
                     $link .= '">'.$lt{$action}.'</a>';    
                     $r->print('<tr bgcolor="'.$rowColor.'"><td><small>'.$link.'</small></td><td><small>'.$group.'</small></td><td><small>'.$description.'</small></td><td><small>'.$creator.'</small></td><td><small>'. &Apache::lonnavmaps::timeToHumanString($creation).'</small></td><td><small>'. &Apache::lonnavmaps::timeToHumanString($modified).'</small></td><td><small>'.$functionality.'</small></td><td><small>'.$quota.'</small></td><td><small>'.$totalmembers.'</small></td><td><small>'.$totalfiles.'</small></td><td><small>'.$boards.'</small></td><td><small>'.$diskuse.'</small></td></tr>');                      $r->print('<tr bgcolor="'.$rowColor.'"><td><small>'.$link.'</small></td><td><small>'.$group.'</small></td><td><small>'.$description.'</small></td><td><small>'.$creator.'</small></td><td><small>'. &Apache::lonnavmaps::timeToHumanString($creation).'</small></td><td><small>'. &Apache::lonnavmaps::timeToHumanString($modified).'</small></td><td><small>'.$functionality.'</small></td><td><small>'.$quota.'</small></td><td><small>'.$totalmembers.'</small></td><td><small>'.$totalfiles.'</small></td><td><small>'.$boards.'</small></td><td><small>'.$diskuse.'</small></td></tr>');
                     $rowNum ++;                      $rowNum ++;
                 }                  }
             }              }
             $r->print('</table>');              $r->print('</table>');
             $r->print(&Apache::lonhtmlcommon::end_pick_box());              $r->print(&Apache::lonhtmlcommon::end_pick_box());
               $r->print('<input type="hidden" name="refpage" '.
                         'value="'.$env{'form.refpage'}.'" />');
               if ($action eq 'view') {
                   if (!defined($state)) {
                       $state = 'view';
                   }
                   $r->print('<input type="hidden" name="state" value="'.
                         $state.'" />');
               }
         } else {          } else {
             $r->print($lt{'nogr'});              $r->print($lt{'nogr'});
             if ($manage_permission) {              if ($manage_permission) {
Line 268  END Line 295  END
         my @coursegroups = split(/:/,$env{'request.course.groups'});          my @coursegroups = split(/:/,$env{'request.course.groups'});
         if (@coursegroups > 0) {          if (@coursegroups > 0) {
             $r->print('<br /><br />');              $r->print('<br /><br />');
             my %curr_groups;              my %curr_groups = &Apache::longroup::coursegroups($cdom,$cnum);
             if (&Apache::loncommon::coursegroups(\%curr_groups,$cdom,$cnum)) {              if (%curr_groups) {
                 foreach my $group (@coursegroups) {                  foreach my $group (@coursegroups) {
                     my %group_info =  &Apache::loncommon::get_group_settings(                      my %group_info =  &Apache::longroup::get_group_settings(
                                         $curr_groups{$group});                                          $curr_groups{$group});
                     my $description = &Apache::lonnet::unescape(                      my $description = &Apache::lonnet::unescape(
                                         $group_info{description});                                          $group_info{description});
                     my ($uname,$udom) = split(/:/,$group_info{creator});                      my ($uname,$udom) = split(/:/,$group_info{creator});
                     $r->print('<font size="+1"><a href="/adm/'.$udom.'/'.$uname.'/'.$group.'/grppg?register=1">'.$group,'</a><font><br /><small>'.$description.'</small><br /><br />');                      $r->print('<font size="+1"><a href="/adm/'.$udom.'/'.$uname.'/'.$group.'/grppg">'.$group,'</a><font><br /><small>'.$description.'</small><br /><br />');
                 }                  }
             }              }
         } else {          } else {
Line 288  END Line 315  END
 }  }
   
 sub group_administration {  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) = @_;          $view_permission,$manage_permission,$rowColor1,$rowColor2) = @_;
     my %sectioncount = ();      my %sectioncount = ();
     my @tools = ();      my @tools = ();
Line 303  sub group_administration { Line 330  sub group_administration {
     my %memchg;      my %memchg;
     my @member_changes = ('deletion','expire','activate','reenable',      my @member_changes = ('deletion','expire','activate','reenable',
                           'changefunc','changepriv');                            'changefunc','changepriv');
     my $state = $env{'form.state'};  
     my ($groupname,$description,$startdate,$enddate,$granularity,$specificity);      my ($groupname,$description,$startdate,$enddate,$granularity,$specificity);
   
     if (defined($env{'form.groupname'})) {      if (defined($env{'form.groupname'})) {
Line 342  sub group_administration { Line 368  sub group_administration {
   
     if ($action eq 'modify') {      if ($action eq 'modify') {
         if ($state eq '') {          if ($state eq '') {
             $state = 'pick_group';              if (defined($env{'form.groupname'})) {
                   $state = 'pick_task';
               } else {
                   $state = 'pick_group';
               }
         } else {          } else {
             %stored = &retrieve_settings($cdom,$cnum,$groupname);              %stored = &retrieve_settings($cdom,$cnum,$groupname);
             if (ref($stored{'types'}) eq 'ARRAY') {              if (ref($stored{'types'}) eq 'ARRAY') {
Line 367  sub group_administration { Line 397  sub group_administration {
         }          }
     }      }
   
     my %toolprivs = ();      my %toolprivs =
     %{$toolprivs{'email'}} = (   (
                                  sgm => 'Send group mail',   email      => {
                                  sgb => 'Broadcast mail',       sgm => 'Send group mail',
                              );       sgb => 'Broadcast mail',
     %{$toolprivs{'discussion'}} =  (   },
                                      cgb => 'Create boards',   discussion => {
                                      pgd => 'Post',       cgb => 'Create boards',
                                      pag => 'Anon. posts',       pgd => 'Post',
                                      rgi => 'Get identities',        pag => 'Anon. posts',
                                      vgb => 'View boards',       rgi => 'Get identities', 
                                    );       vgb => 'View boards',
     %{$toolprivs{'chat'}} =  (   },
                                 pgc => 'Chat',   chat       => {
                              );       pgc => 'Chat',
     %{$toolprivs{'files'}} =  (   },
                                  rgf => 'Retrieve',   files      => {
                                  ugf => 'Upload',       rgf => 'Retrieve',
                                  dgf => 'Delete',       ugf => 'Upload',
                               );       dgf => 'Delete',
     %{$toolprivs{'roster'}} = (   },
                                  vgm => 'View',   roster     => {
                               );       vgm => 'View',
     %{$toolprivs{'homepage'}} = (   },
                                 vgh => 'View page',   homepage   => {
                                 mgh => 'Modify page',       vgh => 'View page',
                               );       mgh => 'Modify page',
     my %fixedprivs = ();   },
     %{$fixedprivs{'email'}} = ('sgm' => 1);   );
     %{$fixedprivs{'discussion'}} = ('vgb' => 1);  
     %{$fixedprivs{'chat'}} = ('pgc' => 1);      my %fixedprivs = 
     %{$fixedprivs{'files'}} = ('rgf' => 1);   (
     %{$fixedprivs{'roster'}} = ('vgm' => 1);   email      => {sgm => 1},
     %{$fixedprivs{'homepage'}} = ('vgh' => 1);   discussion => {vgb => 1},
    chat       => {pgc => 1},
     my %elements = ();   files      => {rgf => 1},
     %{$elements{'create'}} = ();   roster     => {vgm => 1},
     %{$elements{'modify'}} = ();   homepage   => {vgh => 1},
     %{$elements{'create'}{'pick_name'}} = (   );
         startdate_month => 'selectbox',  
         startdate_hour => 'selectbox',      my %elements = 
         enddate_month => 'selectbox',   (
         enddate_hour => 'selectbox',   create => {
         startdate_day => 'text',       pick_name => {
         startdate_year => 'text',   startdate_month  => 'selectbox',
         startdate_minute => 'text',   startdate_hour   => 'selectbox',
         startdate_second => 'text',   enddate_month    => 'selectbox',
         enddate_day => 'text',   enddate_hour     => 'selectbox',
         enddate_year => 'text',   startdate_day    => 'text',
         enddate_minute => 'text',   startdate_year   => 'text',
         enddate_second => 'text',   startdate_minute => 'text',
         groupname => 'text',   startdate_second => 'text',
         description => 'text',   enddate_day      => 'text',
         tool => 'checkbox',   enddate_year     => 'text',
         granularity => 'radio',   enddate_minute   => 'text',
         no_end_date => 'checkbox',   enddate_second   => 'text',
     );   groupname        => 'text',
     %{$elements{'modify'}{'change_settings'}} = (   description      => 'text',
                                    %{$elements{'create'}{'pick_name'}},   tool             => 'checkbox',
                                                 specificity => 'radio',   granularity      => 'radio',
                                                 defpriv => 'checkbox',   no_end_date      => 'checkbox',
                                                 autorole => 'checkbox',       },
                                                 autoadd => 'radio',       pick_members => {
                                                 autodrop => 'radio',   member          => 'checkbox',
                                    );   defpriv         => 'checkbox',
        },
    },
    );
       
       $elements{'modify'} = {
    change_settings => {
       %{$elements{'create'}{'pick_name'}},
       specificity => 'radio',
       defpriv     => 'checkbox',
       autorole    => 'checkbox',
       autoadd     => 'radio',
       autodrop    => 'radio',
    },
    add_members => {
       types       => 'selectbox',
       roles       => 'selectbox',
    },
       };
   
     if (ref($stored{'autorole'}) eq 'ARRAY') {      if (ref($stored{'autorole'}) eq 'ARRAY') {
         foreach my $role (@{$stored{'autorole'}}) {          foreach my $role (@{$stored{'autorole'}}) {
             $elements{'modify'}{'change_settings'}{'sec_'.$role} = 'selectbox';               unless ($role eq 'cc') {
                   $elements{'modify'}{'change_settings'}{'sec_'.$role} = 
                                                                      'selectbox';
               }
         }          }
     }      }
     %{$elements{'create'}{'pick_members'}} = (  
         member => 'checkbox',  
         defpriv => 'checkbox',  
     );  
   
     %{$elements{'modify'}{'add_members'}} = (  
         types => 'selectbox',  
         roles => 'selectbox',  
     );  
   
     if (($action eq 'create') && ($state eq 'pick_name')) {      if (($action eq 'create') && ($state eq 'pick_name')) {
         $elements{'create'}{'pick_name'}{'types'} = 'selectbox';          $elements{'create'}{'pick_name'}{'types'} = 'selectbox';
Line 455  sub group_administration { Line 498  sub group_administration {
         (($state eq 'pick_name') || ($state eq 'pick_privs'))) ||          (($state eq 'pick_name') || ($state eq 'pick_privs'))) ||
        (($action eq 'modify') && (($state eq 'change_settings') ||         (($action eq 'modify') && (($state eq 'change_settings') ||
                                   ($state eq 'add_members')))) {                                    ($state eq 'add_members')))) {
         my $numsections = &Apache::loncommon::get_sections($cdom,$cnum,          %sectioncount = &Apache::loncommon::get_sections($cdom,$cnum);
                                                            \%sectioncount);          if (%sectioncount) {
         if ($numsections > 0) {  
             $elements{'create'}{'pick_name'}{'sectionpick'} = 'selectbox';              $elements{'create'}{'pick_name'}{'sectionpick'} = 'selectbox';
             $elements{'modify'}{'change_mapping'}{'sectionpick'} = 'selectbox';              $elements{'modify'}{'change_mapping'}{'sectionpick'} = 'selectbox';
             $elements{'modify'}{'add_members'}{'sectionpick'} = 'selectbox';              $elements{'modify'}{'add_members'}{'sectionpick'} = 'selectbox';
         }          }
     }      }
   
     if ($action eq 'create') {      if (($action eq 'create') || 
           ($action eq 'modify' && $state eq 'pick_members')) {
         if (defined($env{'form.types'})) {          if (defined($env{'form.types'})) {
             @types=&Apache::loncommon::get_env_multiple('form.types');              @types=&Apache::loncommon::get_env_multiple('form.types');
         }          }
Line 473  sub group_administration { Line 516  sub group_administration {
         }          }
         if (defined($env{'form.sectionpick'})) {          if (defined($env{'form.sectionpick'})) {
             @sections=&Apache::loncommon::get_env_multiple('form.sectionpick');              @sections=&Apache::loncommon::get_env_multiple('form.sectionpick');
             if (grep/^_all$/,@sections) {              if (grep/^all$/,@sections) {
                 @sections = sort {$a cmp $b} keys(%sectioncount);                  @sections = sort {$a cmp $b} keys(%sectioncount);
             }              }
         }          }
Line 557  sub group_administration { Line 600  sub group_administration {
     }      }
   
     if (($state eq 'pick_privs') || ($state eq 'change_privs') ||      if (($state eq 'pick_privs') || ($state eq 'change_privs') ||
         (($specificity eq 'No') &&            (($specificity eq 'No') && 
          (($state eq 'result') || ($state eq 'memresult')))) {            ($state eq 'memresult' || $state eq 'result' || $state eq 'addresult'))) { 
         foreach my $tool (@tools) {          foreach my $tool (@tools) {
             my @values = &Apache::loncommon::get_env_multiple('form.user_'.$tool);              my @values = &Apache::loncommon::get_env_multiple('form.user_'.$tool);
             foreach my $user (@values) {              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})) {                  unless(exists($usertools{$user}{$tool})) {
                     $usertools{$user}{$tool} = 1;                      $usertools{$user}{$tool} = 1;
                 }                  }
Line 688  function changeSort(caller) { Line 737  function changeSort(caller) {
     document.$state.sortby.value = caller;      document.$state.sortby.value = caller;
     document.$state.submit();      document.$state.submit();
 }   } 
                                                                                         
 |;  |;
     $jscript .= &Apache::lonhtmlcommon::set_form_elements(      $jscript .= &Apache::lonhtmlcommon::set_form_elements(
                            \%{$elements{$action}{$state}},\%stored);                             \%{$elements{$action}{$state}},\%stored);
Line 702  function changeSort(caller) { Line 751  function changeSort(caller) {
     @{$branchstates{'members'}} = ('change_members','change_privs','memresult');      @{$branchstates{'members'}} = ('change_members','change_privs','memresult');
     @{$branchstates{'adds'}} = ('add_members','pick_members','pick_privs',      @{$branchstates{'adds'}} = ('add_members','pick_members','pick_privs',
                                 'addresult');                                  'addresult');
       
     if (defined($env{'form.branch'})) {      if (defined($env{'form.branch'})) {
         push (@{$states{$action}},@{$branchstates{$env{'form.branch'}}});          push (@{$states{$action}},@{$branchstates{$env{'form.branch'}}});
     }      }
Line 771  function changeSort(caller) { Line 820  function changeSort(caller) {
                 &Apache::lonhtmlcommon::add_breadcrumb(                  &Apache::lonhtmlcommon::add_breadcrumb(
                    {text=>"$trail{$action}{$state}"});                     {text=>"$trail{$action}{$state}"});
                 $r->print(&Apache::lonhtmlcommon::breadcrumbs                  $r->print(&Apache::lonhtmlcommon::breadcrumbs
                      (undef,'Course Groups Manager'));    ('Course Groups Manager'));
                 &display_control($r,$cdom,$cnum,$tabcol,$action,$state,$page,                  &display_control($r,$cdom,$cnum,$tabcol,$action,$state,$page,
                        \%sectioncount,$groupname,$description,$functions,                         \%sectioncount,$groupname,$description,$functions,
                        \@tools,\%toolprivs,\%fixedprivs,$startdate,$enddate,                         \@tools,\%toolprivs,\%fixedprivs,$startdate,$enddate,
Line 796  function changeSort(caller) { Line 845  function changeSort(caller) {
                         &Apache::lonhtmlcommon::add_breadcrumb(                          &Apache::lonhtmlcommon::add_breadcrumb(
                    {text=>"View groups"});                     {text=>"View groups"});
         $r->print(&Apache::lonhtmlcommon::breadcrumbs          $r->print(&Apache::lonhtmlcommon::breadcrumbs
                      (undef,'Course Groups Manager'));    ('Course Groups Manager'));
         &display_groups($r,$cdom,$cnum,$function,$tabcol,$functions,$idx,          &display_groups($r,$cdom,$cnum,$function,$tabcol,$functions,$idx,
                         $view_permission,$manage_permission,$action,                          $view_permission,$manage_permission,$action,$state,
                         $rowColor1,$rowColor2);                          $rowColor1,$rowColor2);
   
     }      }
Line 808  function changeSort(caller) { Line 857  function changeSort(caller) {
   
 sub retrieve_settings {  sub retrieve_settings {
     my ($cdom,$cnum,$groupname) = @_;      my ($cdom,$cnum,$groupname) = @_;
     my %groupinfo;      my %curr_groups = &Apache::longroup::coursegroups($cdom,$cnum,$groupname);
   
       return if (!%curr_groups);
   
       my %groupinfo = 
    &Apache::longroup::get_group_settings($curr_groups{$groupname});
   
     my %stored;      my %stored;
     my %curr_groups;  
     my $numgroups = &Apache::loncommon::coursegroups(\%curr_groups,$cdom,      $stored{'description'} = 
                                                              $cnum,$groupname);   &Apache::lonnet::unescape($groupinfo{'description'});
     if ($numgroups > 0) {      $stored{'startdate'} = $groupinfo{'startdate'};
         %groupinfo = &Apache::loncommon::get_group_settings(      $stored{'enddate'} = $groupinfo{'enddate'};
                                                      $curr_groups{$groupname});      if ($stored{'enddate'} == 0) {
         $stored{'description'} = &Apache::lonnet::unescape(   $stored{'no_end_date'} = 1;
                                                     $groupinfo{'description'});      }
         $stored{'startdate'} = $groupinfo{'startdate'};      $stored{'granularity'} = $groupinfo{'granularity'};
         $stored{'enddate'} = $groupinfo{'enddate'};      $stored{'specificity'} = $groupinfo{'specificity'};
         if ($stored{'enddate'} == 0) {      $stored{'creation'} = $groupinfo{'creation'};
             $stored{'no_end_date'} = 1;      $stored{'creator'} = $groupinfo{'creator'};
         }  
         $stored{'granularity'} = $groupinfo{'granularity'};      foreach my $tool (sort(keys(%{$groupinfo{'functions'}}))) {
         $stored{'specificity'} = $groupinfo{'specificity'};   if ($groupinfo{functions}{$tool} eq 'on') {
         $stored{'creation'} = $groupinfo{'creation'};      push(@{$stored{tool}},$tool);
         $stored{'creator'} = $groupinfo{'creator'};   }
       }
         foreach my $tool (sort(keys(%{$groupinfo{'functions'}}))) {      foreach my $role (@{$groupinfo{'roles'}}) {
             if ($groupinfo{functions}{$tool} eq 'on') {   push(@{$stored{roles}},$role);
                 push(@{$stored{tool}},$tool);      }
             }      foreach my $type (@{$groupinfo{'types'}}) {
         }   push(@{$stored{types}},$type);
         foreach my $role (@{$groupinfo{'roles'}}) {      }
             push(@{$stored{roles}},$role);      foreach my $section (@{$groupinfo{'sectionpick'}}) {
         }   push(@{$stored{sectionpick}},$section);
         foreach my $type (@{$groupinfo{'types'}}) {      }
             push(@{$stored{types}},$type);      foreach my $defpriv (@{$groupinfo{'defpriv'}}) {
         }   push(@{$stored{defpriv}},$defpriv);
         foreach my $section (@{$groupinfo{'sectionpick'}}) {      }
             push(@{$stored{sectionpick}},$section);      $stored{'autoadd'} = $groupinfo{'autoadd'};
         }      $stored{'autodrop'} = $groupinfo{'autodrop'};
         foreach my $defpriv (@{$groupinfo{'defpriv'}}) {      if (exists($groupinfo{'autosec'})) {
             push(@{$stored{defpriv}},$defpriv);   foreach my $role (sort(keys(%{$groupinfo{'autosec'}}))) {
         }              if (ref($groupinfo{'autosec'}{$role}) eq 'ARRAY') {
         $stored{'autoadd'} = $groupinfo{'autoadd'};          foreach my $section (@{$groupinfo{'autosec'}{$role}}) {
         $stored{'autodrop'} = $groupinfo{'autodrop'};              push (@{$stored{'sec_'.$role}},$section);
         if (exists($groupinfo{'autosec'})) {          }
             foreach my $role (sort(keys(%{$groupinfo{'autosec'}}))) {          if (@{$groupinfo{'autosec'}{$role}} > 0) {
                 foreach my $section (@{$groupinfo{'autosec'}{$role}}) {      push(@{$stored{'autorole'}},$role);
                     push (@{$stored{'sec_'.$role}},$section);          }
                 }  
                 if (@{$groupinfo{'autosec'}{$role}} > 0) {  
                     push(@{$stored{'autorole'}},$role);  
                 }  
             }              }
         }   }
     }      }
     return %stored;      return %stored;
 }  }
Line 898  sub display_control { Line 949  sub display_control {
         my $groupname = $env{'form.groupname'};          my $groupname = $env{'form.groupname'};
         if ($state eq 'pick_group') {          if ($state eq 'pick_group') {
             &display_groups($r,$cdom,$cnum,$function,$tabcol,$functions,$idx,              &display_groups($r,$cdom,$cnum,$function,$tabcol,$functions,$idx,
                             $view_permission,$manage_permission,$action,                              $view_permission,$manage_permission,$action,$state,
                             $rowColor1,$rowColor2);                              $rowColor1,$rowColor2);
         } elsif ($state eq 'pick_task') {          } elsif ($state eq 'pick_task') {
             &modify_menu($r,$groupname,$page);              &modify_menu($r,$groupname,$page);
Line 975  END Line 1026  END
   
 sub onload_action {  sub onload_action {
     my ($action,$state) = @_;      my ($action,$state) = @_;
     my $loaditems;      my %loaditems;
     if ((defined($env{'form.origin'})) && ($action eq 'create') &&      if ((defined($env{'form.origin'})) && ($action eq 'create') &&
                 ($state eq 'pick_name' || $state eq 'pick_members' ||                   ($state eq 'pick_name' || $state eq 'pick_members' || 
                  $state eq 'pick_privs')) {                   $state eq 'pick_privs')) {
         unless ($env{'form.origin'} eq '') {          unless ($env{'form.origin'} eq '') {
             $loaditems =       $loaditems{'onload'} = 
              'onload="javascript:setFormElements(document.'.$state.')"';   'javascript:setFormElements(document.'.$state.')';
         }          }
     }      }
     if (($action eq 'modify') &&      if (($action eq 'modify') &&
                 ($state eq 'change_settings' || $state eq 'change_members' ||                  ($state eq 'change_settings' || $state eq 'change_members' ||
                  $state eq 'change_privs' || $state eq 'add_members' ||                   $state eq 'change_privs' || $state eq 'add_members' ||
                  $state eq 'pick_members')) {                   $state eq 'pick_members')) {
             $loaditems =   $loaditems{'onload'} = 
              'onload="javascript:setFormElements(document.'.$state.')"';      'javascript:setFormElements(document.'.$state.')';
     }      }
     return $loaditems;      return \%loaditems;
 }  }
   
 sub footer {  sub footer {
Line 1202  sub membership_options { Line 1253  sub membership_options {
                 'meof' => 'members of the new group.',                  'meof' => 'members of the new group.',
                 'admg' => 'additional members of the group.',                  'admg' => 'additional members of the group.',
                 'ifno' => 'If you do not wish to add members when you first '.                  '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',                  'acty' => 'Access types',
                 'coro' => 'Course roles',                  'coro' => 'Course roles',
                 'cose' => 'Course sections',                  'cose' => 'Course sections',
Line 1212  sub membership_options { Line 1264  sub membership_options {
                    previous => &mt('Previously had access'),                     previous => &mt('Previously had access'),
                    future => &mt('Will have future access'),                     future => &mt('Will have future access'),
                    );                     );
                                                                                    
     my @roles = ('st','cc','in','ta','ep','cr');      my @roles = ('st','cc','in','ta','ep','cr');
   
     my @sections = keys(%{$sectioncount});      my @sections = keys(%{$sectioncount});
Line 1224  sub membership_options { Line 1276  sub membership_options {
     <td colspan="3">      <td colspan="3">
      <b>'.$lt{'gmem'}.'</b><br/>'.$lt{'picr'});       <b>'.$lt{'gmem'}.'</b><br/>'.$lt{'picr'});
     if ($action eq 'create') {      if ($action eq 'create') {
         $r->print($lt{'meof'}.'<br />'.$lt{'ifno'});          $r->print($lt{'meof'}.'<br />'.$lt{'ifno'}.'<br />'.$lt{'asub'});
     } else {      } else {
         $r->print($lt{'admg'});          $r->print($lt{'admg'});
     }      }
Line 1248  sub membership_options { Line 1300  sub membership_options {
     $r->print(&Apache::lonhtmlcommon::role_select_row(\@roles));      $r->print(&Apache::lonhtmlcommon::role_select_row(\@roles));
     if (@sections > 0) {      if (@sections > 0) {
         @sections = sort {$a cmp $b} @sections;          @sections = sort {$a cmp $b} @sections;
         unshift(@sections,'_all'); # Put 'all' at the front of the list          unshift(@sections,'all'); # Put 'all' at the front of the list
         unshift(@sections,'_nosec'); # Put 'no sections' next          unshift(@sections,'none'); # Put 'no sections' next
         $r->print('<td>&nbsp;</td>          $r->print('<td>&nbsp;</td>
                    <td colspan="3" align="center" valign="top">'.                     <td colspan="3" align="center" valign="top">'.
         &sections_selection(\@sections,'sectionpick').'</td>');          &sections_selection(\@sections,'sectionpick').'</td>');
Line 1270  sub sections_selection { Line 1322  sub sections_selection {
         $numvisible = @{$sections};          $numvisible = @{$sections};
     }      }
     foreach my $sec (@{$sections}) {      foreach my $sec (@{$sections}) {
         if ($sec eq '_all') {          if ($sec eq 'all') {
             $section_sel .= '  <option value="'.$sec.'" />all sections'."\n";              $section_sel .= '  <option value="'.$sec.'" />all sections'."\n";
         } elsif ($sec eq '_nosec') {          } elsif ($sec eq 'none') {
             $section_sel .= '  <option value="'.$sec.'" />no section'."\n";               $section_sel .= '  <option value="'.$sec.'" />no section'."\n"; 
         } else {          } else {
             $section_sel .= '  <option value="'.$sec.'" />'.$sec."\n";              $section_sel .= '  <option value="'.$sec.'" />'.$sec."\n";
Line 2072  sub current_membership { Line 2124  sub current_membership {
                 my($end,$start,@userprivs) = split(/:/,$membership{$key});                  my($end,$start,@userprivs) = split(/:/,$membership{$key});
                 unless ($start == -1) {                  unless ($start == -1) {
                     $allnames{$udom}{$uname} = 1;                      $allnames{$udom}{$uname} = 1;
                     %{$current{$user}} = ();                      $current{$user} = {
                     $current{$user}{uname} = $uname;   uname     => $uname,
                     $current{$user}{udom} = $udom;   udom      => $udom,
                     $current{$user}{start} =    start     => &Apache::lonlocal::locallocaltime($start),
                                      &Apache::lonlocal::locallocaltime($start);   currtools => [];
    newtools  => [];
       };
   
                     if ($end == 0) {                      if ($end == 0) {
                         $current{$user}{end} =  'No end date';                          $current{$user}{end} =  'No end date';
                     } else {                      } else {
Line 2094  sub current_membership { Line 2149  sub current_membership {
                         $current{$user}{changestate} = 'expire';                          $current{$user}{changestate} = 'expire';
                         $num_expire ++;                          $num_expire ++;
                     }                      }
                     @{$current{$user}{currtools}} = ();  
                     @{$current{$user}{newtools}} = ();  
                     if (@userprivs > 0) {                      if (@userprivs > 0) {
                         foreach my $tool (sort(keys(%{$fixedprivs}))) {                          foreach my $tool (sort(keys(%{$fixedprivs}))) {
                             foreach my $priv (keys(%{$$fixedprivs{$tool}})) {                              foreach my $priv (keys(%{$$fixedprivs{$tool}})) {
Line 2308  END Line 2361  END
                         $r->print('<td align="left"><small>');                          $r->print('<td align="left"><small>');
                         if ($granularity eq 'Yes') {                          if ($granularity eq 'Yes') {
                             foreach my $tool (@{$current{$user}{newtools}}) {                              foreach my $tool (@{$current{$user}{newtools}}) {
                                 $r->print('<nobr><label><input type="checkbox"                                    $r->print('<nobr><label><input type="checkbox"
                                           name="user_'.$tool.'" value="'.                                            name="user_'.$tool.'" value="'.
                                           $user.'" />'.$tool.                                            $user.'" />'.$tool.
                                           '</label></nobr>&nbsp;&nbsp;&nbsp;');                                            '</label></nobr>&nbsp;&nbsp;&nbsp;');
Line 2589  sub member_privileges_form { Line 2642  sub member_privileges_form {
         }          }
         $specificity = $env{'form.specificity'};          $specificity = $env{'form.specificity'};
     } else {      } else {
         @defprivs = @{$$stored{'defpriv'}};          if (defined($$stored{'defpriv'})) {
               @defprivs = @{$$stored{'defpriv'}};
           }
         $specificity = $$stored{'specificity'};          $specificity = $$stored{'specificity'};
     }      }
     my @showtools;      my @showtools;
Line 2711  END Line 2766  END
                           '<br />');                            '<br />');
                 &display_defprivs($r,$tabcol,$rowColor1,$rowColor2,$tools,                  &display_defprivs($r,$tabcol,$rowColor1,$rowColor2,$tools,
                             $toolprivs,\@defprivs);                              $toolprivs,\@defprivs);
                                                                                         
             }              }
         } else {          } else {
             if (keys(%{$usertools}) > 0) {              if (keys(%{$usertools}) > 0) {
Line 2774  sub process_request { Line 2828  sub process_request {
             @defprivs = @temp;               @defprivs = @temp; 
         }          }
     } else {      } else {
         @defprivs = @{$$stored{'defpriv'}};          if (defined($$stored{'defpriv'})) {
               @defprivs = @{$$stored{'defpriv'}};
           }
     }      }
   
     my $outcome;      my $outcome;
Line 2810  sub write_group_data { Line 2866  sub write_group_data {
                              'creation','modified','creator','granularity',                               'creation','modified','creator','granularity',
                              'specificity','autoadd','autodrop');                               'specificity','autoadd','autodrop');
     my @mult_attributes = ('roles','types','sectionpick','defpriv');      my @mult_attributes = ('roles','types','sectionpick','defpriv');
                                                                                       
     my %groupinfo = (      my %groupinfo = (
                      description => $esc_description,                       description => $esc_description,
                      startdate => $startdate,                       startdate => $startdate,
Line 2849  sub write_group_data { Line 2905  sub write_group_data {
     }      }
     my $autosec;      my $autosec;
     my @autorole = &Apache::loncommon::get_env_multiple('form.autorole');      my @autorole = &Apache::loncommon::get_env_multiple('form.autorole');
                                                                                       
     foreach my $role (@autorole) {      foreach my $role (@autorole) {
         if (defined($env{'form.sec_'.$role})) {          if (defined($env{'form.sec_'.$role})) {
             my @autosections=&Apache::loncommon::get_env_multiple('form.sec_'.              my @autosections=&Apache::loncommon::get_env_multiple('form.sec_'.
                                                                   $role);                                                                    $role);
             if (grep/^_all$/,@autosections) {  
                 @autosections = sort {$a cmp $b} keys(%{$sectioncount});  
             }  
             $autosec .= '<role id="'.$role.'">';              $autosec .= '<role id="'.$role.'">';
             foreach my $sec (@autosections) {              foreach my $sec (@autosections) {
                 $autosec .= '<section>'.$sec.'</section>';                  $autosec .= '<section>'.$sec.'</section>';
Line 2900  sub process_membership { Line 2953  sub process_membership {
     my $num_ok = 0;      my $num_ok = 0;
     my $num_fail = 0;      my $num_fail = 0;
     my %group_privs = ();      my %group_privs = ();
       my %curr_privs = ();
       my %curr_start = ();
       my %curr_end = ();
     my %tooltype = ();      my %tooltype = ();
   
     foreach my $tool (@{$tools}) {      foreach my $tool (@{$tools}) {
Line 2938  sub process_membership { Line 2994  sub process_membership {
     my @expire = ();      my @expire = ();
     my @deletion = ();      my @deletion = ();
     my @reenable = ();      my @reenable = ();
       my @unchanged = ();
     if ($state eq 'memresult') {      if ($state eq 'memresult') {
         if (ref($$memchg{'activate'}) eq 'ARRAY') {          if (ref($$memchg{'activate'}) eq 'ARRAY') {
             @activate = @{$$memchg{'activate'}};              @activate = @{$$memchg{'activate'}};
Line 2951  sub process_membership { Line 3008  sub process_membership {
         if (ref($$memchg{'reenable'}) eq 'ARRAY') {          if (ref($$memchg{'reenable'}) eq 'ARRAY') {
             @reenable = @{$$memchg{'reenable'}};              @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) {          if (@expire + @deletion > 0) {
             my %membership = &Apache::lonnet::get_group_membership($cdom,$cnum,  
                                                                    $groupname);  
             foreach my $user (@expire) {              foreach my $user (@expire) {
                 my ($currend,$currstart,@userprivs) =                   my $savestart = $curr_start{$user};
                                   split(/:/,$membership{$groupname.':'.$user});                  if ($savestart > $now) {
                 $group_privs{$user} = join(':',@userprivs);                       $savestart = $now;
                 if ($currstart > $now) {  
                     $currstart = $now;  
                 }                  }
                 $usersettings{$groupname.':'.$user} = $now.':'.$currstart.':'.                  $usersettings{$groupname.':'.$user} = $now.':'.$savestart.':'.
                                                       $group_privs{$user};                                                        $curr_privs{$user};
                 if (&Apache::lonnet::modify_group_roles($cdom,$cnum,$groupname,                  if (&Apache::lonnet::modify_group_roles($cdom,$cnum,$groupname,
                                                        $user,$now,$currstart,                                                         $user,$now,$savestart,
                                                        $group_privs{$user}) eq 'ok') {                                                         $curr_privs{$user}) eq 'ok') {
                     push(@{$added{'expired'}},$user);                      push(@{$added{'expired'}},$user);
                     $num_ok ++;                      $num_ok ++;
                 } else {                  } else {
Line 2989  sub process_membership { Line 3050  sub process_membership {
     }      }
   
     foreach my $user (sort(keys(%{$usertools}))) {      foreach my $user (sort(keys(%{$usertools}))) {
           if ((grep(/^$user$/,@expire)) || (grep(/^$user$/,@deletion))) {
               next;
           }
         my $type;          my $type;
         my $start = $startdate;          my $start = $startdate;
         my $end = $enddate;          my $end = $enddate;
         if ($state eq 'memresult') {          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';              $type = 'modified';
             if (@activate > 0) {              if (@activate > 0) {
                 if (grep/^$user$/,@activate) {                  if (grep/^$user$/,@activate) {
                     $start = $now;                      $start = $now;
                       $end = $enddate;
                     $type = 'activated';                      $type = 'activated';
                 }                  }
             }              }
             if (@reenable > 0) {              if (@reenable > 0) {
                 if (grep/^$user$/,@reenable) {                  if (grep/^$user$/,@reenable) {
                       $start = $startdate;
                       $end = $enddate;
                     $type = 'reenabled';                      $type = 'reenabled';
                 }                  }
             }              }
Line 3025  sub process_membership { Line 3102  sub process_membership {
     if ($num_ok) {      if ($num_ok) {
         foreach my $type (sort(keys(%added))) {           foreach my $type (sort(keys(%added))) { 
             $r->print(&mt('The following users were successfully [_1]',$type));              $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(&mt(' with the following privileges'));
             }              }
             $r->print(':<br />');              $r->print(':<br />');
Line 3046  sub process_membership { Line 3123  sub process_membership {
                 }                  }
                 $r->print($$userdata{$user}[$$idx{fullname}].'&nbsp;-&nbsp;'.$user.$privlist.'<br />');                  $r->print($$userdata{$user}[$$idx{fullname}].'&nbsp;-&nbsp;'.$user.$privlist.'<br />');
             }              }
               $r->print('<br />');
         }          }
     }      }
     if ($num_fail) {      if ($num_fail) {
Line 3055  sub process_membership { Line 3133  sub process_membership {
                 $r->print($$userdata{$user}[$$idx{fullname}].' - '.$user.'<br />');                  $r->print($$userdata{$user}[$$idx{fullname}].' - '.$user.'<br />');
             }              }
         }          }
           $r->print('<br />');
       }
       if (@unchanged > 0) {
           $r->print(&mt('No change occurred for the following users:<br />'));
           foreach my $user (sort(@unchanged)) {
               $r->print($$userdata{$user}[$$idx{fullname}].' - '.$user.'<br />');
           }
           $r->print('<br />');
     }      }
     if ($roster_result eq 'ok') {      if ($roster_result eq 'ok') {
         $r->print('<br />Group membership list updated.');          $r->print('<br />'.&mt('Group membership list updated.'));
     } else {      } else {
         $r->print('<br />An error occurred while updating the group membership list -'.$roster_result.'<br />');          $r->print('<br />'.&mt('An error occurred while updating the group membership list -').$roster_result.'<br />');
     }      }
     return;      return;
 }  }
Line 3117  sub automapping { Line 3203  sub automapping {
    <td>&nbsp;</td>     <td>&nbsp;</td>
    <td colspan="3">     <td colspan="3">
    <nobr>'.$$lt{'auad'}.':&nbsp;     <nobr>'.$$lt{'auad'}.':&nbsp;
     <input type="radio" name="autoadd" value="on" />on&nbsp;&nbsp;<input type="radio" name="autoadd" value="off" />off');      <label><input type="radio" name="autoadd" value="on" />on&nbsp;&nbsp;</label><label><input type="radio" name="autoadd" value="off" checked="checked" />off</label>');
     if ($action eq 'modify') {      if ($action eq 'modify') {
         $r->print('&nbsp;&nbsp;&nbsp;&nbsp;('.$$lt{'curr'}.' <b>'.$$lt{$add}.'</b>)');          $r->print('&nbsp;&nbsp;&nbsp;&nbsp;('.$$lt{'curr'}.' <b>'.$$lt{$add}.'</b>)');
     }      }
Line 3129  sub automapping { Line 3215  sub automapping {
    <td>&nbsp;</td>     <td>&nbsp;</td>
    <td colspan="3">     <td colspan="3">
     <nobr>'.$$lt{'auex'}.':&nbsp;      <nobr>'.$$lt{'auex'}.':&nbsp;
     <input type="radio" name="autodrop" value="on" />on&nbsp;&nbsp;<input type="radio" name="autodrop" value="off" />off');      <label><input type="radio" name="autodrop" value="on" />on&nbsp;&nbsp;</label><label><input type="radio" name="autodrop" value="off" checked="checked" />off</label>');
     if ($action eq 'modify') {      if ($action eq 'modify') {
         $r->print('&nbsp;&nbsp;&nbsp;&nbsp;('.$$lt{'curr'}.' <b>'.$$lt{$drop}.'</b>)');          $r->print('&nbsp;&nbsp;&nbsp;&nbsp;('.$$lt{'curr'}.' <b>'.$$lt{$drop}.'</b>)');
     }      }
Line 3152  sub mapping_settings { Line 3238  sub mapping_settings {
     my @sections = keys(%{$sectioncount});      my @sections = keys(%{$sectioncount});
     if (@sections > 0) {      if (@sections > 0) {
         @sections = sort {$a cmp $b} @sections;          @sections = sort {$a cmp $b} @sections;
         unshift(@sections,'_nosec'); # Put 'no sections' next          unshift(@sections,'none'); # Put 'no sections' next
         unshift(@sections,'_all'); # Put 'all' at the front of the list          unshift(@sections,'all'); # Put 'all' at the front of the list
     }      }
     &topic_bar($r,$tabcol,$image,$$lt{'pirs'});      &topic_bar($r,$tabcol,$image,$$lt{'pirs'});
     $r->print('      $r->print('
Line 3177  sub mapping_settings { Line 3263  sub mapping_settings {
         my $plrole=&Apache::lonnet::plaintext($role);          my $plrole=&Apache::lonnet::plaintext($role);
         my $sections_sel;          my $sections_sel;
         if (@sections > 0) {          if (@sections > 0) {
             $sections_sel='<td>'.&sections_selection(\@sections,'sec_'.$role).              if ($role eq 'cc') {
                                                                        '</td>';                  $sections_sel = '<td align="right">'.
                                   &mt('all sections').'<input type="hidden" '. 
                                   'name="sec_cc" value="all" /></td>';
               } else { 
                   $sections_sel='<td align="right">'.
                                 &sections_selection(\@sections,'sec_'.$role).
                                 '</td>';
               }
         }          }
         if ($rowNum %2 == 1) {          if ($rowNum %2 == 1) {
             $rowColor = $rowColor1;              $rowColor = $rowColor1;
Line 3211  sub mapping_settings { Line 3304  sub mapping_settings {
 }  }
   
 sub standard_roles {  sub standard_roles {
     my @roles = ('st','ep','ta','in','cc');      my @roles = ('cc','in','ta','ep','st');
     return @roles;      return @roles;
 }  }
   
Line 3411  function toggleTools(field,caller) { Line 3504  function toggleTools(field,caller) {
   
 sub validate_groupname {  sub validate_groupname {
     my ($groupname,$action,$cdom,$cnum) = @_;      my ($groupname,$action,$cdom,$cnum) = @_;
     my %sectioncount;      my %sectioncount = &Apache::loncommon::get_sections($cdom,$cnum);
     my $numsec=&Apache::loncommon::get_sections($cdom,$cnum,\%sectioncount);      my %curr_groups = &Apache::longroup::coursegroups($cdom,$cnum);
     my %curr_groups;  
     my $numgroups=&Apache::loncommon::coursegroups(\%curr_groups,$cdom,$cnum);  
                                                                                            
     my %lt = &Apache::lonlocal::texthash (      my %lt = &Apache::lonlocal::texthash (
                       igna => 'Invalid group name',                        igna => 'Invalid group name',
                       tgne => 'The group name entered ',                        tgne => 'The group name entered ',
Line 3429  sub validate_groupname { Line 3520  sub validate_groupname {
                       thgr => '- does not correspond to the name of an existing'.                          thgr => '- does not correspond to the name of an existing'.  
                               ' group ',                                    ' group ',    
     );      );
                                                                                            
     my $exitmsg = '<b>'.$lt{'igna'}.'</b><br /><br />'.$lt{'tgne'}.' "'.      my $exitmsg = '<b>'.$lt{'igna'}.'</b><br /><br />'.$lt{'tgne'}.' "'.
                   $groupname.'" ';                    $groupname.'" ';
     my $dupmsg = $lt{'grna'};      my $dupmsg = $lt{'grna'};
Line 3438  sub validate_groupname { Line 3529  sub validate_groupname {
         $earlyout = $exitmsg.$lt{'isno'}.'<br />'.$lt{'gnmo'};          $earlyout = $exitmsg.$lt{'isno'}.'<br />'.$lt{'gnmo'};
         return $earlyout;          return $earlyout;
     }      }
     if ($numsec) {      if (exists($sectioncount{$groupname})) {
         if (exists($sectioncount{$groupname})) {   return $exitmsg.$lt{'cnnb'}.&mt('a section').$lt{'inth'}.
             $earlyout = $exitmsg.$lt{'cnnb'}.&mt('a section').$lt{'inth'}.      '<br />'.$lt{'grna'};
                         '<br />'.$lt{'grna'};  
             return $earlyout;  
         }  
     }      }
     if ($action eq 'create') {      if ($action eq 'create' 
         if ($numgroups) {   && exists($curr_groups{$groupname})) {
             if (exists($curr_groups{$groupname})) {  
                 $earlyout = $exitmsg.$lt{'cnnb'}.&mt('an existing group').   return $exitmsg.$lt{'cnnb'}.&mt('an existing group').
                             $lt{'inth'}.'<br />'.$lt{'grna'};      $lt{'inth'}.'<br />'.$lt{'grna'};
                 return $earlyout;  
             }  
         }  
     } elsif ($action eq 'modify') {      } elsif ($action eq 'modify') {
         unless(exists($curr_groups{$groupname})) {          unless(exists($curr_groups{$groupname})) {
             $earlyout = &mt('Group name:').' '.$groupname.$lt{'thgr'}.$lt{'inth'};              $earlyout = &mt('Group name:').' '.$groupname.$lt{'thgr'}.$lt{'inth'};

Removed from v.1.11  
changed lines
  Added in v.1.22


FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>