Diff for /loncom/interface/loncreateuser.pm between versions 1.452 and 1.464

version 1.452, 2019/08/27 14:42:57 version 1.464, 2022/11/17 19:07:21
Line 71  use Apache::longroup; Line 71  use Apache::longroup;
 use Apache::lonuserutils;  use Apache::lonuserutils;
 use Apache::loncoursequeueadmin;  use Apache::loncoursequeueadmin;
 use LONCAPA qw(:DEFAULT :match);  use LONCAPA qw(:DEFAULT :match);
   use HTML::Entities;
   
 my $loginscript; # piece of javascript used in two separate instances  my $loginscript; # piece of javascript used in two separate instances
 my $authformnop;  my $authformnop;
Line 246  sub build_tools_display { Line 247  sub build_tools_display {
                    'aboutme'    => "Personal Information Page",                     'aboutme'    => "Personal Information Page",
                    'webdav'     => "WebDAV access to Authoring Spaces (if SSL and author/co-author)",                     'webdav'     => "WebDAV access to Authoring Spaces (if SSL and author/co-author)",
                    'portfolio'  => "Personal User Portfolio",                     'portfolio'  => "Personal User Portfolio",
                      'timezone'   => "Can set Time Zone",
                    'avai'       => "Available",                     'avai'       => "Available",
                    'cusa'       => "availability",                     'cusa'       => "availability",
                    'chse'       => "Change setting",                     'chse'       => "Change setting",
Line 259  sub build_tools_display { Line 261  sub build_tools_display {
                    'lti'        => 'Can request creation of LTI courses',                     'lti'        => 'Can request creation of LTI courses',
                    'requestauthor'  => 'Can request author space',                     'requestauthor'  => 'Can request author space',
     );      );
       $isadv = &Apache::lonnet::is_advanced_user($ccdomain,$ccuname);
     if ($context eq 'requestcourses') {      if ($context eq 'requestcourses') {
         %userenv = &Apache::lonnet::userenvironment($ccdomain,$ccuname,          %userenv = &Apache::lonnet::userenvironment($ccdomain,$ccuname,
                       'requestcourses.official','requestcourses.unofficial',                        'requestcourses.official','requestcourses.unofficial',
Line 272  sub build_tools_display { Line 275  sub build_tools_display {
         $colspan = ' colspan="2"';          $colspan = ' colspan="2"';
         %domconfig =          %domconfig =
             &Apache::lonnet::get_dom('configuration',['requestcourses'],$ccdomain);              &Apache::lonnet::get_dom('configuration',['requestcourses'],$ccdomain);
         $isadv = &Apache::lonnet::is_advanced_user($ccdomain,$ccuname);  
     } elsif ($context eq 'requestauthor') {      } elsif ($context eq 'requestauthor') {
         %userenv = &Apache::lonnet::userenvironment($ccdomain,$ccuname,          %userenv = &Apache::lonnet::userenvironment($ccdomain,$ccuname,
                                                     'requestauthor');                                                      'requestauthor');
Line 286  sub build_tools_display { Line 288  sub build_tools_display {
     } else {      } else {
         %userenv = &Apache::lonnet::userenvironment($ccdomain,$ccuname,          %userenv = &Apache::lonnet::userenvironment($ccdomain,$ccuname,
                           'tools.aboutme','tools.portfolio','tools.blog',                            'tools.aboutme','tools.portfolio','tools.blog',
                           'tools.webdav');                            'tools.webdav','tools.timezone');
         @usertools = ('aboutme','blog','webdav','portfolio');          @usertools = ('aboutme','blog','webdav','portfolio','timezone');
     }      }
     foreach my $item (@usertools) {      foreach my $item (@usertools) {
         my ($custom_access,$curr_access,$cust_on,$cust_off,$tool_on,$tool_off,          my ($custom_access,$curr_access,$cust_on,$cust_off,$tool_on,$tool_off,
             $currdisp,$custdisp,$custradio);              $currdisp,$custdisp,$custradio);
         $cust_off = 'checked="checked" ';          $cust_off = 'checked="checked" ';
         $tool_on = 'checked="checked" ';          $tool_on = 'checked="checked" ';
         $curr_access =            $curr_access =
             &Apache::lonnet::usertools_access($ccuname,$ccdomain,$item,undef,              &Apache::lonnet::usertools_access($ccuname,$ccdomain,$item,undef,
                                               $context);                                                $context,\%userenv,'',
                                                 {'is_adv' => $isadv});
         if ($context eq 'requestauthor') {          if ($context eq 'requestauthor') {
             if ($userenv{$context} ne '') {              if ($userenv{$context} ne '') {
                 $cust_on = ' checked="checked" ';                  $cust_on = ' checked="checked" ';
Line 1616  ENDNOTOOLSPRIV Line 1619  ENDNOTOOLSPRIV
                 if ($newuser) {                  if ($newuser) {
                     $r->print(' onclick="auth_check()" \>'."\n");                      $r->print(' onclick="auth_check()" \>'."\n");
                 } else {                  } else {
                     $r->print('onclick="this.form.submit()" \>'."\n");                      $r->print(' onclick="this.form.submit()" \>'."\n");
                 }                  }
             } else {              } else {
                 $r->print('</fieldset></div>'.                  $r->print('</fieldset></div>'.
Line 2441  sub modify_login_block { Line 2444  sub modify_login_block {
 }  }
   
 sub personal_data_display {  sub personal_data_display {
     my ($ccuname,$ccdomain,$newuser,$context,$inst_results,$rolesarray,      my ($ccuname,$ccdomain,$newuser,$context,$inst_results,$rolesarray,$now,
         $now,$captchaform,$emailusername,$usertype,$usernameset,$condition,$excluded) = @_;          $captchaform,$emailusername,$usertype,$usernameset,$condition,$excluded,$showsubmit) = @_;
     my ($output,%userenv,%canmodify,%canmodify_status);      my ($output,%userenv,%canmodify,%canmodify_status);
     my @userinfo = ('firstname','middlename','lastname','generation',      my @userinfo = ('firstname','middlename','lastname','generation',
                     'permanentemail','id');                      'permanentemail','id');
Line 2552  sub personal_data_display { Line 2555  sub personal_data_display {
         }          }
         $rowcount ++;          $rowcount ++;
         $output .= &Apache::lonhtmlcommon::row_closure(1);          $output .= &Apache::lonhtmlcommon::row_closure(1);
         my $upassone = '<input type="password" name="upass'.$now.'" size="20" autocomplete="off" />';          my $upassone = '<input type="password" name="upass'.$now.'" size="20" autocomplete="new-password" />';
         my $upasstwo = '<input type="password" name="upasscheck'.$now.'" size="20" autocomplete="off" />';          my $upasstwo = '<input type="password" name="upasscheck'.$now.'" size="20" autocomplete="new-password" />';
         $output .= &Apache::lonhtmlcommon::row_title(&mt('Password').'<b>*</b>',          $output .= &Apache::lonhtmlcommon::row_title(&mt('Password').'<b>*</b>',
                                                     'LC_pick_box_title',                                                      'LC_pick_box_title',
                                                     'LC_oddrow_value')."\n".                                                      'LC_oddrow_value')."\n".
Line 2567  sub personal_data_display { Line 2570  sub personal_data_display {
         if ($usernameset eq 'free') {          if ($usernameset eq 'free') {
             my $onclick = "toggleUsernameDisp(this,'selfcreateusername');";               my $onclick = "toggleUsernameDisp(this,'selfcreateusername');"; 
             $output .= &Apache::lonhtmlcommon::row_title($lt{'username'},undef,'LC_oddrow_value')."\n".              $output .= &Apache::lonhtmlcommon::row_title($lt{'username'},undef,'LC_oddrow_value')."\n".
                        &mt('Use e-mail address: ').                         '<span class="LC_nobreak">'.&mt('Use e-mail address: ').
                        '<label><input type="radio" name="emailused" value="1" checked="checked" onclick="'.$onclick.'" />'.&mt('Yes').'</label>'."\n".                         '<label><input type="radio" name="emailused" value="1" checked="checked" onclick="'.$onclick.'" />'.
                        ('&nbsp;'x2).                         &mt('Yes').'</label>'.('&nbsp;'x2).
                        '<label><input type="radio" name="emailused" value="0" onclick="'.$onclick.'" />'.&mt('No').'</label>'."\n".                         '<label><input type="radio" name="emailused" value="0" onclick="'.$onclick.'" />'.
                          &mt('No').'</label></span>'."\n".
                        '<div id="selfcreateusername" style="display: none; font-size: smaller">'.                         '<div id="selfcreateusername" style="display: none; font-size: smaller">'.
                        '<br /><span class="LC_nobreak">'.&mt('Preferred username').                         '<br /><span class="LC_nobreak">'.&mt('Preferred username').
                        '&nbsp;<input type="text" name="username" value="" size="20" autocomplete="off"/>'.                         '&nbsp;<input type="text" name="username" value="" size="20" autocomplete="off"/>'.
Line 2678  sub personal_data_display { Line 2682  sub personal_data_display {
                        &Apache::lonhtmlcommon::row_closure(1)                         &Apache::lonhtmlcommon::row_closure(1)
             $rowcount ++;              $rowcount ++;
         }          }
         my $submit_text = &mt('Create account');          if ($showsubmit) {
         $output .= &Apache::lonhtmlcommon::row_title()."\n".              my $submit_text = &mt('Create account');
                    '<br /><input type="submit" name="createaccount" value="'.              $output .= &Apache::lonhtmlcommon::row_title()."\n".
                    $submit_text.'" />'.                         '<br /><input type="submit" name="createaccount" value="'.
                    '<input type="hidden" name="type" value="'.$usertype.'" />'.                         $submit_text.'" />';
                    &Apache::lonhtmlcommon::row_closure(1);              if ($usertype ne '') {
                   $output .= '<input type="hidden" name="type" value="'.
                              &HTML::Entities::encode($usertype,'\'<>"&').'" />';
               }
               $output .= &Apache::lonhtmlcommon::row_closure(1);
           }
     }      }
     $output .= &Apache::lonhtmlcommon::end_pick_box();      $output .= &Apache::lonhtmlcommon::end_pick_box();
     if (wantarray) {      if (wantarray) {
Line 2906  sub update_user_data { Line 2915  sub update_user_data {
   
     my (%alerts,%rulematch,%inst_results,%curr_rules);      my (%alerts,%rulematch,%inst_results,%curr_rules);
     my @userinfo = ('firstname','middlename','lastname','generation','permanentemail','id');      my @userinfo = ('firstname','middlename','lastname','generation','permanentemail','id');
     my @usertools = ('aboutme','blog','webdav','portfolio');      my @usertools = ('aboutme','blog','webdav','portfolio','timezone');
     my @requestcourses = ('official','unofficial','community','textbook','placement','lti');      my @requestcourses = ('official','unofficial','community','textbook','placement','lti');
     my @requestauthor = ('requestauthor');      my @requestauthor = ('requestauthor');
     my ($othertitle,$usertypes,$types) =       my ($othertitle,$usertypes,$types) = 
Line 3036  sub update_user_data { Line 3045  sub update_user_data {
                                           $env{'form.ccdomain'},$env{'form.ccuname'});                                            $env{'form.ccdomain'},$env{'form.ccuname'});
             }               } 
         }          }
         $r->print('<br />'.&mt('Home server').': '.$uhome.' '.          $r->print('<br />'.&mt('Home Server').': '.$uhome.' '.
                   &Apache::lonnet::hostname($uhome));                    &Apache::lonnet::hostname($uhome));
     } elsif (($env{'form.login'} ne 'nochange') &&      } elsif (($env{'form.login'} ne 'nochange') &&
              ($env{'form.login'} ne ''        )) {               ($env{'form.login'} ne ''        )) {
Line 3051  sub update_user_data { Line 3060  sub update_user_data {
                       &Apache::lonnet::modifyuserauth(                        &Apache::lonnet::modifyuserauth(
        $env{'form.ccdomain'},$env{'form.ccuname'},         $env{'form.ccdomain'},$env{'form.ccuname'},
                        $amode,$genpwd));                         $amode,$genpwd));
             $r->print('<br />'.&mt('Home server').': '.&Apache::lonnet::homeserver              $r->print('<br />'.&mt('Home Server').': '.&Apache::lonnet::homeserver
   ($env{'form.ccuname'},$env{'form.ccdomain'}));    ($env{'form.ccuname'},$env{'form.ccdomain'}));
  } else {   } else {
     # Okay, this is a non-fatal error.      # Okay, this is a non-fatal error.
Line 3082  sub update_user_data { Line 3091  sub update_user_data {
         my %userenv = &Apache::lonnet::get          my %userenv = &Apache::lonnet::get
             ('environment',['firstname','middlename','lastname','generation',              ('environment',['firstname','middlename','lastname','generation',
              'id','permanentemail','portfolioquota','authorquota','inststatus',               'id','permanentemail','portfolioquota','authorquota','inststatus',
              'tools.aboutme','tools.blog','tools.webdav','tools.portfolio',               'tools.aboutme','tools.blog','tools.webdav',
                'tools.portfolio','tools.timezone',
              'requestcourses.official','requestcourses.unofficial',               'requestcourses.official','requestcourses.unofficial',
              'requestcourses.community','requestcourses.textbook',               'requestcourses.community','requestcourses.textbook',
                'requestcourses.lti','requestauthor',
              'reqcrsotherdom.official','reqcrsotherdom.unofficial',               'reqcrsotherdom.official','reqcrsotherdom.unofficial',
              'reqcrsotherdom.community','reqcrsotherdom.textbook',               'reqcrsotherdom.community','reqcrsotherdom.textbook',
              'reqcrsotherdom.placement','requestauthor'],               'reqcrsotherdom.placement'],
               $env{'form.ccdomain'},$env{'form.ccuname'});                $env{'form.ccdomain'},$env{'form.ccuname'});
         my ($tmp) = keys(%userenv);          my ($tmp) = keys(%userenv);
         if ($tmp =~ /^(con_lost|error)/i) {           if ($tmp =~ /^(con_lost|error)/i) { 
Line 3117  sub update_user_data { Line 3128  sub update_user_data {
                 }                  }
             } elsif ($context eq 'author') {              } elsif ($context eq 'author') {
                 if ($rolenum eq $auname && $roledom eq $audom) {                  if ($rolenum eq $auname && $roledom eq $audom) {
                     if (!grep(/^\Q$role\E$/,@userroles)) {                       if (!grep(/^\Q$role\E$/,@userroles)) {
                         push(@userroles,$role);                          push(@userroles,$role);
                     }                      }
                 }                  }
Line 3416  sub update_user_data { Line 3427  sub update_user_data {
                             &Apache::lonnet::appenv(\%newenvhash);                              &Apache::lonnet::appenv(\%newenvhash);
                         }                          }
                     }                      }
                       if ($changed{'aboutme'}) {
                           &Apache::loncommon::devalidate_aboutme_cache($env{'form.ccuname'},
                                                                        $env{'form.ccdomain'});
                       }
                 }                  }
             }              }
             if (keys(%namechanged) > 0) {              if (keys(%namechanged) > 0) {
Line 3585  sub display_userinfo { Line 3600  sub display_userinfo {
          'webdav'         => 'WebDAV Availability',           'webdav'         => 'WebDAV Availability',
          'aboutme'        => 'Personal Information Page Availability',           'aboutme'        => 'Personal Information Page Availability',
          'portfolio'      => 'Portfolio Availability',           'portfolio'      => 'Portfolio Availability',
            'timezone'       => 'Can set own Time Zone',
          'official'       => 'Can Request Official Courses',           'official'       => 'Can Request Official Courses',
          'unofficial'     => 'Can Request Unofficial Courses',           'unofficial'     => 'Can Request Unofficial Courses',
          'community'      => 'Can Request Communities',           'community'      => 'Can Request Communities',
Line 4092  sub update_roles { Line 4108  sub update_roles {
     my $result=&Apache::lonnet::assignrole($env{'form.ccdomain'},      my $result=&Apache::lonnet::assignrole($env{'form.ccdomain'},
                                $env{'form.ccuname'},$url,$role,0,$now,'','',                                 $env{'form.ccuname'},$url,$role,0,$now,'','',
                                $context);                                 $context);
                         $output = &Apache::lonhtmlcommon::confirm_success(&mt('Re-enabling [_1] in [_2]',                      $output = &Apache::lonhtmlcommon::confirm_success(&mt('Re-enabling [_1] in [_2]',
                                         &Apache::lonnet::plaintext($role),                                      &Apache::lonnet::plaintext($role),
                                         &Apache::loncommon::show_role_extent($url,$context,$role)),$result ne "ok").'<br />';                                      &Apache::loncommon::show_role_extent($url,$context,$role)),$result ne "ok").'<br />';
                     if ($result ne "ok") {                      if ($result ne "ok") {
                         $output .= &mt('Error: [_1]',$result).'<br />';                          $output .= &mt('Error: [_1]',$result).'<br />';
                     }                      }
Line 4139  sub update_roles { Line 4155  sub update_roles {
                                                                                                                                                                             
                 # split multiple sections                  # split multiple sections
                 my %sections = ();                  my %sections = ();
                 my $num_sections = &build_roles($env{'form.sec_'.$full},\%sections,$5);                  my $num_sections = &build_roles($env{'form.sec_'.$full},\%sections,$five);
                 if ($num_sections == 0) {                  if ($num_sections == 0) {
                     $r->print(&Apache::loncommon::commit_customrole($udom,$uname,$url,$three,$four,$five,$start,$end,$context));                      $r->print(&Apache::loncommon::commit_customrole($udom,$uname,$url,$three,$four,$five,$start,$end,$context));
                 } else {                  } else {
Line 4162  sub update_roles { Line 4178  sub update_roles {
  # Activate roles for sections with 3 id numbers   # Activate roles for sections with 3 id numbers
  # set start, end times, and the url for the class   # set start, end times, and the url for the class
  my ($one,$two,$three)=($1,$2,$3);   my ($one,$two,$three)=($1,$2,$3);
  my $start = ( $env{'form.start_'.$one.'_'.$two.'_'.$three} ?    my $start = ( $env{'form.start_'.$one.'_'.$two.'_'.$three} ?
       $env{'form.start_'.$one.'_'.$two.'_'.$three} :         $env{'form.start_'.$one.'_'.$two.'_'.$three} :
       $now );        $now );
  my $end   = ( $env{'form.end_'.$one.'_'.$two.'_'.$three} ?    my $end   = ( $env{'form.end_'.$one.'_'.$two.'_'.$three} ?
       $env{'form.end_'.$one.'_'.$two.'_'.$three} :        $env{'form.end_'.$one.'_'.$two.'_'.$three} :
       0 );        0 );
  my $url='/'.$one.'/'.$two;   my $url='/'.$one.'/'.$two;
Line 4175  sub update_roles { Line 4191  sub update_roles {
                 my $num_sections = &build_roles($env{'form.sec_'.$one.'_'.$two.'_'.$three},\%sections,$three);                  my $num_sections = &build_roles($env{'form.sec_'.$one.'_'.$two.'_'.$three},\%sections,$three);
                 my $credits;                  my $credits;
                 if ($three eq 'st') {                  if ($three eq 'st') {
                     if ($showcredits) {                       if ($showcredits) {
                         my $defaultcredits =                           my $defaultcredits = 
                             &Apache::lonuserutils::get_defaultcredits($one,$two);                              &Apache::lonuserutils::get_defaultcredits($one,$two);
                         $credits = $env{'form.credits_'.$one.'_'.$two.'_'.$three};                          $credits = $env{'form.credits_'.$one.'_'.$two.'_'.$three};
Line 4215  sub update_roles { Line 4231  sub update_roles {
     } elsif ($key=~/^form\.act\_([^\_]+)\_([^\_]+)$/) {      } elsif ($key=~/^form\.act\_([^\_]+)\_([^\_]+)$/) {
  # Activate roles for sections with two id numbers   # Activate roles for sections with two id numbers
  # set start, end times, and the url for the class   # set start, end times, and the url for the class
  my $start = ( $env{'form.start_'.$1.'_'.$2} ?    my $start = ( $env{'form.start_'.$1.'_'.$2} ?
       $env{'form.start_'.$1.'_'.$2} :         $env{'form.start_'.$1.'_'.$2} :
       $now );        $now );
  my $end   = ( $env{'form.end_'.$1.'_'.$2} ?    my $end   = ( $env{'form.end_'.$1.'_'.$2} ?
       $env{'form.end_'.$1.'_'.$2} :        $env{'form.end_'.$1.'_'.$2} :
       0 );        0 );
                 my $one = $1;                  my $one = $1;
Line 5350  sub handler { Line 5366  sub handler {
                      '<span class="LC_error">'.&mt('You do not have permission to view change logs').'</span>');                       '<span class="LC_error">'.&mt('You do not have permission to view change logs').'</span>');
         }          }
     } elsif ($env{'form.action'} eq 'helpdesk') {      } elsif ($env{'form.action'} eq 'helpdesk') {
         if (($permission->{'owner'}) || ($permission->{'co-owner'})) {          if (($permission->{'owner'} || $permission->{'co-owner'}) &&
               ($permission->{'cusr'} || $permission->{'view'})) {
             if ($env{'form.state'} eq 'process') {              if ($env{'form.state'} eq 'process') {
                 if ($permission->{'owner'}) {                  if ($permission->{'owner'}) {
                     &update_helpdeskaccess($r,$permission,$brcrum);                      &update_helpdeskaccess($r,$permission,$brcrum);
Line 5780  sub print_main_menu { Line 5797  sub print_main_menu {
              icon => 'helpdesk-access.png',               icon => 'helpdesk-access.png',
              #help => 'Course_Helpdesk_Access',               #help => 'Course_Helpdesk_Access',
              url => '/adm/createuser?action=helpdesk',               url => '/adm/createuser?action=helpdesk',
              permission => ($permission->{'owner'} || $permission->{'co-owner'}),               permission => (($permission->{'owner'} || $permission->{'co-owner'}) &&
                               ($permission->{'view'} || $permission->{'cusr'})),
              linktitle => 'Helpdesk access options',               linktitle => 'Helpdesk access options',
             },              },
             {              {
Line 7147  ENDSCRIPT Line 7165  ENDSCRIPT
     my ($nav_script,$nav_links);      my ($nav_script,$nav_links);
   
 # table header  # table header
     my $tableheader = '<h3>'.      my $heading = '<h3>'.
         &mt('User access logs for: [_1]',          &mt('User access logs for: [_1]',
             &Apache::loncommon::aboutmewrapper(&Apache::loncommon::plainname($uname,$udom),$uname,$udom)).'</h3>'              &Apache::loncommon::aboutmewrapper(&Apache::loncommon::plainname($uname,$udom),$uname,$udom)).'</h3>';
       my $tableheader = $heading
        .&Apache::loncommon::start_data_table_header_row()         .&Apache::loncommon::start_data_table_header_row()
        .'<th>&nbsp;</th>'         .'<th>&nbsp;</th>'
        .'<th>'.&mt('When').'</th>'         .'<th>'.&mt('When').'</th>'
Line 7267  ENDSCRIPT Line 7286  ENDSCRIPT
         $r->print(&Apache::loncommon::end_data_table().          $r->print(&Apache::loncommon::end_data_table().
                   &userlogdisplay_navlinks(\%curr,$more_records));                    &userlogdisplay_navlinks(\%curr,$more_records));
     } else { # No content displayed above      } else { # No content displayed above
         $r->print('<p class="LC_info">'          $r->print($heading.'<p class="LC_info">'
                  .&mt('There are no records to display.')                   .&mt('There are no records to display.')
                  .'</p>');                   .'</p>');
     }      }
Line 7456  sub role_display_filter { Line 7475  sub role_display_filter {
                &mt('Context:').'</b><br /><select name="chgcontext">';                 &mt('Context:').'</b><br /><select name="chgcontext">';
     my @posscontexts;      my @posscontexts;
     if ($context eq 'course') {      if ($context eq 'course') {
         @posscontexts = ('any','automated','updatenow','createcourse','course','domain','selfenroll','requestcourses');          @posscontexts = ('any','automated','updatenow','createcourse','course','domain','selfenroll','requestcourses','chgtype');
     } elsif ($context eq 'domain') {      } elsif ($context eq 'domain') {
         @posscontexts = ('any','domain','requestauthor','domconfig','server');          @posscontexts = ('any','domain','requestauthor','domconfig','server');
     } else {      } else {
         @posscontexts = ('any','author','domain');          @posscontexts = ('any','author','domain');
     }       }
     foreach my $chgtype (@posscontexts) {      foreach my $chgtype (@posscontexts) {
         my $selstr = '';          my $selstr = '';
         if ($curr->{'chgcontext'} eq $chgtype) {          if ($curr->{'chgcontext'} eq $chgtype) {
Line 7505  sub rolechg_contexts { Line 7524  sub rolechg_contexts {
         %lt = &Apache::lonlocal::texthash (          %lt = &Apache::lonlocal::texthash (
                                              any          => 'Any',                                               any          => 'Any',
                                              automated    => 'Automated Enrollment',                                               automated    => 'Automated Enrollment',
                                                chgtype      => 'Enrollment Type/Lock Change',
                                              updatenow    => 'Roster Update',                                               updatenow    => 'Roster Update',
                                              createcourse => 'Course Creation',                                               createcourse => 'Course Creation',
                                              course       => 'User Management in course',                                               course       => 'User Management in course',

Removed from v.1.452  
changed lines
  Added in v.1.464


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