Diff for /loncom/interface/loncoursegroups.pm between versions 1.15 and 1.20

version 1.15, 2006/05/09 14:38:09 version 1.20, 2006/05/18 22:13:48
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 154  sub display_groups { Line 155  sub display_groups {
         if (!defined($action)) {          if (!defined($action)) {
             $action = 'view';              $action = 'view';
         }          }
         my %curr_groups = &Apache::loncommon::coursegroups($cdom,$cnum);          my %curr_groups = &Apache::longroup::coursegroups($cdom,$cnum);
         if (%curr_groups) {          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());
Line 182  END Line 183  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 245  END Line 246  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>';                        $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>');
Line 267  END Line 268  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 = &Apache::loncommon::coursegroups($cdom,$cnum);              my %curr_groups = &Apache::longroup::coursegroups($cdom,$cnum);
             if (%curr_groups) {              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 433  sub group_administration { Line 434  sub group_administration {
                                    );                                     );
     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'}} = (      %{$elements{'create'}{'pick_members'}} = (
Line 454  sub group_administration { Line 458  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';
Line 473  sub group_administration { Line 476  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 558  sub group_administration { Line 561  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 'addresult') || ($state eq 'memresult')))) {
         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) {
Line 808  function changeSort(caller) { Line 811  function changeSort(caller) {
   
 sub retrieve_settings {  sub retrieve_settings {
     my ($cdom,$cnum,$groupname) = @_;      my ($cdom,$cnum,$groupname) = @_;
     my %curr_groups = &Apache::loncommon::coursegroups($cdom,$cnum,$groupname);      my %curr_groups = &Apache::longroup::coursegroups($cdom,$cnum,$groupname);
   
     return if (!%curr_groups);      return if (!%curr_groups);
   
     my %groupinfo =       my %groupinfo = 
  &Apache::loncommon::get_group_settings($curr_groups{$groupname});   &Apache::longroup::get_group_settings($curr_groups{$groupname});
   
     my %stored;      my %stored;
   
Line 850  sub retrieve_settings { Line 853  sub retrieve_settings {
     $stored{'autodrop'} = $groupinfo{'autodrop'};      $stored{'autodrop'} = $groupinfo{'autodrop'};
     if (exists($groupinfo{'autosec'})) {      if (exists($groupinfo{'autosec'})) {
  foreach my $role (sort(keys(%{$groupinfo{'autosec'}}))) {   foreach my $role (sort(keys(%{$groupinfo{'autosec'}}))) {
     foreach my $section (@{$groupinfo{'autosec'}{$role}}) {              if (ref($groupinfo{'autosec'}{$role}) eq 'ARRAY') {
  push (@{$stored{'sec_'.$role}},$section);          foreach my $section (@{$groupinfo{'autosec'}{$role}}) {
     }              push (@{$stored{'sec_'.$role}},$section);
     if (@{$groupinfo{'autosec'}{$role}} > 0) {          }
  push(@{$stored{'autorole'}},$role);          if (@{$groupinfo{'autosec'}{$role}} > 0) {
     }      push(@{$stored{'autorole'}},$role);
           }
               }
  }   }
     }      }
     return %stored;      return %stored;
Line 1248  sub membership_options { Line 1253  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 1275  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 2589  sub member_privileges_form { Line 2594  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 2773  sub process_request { Line 2780  sub process_request {
             @defprivs = @temp;               @defprivs = @temp; 
         }          }
     } else {      } else {
         @defprivs = @{$$stored{'defpriv'}};          if (defined($$stored{'defpriv'})) {
               @defprivs = @{$$stored{'defpriv'}};
           }
     }      }
   
     my $outcome;      my $outcome;
Line 2853  sub write_group_data { Line 2862  sub write_group_data {
         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 2899  sub process_membership { Line 2905  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 %tooltype = ();      my %tooltype = ();
   
     foreach my $tool (@{$tools}) {      foreach my $tool (@{$tools}) {
Line 2937  sub process_membership { Line 2944  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 2950  sub process_membership { Line 2958  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:([^:]+:[^:]+)$/) {
                   (undef,undef,$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 ($currend,$currstart,$grp_privs) = 
                                   split(/:/,$membership{$groupname.':'.$user});                                split(/:/,$membership{$groupname.':'.$user},3);
                 $group_privs{$user} = join(':',@userprivs);   
                 if ($currstart > $now) {                  if ($currstart > $now) {
                     $currstart = $now;                      $currstart = $now;
                 }                  }
                 $usersettings{$groupname.':'.$user} = $now.':'.$currstart.':'.                  $usersettings{$groupname.':'.$user} = $now.':'.$currstart.':'.
                                                       $group_privs{$user};                                                        $grp_privs;
                 if (&Apache::lonnet::modify_group_roles($cdom,$cnum,$groupname,                  if (&Apache::lonnet::modify_group_roles($cdom,$cnum,$groupname,
                                                        $user,$now,$currstart,                                                         $user,$now,$currstart,
                                                        $group_privs{$user}) eq 'ok') {                                                         $grp_privs) eq 'ok') {
                     push(@{$added{'expired'}},$user);                      push(@{$added{'expired'}},$user);
                     $num_ok ++;                      $num_ok ++;
                 } else {                  } else {
Line 2988  sub process_membership { Line 3000  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;
               }
             $type = 'modified';              $type = 'modified';
             if (@activate > 0) {              if (@activate > 0) {
                 if (grep/^$user$/,@activate) {                  if (grep/^$user$/,@activate) {
Line 3024  sub process_membership { Line 3043  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 3045  sub process_membership { Line 3064  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 3054  sub process_membership { Line 3074  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 3116  sub automapping { Line 3144  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 3128  sub automapping { Line 3156  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 3151  sub mapping_settings { Line 3179  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 3176  sub mapping_settings { Line 3204  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 3210  sub mapping_settings { Line 3245  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 3410  function toggleTools(field,caller) { Line 3445  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 = &Apache::loncommon::coursegroups($cdom,$cnum);  
   
     my %lt = &Apache::lonlocal::texthash (      my %lt = &Apache::lonlocal::texthash (
                       igna => 'Invalid group name',                        igna => 'Invalid group name',
Line 3436  sub validate_groupname { Line 3470  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' 
  && exists($curr_groups{$groupname})) {   && exists($curr_groups{$groupname})) {

Removed from v.1.15  
changed lines
  Added in v.1.20


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