--- loncom/interface/lonpreferences.pm 2008/01/17 16:37:28 1.110 +++ loncom/interface/lonpreferences.pm 2009/02/10 09:30:16 1.135 @@ -1,7 +1,7 @@ # The LearningOnline Network # Preferences # -# $Id: lonpreferences.pm,v 1.110 2008/01/17 16:37:28 bisitz Exp $ +# $Id: lonpreferences.pm,v 1.135 2009/02/10 09:30:16 schafran Exp $ # # Copyright Michigan State University Board of Trustees # @@ -98,6 +98,12 @@ sub des_decrypt { sub wysiwygchanger { my $r = shift; + Apache::lonhtmlcommon::add_breadcrumb( + { href => '/adm/preferences?action=changewysiwyg', + text => 'Change WYSIWYG Preferences'}); + $r->print(Apache::loncommon::start_page('Change WYSIWYG Preferences')); + $r->print(Apache::lonhtmlcommon::breadcrumbs('Change WYSIWYG Preferences')); + my %userenv = &Apache::lonnet::get ('environment',['wysiwygeditor']); my $onselect='checked="checked"'; @@ -108,9 +114,14 @@ sub wysiwygchanger { } my $switchoff=&mt('Disable WYSIWYG editor'); my $switchon=&mt('Enable WYSIWYG editor'); + my $warning=''; + if ($env{'user.adv'}) { + $warning.="

".&mt("The WYSIWYG editor only supports simple HTML and is in many cases unsuited for advanced authoring. In a number of cases, it may destroy advanced authoring involving LaTeX and script function calls.")."

"; + } $r->print(< +$warning

@@ -123,8 +134,10 @@ sub verify_and_change_wysiwyg { my $r = shift; 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).'

'); + &Apache::lonnet::appenv({'environment.wysiwygeditor' => $newsetting}); +# $r->print('

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

'); + print_main_menu($r,'

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

'); } ################################################################ @@ -132,6 +145,12 @@ sub verify_and_change_wysiwyg { ################################################################ sub languagechanger { my $r = shift; + + Apache::lonhtmlcommon::add_breadcrumb( + { href => '/adm/preferences?action=changelanguages', + text => 'Change Language'}); + $r->print(Apache::loncommon::start_page('Change Language')); + $r->print(Apache::lonhtmlcommon::breadcrumbs('Change Language')); my $user = $env{'user.name'}; my $domain = $env{'user.domain'}; my %userenv = &Apache::lonnet::get @@ -167,16 +186,18 @@ sub verify_and_change_languages { my $message=''; if ($newlanguage) { &Apache::lonnet::put('environment',{'languages' => $newlanguage}); - &Apache::lonnet::appenv('environment.languages' => $newlanguage); + &Apache::lonnet::appenv({'environment.languages' => $newlanguage}); $message=&mt('Set new preferred languages to ').'"'.$newlanguage.'".'; } else { &Apache::lonnet::del('environment',['languages']); &Apache::lonnet::delenv('environment\.languages'); $message=&mt('Reset preferred language.'); } - $r->print(<print(< '/adm/preferences?action=changetexenginepref', + text => 'Change How Math Equations Are Displayed'}); + $r->print(Apache::loncommon::start_page('Change How Math Equations Are Displayed')); + $r->print(Apache::lonhtmlcommon::breadcrumbs('Change How Math Equations Are Displayed')); 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=('' => 'Default', - 'tth' => 'TeX to HTML', + 'tth' => 'tth (TeX to HTML)', #'ttm' => 'TeX to MathML', 'jsMath' => 'jsMath', - 'mimetex' => 'Convert to Images' + 'mimetex' => 'mimetex (Convert to Images)' ); my $selectionbox=&Apache::loncommon::select_form($texengine,'texengine', %mathchoices); my $jsMath_start=&Apache::lontexconvert::jsMath_header(); - my $change=&mt('Change'); - $r->print(< + my %lt=&Apache::lonlocal::texthash( + 'headline' => 'Change Math Preferences', + 'preftxt' => 'Preferred method to display Math', + 'change' => 'Change', + 'exmpl' => 'Examples', + 'jsmath' => 'jsMath:', + 'tth' => 'tth (TeX to HTML):', + 'mimetex' => 'mimetex (Convert to Images):', + ); + $r->print(<$lt{'headline'}
-

$pref: $selectionbox

-

-
-Examples: -

TeX to HTML
- +

+$lt{'preftxt'}:
+$selectionbox

-

jsMath
+ +
+


+$lt{'exmpl'} + +

$lt{'jsmath'}

+

$jsMath_start - + +

+

$lt{'mimetex'}

+

+

-

Convert to Images
-
- + +

$lt{'tth'}

+

+

