Diff for /loncom/interface/lonpreferences.pm between versions 1.196.4.28.2.1 and 1.238

version 1.196.4.28.2.1, 2022/09/19 19:49:26 version 1.238, 2021/03/06 19:44:12
Line 31 Line 31
 package Apache::lonpreferences;  package Apache::lonpreferences;
   
 use strict;  use strict;
   use LONCAPA;
 use Apache::Constants qw(:common);  use Apache::Constants qw(:common);
 use Apache::File;  use Apache::File;
 use Apache::loncommon();  use Apache::loncommon();
Line 39  use Apache::lonlocal; Line 40  use Apache::lonlocal;
 use Apache::lonnet;  use Apache::lonnet;
 use LONCAPA::lonauthcgi();  use LONCAPA::lonauthcgi();
 use LONCAPA();  use LONCAPA();
 use DateTime::TimeZone();  
   
 ################################################################  ################################################################
 #                       Handler subroutines                    #  #                       Handler subroutines                    #
Line 165  sub texenginechanger { Line 165  sub texenginechanger {
     my %mathchoices=('' => 'Default',      my %mathchoices=('' => 'Default',
      'tth' => 'tth (TeX to HTML)',       'tth' => 'tth (TeX to HTML)',
      #'ttm' => 'TeX to MathML',       #'ttm' => 'TeX to MathML',
                      'MathJax' => 'MathJax',       'MathJax' => 'MathJax',
      'mimetex' => 'mimetex (Convert to Images)',       'mimetex' => 'mimetex (Convert to Images)',
                      'raw' => 'Raw (Screen Reader)'                       'raw' => 'Raw (Screen Reader)'
                      );                       );
Line 182  sub texenginechanger { Line 182  sub texenginechanger {
       'change'   => 'Save',        'change'   => 'Save',
       'exmpl'    => 'Examples',        'exmpl'    => 'Examples',
       'mathjax'  => 'MathJax:',        'mathjax'  => 'MathJax:',
       'mathjaxinfo' =>  'MathJax provides rendered equations whose source code can be extracted in TeX and MathML formats by right clicking the equation.',        'mathjaxinfo' => 'MathJax provides rendered equations whose source code can be extracted in TeX and MathML formats by right clicking the equation.',
       'tth'      => 'tth (TeX to HTML):',        'tth'      => 'tth (TeX to HTML):',
       'mimetex'  => 'mimetex (Convert to Images):',        'mimetex'  => 'mimetex (Convert to Images):',
     );      );
Line 280  sub rolesprefchanger { Line 280  sub rolesprefchanger {
     my $hotlist_n=$userenv{'recentrolesn'};      my $hotlist_n=$userenv{'recentrolesn'};
     my ($checkedon,$checkedoff);      my ($checkedon,$checkedoff);
     if ($hotlist_flag) {      if ($hotlist_flag) {
         $checkedon = 'checked="checked"';    $checkedon = 'checked="checked"';
     } else {      } else {
         $checkedoff = 'checked="checked"';          $checkedoff = 'checked="checked"';
     }      }
Line 683  sub verify_and_change_clicker { Line 683  sub verify_and_change_clicker {
     my $r = shift;      my $r = shift;
     my $user       = $env{'user.name'};      my $user       = $env{'user.name'};
     my $domain     = $env{'user.domain'};      my $domain     = $env{'user.domain'};
       my $uhome      = $env{'user.home'};
     my $newclickers  = $env{'form.clickers'};      my $newclickers  = $env{'form.clickers'};
       my $message;
     $newclickers=~s/[^\w\:\-]+/\,/gs;      $newclickers=~s/[^\w\:\-]+/\,/gs;
     $newclickers=~tr/a-z/A-Z/;      $newclickers=~tr/a-z/A-Z/;
     $newclickers=~s/[\:\-]+/\-/g;      $newclickers=~s/[\:\-]+/\-/g;
     $newclickers=~s/\,+/\,/g;      $newclickers=~s/\,+/\,/g;
     $newclickers=~s/^\,//;      $newclickers=~s/^\,//;
     $newclickers=~s/\,$//;      $newclickers=~s/\,$//;
     &Apache::lonnet::put('environment',{'clickers' => $newclickers});      my @oldclickers = split(/,/,$env{'environment.clickers'});
     &Apache::lonnet::appenv({'environment.clickers' => $newclickers});      my @newclickers = split(/,/,$newclickers);
     my $message=&Apache::lonhtmlcommon::confirm_success(&mt('Registering clickers: [_1]',$newclickers));      my %newuniq;
       map { $newuniq{$_} = 1; }  @newclickers;
       @newclickers = sort(keys(%newuniq));
       my @differences = &Apache::loncommon::compare_arrays(\@oldclickers,\@newclickers);
       if (@differences) {
           my $putres = &Apache::lonnet::put('environment',{'clickers' => $newclickers});
           if ($putres eq 'ok') {
               my @adds = ();
               my @dels = ();
               foreach my $item (@differences) {
                   if (grep(/^\Q$item\E$/,@newclickers)) {
                       push(@adds,$item);
                   } else {
                       push(@dels,$item);
                   }
               }
               if (@dels) {
                    my %delclicker;
                    map { $delclicker{$_} = $user; } @dels;
                    my $putresult = &Apache::lonnet::iddel($domain,\%delclicker,$uhome,'clickers');
               }
               if (@adds) {
                    my %addclicker;
                    map { $addclicker{$_} = $user; } @adds;
                    my $putresult = &Apache::lonnet::updateclickers($domain,'add',\%addclicker,$uhome,1);
               }
               &Apache::lonnet::appenv({'environment.clickers' => $newclickers});
               $message=&Apache::lonhtmlcommon::confirm_success(&mt('Registering clickers: [_1]',$newclickers));
           } else {
               $message=&Apache::lonhtmlcommon::confirm_success(&mt('Error saving clicker ID').1);
           }
       } else {
           $message='<span class="LC_info">'.&mt('Clicker information unchanged').'</span>';
       }
     $message=&Apache::loncommon::confirmwrapper($message);      $message=&Apache::loncommon::confirmwrapper($message);
     &print_main_menu($r, $message);      &print_main_menu($r, $message);
 }  }
Line 1142  sub colorschanger { Line 1177  sub colorschanger {
     foreach my $item (sort(keys(%colortypes))) {      foreach my $item (sort(keys(%colortypes))) {
        my $curcol=&Apache::loncommon::designparm($function.'.'.$item,$domain);         my $curcol=&Apache::loncommon::designparm($function.'.'.$item,$domain);
        $chtable.=&Apache::loncommon::start_data_table_row().         $chtable.=&Apache::loncommon::start_data_table_row().
                  '<td>'.$colortypes{$item}.'<td><input name="'.$item.     '<td>'.$colortypes{$item}.'<td><input name="'.$item.
                  '" class="colorchooser"  size="10" value="'.$curcol.          '" class="colorchooser"  size="10" value="'.$curcol.
                  '" /></td>'.  '" /></td>'.
          &Apache::loncommon::end_data_table_row()."\n";      &Apache::loncommon::end_data_table_row()."\n";
     }      }
     my $end_data_table = &Apache::loncommon::end_data_table();      my $end_data_table = &Apache::loncommon::end_data_table();
     my $pjump_def = &Apache::lonhtmlcommon::pjump_javascript_definition();      my $pjump_def = &Apache::lonhtmlcommon::pjump_javascript_definition();
Line 1197  sub verify_and_change_colors { Line 1232  sub verify_and_change_colors {
     my $message='';      my $message='';
     foreach my $item (keys(%colortypes)) {      foreach my $item (keys(%colortypes)) {
         my $color=$env{'form.'.$item};          my $color=$env{'form.'.$item};
         if (!($color =~ /^#/)) {   if (!($color =~ /^#/)) {
             $color = '#' . $color;      $color = '#' . $color;
         }   }
         my $entry='color.'.$function.'.'.$item;          my $entry='color.'.$function.'.'.$item;
  if (($color=~/^\#[0-9A-Fa-f]{6}$/) && (!$env{'form.resetall'})) {   if (($color=~/^\#[0-9A-Fa-f]{6}$/) && (!$env{'form.resetall'})) {
     &Apache::lonnet::put('environment',{$entry => $color});      &Apache::lonnet::put('environment',{$entry => $color});
Line 1230  sub passwordchanger { Line 1265  sub passwordchanger {
     # This function is a bit of a mess....      # This function is a bit of a mess....
     # Passwords are encrypted using londes.js (DES encryption)      # Passwords are encrypted using londes.js (DES encryption)
     $errormessage = ($errormessage || '');      $errormessage = ($errormessage || '');
     my ($user,$domain,$currentpass,$clientip);      my ($user,$domain,$currentpass);
     $clientip = &Apache::lonnet::get_requestor_ip($r);  
     &Apache::lonhtmlcommon::add_breadcrumb(      &Apache::lonhtmlcommon::add_breadcrumb(
  { href => '/adm/preferences?action=changepass',   { href => '/adm/preferences?action=changepass',
                   text => 'Change Password'});                    text => 'Change Password'});
Line 1246  sub passwordchanger { Line 1280  sub passwordchanger {
             $caller = 'preferences';              $caller = 'preferences';
         }          }
         my ($blocked,$blocktext) =          my ($blocked,$blocktext) =
             &Apache::loncommon::blocking_status('passwd',$clientip);              &Apache::loncommon::blocking_status('passwd');
         if ($blocked) {          if ($blocked) {
             $r->print('<p class="LC_warning">'.$blocktext.'</p>');              $r->print('<p class="LC_warning">'.$blocktext.'</p>');
             return;              return;
Line 1268  sub passwordchanger { Line 1302  sub passwordchanger {
                 $domain = $data{'domain'};                  $domain = $data{'domain'};
                 $currentpass = $data{'temppasswd'};                  $currentpass = $data{'temppasswd'};
                 my ($blocked,$blocktext) =                  my ($blocked,$blocktext) =
                     &Apache::loncommon::blocking_status('passwd',$clientip,$user,$domain);                      &Apache::loncommon::blocking_status('passwd',$user,$domain);
                 if ($blocked) {                  if ($blocked) {
                     $r->print('<p class="LC_warning">'.$blocktext.'</p>');                      $r->print('<p class="LC_warning">'.$blocktext.'</p>');
                     return;                      return;
Line 1285  sub passwordchanger { Line 1319  sub passwordchanger {
         } else {          } else {
             $r->print(              $r->print(
                 '<p class="LC_warning">'                  '<p class="LC_warning">'
                 .&mt('Sorry, the URL generated when you requested reset of'                 .&mt('Sorry, the URL generated when you requested reset of'
                     .' your password contained incomplete information.')                     .' your password contained incomplete information.')
                 .'</p>'                 .'</p>'
             );              );
             return;              return;
         }          }
Line 1402  sub jscript_send { Line 1436  sub jscript_send {
             var posspass = this.document.client.elements.newpass_1.value;              var posspass = this.document.client.elements.newpass_1.value;
             if (min > 0) {              if (min > 0) {
                 if (posspass.length < min) {                  if (posspass.length < min) {
                     errors.push("$js_lt{'short'}");                       errors.push("$js_lt{'short'}");
                 }                  }
             }              }
             if (currauth == 'internal:') {              if (currauth == 'internal:') {
Line 1431  sub jscript_send { Line 1465  sub jscript_send {
                         } else if (rules[i] == 'spec') {                          } else if (rules[i] == 'spec') {
                             var pattern = /^[!@#$%^&*()_+\\-=\\[\\]{};':"\\\|,.<a>\\/?]/;                              var pattern = /^[!@#$%^&*()_+\\-=\\[\\]{};':"\\\|,.<a>\\/?]/;
                             if (!posspass.match(pattern)) {                              if (!posspass.match(pattern)) {
                                 errors.push("$js_lt{'spec'}");                                   errors.push("$js_lt{'spec'}");
                             }                              }
                         }                          }
                     }                      }
Line 1589  sub server_form { Line 1623  sub server_form {
   
 sub verify_and_change_password {  sub verify_and_change_password {
     my ($r,$caller,$mailtoken,$timelimit,$extrafields,$ended) = @_;      my ($r,$caller,$mailtoken,$timelimit,$extrafields,$ended) = @_;
     my ($user,$domain,$homeserver,$clientip);      my ($user,$domain,$homeserver);
     if ($caller eq 'reset_by_email') {      if ($caller eq 'reset_by_email') {
         $user       = $env{'form.uname'};          $user       = $env{'form.uname'};
         $domain     = $env{'form.udom'};          $domain     = $env{'form.udom'};
Line 1612  sub verify_and_change_password { Line 1646  sub verify_and_change_password {
         $domain     = $env{'user.domain'};          $domain     = $env{'user.domain'};
         $homeserver = $env{'user.home'};          $homeserver = $env{'user.home'};
     }      }
     $clientip = &Apache::lonnet::get_requestor_ip($r);  
     my ($blocked,$blocktext) =      my ($blocked,$blocktext) =
         &Apache::loncommon::blocking_status('passwd',$clientip,$user,$domain);          &Apache::loncommon::blocking_status('passwd',$user,$domain);
     if ($blocked) {      if ($blocked) {
         $r->print('<p class="LC_warning">'.$blocktext.'</p>');          $r->print('<p class="LC_warning">'.$blocktext.'</p>');
         if ($caller eq 'reset_by_email') {          if ($caller eq 'reset_by_email') {
Line 1725  ENDERROR Line 1758  ENDERROR
     } else {      } else {
         my $warning = &Apache::loncommon::check_passwd_rules($domain,$newpass1);          my $warning = &Apache::loncommon::check_passwd_rules($domain,$newpass1);
         if ($warning) {          if ($warning) {
     &passwordchanger($r,'<span class="LC_warning">'.              &passwordchanger($r,'<span class="LC_warning">'.
                              $warning.                              $warning.
      &mt('Please try again.').'</span>',                              &mt('Please try again.').'</span>',
                              $caller,$mailtoken,$timelimit,$extrafields);                              $caller,$mailtoken,$timelimit,$extrafields);
             if ($caller eq 'reset_by_email') {              if ($caller eq 'reset_by_email') {
                 return 'rules';                  return 'rules';
             } else {              } else {
Line 2094  sub change_authoring_settings { Line 2127  sub change_authoring_settings {
   
 sub lockednameschanger {  sub lockednameschanger {
     my $r = shift;      my $r = shift;
       &Apache::lonhtmlcommon::add_breadcrumb(
               {   href => '/adm/preferences?action=changelockednames',
                   text => 'Automatic name changes'});
       $r->print(Apache::loncommon::start_page('Automatic name changes'));
       $r->print(Apache::lonhtmlcommon::breadcrumbs('Allow/disallow name updates'));
     my %userenv = &Apache::lonnet::get('environment',['lockedname']);      my %userenv = &Apache::lonnet::get('environment',['lockedname']);
     my $lockedname='';      my $lockedname='';
     my $ended;  
     if (&can_toggle_namelocking()) {      if (&can_toggle_namelocking()) {
         if ($userenv{'lockedname'}) {          if ($userenv{'lockedname'}) {
             $lockedname = ' checked="checked"';              $lockedname = ' checked="checked"';
Line 2114  sub lockednameschanger { Line 2151  sub lockednameschanger {
             }              }
         }          }
         if (keys(%updateable)) {          if (keys(%updateable)) {
             &Apache::lonhtmlcommon::add_breadcrumb(  
                 {   href => '/adm/preferences?action=changelockednames',  
                     text => 'Automatic name changes'});  
             $r->print(Apache::loncommon::start_page('Automatic name changes'));  
             $r->print(Apache::lonhtmlcommon::breadcrumbs('Allow/disallow name updates'));  
             my %longnames = &Apache::lonlocal::texthash (              my %longnames = &Apache::lonlocal::texthash (
                                 firstname  => 'First Name',                                  firstname  => 'First Name',
                                 middlename => 'Middle Name',                                  middlename => 'Middle Name',
Line 2145  ENDSCREEN Line 2177  ENDSCREEN
         } else {          } else {
             my $message = &mt('Based on your institutional affiliation no name information is automatically updated for your LON-CAPA account.');              my $message = &mt('Based on your institutional affiliation no name information is automatically updated for your LON-CAPA account.');
             &print_main_menu($r,$message);              &print_main_menu($r,$message);
             $ended = 1;  
         }          }
     } else {      } else {
         my $message = &mt('You are not permitted to set a user preference for automatic name updates for your LON-CAPA account.');          my $message = &mt('You are not permitted to set a user preference for automatic name updates for your LON-CAPA account.');
         &print_main_menu($r,$message);          &print_main_menu($r,$message);
         $ended = 1;  
     }      }
     return $ended;  
 }  }
   
 sub verify_and_change_lockednames {  sub verify_and_change_lockednames {
Line 2183  sub verify_and_change_lockednames { Line 2212  sub verify_and_change_lockednames {
     &print_main_menu($r,$message);      &print_main_menu($r,$message);
 }  }
   
 sub timezonechanger {  
     my $r = shift;  
     my $uname = $env{'user.name'};  
     my $udom = $env{'user.domain'};  
     if (&Apache::lonnet::usertools_access($uname,$udom,'timezone')) {  
         my $js = <<"ENDSCRIPT";  
 <script type-"text/javascript">  
 // <![CDATA[  
 function toggleTZdisplay(form) {  
     var radioname = 'settimezone';  
     var divid = 'LC_timezone_selector';  
     var num = form.elements[radioname].length;  
     if (num) {  
         var setvis = '';  
         for (var i=0; i<num; i++) {  
             if (form.elements[radioname][i].checked) {  
                 if (form.elements[radioname][i].value == '1') {  
                     if (document.getElementById(divid)) {  
                         document.getElementById(divid).style.display = 'inline-block';  
                     }  
                     setvis = 1;  
                 }  
                 break;  
             }  
         }  
         if (!setvis) {  
             if (document.getElementById(divid)) {  
                 document.getElementById(divid).style.display = 'none';  
             }  
         }  
     }  
     return;  
 }  
 // ]]>  
 </script>  
 ENDSCRIPT  
         my %loaditems = (  
                            onload => 'javascript:toggleTZdisplay(document.prefs);',  
                         );  
         my $args = { 'add_entries' => \%loaditems };  
         &Apache::lonhtmlcommon::add_breadcrumb(  
                 {   href => '/adm/preferences?action=',  
                     text => 'Set Your Time Zone'});  
         $r->print(Apache::loncommon::start_page('Set Your Time Zone',$js,$args));  
         $r->print(Apache::lonhtmlcommon::breadcrumbs('Set Your Time Zone'));  
         my %userenv = &Apache::lonnet::get('environment',['timezone']);  
         my $timezone = $userenv{'timezone'};  
         my %lt = &Apache::lonlocal::texthash(  
                      lctz  => 'Use Time Zone set by LON-CAPA',  
                      owntz => 'Use Time Zone set by you',  
                      save  => 'Save',  
         );  
         my (%checked,$tzsty);  
         if ($userenv{'timezone'} ne '') {  
             $checked{'owntz'} = ' checked="checked"';  
             $tzsty = 'inline-block';  
         } else {  
             $checked{'lctz'} = ' checked="checked"';  
             $tzsty = 'none';  
         }  
         my $onclick = ' onclick="javascript:toggleTZdisplay(this.form);"';  
         my $selector = &Apache::loncommon::select_timezone('timezone',$timezone,undef,1);  
         $r->print(<<"END");  
 <form name="prefs" action="/adm/preferences" method="post">  
 <input type="hidden" name="action" value="verify_and_change_timezone" />  
 <span class="LC_nobreak">  
 <label><input type="radio" name="settimezone" value="0"$checked{'lctz'}$onclick />  
 $lt{'lctz'}</label>&nbsp;&nbsp;&nbsp;&nbsp;  
 <label><input type="radio" name="settimezone" value="1"$checked{'owntz'}$onclick />  
 $lt{'owntz'}</label><div style="display:$tzsty" id="LC_timezone_selector">&nbsp;  
 $selector  
 </div></span><br /><br />  
 <input type="submit" value="$lt{'save'}" />  
 </form>  
 END  
     }  
     return;  
 }  
   
 sub verify_and_change_timezone {  
     my $r = shift;  
     my $currtimezone = $env{'environment.timezone'};  
     my $newtimezone;  
     if ($env{'form.settimezone'}) {  
         $newtimezone = $env{'form.timezone'};  
         if (DateTime::TimeZone->is_valid_name($env{'form.timezone'})) {  
             $newtimezone = $env{'form.timezone'};  
         }  
     }  
     my $message='';  
     if ($newtimezone) {  
         if ($newtimezone eq $currtimezone) {  
             $message = &mt('Time Zone settings unchanged');  
         } else {  
             &Apache::lonnet::put('environment',{'timezone' => $newtimezone});  
             &Apache::lonnet::appenv({'environment.timezone' => $newtimezone});  
             $message=&Apache::lonhtmlcommon::confirm_success(  
                 &mt('Set [_1] to [_2]',  
                     '<i>'.&mt('Your Time Zone').'</i>',  
                     '<tt>"'.$newtimezone.'"</tt>.')).  
                '<br />';  
         }  
     } elsif ($currtimezone) {  
         &Apache::lonnet::del('environment',['timezone']);  
         &Apache::lonnet::delenv('environment.timezone');  
         $message=&Apache::lonhtmlcommon::confirm_success(&mt('Time Zone now set by LON-CAPA'));  
     } else {  
         $message = &mt('Time Zone settings unchanged');  
     }  
     $message=&Apache::loncommon::confirmwrapper($message);  
     &print_main_menu($r,$message);  
     return;  
 }  
   
 sub print_main_menu {  sub print_main_menu {
     my ($r, $message) = @_;      my ($r, $message) = @_;
     # Determine current authentication method      # Determine current authentication method
Line 2311  my %permissions; Line 2226  my %permissions;
 if (&Apache::lonnet::usertools_access($user,$domain,'aboutme')) {  if (&Apache::lonnet::usertools_access($user,$domain,'aboutme')) {
     $permissions{'aboutme'} = 'F';      $permissions{'aboutme'} = 'F';
 }  }
 if (&Apache::lonnet::usertools_access($user,$domain,'timezone')) {  
     $permissions{'timezone'} = 'F';  
 }  
 my @menu=  my @menu=
     ({ categorytitle=>'Personal Data',      ({ categorytitle=>'Personal Data',
  items =>[   items =>[
Line 2356  my @menu= Line 2268  my @menu=
  icon => 'dismath.png',   icon => 'dismath.png',
  linktitle => 'Change how math is displayed.'   linktitle => 'Change how math is displayed.'
     },      },
             {  
                 linktext => 'Time Zone',  
                 url => '/adm/preferences?action=changetimezone',  
                 permission => $permissions{'timezone'},  
                 #help => '',  
                 icon => 'timezone.png',  
                 linktitle => 'Set your time zone.',  
              }  
  ]   ]
     },      },
     { categorytitle=>'Page Display Settings',      { categorytitle=>'Page Display Settings',
Line 2425  push(@{ $menu[0]->{items} }, { Line 2329  push(@{ $menu[0]->{items} }, {
  linktitle => 'Change your password.',   linktitle => 'Change your password.',
  });   });
     }      }
     if ($env{'environment.remote'} eq 'off') {  
 push(@{ $menu[1]->{items} }, {  
         linktext => 'Launch Remote Control',  
         url => '/adm/remote?url=/adm/preferences&amp;action=launch',  
         permission => 'F',  
         #help => '',  
         icon => 'remotecontrol.png',  
         linktitle => 'Launch the remote control for LON-CAPA.',  
         });  
     }else{  
 push(@{ $menu[1]->{items} }, {  
         linktext => 'Collapse Remote Control',  
         url => '/adm/remote?url=/adm/preferences&amp;action=collapse',  
         permission => 'F',  
         #help => '',  
         icon => 'remotecontrol.png',  
         linktitle => 'Collapse the remote control for LON-CAPA.',  
         });  
     }  
   
     if (&can_toggle_namelocking()) {      if (&can_toggle_namelocking()) {
         push(@{ $menu[0]->{items} }, {          push(@{ $menu[0]->{items} }, {
Line 2556  sub handler { Line 2441  sub handler {
           text => $brtxt,            text => $brtxt,
           help => $brhelp,});            help => $brhelp,});
     if(!exists $env{'form.action'}) {      if(!exists $env{'form.action'}) {
     &print_main_menu($r);   &print_main_menu($r);
             $ended = 1;          $ended = 1;
     }elsif($env{'form.action'} eq 'changepass'){      }elsif($env{'form.action'} eq 'changepass'){
         &passwordchanger($r);          &passwordchanger($r);
     }elsif($env{'form.action'} eq 'verify_and_change_pass'){      }elsif($env{'form.action'} eq 'verify_and_change_pass'){
Line 2637  sub handler { Line 2522  sub handler {
  &print_main_menu($r);   &print_main_menu($r);
         $ended = 1;          $ended = 1;
     } elsif ($env{'form.action'} eq 'changelockednames') {      } elsif ($env{'form.action'} eq 'changelockednames') {
         $ended = &lockednameschanger($r);          &lockednameschanger($r);
     } elsif ($env{'form.action'} eq 'verify_and_change_lockednames') {      } elsif ($env{'form.action'} eq 'verify_and_change_lockednames') {
         &verify_and_change_lockednames($r);          &verify_and_change_lockednames($r);
         $ended = 1;          $ended = 1;
     } elsif ($env{'form.action'} eq 'changetimezone') {  
         &timezonechanger($r);  
     } elsif ($env{'form.action'} eq 'verify_and_change_timezone') {  
         &verify_and_change_timezone($r);  
     }      }
   
     # Properly end the HTML page of all preference pages      # Properly end the HTML page of all preference pages

Removed from v.1.196.4.28.2.1  
changed lines
  Added in v.1.238


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