--- loncom/interface/lonpreferences.pm 2002/02/15 22:04:39 1.3 +++ loncom/interface/lonpreferences.pm 2003/04/19 01:34:22 1.19 @@ -1,7 +1,7 @@ # The LearningOnline Network # Preferences # -# $Id: lonpreferences.pm,v 1.3 2002/02/15 22:04:39 matthew Exp $ +# $Id: lonpreferences.pm,v 1.19 2003/04/19 01:34:22 www Exp $ # # Copyright Michigan State University Board of Trustees # @@ -49,50 +49,22 @@ use Apache::Constants qw(:common); use Apache::File; use Crypt::DES; use DynaLoader; # for Crypt::DES version +use Apache::loncommon(); -#------------------- forms to be output -my $passwordform =< - - - -ENDPASSWORDFORM - -my $environmentform = < -There are currently no environment variables you can change. -

- -ENDENVIRONMENTFORM -#------------------ end of forms to be output - -################################################################ -# Handler subroutines # -################################################################ # # Write lonnet::passwd to do the call below. # Use: # my $answer=reply("encrypt:passwd:$udom:$uname:$upass",$tryserver); # -# I really should write some javascript to check on the client side for -# mismatched passwords, but other problems are more pressing -# ################################################## # password associated functions # ################################################## sub des_keys { - # Make a new key for DES encryption - # Each key has two parts which are returned seperately + # Make a new key for DES encryption. + # Each key has two parts which are returned seperately. + # Please note: Each key must be passed through the &hex function + # before it is output to the web browser. The hex versions cannot + # be used to decrypt. my @hexstr=('0','1','2','3','4','5','6','7', '8','9','a','b','c','d','e','f'); my $lkey=''; @@ -119,16 +91,238 @@ sub des_decrypt { $cypher->decrypt(unpack("a8",pack("H16",substr($cyphertext,0,16)))); $plaintext.= $cypher->decrypt(unpack("a8",pack("H16",substr($cyphertext,16,16)))); - $plaintext=unpack("a8",$plaintext); - $plaintext=substr($plaintext,1,ord(substr($plaintext,0,1))); - unpack("a8",$plaintext); + $plaintext=substr($plaintext,1,ord(substr($plaintext,0,1)) ); return $plaintext; } +################################################################ +# Handler subroutines # +################################################################ + +################################################################ +# Anonymous Discussion Name Change Subroutines # +################################################################ +sub screennamechanger { + my $r = shift; + my $user = $ENV{'user.name'}; + my $domain = $ENV{'user.domain'}; + my %userenv = &Apache::lonnet::get + ('environment',['screenname','nickname']); + my $screenname=$userenv{'screenname'}; + my $nickname=$userenv{'nickname'}; + my $bodytag=&Apache::loncommon::bodytag( + 'Change Your Nickname and Anonymous Screen Name'); + $r->print(< +$bodytag + +
+ +
New screenname (shown if you post anonymously): + +
New nickname (shown if you post non-anonymously): + + +
+ + +ENDSCREEN +} + +sub verify_and_change_screenname { + my $r = shift; + my $user = $ENV{'user.name'}; + my $domain = $ENV{'user.domain'}; +# Screenname + my $newscreen = $ENV{'form.screenname'}; + $newscreen=~s/[^ \w]//g; + my $message=''; + if ($newscreen) { + &Apache::lonnet::put('environment',{'screenname' => $newscreen}); + &Apache::lonnet::appenv('environment.screenname' => $newscreen); + $message='Set new screenname to '.$newscreen; + } else { + &Apache::lonnet::del('environment',['screenname']); + &Apache::lonnet::delenv('environment\.screenname'); + $message='Reset screenname'; + } +# Nickname + $message.='
'; + $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'; + } + + my $bodytag=&Apache::loncommon::bodytag( + 'Change Your Nickname and Anonymous Screen Name'); + $r->print(< +$bodytag +

+$message + +ENDVCSCREEN +} + +################################################################ +# Colors # +################################################################ + +sub colorschanger { + my $r = shift; + my $bodytag=&Apache::loncommon::bodytag( + 'Change Color Scheme for Current Role Type'); +# 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 (keys %colortypes) { + my $curcol=&Apache::loncommon::designparm($function.'.'.$item,$domain); + $chtable.=''.$colortypes{$item}.'      Select'; + } + $r->print(< + +$bodytag + +
+ + +$chtable +
+ +
+ + +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=''; +# my $newscreen=''; +# $newscreen=~s/\,$//; +# if ($newscreen) { +# &Apache::lonnet::put('environment',{'msgforward' => $newscreen}); +# &Apache::lonnet::appenv('environment.msgforward' => $newscreen); +# $message.='Set new message forwarding to '.$newscreen.'
'; +# } else { +# &Apache::lonnet::del('environment',['msgforward']); +# &Apache::lonnet::delenv('environment\.msgforward'); +# $message.='Reset message forwarding
'; +# } + + my $bodytag=&Apache::loncommon::bodytag( + 'Change Color Scheme for Current Role Type'); + $r->print(< +$bodytag +

+$message + +ENDVCCOL +} + +###################################################### +# password handler subroutines # +###################################################### sub passwordchanger { + # This function is a bit of a mess.... # Passwords are encrypted using londes.js (DES encryption) - # my $r = shift; + my $errormessage = shift; + $errormessage = ($errormessage || ''); my $user = $ENV{'user.name'}; my $domain = $ENV{'user.domain'}; my $homeserver = $ENV{'user.home'}; @@ -140,14 +334,14 @@ sub passwordchanger { my ($lkey_cpass ,$ukey_cpass ) = &des_keys(); my ($lkey_npass1,$ukey_npass1) = &des_keys(); my ($lkey_npass2,$ukey_npass2) = &des_keys(); - # Store the keys + # Store the keys in the log files my $lonhost = $r->dir_config('lonHostID'); my $logtoken=Apache::lonnet::reply('tmpput:' .$ukey_cpass . $lkey_cpass .'&' .$ukey_npass1 . $lkey_npass1.'&' .$ukey_npass2 . $lkey_npass2, $lonhost); - # Hexify these keys + # Hexify the keys for output as javascript variables $ukey_cpass = hex($ukey_cpass); $lkey_cpass = hex($lkey_cpass); $ukey_npass1= hex($ukey_npass1); @@ -155,21 +349,18 @@ sub passwordchanger { $ukey_npass2= hex($ukey_npass2); $lkey_npass2= hex($lkey_npass2); # Output javascript to deal with passwords - $r->print(< - -The LearningOnline Network with CAPA - -ENDHEADER - # Output DES javascript + # Output DES javascript + $r->print(""); { my $include = $r->dir_config('lonIncludes'); my $jsh=Apache::File->new($include."/londes.js"); $r->print(<$jsh>); } + my $bodytag=&Apache::loncommon::bodytag('Change Password','', + 'onLoad="init();"'); $r->print(< + +$bodytag -

Preferences for $user

-

$user is a member of domain $domain

-

-Change password for $user -

+$errormessage +