ENDLSCREEN if ($env{'environment.texengine'} ne 'jsMath') { @@ -252,16 +293,16 @@ sub verify_and_change_texengine { my $newtexengine = $env{'form.texengine'}; $newtexengine=~s/[^\-\w]//g; if ($newtexengine eq 'ttm') { - &Apache::lonnet::appenv('browser.mathml' => 1); + &Apache::lonnet::appenv({'browser.mathml' => 1}); } else { if ($env{'environment.texengine'} eq 'ttm') { - &Apache::lonnet::appenv('browser.mathml' => 0); + &Apache::lonnet::appenv({'browser.mathml' => 0}); } } my $message=''; if ($newtexengine) { &Apache::lonnet::put('environment',{'texengine' => $newtexengine}); - &Apache::lonnet::appenv('environment.texengine' => $newtexengine); + &Apache::lonnet::appenv({'environment.texengine' => $newtexengine}); $message=&mt('Set new preferred math display to ').'"'.$newtexengine.'".'; } else { &Apache::lonnet::del('environment',['texengine']); @@ -270,9 +311,10 @@ sub verify_and_change_texengine { } - $r->print(<print(< '/adm/preferences?action=changerolespref', + text => 'Change '.$role.' Page Pref'}); + $r->print(Apache::loncommon::start_page('Change '.$role.' Page Pref')); + $r->print(Apache::lonhtmlcommon::breadcrumbs('Change '.$role.' Page Pref')); my $hotlist_flag=$userenv{'recentroles'}; my $hotlist_n=$userenv{'recentrolesn'}; my $checked; @@ -400,7 +447,7 @@ sub verify_and_change_rolespref { my $message='
'; if ($hotlist_flag) { &Apache::lonnet::put('environment',{'recentroles' => $hotlist_flag}); - &Apache::lonnet::appenv('environment.recentroles' => $hotlist_flag); + &Apache::lonnet::appenv({'environment.recentroles' => $hotlist_flag}); $message=&mt('Recent '.$role.'s Hotlist is Enabled'); } else { &Apache::lonnet::del('environment',['recentroles']); @@ -409,7 +456,7 @@ sub verify_and_change_rolespref { } if ($hotlist_n) { &Apache::lonnet::put('environment',{'recentrolesn' => $hotlist_n}); - &Apache::lonnet::appenv('environment.recentrolesn' => $hotlist_n); + &Apache::lonnet::appenv({'environment.recentrolesn' => $hotlist_n}); if ($hotlist_flag) { $message.="
". &mt('Display [_1] Most Recent '.$role.'s',$hotlist_n)."\n"; @@ -449,9 +496,10 @@ sub verify_and_change_rolespref { } $message .= "

\n"; - $r->print(<print(< 'New screenname (shown if you post anonymously):', - text_nickname => 'New nickname (shown if you post non-anonymously):', - text_submit => 'Change', - ); - $r->print(< - -
$lt{'text_screenname'} - -
$lt{'text_nickname'} - -
- - -ENDSCREEN + Apache::lonhtmlcommon::add_breadcrumb( + { href => '/adm/preferences?action=changescreenname', + text => 'Change Screen Name'}); + $r->print(Apache::loncommon::start_page('Change Screen Name')); + $r->print(Apache::lonhtmlcommon::breadcrumbs('Change Screen Name')); + $r->print('

' + .&mt('Change the name that is displayed in your posts.') + .'

' + ); + $r->print('
' + .'' + .&Apache::lonhtmlcommon::start_pick_box() + .&Apache::lonhtmlcommon::row_title(&mt('New screenname (shown if you post anonymously)')) + .'' + .&Apache::lonhtmlcommon::row_closure() + .&Apache::lonhtmlcommon::row_title(&mt('New nickname (shown if you post non-anonymously)')) + .'' + .&Apache::lonhtmlcommon::row_closure() + .&Apache::lonhtmlcommon::row_title() + .'' + .&Apache::lonhtmlcommon::row_closure(1) + .&Apache::lonhtmlcommon::end_pick_box() + .'
' + ); } sub verify_and_change_screenname { @@ -495,7 +551,7 @@ sub verify_and_change_screenname { my $message=''; if ($newscreen) { &Apache::lonnet::put('environment',{'screenname' => $newscreen}); - &Apache::lonnet::appenv('environment.screenname' => $newscreen); + &Apache::lonnet::appenv({'environment.screenname' => $newscreen}); $message=&mt('Set new screenname to ').'"'.$newscreen.'.".'; } else { &Apache::lonnet::del('environment',['screenname']); @@ -508,7 +564,7 @@ sub verify_and_change_screenname { $newscreen=~s/[^ \w]//g; if ($newscreen) { &Apache::lonnet::put('environment',{'nickname' => $newscreen}); - &Apache::lonnet::appenv('environment.nickname' => $newscreen); + &Apache::lonnet::appenv({'environment.nickname' => $newscreen}); $message.=&mt('Set new nickname to ').'"'.$newscreen.'".'; } else { &Apache::lonnet::del('environment',['nickname']); @@ -516,9 +572,10 @@ sub verify_and_change_screenname { $message.=&mt('Reset nickname.'); } &Apache::lonnet::devalidate_cache_new('namescache',$user.':'.$domain); - $r->print(<print(< '/adm/preferences?action=changeicons', + text => 'Change Main Menu'}); + $r->print(Apache::loncommon::start_page('Change Main Menu')); + $r->print(Apache::lonhtmlcommon::breadcrumbs('Change Main Menu')); + my $user = $env{'user.name'}; my $domain = $env{'user.domain'}; my %userenv = &Apache::lonnet::get @@ -563,8 +626,9 @@ sub verify_and_change_icons { my $newicons = $env{'form.menumode'}; &Apache::lonnet::put('environment',{'icons' => $newicons}); - &Apache::lonnet::appenv('environment.icons' => $newicons); - $r->print(&mt('Set menu mode to [_1].',$newicons)); + &Apache::lonnet::appenv({'environment.icons' => $newicons}); +# $r->print(&mt('Set menu mode to [_1].',$newicons)); + print_main_menu($r, &mt('Set menu mode to [_1].',$newicons)); } ################################################################ @@ -573,6 +637,11 @@ sub verify_and_change_icons { sub clickerchanger { my $r = shift; + Apache::lonhtmlcommon::add_breadcrumb( + { href => '/adm/preferences?action=changeclicker', + text => 'Register Clicker'}); + $r->print(Apache::loncommon::start_page('Register Clicker')); + $r->print(Apache::lonhtmlcommon::breadcrumbs('Register Clicker')); my $user = $env{'user.name'}; my $domain = $env{'user.domain'}; my %userenv = &Apache::lonnet::get @@ -581,7 +650,7 @@ sub clickerchanger { $clickers=~s/\,/\n/gs; my $text=&mt('Enter response device ("clicker") numbers'); my $change=&mt('Register'); - my $helplink=&Apache::loncommon::help_open_topic('Clicker_Registration', 'Locating your clicker ID'); + my $helplink=&Apache::loncommon::help_open_topic('Clicker_Registration',&mt('Locating your clicker ID')); $r->print(< @@ -605,10 +674,91 @@ sub verify_and_change_clicker { $newclickers=~s/^\,//; $newclickers=~s/\,$//; &Apache::lonnet::put('environment',{'clickers' => $newclickers}); - &Apache::lonnet::appenv('environment.clickers' => $newclickers); - $r->print(&mt('Registering clickers: [_1]',$newclickers)); + &Apache::lonnet::appenv({'environment.clickers' => $newclickers}); +# $r->print(&mt('Registering clickers: [_1]',$newclickers)); + print_main_menu($r, &mt('Registering clickers: [_1]',$newclickers)); +} + +################################################################ +# Domcoord Access Subroutines # +################################################################ + +sub domcoordchanger { + my $r = shift; + Apache::lonhtmlcommon::add_breadcrumb( + { href => '/adm/preferences?action=changedomcoord', + text => 'Restrict Domain Coordinator Access'}); + $r->print(Apache::loncommon::start_page('Restrict Domain Coordinator Access')); + $r->print(Apache::lonhtmlcommon::breadcrumbs('Restrict Domain Coordinator Access')); + my $user = $env{'user.name'}; + my $domain = $env{'user.domain'}; + my %userenv = &Apache::lonnet::get + ('environment',['domcoord.author']); + my $constchecked=''; + if ($userenv{'domcoord.author'} eq 'blocked') { + $constchecked='checked="checked"'; + } + my $text=&mt('By default, the Domain Coordinator can enter your construction space.'); + my $construction=&mt('Block access to construction space'); + my $change=&mt('Change'); + $r->print(< + +$text
+
+ + +ENDSCREEN +} + +sub verify_and_change_domcoord { + my $r = shift; + my $user = $env{'user.name'}; + my $domain = $env{'user.domain'}; + my %domcoord=('domcoord.author' => ''); + if ($env{'form.construction'}) { $domcoord{'domcoord.author'}='blocked'; } + &Apache::lonnet::put('environment',\%domcoord); + &Apache::lonnet::appenv({'environment.domcoord.author' => $domcoord{'domcoord.author'}}); +# $r->print(&mt('Registering Domain Coordinator access restrictions.')); + print_main_menu($r, &mt('Registering Domain Coordinator access restrictions.')); +} + +################################################################# +## Lock Subroutines # +################################################################# + +sub lockwarning { + my $r = shift; + my $title=&mt('Action locked'); + my $texttop=&mt('LON-CAPA is currently performing the following actions:'); + my $textbottom=&mt('Changing roles or logging out may result in data corruption.'); + my ($num,%which)=&Apache::lonnet::get_locks(); + my $which=''; + foreach my $id (keys %which) { + $which.='
  • '.$which{$id}.'
  • '; + } + my $change=&mt('Override'); + $r->print(< + +

    $title

    +$texttop +
      +$which +
    +$textbottom + + +ENDSCREEN +} + +sub verify_and_change_lockwarning { + my $r = shift; + &Apache::lonnet::remove_all_locks(); + $r->print(&mt('Cleared locks.')); } + ################################################################ # Message Forward # ################################################################ @@ -624,8 +774,10 @@ sub msgforwardchanger { crit => 'Critical only', reg => 'Non-critical only', foad => 'Forwarding Address(es)', + noti => 'Notification E-mail Address(es)', foad_exmpl => 'e.g. userA:domain1,userB:domain2,...', - mnot => 'Email Address(es) which should be notified about new LON-CAPA messages', # old: 'Message Notification Email Address(es)', + mnot => 'E-mail Address(es) which should be notified about new LON-CAPA messages', + # old: 'Message Notification Email Address(es)', mnot_exmpl => 'e.g. joe@doe.com', chg => 'Change', email => 'The e-mail address entered in row ', @@ -633,10 +785,14 @@ sub msgforwardchanger { toen => "To enter multiple addresses, enter one address at a time, click 'Change' and then add the next one", prme => 'Back to preferences menu', ); - my $forwardingHelp = Apache::loncommon::help_open_topic("Prefs_Forwarding", - &mt("What are forwarding and notification addresses?")); - my $criticalMessageHelp = Apache::loncommon::help_open_topic("Course_Critical_Message", - &mt("What are critical messages?")); + Apache::lonhtmlcommon::add_breadcrumb( + { href => '/adm/preferences?action=changemsgforward', + text => 'Change Message Forwarding/Notification'}); + $r->print(Apache::loncommon::start_page('Change Message Forwarding/Notification')); + $r->print(Apache::lonhtmlcommon::breadcrumbs('Change Message Forwarding/Notification')); + my $forwardingHelp = &Apache::loncommon::help_open_topic("Prefs_Forwarding"); + my $notificationHelp = &Apache::loncommon::help_open_topic("Prefs_Notification"); + my $criticalMessageHelp = &Apache::loncommon::help_open_topic("Course_Critical_Message"); my @allow_html = split(/,/,$userenv{'notifywithhtml'}); my %allnot = &get_notifications(\%userenv); my $validatescript = &Apache::lonhtmlcommon::javascript_valid_email(); @@ -699,12 +855,12 @@ $validatescript $r->print(<$lt{'foad'} $forwardingHelp
    $lt{'foad'} ($lt{'foad_exmpl'}): -
    -$criticalMessageHelp +
    +

    $lt{'noti'} $notificationHelp

    $lt{'mnot'} ($lt{'mnot_exmpl'}):
    ENDMSG my @sortforwards = sort (keys(%allnot)); @@ -713,7 +869,8 @@ ENDMSG ' '. ''.&mt('Action').''. ''.&mt('Notification address').''. - &mt('Types of message to forward to this address').''. + &mt('Types of message for which notification is sent'). + $criticalMessageHelp.''. &mt('Excerpt retains HTML tags in message').''. &Apache::loncommon::end_data_table_header_row(); my $num = 0; @@ -796,7 +953,7 @@ ENDMSG $num ++; $r->print($output); $r->print(qq| -
    +

    @@ -840,7 +997,7 @@ sub verify_and_change_msgforward { $newscreen=~s/\,$//; if ($newscreen) { &Apache::lonnet::put('environment',{'msgforward' => $newscreen}); - &Apache::lonnet::appenv('environment.msgforward' => $newscreen); + &Apache::lonnet::appenv({'environment.msgforward' => $newscreen}); $message .= &mt('Set message forwarding to ').'"'.$newscreen.'".' .'
    '; } else { @@ -881,7 +1038,7 @@ sub verify_and_change_msgforward { $notify_with_html =~ s/\s//gs; if ($notification) { &Apache::lonnet::put('environment',{'notification' => $notification}); - &Apache::lonnet::appenv('environment.notification' => $notification); + &Apache::lonnet::appenv({'environment.notification' => $notification}); $message.=&mt('Set non-critical message notification address(es) to ').'"'.$notification.'".
    '; } else { &Apache::lonnet::del('environment',['notification']); @@ -890,7 +1047,7 @@ sub verify_and_change_msgforward { } if ($critnotification) { &Apache::lonnet::put('environment',{'critnotification' => $critnotification}); - &Apache::lonnet::appenv('environment.critnotification' => $critnotification); + &Apache::lonnet::appenv({'environment.critnotification' => $critnotification}); $message.=&mt('Set critical message notification address(es) to ').'"'.$critnotification.'".
    '; } else { &Apache::lonnet::del('environment',['critnotification']); @@ -900,7 +1057,7 @@ sub verify_and_change_msgforward { if ($critnotification || $notification) { if ($notify_with_html) { &Apache::lonnet::put('environment',{'notifywithhtml' => $notify_with_html}); - &Apache::lonnet::appenv('environment.notifywithhtml' => $notify_with_html); + &Apache::lonnet::appenv({'environment.notifywithhtml' => $notify_with_html}); $message.=&mt('Set address(es) to receive excerpts with html retained ').'"'.$notify_with_html.'".'; } else { &Apache::lonnet::del('environment',['notifywithhtml']); @@ -928,6 +1085,11 @@ sub verify_and_change_msgforward { sub colorschanger { my $r = shift; + Apache::lonhtmlcommon::add_breadcrumb( + { href => '/adm/preferences?action=changecolors', + text => 'Change Colors'}); + $r->print(Apache::loncommon::start_page('Change Colors')); + $r->print(Apache::lonhtmlcommon::breadcrumbs('Change Colors')); # figure out colors my $function=&Apache::loncommon::get_users_function(); my $domain=&Apache::loncommon::determinedomain(); @@ -1016,7 +1178,7 @@ sub verify_and_change_colors { 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); + &Apache::lonnet::appenv({'environment.'.$entry => $color}); $message.=&mt('Set '.$colortypes{$item}.' to ').'"'.$color.'".
    '; } else { &Apache::lonnet::del('environment',[$entry]); @@ -1026,14 +1188,15 @@ sub verify_and_change_colors { } my $now = time; &Apache::lonnet::put('environment',{'color.timestamp' => $now}); - &Apache::lonnet::appenv('environment.color.timestamp' => $now); + &Apache::lonnet::appenv({'environment.color.timestamp' => $now}); - $r->print(< - - -ENDVCCOL + print_main_menu($r, $message); +# $r->print(< +# +# +#ENDVCCOL } ###################################################### @@ -1045,6 +1208,11 @@ sub passwordchanger { # Passwords are encrypted using londes.js (DES encryption) $errormessage = ($errormessage || ''); my ($user,$domain,$currentpass,$defdom); + Apache::lonhtmlcommon::add_breadcrumb( + { href => '/adm/preferences?action=changepass', + text => 'Change Password'}); + $r->print(Apache::loncommon::start_page('Change Password')); + $r->print(Apache::lonhtmlcommon::breadcrumbs('Change Password')); if ((!defined($caller)) || ($caller eq 'preferences')) { $user = $env{'user.name'}; $domain = $env{'user.domain'}; @@ -1164,7 +1332,7 @@ sub jscript_send { sub client_form { my ($caller,$hexkey,$currentpass,$defdom) = @_; my %lt=&Apache::lonlocal::texthash( - 'email' => 'EMail Address', + 'email' => 'E-mail Address', 'username' => 'Username', 'domain' => 'Domain', 'currentpass' => 'Current Password', @@ -1185,7 +1353,7 @@ sub client_form { -: +: |; $output .= &Apache::loncommon::select_dom_form($defdom,'udom').' @@ -1324,6 +1492,13 @@ ENDERROR # if ($caller eq 'reset_by_email') { my %data = &Apache::lonnet::tmpget($mailtoken); + if (keys(%data) == 0) { + &passwordchanger($r, + ''. + &mt('Could not verify current authentication.').' '. + &mt('Please try again.').'',$caller,$mailtoken); + return 1; + } if ($currentpass ne $data{'temppasswd'}) { &passwordchanger($r, ''. @@ -1371,12 +1546,18 @@ ENDERROR my $result = &Apache::lonnet::changepass ($user,$domain,$currentpass,$newpass1,$homeserver,$caller); # Inform the user the password has (not?) been changed + my $message; if ($result =~ /^ok$/) { - $r->print("

    ".&mt('The password for [_1] was successfully changed',$user)."

    "); + $message = &mt('The password for [_1] was successfully changed',$user); + print_main_menu($r, $message); +# $r->print("

    ".&mt('The password for [_1] was successfully changed',$user)."

    "); } else { # error error: run in circles, scream and shout - $r->print("

    ".&mt("The password for [_1] was not changed",$user)."

    ". - &mt('Please make sure your old password was entered correctly.')); + $message = &mt("The password for [_1] was not changed",$user) + .&mt('Please make sure your old password was entered correctly.'); + print_main_menu($r, $message); +# $r->print("

    ".&mt("The password for [_1] was not changed",$user)."

    ". +# &mt('Please make sure your old password was entered correctly.')); return 1; } return; @@ -1387,6 +1568,11 @@ ENDERROR ################################################################ sub discussionchanger { my $r = shift; + Apache::lonhtmlcommon::add_breadcrumb( + { href => '/adm/preferences?action=changediscussions', + text => 'Change Discussion Preferences'}); + $r->print(Apache::loncommon::start_page('Change Discussion Preferences')); + $r->print(Apache::lonhtmlcommon::breadcrumbs('Change Discussion Preferences')); my $user = $env{'user.name'}; my $domain = $env{'user.domain'}; my %userenv = &Apache::lonnet::get @@ -1415,9 +1601,9 @@ sub discussionchanger { 'pref' => 'Display Preference', 'curr' => 'Current setting ', 'actn' => 'Action', - 'sdpf' => 'Set display preferences for discussion posts for both bulletin boards and individual resources in all your courses.', + 'sdpf' => 'Set display preferences for discussion posts for both discussion boards and individual resources in all your courses.', 'prca' => 'Preferences can be set that determine', - 'whpo' => 'Which posts are displayed when you display a bulletin board or resource, and', + 'whpo' => 'Which posts are displayed when you display a discussion board or resource, and', 'unwh' => 'Under what circumstances posts are identfied as "New"', 'allposts' => 'All posts', 'unread' => 'New posts only', @@ -1480,7 +1666,7 @@ END $r->print(<<"END");

    - +

    Note: $lt{'thde'} @@ -1498,7 +1684,7 @@ sub verify_and_change_discussion { if ($newdisp eq 'unread') { $message .=&mt('In discussions: only new posts will be displayed.').'
    '; &Apache::lonnet::put('environment',{'discdisplay' => $newdisp}); - &Apache::lonnet::appenv('environment.discdisplay' => $newdisp); + &Apache::lonnet::appenv({'environment.discdisplay' => $newdisp}); } else { $message .= &mt('In discussions: all posts will be displayed.').'
    '; &Apache::lonnet::del('environment',['discdisplay']); @@ -1510,16 +1696,17 @@ sub verify_and_change_discussion { if ($newmark eq 'ondisp') { $message.=&mt('In discussions: new posts will be cease to be identified as "NEW" after display.').'
    '; &Apache::lonnet::put('environment',{'discmarkread' => $newmark}); - &Apache::lonnet::appenv('environment.discmarkread' => $newmark); + &Apache::lonnet::appenv({'environment.discmarkread' => $newmark}); } else { $message.=&mt('In discussions: posts will be identified as "NEW" until marked as read by the reader.').'
    '; &Apache::lonnet::del('environment',['discmarkread']); &Apache::lonnet::delenv('environment\.discmarkread'); } } - $r->print(<print(< '/adm/preferences?action=changecourseinit', + text => 'Change Course Init. Pref.'}); + $r->print(Apache::loncommon::start_page('Change Course Initialization Preference')); + $r->print(Apache::lonhtmlcommon::breadcrumbs('Change Course Init. Pref.')); my $user = $env{'user.name'}; my $domain = $env{'user.domain'}; my %userenv = &Apache::lonnet::get('environment',['course_init_display']); @@ -1540,14 +1732,21 @@ sub coursedisplaychanger { $whatsnewselect = ''; } } - my %pagenames = ( + my %pagenames = &Apache::lonlocal::texthash( firstres => 'First resource', - whatsnew => "What's new page", + 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"); + my $whatsnew_off=&mt('Display the [_1]first resource[_2] in the course.','',''); + my $whatsnew_on=&mt("Display the [_1]What's New page[_2] - a summary of items in the course which require attention.",'',''); - $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('
    ' + .&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]What's New page[_2] in the course.",'','') + .'

    ' + ); $r->print(< @@ -1575,7 +1774,7 @@ sub verify_and_change_coursepage { if ($newdisp eq 'firstres') { $message .= $lt{'ywbt'}.'
    '; &Apache::lonnet::put('environment',{'course_init_display' => $newdisp}); - &Apache::lonnet::appenv('environment.course_init_display' => $newdisp); + &Apache::lonnet::appenv({'environment.course_init_display' => $newdisp}); } else { $message .= $lt{'apwb'}.'
    '; &Apache::lonnet::del('environment',['course_init_display']); @@ -1594,12 +1793,199 @@ sub verify_and_change_coursepage { $refpage.'">'.$lt{'dasp'}.''; } } - $r->print(<
    -ENDVCSCREEN +# $r->print(<
    +#ENDVCSCREEN + print_main_menu($r, $message); } +sub print_main_menu { + my ($r, $message) = @_; + # Determine current authentication method + my $user = $env{'user.name'}; + my $domain = $env{'user.domain'}; + my $currentauth=&Apache::lonnet::queryauthenticate($user,$domain); + + # build the data structure for menu generation +my $aboutmeurl='/adm/'.$env{'user.domain'}.'/'.$env{'user.name'}.'/aboutme'; +my $role = ($env{'user.adv'} ? 'Roles' : 'Course'); +my %permissions; +if (&Apache::lonnet::usertools_access($user,$domain,'aboutme')) { + $permissions{'aboutme'} = 'F'; +} +my @menu= + ({ categorytitle=>'Personal Data', + items =>[ + { linktext => 'About Me', + url => $aboutmeurl, + permission => $permissions{'aboutme'}, + #help => 'Prefs_About_Me', + icon => 'system-users.png', + linktitle => 'Edit information about yourself that should be displayed on your public profile.' + }, + { linktext => 'Screen Name', + url => '/adm/preferences?action=changescreenname', + permission => 'F', + #help => 'Prefs_Screen_Name_Nickname', + icon => 'preferences-desktop-font.png', + linktitle => 'Change the name that is displayed in your posts.' + }, + ] + }, + { categorytitle=>'Page Display Settings', + items =>[ + { linktext => 'Color Scheme', + url => '/adm/preferences?action=changecolors', + permission => 'F', + #help => 'Change_Colors', + icon => 'preferences-desktop-theme.png', + linktitle => 'Change LON-CAPA default colors.' + }, + { linktext => 'Menu Display', + url => '/adm/preferences?action=changeicons', + permission => 'F', + #help => '', + icon => 'preferences-system-windows.png', + linktitle => 'Change whether the menus are displayed with buttons, icons or icons and text.' + } + + ] + }, + { categorytitle=>'Content Display Settings', + items =>[ + { linktext => 'Language', + url => '/adm/preferences?action=changelanguages', + permission => 'F', + #help => 'Prefs_Language', + icon => 'preferences-desktop-locale.png', + linktitle => 'Choose the default language for this user.' + }, + { linktext => 'WYSIWYG Editor', + url => '/adm/preferences?action=changewysiwyg', + permission => 'F', + #help => '', + icon => 'edit-select-all.png', + linktitle => 'Enable or disable the WYSIWYG-Editor.' + }, + { linktext => $role.' Page', + url => '/adm/preferences?action=changerolespref', + permission => 'F', + #help => '', + icon => 'sctr.png', + linktitle => 'Configure the roles hotlist.' + }, + { linktext => 'Display of Scientific Equations', + url => '/adm/preferences?action=changetexenginepref', + permission => 'F', + #help => '', + icon => 'stat.png', + linktitle => 'Change how Scientific Equations are displayed.' + }, + ] + }, + { categorytitle=>'Message Management', + items =>[ + { linktext => 'Messages & Notifications', + url => '/adm/preferences?action=changemsgforward', + permission => 'F', + #help => 'Prefs_Messages', + icon => 'mail-reply-all.png', + linktitle => 'Change messageforwarding or notifications settings.' + }, + { linktext => 'Discussion Display', + url => '/adm/preferences?action=changediscussions', + permission => 'F', + #help => 'Change_Discussion_Display', + icon => 'mail-message-new.png', + linktitle => 'Set display preferences for discussion posts for both discussion boards and individual resources in all your courses.' + }, + ] + }, + { categorytitle=>'Other', + items =>[ + { linktext => 'Register Response Devices ("Clickers")', + url => '/adm/preferences?action=changeclicker', + permission => 'F', + #help => '', + icon => 'network-workgroup.png', + linktitle => 'Register your clicker.' + }, + ] + }, + ); + + if ($currentauth =~ /^(unix|internal):/) { +push(@{ $menu[0]->{items} }, { + linktext => 'Password', + url => '/adm/preferences?action=changepass', + permission => 'F', + #help => 'Change_Password', + icon => 'emblem-readonly.png', + linktitle => 'Change your password.', + }); + } + if ($env{'environment.remote'} eq 'off') { +push(@{ $menu[1]->{items} }, { + linktext => 'Launch Remote Control', + url => '/adm/remote?url=/adm/preferences?action=launch', + permission => 'F', + #help => '', + icon => 'network-wireless.png', + linktitle => 'Launch the remote control for LON-CAPA.', + }); + }else{ +push(@{ $menu[1]->{items} }, { + linktext => 'Collapse Remote Control', + url => '/adm/remote?url=/adm/preferences?action=collapse', + permission => 'F', + #help => '', + icon => 'network-wireless.png', + linktitle => 'Collapse the remote control for LON-CAPA.', + }); + } + my %author_roles = &Apache::lonnet::get_my_roles($user,$domain,'userroles','',['au']); + if (keys(%author_roles) > 0) { +push(@{ $menu[4]->{items} }, { + linktext => 'Restrict Domain Coordinator Access', + url => '/adm/preferences?action=changedomcoord', + permission => 'F', + #help => '', + icon => 'system-lock-screen.png', + linktitle => 'Restrict domain coordinator access.', + }); + } + + if (&Apache::lonnet::allowed('whn',$env{'request.course.id'}) + || &Apache::lonnet::allowed('whn',$env{'request.course.id'}.'/' + .$env{'request.course.sec'})) { +push(@{ $menu[4]->{items} }, { + linktext => 'Course Initialization', + url => '/adm/preferences?action=changecourseinit', + permission => 'F', + #help => '', + icon => 'edit-copy.png', + linktitle => 'Set the default page to be displayed when you select a course role.', + }); + + } + if ($env{'user.name'} =~ /^(albertel|fox|foxr|kortemey|korte|raeburn)$/) { +push(@{ $menu[4]->{items} }, { + linktext => 'Toggle Debug Messages (Current:'.$env{'user.debug'}.')', + url => '/adm/preferences?action=debugtoggle', + permission => 'F', + #help => '', + icon => 'blog.png', + linktitle => 'Toggle Debug Messages.', + }); + } + + $r->print(&Apache::loncommon::start_page('Change Preferences')); + $r->print(Apache::lonhtmlcommon::breadcrumbs('Change Preferences')); + $r->print($message); + $r->print(Apache::lonhtmlcommon::generate_menu(@menu)); + $r->print(Apache::loncommon::end_page()); +} ###################################################### # other handler subroutines # @@ -1608,7 +1994,91 @@ ENDVCSCREEN ################################################################ # Main handler # ################################################################ -sub handler { +sub handler { + my $r = shift; + Apache::loncommon::content_type($r,'text/html'); + # Some pages contain DES keys and should not be cached. + Apache::loncommon::no_cache($r); + $r->send_http_header; + return OK if $r->header_only; + # + Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'}, + ['action','wysiwyg','returnurl','refpage']); + # + Apache::lonhtmlcommon::clear_breadcrumbs(); + Apache::lonhtmlcommon::add_breadcrumb + ({href => '/adm/preferences', + text => 'Set User Preferences'}); + if(!exists $env{'form.action'}) { + &print_main_menu($r); + }elsif($env{'form.action'} eq 'changepass'){ + &passwordchanger($r); + }elsif($env{'form.action'} eq 'verify_and_change_pass'){ + &verify_and_change_password($r); + }elsif($env{'form.action'} eq 'changescreenname'){ + &screennamechanger($r); + }elsif($env{'form.action'} eq 'verify_and_change_screenname'){ + &verify_and_change_screenname($r); + }elsif($env{'form.action'} eq 'changemsgforward'){ + &msgforwardchanger($r); + }elsif($env{'form.action'} eq 'verify_and_change_msgforward'){ + &verify_and_change_msgforward($r); + }elsif($env{'form.action'} eq 'changecolors'){ + &colorschanger($r); + }elsif($env{'form.action'} eq 'verify_and_change_colors'){ + &verify_and_change_colors($r); + }elsif($env{'form.action'} eq 'changelanguages'){ + &languagechanger($r); + }elsif($env{'form.action'} eq 'verify_and_change_languages'){ + &verify_and_change_languages($r); + }elsif($env{'form.action'} eq 'changewysiwyg'){ + &wysiwygchanger($r); + }elsif($env{'form.action'} eq 'set_wysiwyg'){ + &verify_and_change_wysiwyg($r); + }elsif($env{'form.action'} eq 'changediscussions'){ + &discussionchanger($r); + }elsif($env{'form.action'} eq 'verify_and_change_discussion'){ + &verify_and_change_discussion($r); + }elsif($env{'form.action'} eq 'changerolespref'){ + &rolesprefchanger($r); + }elsif($env{'form.action'} eq 'verify_and_change_rolespref'){ + &verify_and_change_rolespref($r); + }elsif($env{'form.action'} eq 'changetexenginepref'){ + &texenginechanger($r); + }elsif($env{'form.action'} eq 'verify_and_change_texengine'){ + &verify_and_change_texengine($r); + }elsif($env{'form.action'} eq 'changeicons'){ + &iconchanger($r); + }elsif($env{'form.action'} eq 'verify_and_change_icons'){ + &verify_and_change_icons($r); + }elsif($env{'form.action'} eq 'changeclicker'){ + &clickerchanger($r); + }elsif($env{'form.action'} eq 'verify_and_change_clicker'){ + &verify_and_change_clicker($r); + }elsif($env{'form.action'} eq 'changedomcoord'){ + &domcoordchanger($r); + }elsif($env{'form.action'} eq 'verify_and_change_domcoord'){ + &verify_and_change_domcoord($r); + }elsif($env{'form.action'} eq 'lockwarning'){ + &lockwarning($r); + }elsif($env{'form.action'} eq 'verify_and_change_locks'){ + &verify_and_change_lockwarning($r); + }elsif($env{'form.action'} eq 'changecourseinit'){ + &coursedisplaychanger($r); + }elsif($env{'form.action'} eq 'verify_and_change_coursepage'){ + &verify_and_change_coursepage($r); + }elsif($env{'form.action'} eq 'debugtoggle'){ + toggle_debug(); + print_main_menu($r); + } + + return OK; + + +} +#remove when done +#old handler routine +sub handler2 { my $r = shift; my $user = $env{'user.name'}; my $domain = $env{'user.domain'}; @@ -1665,19 +2135,20 @@ sub handler { })); push (@Options,({ action => 'changemsgforward', - linktext => 'Change Message Forwarding and Notification Email Addresses', + linktext => 'Change Message Forwarding and Notification E-mail Addresses', href => '/adm/preferences', - help => 'Prefs_Forwarding', + help => 'Prefs_Messages', breadcrumb => { href => '/adm/preferences?action=changemsgforward', - text => 'Change Message Forwarding'}, + text => 'Change Message Forwarding/Notification'}, subroutine => \&msgforwardchanger, }, { action => 'verify_and_change_msgforward', + help => 'Prefs_Messages', breadcrumb => { href => '/adm/preferences?action=changemsgforward', - text => 'Change Message Forwarding'}, - printmenu => 'no', + text => 'Change Message Forwarding/Notification'}, + printmenu => 'yes', subroutine => \&verify_and_change_msgforward })); my $aboutmeaction= '/adm/'.$env{'user.domain'}.'/'.$env{'user.name'}.'/aboutme'; @@ -1816,7 +2287,7 @@ sub handler { href => '/adm/preferences', subroutine => \&clickerchanger, breadcrumb => - { href => '/adm/preferences?action=changeicons', + { href => '/adm/preferences?action=changeclicker', text => 'Register Clicker'}, }, { action => 'verify_and_change_clicker', @@ -1826,6 +2297,38 @@ sub handler { text => 'Register Clicker'}, printmenu => 'yes', })); + my %author_roles = &Apache::lonnet::get_my_roles($user,$domain,'userroles','',['au']); + if (keys(%author_roles) > 0) { + push (@Options,({ action => 'changedomcoord', + linktext => 'Restrict Domain Coordinator Access', + href => '/adm/preferences', + subroutine => \&domcoordchanger, + breadcrumb => + { href => '/adm/preferences?action=changedomcoord', + text => 'Restrict Domain Coordinator Access'}, + }, + { action => 'verify_and_change_domcoord', + subroutine => \&verify_and_change_domcoord, + breadcrumb => + { href => '/adm/preferences?action=changedomcoord', + text => 'Restrict Domain Coordinator Access'}, + printmenu => 'yes', + })); + } + + push (@Options,({ action => 'lockwarning', + subroutine => \&lockwarning, + breadcrumb => + { href => '/adm/preferences?action=lockwarning', + text => 'Lock Warnings'}, + }, + { action => 'verify_and_change_locks', + subroutine => \&verify_and_change_lockwarning, + breadcrumb => + { href => '/adm/preferences?action=lockwarning', + text => 'Lockwarnings'}, + printmenu => 'yes', + })); if (&Apache::lonnet::allowed('whn',$env{'request.course.id'}) @@ -1847,7 +2350,7 @@ sub handler { })); } - if ($env{'user.name'} =~ /^(albertel|fox|foxr|koretemey|korte|hallmat3|turtle|raeburn)$/) { + if ($env{'user.name'} =~ /^(albertel|fox|foxr|kortemey|korte|raeburn)$/) { push (@Options,({ action => 'debugtoggle', printmenu => 'yes', subroutine => \&toggle_debug, @@ -1930,7 +2433,7 @@ sub toggle_debug { if ($env{'user.debug'}) { &Apache::lonnet::delenv('user\.debug'); } else { - &Apache::lonnet::appenv('user.debug' => 1); + &Apache::lonnet::appenv({'user.debug' => 1}); } }