--- loncom/interface/lonpreferences.pm 2005/03/22 17:15:22 1.58 +++ loncom/interface/lonpreferences.pm 2006/03/15 21:19:10 1.75 @@ -1,7 +1,7 @@ # The LearningOnline Network # Preferences # -# $Id: lonpreferences.pm,v 1.58 2005/03/22 17:15:22 matthew Exp $ +# $Id: lonpreferences.pm,v 1.75 2006/03/15 21:19:10 albertel Exp $ # # Copyright Michigan State University Board of Trustees # @@ -40,6 +40,7 @@ use DynaLoader; # for Crypt::DES version use Apache::loncommon(); use Apache::lonhtmlcommon(); use Apache::lonlocal; +use Apache::lonnet; # # Write lonnet::passwd to do the call below. @@ -109,8 +110,8 @@ sub wysiwygchanger {

- $switchoff
- $switchon +
+ ENDLSCREEN $r->print('
'); } @@ -118,7 +119,7 @@ ENDLSCREEN sub verify_and_change_wysiwyg { my $r = shift; - my $newsetting=$ENV{'form.wysiwyg'}; + my $newsetting=$env{'form.wysiwyg'}; &Apache::lonnet::put('environment',{'wysiwygeditor' => $newsetting}); &Apache::lonnet::appenv('environment.wysiwygeditor' => $newsetting); $r->print('

'.&mt('Setting WYSIWYG editor to:').' '.&mt($newsetting).'

'); @@ -129,8 +130,8 @@ sub verify_and_change_wysiwyg { ################################################################ sub languagechanger { my $r = shift; - my $user = $ENV{'user.name'}; - my $domain = $ENV{'user.domain'}; + my $user = $env{'user.name'}; + my $domain = $env{'user.domain'}; my %userenv = &Apache::lonnet::get ('environment',['languages']); my $language=$userenv{'languages'}; @@ -156,10 +157,10 @@ ENDLSCREEN sub verify_and_change_languages { my $r = shift; - my $user = $ENV{'user.name'}; - my $domain = $ENV{'user.domain'}; + my $user = $env{'user.name'}; + my $domain = $env{'user.domain'}; # Screenname - my $newlanguage = $ENV{'form.language'}; + my $newlanguage = $env{'form.language'}; $newlanguage=~s/[^\-\w]//g; my $message=''; if ($newlanguage) { @@ -181,39 +182,36 @@ ENDVCSCREEN ################################################################ sub texenginechanger { my $r = shift; - my $user = $ENV{'user.name'}; - my $domain = $ENV{'user.domain'}; + my $user = $env{'user.name'}; + my $domain = $env{'user.domain'}; my %userenv = &Apache::lonnet::get('environment',['texengine']); my $texengine=$userenv{'texengine'}; my $pref=&mt('Preferred method to display Math'); - my %mathchoices=('' => 'No Preference', + my %mathchoices=('' => 'Default', 'tth' => 'TeX to HTML', - 'ttm' => 'TeX to MathML', + #'ttm' => 'TeX to MathML', 'jsMath' => 'jsMath', 'mimetex' => 'Convert to Images' ); my $selectionbox=&Apache::loncommon::select_form($texengine,'texengine', %mathchoices); - my $mathexample='$$\int\left(\frac{a+b}{c^6*d}\right)$$'; - my $jsMath_example=&Apache::lontexconvert::jsMath_converted(\$mathexample); - $mathexample='$$\int\left(\frac{a+b}{c^6*d}\right)$$'; - my $tth_example=&Apache::lontexconvert::tth_converted(\$mathexample); - $mathexample='$$\int\left(\frac{a+b}{c^6*d}\right)$$'; - my $mimetex_example=&Apache::lontexconvert::mimetex_converted(\$mathexample); + my $jsMath_start=&Apache::lontexconvert::jsMath_header(); my $change=&mt('Change'); $r->print(< +

$pref: $selectionbox

Examples: -

TeX to HTML
$tth_example

- - +

TeX to HTML
+ +

jsMath
- +$jsMath_start + -$jsMath_example

-

Convert to Images
$mimetex_example

+

+

Convert to Images
+
+ +

ENDLSCREEN - if ($ENV{'environment.texengine'} ne 'jsMath') { + if ($env{'environment.texengine'} ne 'jsMath') { $r->print(''); } } @@ -242,15 +244,15 @@ ENDLSCREEN sub verify_and_change_texengine { my $r = shift; - my $user = $ENV{'user.name'}; - my $domain = $ENV{'user.domain'}; + my $user = $env{'user.name'}; + my $domain = $env{'user.domain'}; # Screenname - my $newtexengine = $ENV{'form.texengine'}; + my $newtexengine = $env{'form.texengine'}; $newtexengine=~s/[^\-\w]//g; if ($newtexengine eq 'ttm') { &Apache::lonnet::appenv('browser.mathml' => 1); } else { - if ($ENV{'environment.texengine'} eq 'ttm') { + if ($env{'environment.texengine'} eq 'ttm') { &Apache::lonnet::appenv('browser.mathml' => 0); } } @@ -276,8 +278,8 @@ ENDVCSCREEN ################################################################ sub rolesprefchanger { my $r = shift; - my $user = $ENV{'user.name'}; - my $domain = $ENV{'user.domain'}; + my $user = $env{'user.name'}; + my $domain = $env{'user.domain'}; my %userenv = &Apache::lonnet::get ('environment',['recentroles','recentrolesn']); my $hotlist_flag=$userenv{'recentroles'}; @@ -318,11 +320,11 @@ ENDSCREEN sub verify_and_change_rolespref { my $r = shift; - my $user = $ENV{'user.name'}; - my $domain = $ENV{'user.domain'}; + my $user = $env{'user.name'}; + my $domain = $env{'user.domain'}; # Recent Roles Hotlist Flag - my $hotlist_flag = $ENV{'form.recentroles'}; - my $hotlist_n = $ENV{'form.recentrolesn'}; + my $hotlist_flag = $env{'form.recentroles'}; + my $hotlist_n = $env{'form.recentrolesn'}; my $message=''; if ($hotlist_flag) { &Apache::lonnet::put('environment',{'recentroles' => $hotlist_flag}); @@ -353,8 +355,8 @@ ENDRPSCREEN ################################################################ sub screennamechanger { my $r = shift; - my $user = $ENV{'user.name'}; - my $domain = $ENV{'user.domain'}; + my $user = $env{'user.name'}; + my $domain = $env{'user.domain'}; my %userenv = &Apache::lonnet::get ('environment',['screenname','nickname']); my $screenname=$userenv{'screenname'}; @@ -373,10 +375,10 @@ ENDSCREEN sub verify_and_change_screenname { my $r = shift; - my $user = $ENV{'user.name'}; - my $domain = $ENV{'user.domain'}; + my $user = $env{'user.name'}; + my $domain = $env{'user.domain'}; # Screenname - my $newscreen = $ENV{'form.screenname'}; + my $newscreen = $env{'form.screenname'}; $newscreen=~s/[^ \w]//g; my $message=''; if ($newscreen) { @@ -390,7 +392,7 @@ sub verify_and_change_screenname { } # Nickname $message.='
'; - $newscreen = $ENV{'form.nickname'}; + $newscreen = $env{'form.nickname'}; $newscreen=~s/[^ \w]//g; if ($newscreen) { &Apache::lonnet::put('environment',{'nickname' => $newscreen}); @@ -401,7 +403,7 @@ sub verify_and_change_screenname { &Apache::lonnet::delenv('environment\.nickname'); $message.='Reset nickname'; } - + &Apache::lonnet::devalidate_cache_new('namescache',$user.':'.$domain); $r->print(< $notification}); @@ -480,7 +482,7 @@ sub verify_and_change_msgforward { &Apache::lonnet::delenv('environment\.notification'); $message.='Reset message notification
'; } - my $critnotification=$ENV{'form.critnotification'}; + my $critnotification=$env{'form.critnotification'}; $critnotification=~s/\s//gs; if ($critnotification) { &Apache::lonnet::put('environment',{'critnotification' => $critnotification}); @@ -504,13 +506,13 @@ sub colorschanger { my $r = shift; # figure out colors my $function='student'; - if ($ENV{'request.role'}=~/^(cc|in|ta|ep)/) { + if ($env{'request.role'}=~/^(cc|in|ta|ep)/) { $function='coordinator'; } - if ($ENV{'request.role'}=~/^(su|dc|ad|li)/) { + if ($env{'request.role'}=~/^(su|dc|ad|li)/) { $function='admin'; } - if (($ENV{'request.role'}=~/^(au|ca)/) || + if (($env{'request.role'}=~/^(au|ca)/) || ($ENV{'REQUEST_URI'}=~/^(\/priv|\~)/)) { $function='author'; } @@ -580,13 +582,13 @@ sub verify_and_change_colors { my $r = shift; # figure out colors my $function='student'; - if ($ENV{'request.role'}=~/^(cc|in|ta|ep)/) { + if ($env{'request.role'}=~/^(cc|in|ta|ep)/) { $function='coordinator'; } - if ($ENV{'request.role'}=~/^(su|dc|ad|li)/) { + if ($env{'request.role'}=~/^(su|dc|ad|li)/) { $function='admin'; } - if (($ENV{'request.role'}=~/^(au|ca)/) || + if (($env{'request.role'}=~/^(au|ca)/) || ($ENV{'REQUEST_URI'}=~/^(\/priv|\~)/)) { $function='author'; } @@ -601,9 +603,9 @@ sub verify_and_change_colors { my $message=''; foreach my $item (keys %colortypes) { - my $color=$ENV{'form.'.$item}; + my $color=$env{'form.'.$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::appenv('environment.'.$entry => $color); $message.='Set '.$colortypes{$item}.' to '.$color.'
'; @@ -630,9 +632,9 @@ sub passwordchanger { my $r = shift; my $errormessage = shift; $errormessage = ($errormessage || ''); - my $user = $ENV{'user.name'}; - my $domain = $ENV{'user.domain'}; - my $homeserver = $ENV{'user.home'}; + my $user = $env{'user.name'}; + my $domain = $env{'user.domain'}; + my $homeserver = $env{'user.home'}; my $currentauth=&Apache::lonnet::queryauthenticate($user,$domain); # Check for authentication types that allow changing of the password. return if ($currentauth !~ /^(unix|internal):/); @@ -657,8 +659,6 @@ sub passwordchanger { $lkey_npass2= hex($lkey_npass2); # Output javascript to deal with passwords # Output DES javascript - my $html=&Apache::lonxml::xmlbegin(); - $r->print($html.""); { my $include = $r->dir_config('lonIncludes'); my $jsh=Apache::File->new($include."/londes.js"); @@ -732,25 +732,17 @@ ENDFORM sub verify_and_change_password { my $r = shift; - my $user = $ENV{'user.name'}; - my $domain = $ENV{'user.domain'}; - my $homeserver = $ENV{'user.home'}; + my $user = $env{'user.name'}; + my $domain = $env{'user.domain'}; + my $homeserver = $env{'user.home'}; my $currentauth=&Apache::lonnet::queryauthenticate($user,$domain); # Check for authentication types that allow changing of the password. return if ($currentauth !~ /^(unix|internal):/); # - my $html=&Apache::lonxml::xmlbegin(); - $r->print(< -LON-CAPA Preferences: Change password for $user - -ENDHEADER - # - my $currentpass = $ENV{'form.currentpass'}; - my $newpass1 = $ENV{'form.newpass_1'}; - my $newpass2 = $ENV{'form.newpass_2'}; - my $logtoken = $ENV{'form.logtoken'}; + my $currentpass = $env{'form.currentpass'}; + my $newpass1 = $env{'form.newpass_1'}; + my $newpass2 = $env{'form.newpass_2'}; + my $logtoken = $env{'form.logtoken'}; # Check for empty data unless (defined($currentpass) && defined($newpass1) && @@ -771,7 +763,7 @@ password decryption. Please log out and

ENDERROR # Probably should log an error here - return; + return 1; } my ($ckey,$n1key,$n2key)=split(/&/,$tmpinfo); # @@ -784,14 +776,14 @@ ENDERROR 'ERROR:'. 'The new passwords you entered do not match. '. 'Please try again.'); - return; + return 1; } if (length($newpass1) < 7) { &passwordchanger($r, 'ERROR:'. 'Passwords must be a minimum of 7 characters long. '. 'Please try again.'); - return; + return 1; } # # Check for bad characters @@ -826,6 +818,7 @@ ENDTEXT

The password for $user was not changed

Please make sure your old password was entered correctly. ENDERROR + return 1; } return; } @@ -835,8 +828,8 @@ ENDERROR ################################################################ sub discussionchanger { my $r = shift; - my $user = $ENV{'user.name'}; - my $domain = $ENV{'user.domain'}; + my $user = $env{'user.name'}; + my $domain = $env{'user.domain'}; my %userenv = &Apache::lonnet::get ('environment',['discdisplay','discmarkread']); my $discdisp = 'allposts'; @@ -858,7 +851,7 @@ sub discussionchanger { my $function = &Apache::loncommon::get_users_function(); my $color = &Apache::loncommon::designparm($function.'.tabbg', - $ENV{'user.domain'}); + $env{'user.domain'}); my %lt = &Apache::lonlocal::texthash( 'pref' => 'Display Preference', 'curr' => 'Current setting ', @@ -940,11 +933,11 @@ END sub verify_and_change_discussion { my $r = shift; - my $user = $ENV{'user.name'}; - my $domain = $ENV{'user.domain'}; + my $user = $env{'user.name'}; + my $domain = $env{'user.domain'}; my $message=''; - if (defined($ENV{'form.discdisp'}) ) { - my $newdisp = $ENV{'form.newdisp'}; + if (defined($env{'form.discdisp'}) ) { + my $newdisp = $env{'form.newdisp'}; if ($newdisp eq 'unread') { $message .='In discussions: only new posts will be displayed.
'; &Apache::lonnet::put('environment',{'discdisplay' => $newdisp}); @@ -955,8 +948,8 @@ sub verify_and_change_discussion { &Apache::lonnet::delenv('environment\.discdisplay'); } } - if (defined($ENV{'form.discmark'}) ) { - my $newmark = $ENV{'form.newmark'}; + if (defined($env{'form.discmark'}) ) { + my $newmark = $env{'form.newmark'}; if ($newmark eq 'ondisp') { $message.='In discussions: new posts will be cease to be identified as "new" after display.
'; &Apache::lonnet::put('environment',{'discmarkread' => $newmark}); @@ -972,6 +965,85 @@ $message ENDVCSCREEN } +################################################################ +# Subroutines for page display on course access (Course Coordinators) +################################################################ +sub coursedisplaychanger { + my $r = shift; + my $user = $env{'user.name'}; + my $domain = $env{'user.domain'}; + my %userenv = &Apache::lonnet::get('environment',['course_init_display']); + my $currvalue = 'whatsnew'; + my $firstselect = ''; + my $whatsnewselect = 'checked="checked"'; + if (exists($userenv{'course_init_display'})) { + if ($userenv{'course_init_display'} eq 'firstres') { + $currvalue = 'firstres'; + $firstselect = 'checked="checked"'; + $whatsnewselect = ''; + } + } + my %pagenames = ( + firstres => 'First resource', + whatsnew => "What's new page", + ); + my $whatsnew_off=&mt('Display the [_1] in the course.','first resource'); + my $whatsnew_on=&mt('Display the "[_1]" page - a summary of items in the course which require attention.',"What's New"); + + $r->print('
'.&mt('Set the default page to be displayed when you select a course role').' '.&mt('(Currently: [_1])',$pagenames{$currvalue}).'
'.&mt('The global user preference you set for your courses can be overridden in an individual course by setting a course specific setting via the "[_1]" page in the course',"What's New").'

