Diff for /loncom/interface/lonpreferences.pm between versions 1.7 and 1.40

version 1.7, 2002/04/03 18:47:39 version 1.40, 2004/03/26 20:26:30
Line 25 Line 25
 #  #
 # http://www.lon-capa.org/  # http://www.lon-capa.org/
 #  #
 # (Internal Server Error Handler  
 #  
 # (Login Screen  
 # 5/21/99,5/22,5/25,5/26,5/31,6/2,6/10,7/12,7/14,  
 # 1/14/00,5/29,5/30,6/1,6/29,7/1,11/9 Gerd Kortemeyer)  
 #  
 # 3/1/1 Gerd Kortemeyer)  
 #  
 # 3/1 Gerd Kortemeyer  
 #  
 # 2/13/02 2/14 2/15 Matthew Hall  # 2/13/02 2/14 2/15 Matthew Hall
 #  #
 # This package uses the "londes.js" javascript code.   # This package uses the "londes.js" javascript code. 
Line 50  use Apache::File; Line 40  use Apache::File;
 use Crypt::DES;  use Crypt::DES;
 use DynaLoader; # for Crypt::DES version  use DynaLoader; # for Crypt::DES version
 use Apache::loncommon();  use Apache::loncommon();
   use Apache::lonhtmlcommon();
   use Apache::lonlocal;
   
 #  #
 # Write lonnet::passwd to do the call below.  # Write lonnet::passwd to do the call below.