'); + $r->print(< + +
+
+ +ENDLSCREEN + $r->print('

+'); +} + +sub verify_and_change_coursepage { + my $r = shift; + my $message=''; + my %lt = &Apache::lonlocal::texthash( + 'defs' => 'Default now set', + 'when' => 'when you select a course role from the roles screen', + 'ywbt' => 'you will be taken to the start of the course.', + 'apwb' => 'a page will be displayed that lists items in the course that may require action from you.', + 'gtts' => 'Go to the start of the course', + 'dasp' => "Display the What's New page listing course action items", + ); + my $newdisp = $env{'form.newdisp'}; + $message = ''.$lt{'defs'}.': '.$lt{'when'}.', '; + if ($newdisp eq 'firstres') { + $message .= $lt{'ywbt'}.'
'; + &Apache::lonnet::put('environment',{'course_init_display' => $newdisp}); + &Apache::lonnet::appenv('environment.course_init_display' => $newdisp); + } else { + $message .= $lt{'apwb'}.'
'; + &Apache::lonnet::del('environment',['course_init_display']); + &Apache::lonnet::delenv('environment\.course_init_display'); + } + my $refpage = $env{'form.refpage'}; + if (($env{'request.course.fn'}) && ($env{'request.course.id'})) { + if ($newdisp eq 'firstres') { + my $cdom = $env{'course.'.$env{'request.course.id'}.'.domain'}; + my $cnum = $env{'course.'.$env{'request.course.id'}.'.num'}; + my ($furl,$ferr)= + &Apache::lonuserstate::readmap($cdom.'/'.$cnum); + $message .= '
'.$lt{'gtts'}.' '.&mt('now').''; + } else { + $message .= '
'.$lt{'dasp'}.''; + } + } + $r->print(<
+ENDVCSCREEN +} + + ###################################################### # other handler subroutines # ###################################################### @@ -981,8 +1053,8 @@ ENDVCSCREEN ################################################################ sub handler { my $r = shift; - my $user = $ENV{'user.name'}; - my $domain = $ENV{'user.domain'}; + my $user = $env{'user.name'}; + my $domain = $env{'user.domain'}; &Apache::loncommon::content_type($r,'text/html'); # Some pages contain DES keys and should not be cached. &Apache::loncommon::no_cache($r); @@ -990,7 +1062,7 @@ sub handler { return OK if $r->header_only; # &Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'}, - ['action','wysiwyg','returnurl']); + ['action','wysiwyg','returnurl','refpage']); # &Apache::lonhtmlcommon::clear_breadcrumbs(); &Apache::lonhtmlcommon::add_breadcrumb @@ -1015,7 +1087,7 @@ sub handler { breadcrumb => { href =>'/adm/preferences?action=changepass', text => 'Change Password'}, - printmenu => 'yes', + printmenu => 'not_on_error', })); } push (@Options,({ action => 'changescreenname', @@ -1051,7 +1123,7 @@ sub handler { printmenu => 'yes', subroutine => \&verify_and_change_msgforward })); my $aboutmeaction= - '/adm/'.$ENV{'user.domain'}.'/'.$ENV{'user.name'}.'/aboutme'; + '/adm/'.$env{'user.domain'}.'/'.$env{'user.name'}.'/aboutme'; push (@Options,{ action => 'none', linktext => q{Edit the 'About Me' Personal Information Screen}, @@ -1152,9 +1224,26 @@ sub handler { text => 'Change Math Preferences'}, printmenu => 'yes', })); + if (&Apache::lonnet::allowed('whn',$env{'request.course.id'}) + || &Apache::lonnet::allowed('whn',$env{'request.course.id'}.'/' + .$env{'request.course.sec'})) { + push (@Options,({ action => 'changecourseinit', + linktext => 'Change Course Initialization Preference', + href => '/adm/preferences', + subroutine => \&coursedisplaychanger, + breadcrumb => + { href => '/adm/preferences?action=changecourseinit', + text => 'Change Course Init. Pref.'}, + }, + { action => 'verify_and_change_coursepage', + breadcrumb => + { href => '/adm/preferences?action=changecourseinit', text => 'Change Course Initialization Preference'}, + printmenu => 'yes', + subroutine => \&verify_and_change_coursepage, + })); + } - - if ($ENV{'user.name'} =~ /^(albertel|fox|foxr|koretemey|korte|hallmat3|turtle)$/) { + if ($env{'user.name'} =~ /^(albertel|fox|foxr|koretemey|korte|hallmat3|turtle|raeburn)$/) { push (@Options,({ action => 'debugtoggle', printmenu => 'yes', subroutine => \&toggle_debug, @@ -1171,7 +1260,7 @@ ENDHEADER my $help = undef; my $printmenu = 'yes'; foreach my $option (@Options) { - if ($option->{'action'} eq $ENV{'form.action'}) { + if ($option->{'action'} eq $env{'form.action'}) { $call = $option->{'subroutine'}; $printmenu = $option->{'printmenu'}; if (exists($option->{'breadcrumb'})) { @@ -1184,18 +1273,21 @@ ENDHEADER $r->print(&Apache::loncommon::bodytag('Change Preferences')); $r->print(&Apache::lonhtmlcommon::breadcrumbs (undef,'Change Preferences',$help)); + my $error; if (defined($call)) { - $call->($r); + $error = $call->($r); } - if (($printmenu eq 'yes') && (!$ENV{'form.returnurl'})) { + if ( ( ($printmenu eq 'yes') + || ($printmenu eq 'not_on_error' && !$error) ) + && (!$env{'form.returnurl'})) { my $optionlist = ''; - if ($ENV{'user.name'} =~ - /^(albertel|kortemey|fox|foxr|korte|hallmat3|turtle)$/ + if ($env{'user.name'} =~ + /^(albertel|kortemey|fox|foxr|korte|hallmat3|turtle|raeburn)$/ ) { push (@Options,({ action => 'debugtoggle', linktext => 'Toggle Debug Messages', text => 'Current Debug status is -'. - $ENV{'user.debug'}.'-.', + $env{'user.debug'}.'-.', href => '/adm/preferences', printmenu => 'yes', subroutine => \&toggle_debug, @@ -1227,8 +1319,8 @@ ENDHEADER } $optionlist .= '
'; $r->print($optionlist); - } elsif ($ENV{'form.returnurl'}) { - $r->print('
'. + } elsif ($env{'form.returnurl'}) { + $r->print('
'. &mt('Return').''); } $r->print(&Apache::loncommon::endbodytag().''); @@ -1236,7 +1328,7 @@ ENDHEADER } sub toggle_debug { - if ($ENV{'user.debug'}) { + if ($env{'user.debug'}) { &Apache::lonnet::delenv('user\.debug'); } else { &Apache::lonnet::appenv('user.debug' => 1);