Line 61  use Apache::loncommon(); Line 53  use Apache::loncommon();
 ##################################################  ##################################################
 sub des_keys {  sub des_keys {
     # Make a new key for DES encryption.      # Make a new key for DES encryption.
     # Each key has two parts which are returned seperately.      # Each key has two parts which are returned separately.
     # Please note:  Each key must be passed through the &hex function      # Please note:  Each key must be passed through the &hex function
     # before it is output to the web browser.  The hex versions cannot      # before it is output to the web browser.  The hex versions cannot
     # be used to decrypt.      # be used to decrypt.
Line 98  sub des_decrypt { Line 90  sub des_decrypt {
 ################################################################  ################################################################
 #                       Handler subroutines                    #  #                       Handler subroutines                    #
 ################################################################  ################################################################
   
   ################################################################
   #         Language Change Subroutines                          #
   ################################################################
   sub languagechanger {
       my $r = shift;
       my $user       = $ENV{'user.name'};
       my $domain     = $ENV{'user.domain'};
       my %userenv = &Apache::lonnet::get
           ('environment',['languages']);
       my $language=$userenv{'languages'};
   
       my $pref=&mt('Preferred language');
       my %langchoices=('' => 'No language preference');
       foreach (&Apache::loncommon::languageids()) {
    if (&Apache::loncommon::supportedlanguagecode($_)) {
       $langchoices{&Apache::loncommon::supportedlanguagecode($_)}
                  = &Apache::loncommon::plainlanguagedescription($_);
    }
       }
       my $selectionbox=&Apache::loncommon::select_form($language,'language',
        %langchoices);
       $r->print(<<ENDLSCREEN);
   <form name="server" action="/adm/preferences" method="post">
   <input type="hidden" name="action" value="verify_and_change_languages" />
   <br />$pref: $selectionbox
   ENDLSCREEN
       $r->print('<br /><input type="submit" value="'.&mt('Change').'" />');
   }
   
   
   sub verify_and_change_languages {
       my $r = shift;
       my $user       = $ENV{'user.name'};
       my $domain     = $ENV{'user.domain'};
   # Screenname
       my $newlanguage  = $ENV{'form.language'};
       $newlanguage=~s/[^\-\w]//g;
       my $message='';
       if ($newlanguage) {
           &Apache::lonnet::put('environment',{'languages' => $newlanguage});
           &Apache::lonnet::appenv('environment.languages' => $newlanguage);
           $message='Set new preferred languages to '.$newlanguage;
       } else {
           &Apache::lonnet::del('environment',['languages']);
           &Apache::lonnet::delenv('environment\.languages');
           $message='Reset preferred language';
       }
       $r->print(<<ENDVCSCREEN);
   </p>
   $message
   ENDVCSCREEN
   }
   
   
   ################################################################
   #         Anonymous Discussion Name Change Subroutines         #
   ################################################################
 sub screennamechanger {  sub screennamechanger {
     my $r = shift;      my $r = shift;
     my $errormessage = shift;  
     $errormessage = ($errormessage || '');  
     my $user       = $ENV{'user.name'};      my $user       = $ENV{'user.name'};
     my $domain     = $ENV{'user.domain'};      my $domain     = $ENV{'user.domain'};
     my $homeserver = $ENV{'user.home'};      my %userenv = &Apache::lonnet::get
     my %userenv = &Apache::lonnet::get('environment',['screenname']);          ('environment',['screenname','nickname']);
     my $screenname=$userenv{'screenname'};      my $screenname=$userenv{'screenname'};
       my $nickname=$userenv{'nickname'};
     $r->print(<<ENDSCREEN);      $r->print(<<ENDSCREEN);
 <html>  
 <body bgcolor="#FFFFFF">  
 <h1>Preferences for $user</h1>  
 <h3>$user is a member of domain $domain</h3>  
 $errormessage  
 <p>  
 Change anonymous discussion screen name for $user  
 </p>  
   
 <form name="server" action="/adm/preferences" method="post">  <form name="server" action="/adm/preferences" method="post">
 <input type="hidden" name="action" value="verify_and_change_screenname" />  <input type="hidden" name="action" value="verify_and_change_screenname" />
 New screenname:  <br />New screenname (shown if you post anonymously):
 <input type="text" size="20" value="$screenname" name="screenname" />  <input type="text" size="20" value="$screenname" name="screenname" />
   <br />New nickname (shown if you post non-anonymously):
   <input type="text" size="20" value="$nickname" name="nickname" />
 <input type="submit" value="Change" />  <input type="submit" value="Change" />
 </form>  </form>
 </body>  
 </html>  
 ENDSCREEN  ENDSCREEN
 }  }
   
Line 132  sub verify_and_change_screenname { Line 172  sub verify_and_change_screenname {
     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 $homeserver = $ENV{'user.home'};  # Screenname
     my $newscreen  = $ENV{'form.screenname'};      my $newscreen  = $ENV{'form.screenname'};
     $newscreen=~s/\W//g;      $newscreen=~s/[^ \w]//g;
     my $message='';      my $message='';
     if ($newscreen) {      if ($newscreen) {
         &Apache::lonnet::put('environment',{'screenname' => $newscreen});          &Apache::lonnet::put('environment',{'screenname' => $newscreen});
Line 145  sub verify_and_change_screenname { Line 185  sub verify_and_change_screenname {
         &Apache::lonnet::delenv('environment\.screenname');          &Apache::lonnet::delenv('environment\.screenname');
         $message='Reset screenname';          $message='Reset screenname';
     }      }
   # Nickname
       $message.='<br />';
       $newscreen  = $ENV{'form.nickname'};
       $newscreen=~s/[^ \w]//g;
       if ($newscreen) {
           &Apache::lonnet::put('environment',{'nickname' => $newscreen});
           &Apache::lonnet::appenv('environment.nickname' => $newscreen);
           $message.='Set new nickname to '.$newscreen;
       } else {
           &Apache::lonnet::del('environment',['nickname']);
           &Apache::lonnet::delenv('environment\.nickname');
           $message.='Reset nickname';
       }
   
     $r->print(<<ENDVCSCREEN);      $r->print(<<ENDVCSCREEN);
 <html>  
 <body bgcolor="#FFFFFF">  
 <h1>Preferences for $user</h1>  
 <h3>$user is a member of domain $domain</h3>  
 <p>  
 Change anonymous discussion screen name for $user  
 </p>  </p>
 $message  $message
 </body></html>  
 ENDVCSCREEN  ENDVCSCREEN
 }  }
   
   ################################################################
   #         Message Forward                                      #
   ################################################################
   
   sub msgforwardchanger {
       my $r = shift;
       my $user       = $ENV{'user.name'};
       my $domain     = $ENV{'user.domain'};
       my %userenv = &Apache::lonnet::get('environment',['msgforward','notification','critnotification']);
       my $msgforward=$userenv{'msgforward'};
       my $notification=$userenv{'notification'};
       my $critnotification=$userenv{'critnotification'};
       my $forwardingHelp = Apache::loncommon::help_open_topic("Prefs_Forwarding",
       "What are forwarding ".
       "and notification ".
       "addresses");
       my $criticalMessageHelp = Apache::loncommon::help_open_topic("Course_Critical_Message",
    "What are critical messages");
   
       $r->print(<<ENDMSG);
   $forwardingHelp <br />
   <form name="server" action="/adm/preferences" method="post">
   <input type="hidden" name="action" value="verify_and_change_msgforward" />
   New Forwarding Address(es) (<tt>user:domain,user:domain,...</tt>):
   <input type="text" size="40" value="$msgforward" name="msgforward" /><hr />
   New Message Notification Email Address(es) (<tt>joe\@doe.com,jane\@doe.edu,...</tt>):
   <input type="text" size="40" value="$notification" name="notification" /><hr />
   New Critical Message Notification Email Address(es) (<tt>joe\@doe.com,jane\@doe.edu,...</tt>):
   <input type="text" size="40" value="$critnotification" name="critnotification" />$criticalMessageHelp<hr />
   <input type="submit" value="Change" />
   </form>
   ENDMSG
   }
   
   sub verify_and_change_msgforward {
       my $r = shift;
       my $user       = $ENV{'user.name'};
       my $domain     = $ENV{'user.domain'};
       my $newscreen  = '';
       my $message='';
       foreach (split(/\,/,$ENV{'form.msgforward'})) {
    my ($msuser,$msdomain)=split(/[\@\:]/,$_);
           $msuser=~s/\W//g;
           $msdomain=~s/\W//g;
           if (($msuser) && ($msdomain)) {
       if (&Apache::lonnet::homeserver($msuser,$msdomain) ne 'no_host') {
                  $newscreen.=$msuser.':'.$msdomain.',';
      } else {
                  $message.='No such user: '.$msuser.':'.$msdomain.'<br>';
              }
           }
       }
       $newscreen=~s/\,$//;
       if ($newscreen) {
           &Apache::lonnet::put('environment',{'msgforward' => $newscreen});
           &Apache::lonnet::appenv('environment.msgforward' => $newscreen);
           $message.='Set new message forwarding to '.$newscreen.'<br />';
       } else {
           &Apache::lonnet::del('environment',['msgforward']);
           &Apache::lonnet::delenv('environment\.msgforward');
           $message.='Reset message forwarding<br />';
       }
       my $notification=$ENV{'form.notification'};
       $notification=~s/\s//gs;
       if ($notification) {
           &Apache::lonnet::put('environment',{'notification' => $notification});
           &Apache::lonnet::appenv('environment.notification' => $notification);
           $message.='Set message notification address to '.$notification.'<br />';
       } else {
           &Apache::lonnet::del('environment',['notification']);
           &Apache::lonnet::delenv('environment\.notification');
           $message.='Reset message notification<br />';
       }
       my $critnotification=$ENV{'form.critnotification'};
       $critnotification=~s/\s//gs;
       if ($critnotification) {
           &Apache::lonnet::put('environment',{'critnotification' => $critnotification});
           &Apache::lonnet::appenv('environment.critnotification' => $critnotification);
           $message.='Set critical message notification address to '.$critnotification;
       } else {
           &Apache::lonnet::del('environment',['critnotification']);
           &Apache::lonnet::delenv('environment\.critnotification');
           $message.='Reset critical message notification<br />';
       }
       $r->print(<<ENDVCMSG);
   </p>
   $message
   ENDVCMSG
   }
   
   ################################################################
   #         Colors                                               #
   ################################################################
   
   sub colorschanger {
       my $r = shift;
   # figure out colors
       my $function='student';
       if ($ENV{'request.role'}=~/^(cc|in|ta|ep)/) {
    $function='coordinator';
       }
       if ($ENV{'request.role'}=~/^(su|dc|ad|li)/) {
    $function='admin';
       }
       if (($ENV{'request.role'}=~/^(au|ca)/) ||
    ($ENV{'REQUEST_URI'}=~/^(\/priv|\~)/)) {
    $function='author';
       }
       my $domain=&Apache::loncommon::determinedomain();
       my %colortypes=('pgbg'  => 'Page Background',
                       'tabbg' => 'Header Background',
                       'sidebg'=> 'Header Border',
                       'font'  => 'Font',
                       'link'  => 'Un-Visited Link',
                       'vlink' => 'Visited Link',
                       'alink' => 'Active Link');
       my $chtable='';
       foreach my $item (sort(keys(%colortypes))) {
          my $curcol=&Apache::loncommon::designparm($function.'.'.$item,$domain);
          $chtable.='<tr><td>'.$colortypes{$item}.'</td><td bgcolor="'.$curcol.
           '">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</td><td><input name="'.$item.
           '" size="10" value="'.$curcol.
   '" /></td><td><a href="javascript:pjump('."'color_custom','".$colortypes{$item}.
   "','".$curcol."','"
       .$item."','parmform.pres','psub'".');">Select</a></td></tr>';
       }
       my $pjump_def = &Apache::lonhtmlcommon::pjump_javascript_definition();
       $r->print(<<ENDCOL);
   <script>
   
       function pclose() {
           parmwin=window.open("/adm/rat/empty.html","LONCAPAparms",
                    "height=350,width=350,scrollbars=no,menubar=no");
           parmwin.close();
       }
   
       $pjump_def
   
       function psub() {
           pclose();
           if (document.parmform.pres_marker.value!='') {
               if (document.parmform.pres_type.value!='') {
                   eval('document.server.'+
                        document.parmform.pres_marker.value+
        '.value=document.parmform.pres_value.value;');
       }
           } else {
               document.parmform.pres_value.value='';
               document.parmform.pres_marker.value='';
           }
       }
   
   
   </script>
   <form name="parmform">
   <input type="hidden" name="pres_marker" />
   <input type="hidden" name="pres_type" />
   <input type="hidden" name="pres_value" />
   </form>
   <form name="server" action="/adm/preferences" method="post">
   <input type="hidden" name="action" value="verify_and_change_colors" />
   <table border="2">
   $chtable
   </table>
   <input type="submit" value="Change Custom Colors" />
   <input type="submit" name="resetall" value="Reset All Colors to Default" />
   </form>
   ENDCOL
   }
   
   sub verify_and_change_colors {
       my $r = shift;
   # figure out colors
       my $function='student';
       if ($ENV{'request.role'}=~/^(cc|in|ta|ep)/) {
    $function='coordinator';
       }
       if ($ENV{'request.role'}=~/^(su|dc|ad|li)/) {
    $function='admin';
       }
       if (($ENV{'request.role'}=~/^(au|ca)/) ||
    ($ENV{'REQUEST_URI'}=~/^(\/priv|\~)/)) {
    $function='author';
       }
       my $domain=&Apache::loncommon::determinedomain();
       my %colortypes=('pgbg'  => 'Page Background',
                       'tabbg' => 'Header Background',
                       'sidebg'=> 'Header Border',
                       'font'  => 'Font',
                       'link'  => 'Un-Visited Link',
                       'vlink' => 'Visited Link',
                       'alink' => 'Active Link');
   
       my $message='';
       foreach my $item (keys %colortypes) {
           my $color=$ENV{'form.'.$item};
           my $entry='color.'.$function.'.'.$item;
    if (($color=~/^\#[0-9A-Fa-f]{6}$/) && (!$ENV{'form.resetall'})) {
       &Apache::lonnet::put('environment',{$entry => $color});
       &Apache::lonnet::appenv('environment.'.$entry => $color);
       $message.='Set '.$colortypes{$item}.' to '.$color.'<br />';
    } else {
       &Apache::lonnet::del('environment',[$entry]);
       &Apache::lonnet::delenv('environment\.'.$entry);
       $message.='Reset '.$colortypes{$item}.'<br />';
    }
       }
       $r->print(<<ENDVCCOL);
   </p>
   $message
   <form name="client" action="/adm/preferences" method="post">
   <input type="hidden" name="action" value="changecolors" />
   </form>
   ENDVCCOL
   }
   
 ######################################################  ######################################################
 #            password handler subroutines            #  #            password handler subroutines            #
 ######################################################  ######################################################
Line 194  sub passwordchanger { Line 457  sub passwordchanger {
     $lkey_npass2= hex($lkey_npass2);      $lkey_npass2= hex($lkey_npass2);
     # Output javascript to deal with passwords      # Output javascript to deal with passwords
     # Output DES javascript      # Output DES javascript
       $r->print("<html><head>");
     {      {
  my $include = $r->dir_config('lonIncludes');   my $include = $r->dir_config('lonIncludes');
  my $jsh=Apache::File->new($include."/londes.js");   my $jsh=Apache::File->new($include."/londes.js");
  $r->print(<$jsh>);   $r->print(<$jsh>);
     }      }
     $r->print(<<ENDFORM);      $r->print(<<ENDFORM);
   
 <body bgcolor="#FFFFFF" onLoad="init();">  
   
 <script language="JavaScript">  <script language="JavaScript">
   
     function send() {      function send() {
Line 229  sub passwordchanger { Line 490  sub passwordchanger {
     }      }
   
 </script>  </script>
 <h1>Preferences for $user</h1>  
 <h3>$user is a member of domain $domain</h3>  
 $errormessage  $errormessage
   
 <p>  <p>
 Change password for $user  <!-- We separate the forms into 'server' and 'client' in order to
 </p>  
 <p>  
 <!-- We seperate the forms into 'server' and 'client' in order to  
      ensure that unencrypted passwords will not be sent out by a       ensure that unencrypted passwords will not be sent out by a
      crappy browser -->       crappy browser -->
   
Line 316  ENDERROR Line 573  ENDERROR
     }      }
     my ($ckey,$n1key,$n2key)=split(/&/,$tmpinfo);      my ($ckey,$n1key,$n2key)=split(/&/,$tmpinfo);
     #       # 
     my $currentpass = &des_decrypt($ckey ,$currentpass);      $currentpass = &des_decrypt($ckey ,$currentpass);
     my $newpass1    = &des_decrypt($n1key,$newpass1);      $newpass1    = &des_decrypt($n1key,$newpass1);
     my $newpass2    = &des_decrypt($n2key,$newpass2);      $newpass2    = &des_decrypt($n2key,$newpass2);
     #       # 
     if ($newpass1 ne $newpass2) {      if ($newpass1 ne $newpass2) {
  &passwordchanger($r,   &passwordchanger($r,
Line 359  ENDERROR Line 616  ENDERROR
     # Inform the user the password has (not?) been changed      # Inform the user the password has (not?) been changed
     if ($result =~ /^ok$/) {      if ($result =~ /^ok$/) {
  $r->print(<<"ENDTEXT");   $r->print(<<"ENDTEXT");
 <h2>Password for $user was successfully changed</h2>  <h2>The password for $user was successfully changed</h2>
 ENDTEXT  ENDTEXT
     } else {      } else {
  # error error: run in circles, scream and shout   # error error: run in circles, scream and shout
         $r->print(<<ENDERROR);          $r->print(<<ENDERROR);
 <h2><font color="#ff0000">Password for $user was not changed</font></h2>  <h2><font color="#ff0000">The password for $user was not changed</font></h2>
 There was an internal error when attempting to change your password.  Please make sure your old password was entered correctly.
 Please contact your instructor or the domain coordinator.  
 ENDERROR  ENDERROR
     }      }
     return;      return;
Line 376  ENDERROR Line 632  ENDERROR
 #            other handler subroutines               #  #            other handler subroutines               #
 ######################################################  ######################################################
   
   
 ################################################################  ################################################################
 #                          Main handler                        #  #                          Main handler                        #
 ################################################################  ################################################################
Line 384  sub handler { Line 639  sub handler {
     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'};
     $r->content_type('text/html');      &Apache::loncommon::content_type($r,'text/html');
     # Some pages contain DES keys and should not be cached.      # Some pages contain DES keys and should not be cached.
     &Apache::loncommon::no_cache($r);      &Apache::loncommon::no_cache($r);
     $r->send_http_header;      $r->send_http_header;
     return OK if $r->header_only;      return OK if $r->header_only;
     # Spit out the header      #
     if ($ENV{'form.action'} eq 'changepass') {      &Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'},
  &passwordchanger($r);                                              ['action']);
     } elsif ($ENV{'form.action'} eq 'verify_and_change_pass') {      #
  &verify_and_change_password($r);      &Apache::lonhtmlcommon::clear_breadcrumbs();
     } elsif ($ENV{'form.action'} eq 'changescreenname') {      &Apache::lonhtmlcommon::add_breadcrumb
         &screennamechanger($r);          ({href => '/adm/preferences',
     } elsif ($ENV{'form.action'} eq 'verify_and_change_screenname') {            text => 'Set User Preferences'});
         &verify_and_change_screenname($r);  
     } else {      my @Options;
  $r->print(<<ENDHEADER);      # Determine current authentication method
       my $currentauth=&Apache::lonnet::queryauthenticate($user,$domain);
       if ($currentauth =~ /^(unix|internal):/) {
           push (@Options,({ action   => 'changepass',
                             linktext => 'Change Password',
                             href     => '/adm/preferences',
                             help     => 'Change_Password',
                             subroutine => \&passwordchanger,
                             breadcrumb => 
                                 { href => '/adm/preferences?action=changepass',
                                   text => 'Change Password'},
                             },
                           { action => 'verify_and_change_pass',
                             subroutine => \&verify_and_change_password,
                             breadcrumb => 
                                 { href =>'/adm/preferences?action=changepass',
                                   text => 'Change Password'},
                             printmenu => 'yes',
                             }));
       }
       push (@Options,({ action   => 'changescreenname',
                         linktext => 'Change Screen Name',
                         href     => '/adm/preferences',
                         help     => 'Prefs_Screen_Name_Nickname',
                         subroutine => \&screennamechanger,
                         breadcrumb => 
                             { href => '/adm/preferences?action=changescreenname',
                               text => 'Change Screen Name'},
                         },
                       { action   => 'verify_and_change_screenname',
                         subroutine => \&verify_and_change_screenname,
                         breadcrumb => 
                             { href => '/adm/preferences?action=changescreenname',
                               text => 'Change Screen Name'},
                         printmenu => 'yes',
                         }));
   
       push (@Options,({ action   => 'changemsgforward',
                         linktext => 'Change Message Forwarding',
                         text     => 'and Notification Addresses',
                         href     => '/adm/preferences',
                         help     => 'Prefs_Forwarding',
                         breadcrumb => 
                             { href => '/adm/preferences?action=changemsgforward',
                               text => 'Change Message Forwarding'},
                         subroutine => \&msgforwardchanger,
                         },
                       { action => 'verify_and_change_msgforward',
                         breadcrumb => 
                             { href => '/adm/preferences?action=changemsgforward',
                               text => 'Change Message Forwarding'},
                         printmenu => 'yes',
                         subroutine => \&verify_and_change_msgforward }));
       my $aboutmeaction=
           '/adm/'.$ENV{'user.domain'}.'/'.$ENV{'user.name'}.'/aboutme';
       push (@Options,{ action => 'none', 
                        linktext =>
                            q{Edit the 'About Me' personal information screen},
                        href => $aboutmeaction});
       push (@Options,({ action => 'changecolors',
                         linktext => 'Change Color Scheme',
                         href => '/adm/preferences',
                         help => 'Change_Colors',
                         breadcrumb => 
                             { href => '/adm/preferences?action=changecolors',
                               text => 'Change Colors'},
                         subroutine => \&colorschanger,
                     },
                       { action => 'verify_and_change_colors',
                         breadcrumb => 
                             { href => '/adm/preferences?action=changecolors',
                               text => 'Change Colors'},
                         printmenu => 'yes',
                         subroutine => \&verify_and_change_colors,
                         }));
       push (@Options,({ action => 'changelanguages',
                         linktext => 'Change Language Preferences',
                         href => '/adm/preferences',
                         breadcrumb=>
                             { href => '/adm/preferences?action=changelanguages',
                               text => 'Change Language'},
                         subroutine =>  \&languagechanger,
                     },
                       { action => 'verify_and_change_languages',
                         breadcrumb=>
                             {href => '/adm/preferences?action=changelanguages',
                              text => 'Change Language'},
                         printmenu => 'yes',
                         subroutine=>\&verify_and_change_languages, }
                       ));
       if ($ENV{'user.name'} =~ /^(albertel|koretemey|korte|hallmat3|turtle)$/) {
           push (@Options,({ action => 'debugtoggle',
                             printmenu => 'yes',
                             subroutine => \&toggle_debug,
                             }));
       }
       $r->print(<<ENDHEADER);
 <html>  <html>
 <head>  <head>
 <title>LON-CAPA Preferences</title>  <title>LON-CAPA Preferences</title>
 </head>  </head>
 <body bgcolor="#FFFFFF" >  
 <h1>Preferences for $user</h1>  
 <h3>$user is a member of domain $domain</h3>  
 ENDHEADER  ENDHEADER
  # Determine current authentication method      my $call = undef;
  my $currentauth=&Apache::lonnet::queryauthenticate($user,$domain);      my $printmenu = 'yes';
  if ($currentauth =~ /^(unix|internal):/) {      foreach my $option (@Options) {
     $r->print(<<ENDPASSWORDFORM);          if ($option->{'action'} eq $ENV{'form.action'}) {
 <form name="client" action="/adm/preferences" method="post">              $call = $option->{'subroutine'};
 <input type="hidden" name="action" value="changepass">              $printmenu = $option->{'printmenu'};
 <input type="submit" value="Change password">              if (exists($option->{'breadcrumb'})) {
 </form>                  &Apache::lonhtmlcommon::add_breadcrumb
 ENDPASSWORDFORM                      ($option->{'breadcrumb'});
 # Change screen name              }
     $r->print(<<ENDSCREENNAMEFORM);          }
 <form name="client" action="/adm/preferences" method="post">      }
 <input type="hidden" name="action" value="changescreenname">      $r->print(&Apache::loncommon::bodytag('Change Preferences'));
 <input type="submit" value="Change anonymous discussion screen name">      $r->print(&Apache::lonhtmlcommon::breadcrumbs
 </form>                (undef,'Change Preferences'));
 ENDSCREENNAMEFORM      if (defined($call)) {
             # Other preference setting code should be added here          $call->($r);
  }      }
       if ($printmenu eq 'yes') {
           my $optionlist = '<table cellpadding="5">';
           if ($ENV{'user.name'} =~ 
                            /^(albertel|kortemey|korte|hallmat3|turtle)$/
               ) {
               push (@Options,({ action => 'debugtoggle',
                                 linktext => 'Toggle Debug Messages',
                                 text => 'Current Debug status is -'.
                                     $ENV{'user.debug'}.'-.',
                                 href => '/adm/preferences',
                                 printmenu => 'yes',
                                 subroutine => \&toggle_debug,
                                 }));
           }
           foreach my $option(@Options) {
               my $optiontext = '';
               if (exists($option->{'href'})) {
                   $optiontext .= 
                       '<a href="'.$option->{'href'}.
                       '?action='.$option->{'action'}.'">'.
                       $option->{'linktext'}.'</a>';
               }
               if (exists($option->{'text'})) {
                   $optiontext .= ' '.$option->{'text'};
               }
               if ($optiontext ne '') {
                   $optiontext = '<font size="+1">'.$optiontext.'</font>'; 
                   my $helplink = '&nbsp;';
                   if (exists($option->{'help'})) {
                       $helplink = &Apache::loncommon::help_open_topic
                                                       ($option->{'help'});
                   }
                   $optionlist .= '<tr>'.
                       '<td>'.$helplink.'</td>'.
                       '<td>'.$optiontext.'</td>'.
                       '</tr>';
               }
           }
           $optionlist .= '</table>';
           $r->print($optionlist);
     }      }
     $r->print(<<ENDFOOTER);      $r->print(<<ENDFOOTER);
 </body>  </body>
 </html>  </html>
 ENDFOOTER  ENDFOOTER
     return OK;      return OK;
 }   }
   
   sub toggle_debug {
       if ($ENV{'user.debug'}) {
           &Apache::lonnet::delenv('user\.debug');
       } else {
           &Apache::lonnet::appenv('user.debug' => 1);
       }
   }
   
 1;  1;
 __END__  __END__

Removed from v.1.7  
changed lines
  Added in v.1.40


FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>
500 Internal Server Error

Internal Server Error

The server encountered an internal error or misconfiguration and was unable to complete your request.

Please contact the server administrator at root@localhost to inform them of the time this error occurred, and the actions you performed just before this error.

More information about this error may be available in the server error log.