--- loncom/interface/lonpreferences.pm 2006/05/01 22:54:43 1.83 +++ loncom/interface/lonpreferences.pm 2009/05/06 16:19:34 1.159 @@ -1,7 +1,7 @@ # The LearningOnline Network # Preferences # -# $Id: lonpreferences.pm,v 1.83 2006/05/01 22:54:43 albertel Exp $ +# $Id: lonpreferences.pm,v 1.159 2009/05/06 16:19:34 bisitz Exp $ # # Copyright Michigan State University Board of Trustees # @@ -33,6 +33,7 @@ package Apache::lonpreferences; use strict; +use LONCAPA; use Apache::Constants qw(:common); use Apache::File; use Crypt::DES; @@ -41,6 +42,7 @@ use Apache::loncommon(); use Apache::lonhtmlcommon(); use Apache::lonlocal; use Apache::lonnet; +use LONCAPA(); # # Write lonnet::passwd to do the call below. @@ -96,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('Content Display Settings')); + $r->print(Apache::lonhtmlcommon::breadcrumbs('Change WYSIWYG Preferences')); + my %userenv = &Apache::lonnet::get ('environment',['wysiwygeditor']); my $onselect='checked="checked"'; @@ -106,14 +114,19 @@ 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

ENDLSCREEN - $r->print('
'); + $r->print('
'); } @@ -121,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}); + my $message=&Apache::lonhtmlcommon::confirm_success(&mt('Set [_1] to [_2]',''.&mt('WYSIWYG Editor').'',''.&mt($newsetting).'')); + $message=&Apache::loncommon::confirmwrapper($message); + &print_main_menu($r,$message); } ################################################################ @@ -130,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('Content Display Settings')); + $r->print(Apache::lonhtmlcommon::breadcrumbs('Change Language')); my $user = $env{'user.name'}; my $domain = $env{'user.domain'}; my %userenv = &Apache::lonnet::get @@ -147,11 +168,11 @@ sub languagechanger { my $selectionbox=&Apache::loncommon::select_form($language,'language', %langchoices); $r->print(< +
$pref: $selectionbox ENDLSCREEN - $r->print('
'); + $r->print('
'); } @@ -165,16 +186,16 @@ sub verify_and_change_languages { my $message=''; if ($newlanguage) { &Apache::lonnet::put('environment',{'languages' => $newlanguage}); - &Apache::lonnet::appenv('environment.languages' => $newlanguage); - $message='Set new preferred languages to '.$newlanguage; + &Apache::lonnet::appenv({'environment.languages' => $newlanguage}); + $message=&Apache::lonhtmlcommon::confirm_success(&mt('Set [_1] to [_2]',''.&mt('Preferred language').'','"'.$newlanguage.'".')); } else { &Apache::lonnet::del('environment',['languages']); - &Apache::lonnet::delenv('environment\.languages'); - $message='Reset preferred language'; + &Apache::lonnet::delenv('environment.languages'); + $message=&Apache::lonhtmlcommon::confirm_success(&mt('Reset [_1]',''.&mt('Preferred language').'')); } - $r->print(< '/adm/preferences?action=changetexenginepref', + text => 'Change How Math Equations Are Displayed'}); + $r->print(Apache::loncommon::start_page('Content Display Settings')); + $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' => 'Save', + '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') { - $r->print(''); + $r->print(''); } } @@ -250,27 +292,24 @@ 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); - $message='Set new preferred math display to '.$newtexengine; + &Apache::lonnet::appenv({'environment.texengine' => $newtexengine}); + $message=&Apache::lonhtmlcommon::confirm_success(&mt('Set [_1] to [_2]',''.&mt('Preferred method to display Math').'','"'.$newtexengine.'"')); } else { &Apache::lonnet::del('environment',['texengine']); - &Apache::lonnet::delenv('environment\.texengine'); - $message='Reset preferred math display.'; + &Apache::lonnet::delenv('environment.texengine'); + $message=&Apache::lonhtmlcommon::confirm_success(&mt('Reset [_1]',''.&mt('Preferred method to display Math').'')); } - - - $r->print(< '/adm/preferences?action=changerolespref', + text => 'Change '.$role.' Page Pref'}); + $r->print(Apache::loncommon::start_page('Content Display Settings')); + $r->print(Apache::lonhtmlcommon::breadcrumbs('Change '.$role.' Page Pref')); my $hotlist_flag=$userenv{'recentroles'}; my $hotlist_n=$userenv{'recentrolesn'}; my $checked; @@ -297,55 +343,155 @@ sub rolesprefchanger { $options .= "\n"; } - $r->print(<Some LON-CAPA users have a long list of roles. The Recent Roles Hotlist -feature keeps track of the last N roles which have been -visited and places a table of these at the top of the roles page. -People with very few roles should leave this feature disabled. -

+# Get list of recent roles and display with checkbox in front + my $roles_check_list = ''; + my $role_key=''; + if ($env{'environment.recentroles'}) { + my %recent_roles = + &Apache::lonhtmlcommon::get_recent('roles',$env{'environment.recentrolesn'}); + my %frozen_roles = + &Apache::lonhtmlcommon::get_recent_frozen('roles',$env{'environment.recentrolesn'}); + + my %role_text = &rolespref_get_role_text([keys(%recent_roles)]); + my @sorted_roles = sort {$role_text{$a} cmp $role_text{$b}} keys(%role_text); + + $roles_check_list .= + &Apache::loncommon::start_data_table(). + &Apache::loncommon::start_data_table_header_row(). + "".&mt('Freeze '.$role)."". + "".&mt($role)."". + &Apache::loncommon::end_data_table_header_row(). + "\n"; + my $count; + foreach $role_key (@sorted_roles) { + my $checked = ""; + my $value = $recent_roles{$role_key}; + if ($frozen_roles{$role_key}) { + $checked = ' checked="checked"'; + } + $count++; + $roles_check_list .= + &Apache::loncommon::start_data_table_row(). + ''. + "". + "". + &Apache::loncommon::end_data_table_row(). "\n"; + } + $roles_check_list .= "\n"; + } + $r->print(' +

'.&mt('Some LON-CAPA users have a long list of '.$lc_role.'s. The Recent '.$role.'s Hotlist feature keeps track of the last N '.$lc_role.'s which have been visited and places a table of these at the top of the '.$lc_role.'s page. People with very few '.$lc_role.'s should leave this feature disabled.').' +

-
-
Number of roles in Hotlist: +
+
'.&mt('Number of '.$role.'s in Hotlist:').' +

'.&mt('This list below can be used to freeze '.$lc_role.'s on your screen. Those marked as frozen will not be removed from the list, even if they have not been used recently.').' +

+'.$roles_check_list.'
- -
-ENDSCREEN + +'); +} + +sub rolespref_get_role_text { +# Get a line of text for each role + my ($roles) = @_; + my %roletext = (); + + foreach my $item (@$roles) { +# get course information + my ($role,$rest) = split(/\./, $item); + my $trole = ""; + $trole = &Apache::lonnet::plaintext($role); + my ($tdomain,$other,$tsection)= split(/\//,Apache::lonnet::declutter($rest)); + my $tother = '-'; + if ($role =~ /^(cc|st|in|ta|ep|cr)/ ) { + my %newhash=&Apache::lonnet::coursedescription($tdomain."_".$other); + $tother = " - ".$newhash{'description'}; + } elsif ($role =~ /dc/) { + $tother = ""; + } else { + $tother = " - $other"; + } + + my $section=""; + if ($tsection) { + $section = " - Section/Group: $tsection"; + } + $roletext{$item} = $tdomain." - ".$trole.$tother.$section; + } + return %roletext; } sub verify_and_change_rolespref { my $r = shift; + my $role = ($env{'user.adv'} ? 'Role' : 'Course'); 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 $message=''; + my $message='
'; if ($hotlist_flag) { &Apache::lonnet::put('environment',{'recentroles' => $hotlist_flag}); - &Apache::lonnet::appenv('environment.recentroles' => $hotlist_flag); - $message='Recent Roles Hotlist is Enabled'; + &Apache::lonnet::appenv({'environment.recentroles' => $hotlist_flag}); + $message=&mt('Recent '.$role.'s Hotlist is Enabled'); } else { &Apache::lonnet::del('environment',['recentroles']); - &Apache::lonnet::delenv('environment\.recentroles'); - $message='Recent Roles Hotlist is Disabled'; + &Apache::lonnet::delenv('environment.recentroles'); + $message=&mt('Recent '.$role.'s Hotlist is Disabled'); } 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.="
Display $hotlist_n Most Recent Roles\n"; + $message.="
". + &mt('Display [_1] Most Recent '.$role.'s',$hotlist_n)."\n"; } } - $r->print(<'.$role_text{$role_key}.'')); + &Apache::lonhtmlcommon::store_recent('roles',$role_key,' ',0); + } + } + +# Freeze selected roles + foreach my $role_key (@freeze_list) { + if (!$frozen_roles{$role_key}) { + $message .= "
". + &Apache::lonhtmlcommon::confirm_success(&mt('Freezing '.$role.': [_1]',''.$role_text{$role_key}.'')); + &Apache::lonhtmlcommon::store_recent('roles', + $role_key,' ',1); + } + } + $message=&Apache::loncommon::confirmwrapper($message); + &print_main_menu($r, $message); } @@ -361,16 +507,30 @@ sub screennamechanger { ('environment',['screenname','nickname']); my $screenname=$userenv{'screenname'}; my $nickname=$userenv{'nickname'}; - $r->print(< - -
New screenname (shown if you post anonymously): - -
New nickname (shown if you post non-anonymously): - - - -ENDSCREEN + Apache::lonhtmlcommon::add_breadcrumb( + { href => '/adm/preferences?action=changescreenname', + text => 'Change Screen Name'}); + $r->print(Apache::loncommon::start_page('Personal Data')); + $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('Screenname').' '.&mt('(shown if you post anonymously)')) + .'' + .&Apache::lonhtmlcommon::row_closure() + .&Apache::lonhtmlcommon::row_title(&mt('Nickname').' '.&mt('(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 { @@ -383,12 +543,12 @@ sub verify_and_change_screenname { my $message=''; if ($newscreen) { &Apache::lonnet::put('environment',{'screenname' => $newscreen}); - &Apache::lonnet::appenv('environment.screenname' => $newscreen); - $message='Set new screenname to '.$newscreen; + &Apache::lonnet::appenv({'environment.screenname' => $newscreen}); + $message=&Apache::lonhtmlcommon::confirm_success(&mt('Set [_1] to [_2]',''.&mt('Screenname').'','"'.$newscreen.'."')); } else { &Apache::lonnet::del('environment',['screenname']); - &Apache::lonnet::delenv('environment\.screenname'); - $message='Reset screenname'; + &Apache::lonnet::delenv('environment.screenname'); + $message=&Apache::lonhtmlcommon::confirm_success(&mt('Reset [_1]',''.&mt('Screenname').'')); } # Nickname $message.='
'; @@ -396,51 +556,424 @@ sub verify_and_change_screenname { $newscreen=~s/[^ \w]//g; if ($newscreen) { &Apache::lonnet::put('environment',{'nickname' => $newscreen}); - &Apache::lonnet::appenv('environment.nickname' => $newscreen); - $message.='Set new nickname to '.$newscreen; + &Apache::lonnet::appenv({'environment.nickname' => $newscreen}); + $message.=&Apache::lonhtmlcommon::confirm_success(&mt('Set [_1] to [_2]',''.&mt('Nickname').'','"'.$newscreen.'".')); } else { &Apache::lonnet::del('environment',['nickname']); - &Apache::lonnet::delenv('environment\.nickname'); - $message.='Reset nickname'; + &Apache::lonnet::delenv('environment.nickname'); + $message.=&Apache::lonhtmlcommon::confirm_success(&mt('Reset [_1]',''.&mt('Nickname').'')); } &Apache::lonnet::devalidate_cache_new('namescache',$user.':'.$domain); - $r->print(< '/adm/preferences?action=changeicons', + text => 'Change Main Menu'}); + $r->print(Apache::loncommon::start_page('Page Display Settings')); + $r->print(Apache::lonhtmlcommon::breadcrumbs('Change Main Menu')); + + my $user = $env{'user.name'}; + my $domain = $env{'user.domain'}; + my %userenv = &Apache::lonnet::get + ('environment',['icons']); + my $iconic='checked="checked"'; + my $classic=''; + my $onlyicon=''; + if ($userenv{'icons'} eq 'classic') { + $classic='checked="checked"'; + $iconic=''; + } + if ($userenv{'icons'} eq 'iconsonly') { + $onlyicon='checked="checked"'; + $iconic=''; + } + my $useicons=&mt('Use icons and text'); + my $usebuttons=&mt('Use buttons and text'); + my $useicononly=&mt('Use icons only'); + my $change=&mt('Save'); + $r->print(< + +
+
+
+ + +ENDSCREEN +} + +sub verify_and_change_icons { + my $r = shift; + my $user = $env{'user.name'}; + my $domain = $env{'user.domain'}; + my $newicons = $env{'form.menumode'}; + + &Apache::lonnet::put('environment',{'icons' => $newicons}); + &Apache::lonnet::appenv({'environment.icons' => $newicons}); + my $message=&Apache::lonhtmlcommon::confirm_success(&mt('Set [_1] to [_2]',''.&mt('Menu Display').'',''.$newicons.'')); + $message=&Apache::loncommon::confirmwrapper($message); + &print_main_menu($r, $message); +} + +################################################################ +# Clicker Subroutines # +################################################################ + +sub clickerchanger { + my $r = shift; + &Apache::lonhtmlcommon::add_breadcrumb( + { href => '/adm/preferences?action=changeclicker', + text => 'Register Clicker'}); + $r->print(Apache::loncommon::start_page('Other')); + $r->print(Apache::lonhtmlcommon::breadcrumbs('Register Clicker')); + my $user = $env{'user.name'}; + my $domain = $env{'user.domain'}; + my %userenv = &Apache::lonnet::get + ('environment',['clickers']); + my $clickers=$userenv{'clickers'}; + $clickers=~s/\,/\n/gs; + my $text=&mt('Enter response device ("clicker") numbers'); + my $change=&mt('Save'); + my $helplink=&Apache::loncommon::help_open_topic('Clicker_Registration',&mt('Locating your clicker ID')); + $r->print(< + + +
+ + +ENDSCREEN +} + +sub verify_and_change_clicker { + my $r = shift; + my $user = $env{'user.name'}; + my $domain = $env{'user.domain'}; + my $newclickers = $env{'form.clickers'}; + $newclickers=~s/[^\w\:\-]+/\,/gs; + $newclickers=~tr/a-z/A-Z/; + $newclickers=~s/[\:\-]+/\-/g; + $newclickers=~s/\,+/\,/g; + $newclickers=~s/^\,//; + $newclickers=~s/\,$//; + &Apache::lonnet::put('environment',{'clickers' => $newclickers}); + &Apache::lonnet::appenv({'environment.clickers' => $newclickers}); + my $message=&Apache::lonhtmlcommon::confirm_success(&mt('Registering clickers: [_1]',$newclickers)); + $message=&Apache::loncommon::confirmwrapper($message); + &print_main_menu($r, $message); } ################################################################ +# 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('Save'); + $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'}}); + my $status=''; + if ($domcoord{'domcoord.author'} eq 'blocked') { + $status=&mt('on'); + } else { + $status=&mt('off'); + } + my $message=&Apache::lonhtmlcommon::confirm_success(&mt('Set [_1] to [_2]',''.&mt('Block access to construction space').'',''.$status.'')); + $message=&Apache::loncommon::confirmwrapper($message); + &print_main_menu($r,$message); +} + +################################################################# +## 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 # ################################################################ sub msgforwardchanger { - my $r = shift; + my ($r,$message) = @_; my $user = $env{'user.name'}; my $domain = $env{'user.domain'}; - my %userenv = &Apache::lonnet::get('environment',['msgforward','notification','critnotification']); + my %userenv = &Apache::lonnet::get('environment',['msgforward','notification','critnotification','notifywithhtml']); 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"); + my %lt = &Apache::lonlocal::texthash( + all => 'All', + 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 => '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 => 'Save', + email => 'The e-mail address entered in row ', + notv => 'is not a valid e-mail address', + toen => "To enter multiple addresses, enter one address at a time, click 'Change' and then add the next one", + prme => 'Back', + ); + Apache::lonhtmlcommon::add_breadcrumb( + { href => '/adm/preferences?action=changemsgforward', + text => 'Change Message Forwarding/Notification'}); + $r->print(Apache::loncommon::start_page('Message Management')); + $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(); + my $jscript = qq| + +|; $r->print(< -
    +$jscript +$message +

    $lt{'foad'} $forwardingHelp

    + -New Forwarding Address(es) (user:domain,user:domain,...): -
    -New Message Notification Email Address(es) (joe\@doe.com,jane\@doe.edu,...): -
    -New Critical Message Notification Email Address(es) (joe\@doe.com,jane\@doe.edu,...): -$criticalMessageHelp
    - -
    +$lt{'foad'} ($lt{'foad_exmpl'}): +
    +

    $lt{'noti'} $notificationHelp

    +$lt{'mnot'} ($lt{'mnot_exmpl'}):
    ENDMSG + my @sortforwards = sort (keys(%allnot)); + my $output = &Apache::loncommon::start_data_table(). + &Apache::loncommon::start_data_table_header_row(). + ' '. + ''.&mt('Action').''. + ''.&mt('Notification 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; + my $counter = 1; + foreach my $item (@sortforwards) { + $output .= &Apache::loncommon::start_data_table_row(). + ''.$counter.''. + '   '. + ''. + ''; + my %chk; + if (defined($allnot{$item}{'crit'})) { + if (defined($allnot{$item}{'reg'})) { + $chk{'all'} = 'checked="checked" '; + } else { + $chk{'crit'} = 'checked="checked" '; + } + } else { + $chk{'reg'} = 'checked="checked" '; + } + foreach my $type ('all','crit','reg') { + $output .= ' '; + } + my $htmlon = ''; + my $htmloff = ''; + if (grep/^\Q$item\E/,@allow_html) { + $htmlon = 'checked="checked" '; + } else { + $htmloff = 'checked="checked" '; + } + $output .= ' '. + ''. + &Apache::loncommon::end_data_table_row(); + $num ++; + $counter ++; + } + my %defchk = ( + all => 'checked="checked" ', + crit => '', + reg => '', + ); + $output .= &Apache::loncommon::start_data_table_row(). + ''.$counter.''. + ''. + ''; + foreach my $type ('all','crit','reg') { + $output .= ' '; + } + $output .= ' '. + ''. + &Apache::loncommon::end_data_table_row(). + &Apache::loncommon::end_data_table(); + $num ++; + $r->print($output); + $r->print(qq| +

    + + + + +|); + +} + +sub get_notifications { + my ($userenv) = @_; + my %allnot; + my @critnot = split(/,/,$userenv->{'critnotification'}); + my @regnot = split(/,/,$userenv->{'notification'}); + foreach my $item (@critnot) { + $allnot{$item}{crit} = 1; + } + foreach my $item (@regnot) { + $allnot{$item}{reg} = 1; + } + return %allnot; } sub verify_and_change_msgforward { @@ -451,51 +984,99 @@ sub verify_and_change_msgforward { my $message=''; foreach (split(/\,/,$env{'form.msgforward'})) { my ($msuser,$msdomain)=split(/[\@\:]/,$_); - $msuser=~s/\W//g; - $msdomain=~s/\W//g; + $msuser = &LONCAPA::clean_username($msuser); + $msdomain = &LONCAPA::clean_domain($msdomain); if (($msuser) && ($msdomain)) { if (&Apache::lonnet::homeserver($msuser,$msdomain) ne 'no_host') { $newscreen.=$msuser.':'.$msdomain.','; } else { - $message.='No such user: '.$msuser.':'.$msdomain.'
    '; + $message.= &mt('No such user: ').''.$msuser.':'.$msdomain.'
    '; } } } $newscreen=~s/\,$//; if ($newscreen) { &Apache::lonnet::put('environment',{'msgforward' => $newscreen}); - &Apache::lonnet::appenv('environment.msgforward' => $newscreen); - $message.='Set new message forwarding to '.$newscreen.'
    '; + &Apache::lonnet::appenv({'environment.msgforward' => $newscreen}); + $message .= &mt('Set message forwarding to ').'"'.$newscreen.'".' + .'
    '; } else { &Apache::lonnet::del('environment',['msgforward']); - &Apache::lonnet::delenv('environment\.msgforward'); - $message.='Reset message forwarding
    '; + &Apache::lonnet::delenv('environment.msgforward'); + $message.= &mt("Set message forwarding to 'off'.").'
    '; + } + my $critnotification; + my $notification; + my $notify_with_html; + my $lastnotify = $env{'form.numnotify'}-1; + my $totaladdresses = 0; + for (my $i=0; $i<$env{'form.numnotify'}; $i++) { + if ((!defined($env{'form.del_notify_'.$i})) && + ((($i==$lastnotify) && ($env{'form.add_notify_'.$lastnotify} == 1)) || + ($i<$lastnotify))) { + if (defined($env{'form.address_'.$i})) { + if ($env{'form.notify_type_'.$i} eq 'all') { + $critnotification .= $env{'form.address_'.$i}.','; + $notification .= $env{'form.address_'.$i}.','; + } elsif ($env{'form.notify_type_'.$i} eq 'crit') { + $critnotification .= $env{'form.address_'.$i}.','; + } elsif ($env{'form.notify_type_'.$i} eq 'reg') { + $notification .= $env{'form.address_'.$i}.','; + } + if ($env{'form.html_'.$i} eq '1') { + $notify_with_html .= $env{'form.address_'.$i}.','; + } + $totaladdresses ++; + } + } } - my $notification=$env{'form.notification'}; + $critnotification =~ s/,$//; + $critnotification=~s/\s//gs; + $notification =~ s/,$//; $notification=~s/\s//gs; + $notify_with_html =~ s/,$//; + $notify_with_html =~ s/\s//gs; if ($notification) { &Apache::lonnet::put('environment',{'notification' => $notification}); - &Apache::lonnet::appenv('environment.notification' => $notification); - $message.='Set message notification address to '.$notification.'
    '; + &Apache::lonnet::appenv({'environment.notification' => $notification}); + $message.=&mt('Set non-critical message notification address(es) to ').'"'.$notification.'".
    '; } else { &Apache::lonnet::del('environment',['notification']); - &Apache::lonnet::delenv('environment\.notification'); - $message.='Reset message notification
    '; + &Apache::lonnet::delenv('environment.notification'); + $message.=&mt("Set non-critical message notification to 'off'.").'
    '; } - 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; + &Apache::lonnet::appenv({'environment.critnotification' => $critnotification}); + $message.=&mt('Set critical message notification address(es) to ').'"'.$critnotification.'".
    '; } else { &Apache::lonnet::del('environment',['critnotification']); - &Apache::lonnet::delenv('environment\.critnotification'); - $message.='Reset critical message notification
    '; + &Apache::lonnet::delenv('environment.critnotification'); + $message.=&mt("Set critical message notification to 'off'.").'
    '; } - $r->print(< $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']); + &Apache::lonnet::delenv('environment.notifywithhtml'); + if ($totaladdresses == 1) { + $message.=&mt("Set notification address to receive excerpts with html stripped."); + } else { + $message.=&mt("Set all notification addresses to receive excerpts with html stripped."); + } + } + } else { + &Apache::lonnet::del('environment',['notifywithhtml']); + &Apache::lonnet::delenv('environment.notifywithhtml'); + } + if ($message) { + $message .= '

    '; + } + &Apache::loncommon::flush_email_cache($user,$domain); + &msgforwardchanger($r,$message); } ################################################################ @@ -504,16 +1085,24 @@ ENDVCMSG sub colorschanger { my $r = shift; + Apache::lonhtmlcommon::add_breadcrumb( + { href => '/adm/preferences?action=changecolors', + text => 'Change Colors'}); + $r->print(Apache::loncommon::start_page('Page Display Settings')); + $r->print(Apache::lonhtmlcommon::breadcrumbs('Change Colors')); # figure out colors my $function=&Apache::loncommon::get_users_function(); 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 %colortypes=&Apache::lonlocal::texthash( + 'pgbg' => 'Page Background Color', + 'tabbg' => 'Header Background Color', + 'sidebg' => 'Header Border Color', + 'font' => 'Font Color', + 'fontmenu' => 'Font Menu Color', + 'link' => 'Un-Visited Link Color', + 'vlink' => 'Visited Link Color', + 'alink' => 'Active Link Color', + ); my $start_data_table = &Apache::loncommon::start_data_table(); my $chtable=''; foreach my $item (sort(keys(%colortypes))) { @@ -524,13 +1113,16 @@ sub colorschanger { '" size="10" value="'.$curcol. '" />Select'. + .$item."','parmform.pres','psub'".');">'.&mt('Select').''. &Apache::loncommon::end_data_table_row()."\n"; } my $end_data_table = &Apache::loncommon::end_data_table(); my $pjump_def = &Apache::lonhtmlcommon::pjump_javascript_definition(); + my $savebutton = &mt('Save'); + my $resetbutton = &mt('Reset All'); + my $resetbuttondesc = &mt('Reset All Colors to Default'); $r->print(< + -$errormessage - -

    - +|; +} -

    - - - - - -
    +sub client_form { + my ($caller,$hexkey,$currentpass,$defdom) = @_; + my %lt=&Apache::lonlocal::texthash( + 'email' => 'E-mail Address', + 'username' => 'Username', + 'domain' => 'Domain', + 'currentpass' => 'Current Password', + 'newpass' => 'New Password', + 'confirmpass' => 'Confirm Password', + 'changepass' => 'Save'); + my $output = qq|
    - +|; + if ($caller eq 'reset_by_email') { + $output .= qq| + + + + + + + +'; + } else { + $output .= qq| + - +|; + } + $output .= <<"ENDFORM"; + - +
    Current password:
    :
    : + + +
    : +|; + $output .= &Apache::loncommon::select_dom_form($defdom,'udom').' +
    New password:
    Confirm password:
    - +
    - - - - - - + + + + + +

    ENDFORM - # - return; + return $output; +} + +sub server_form { + my ($logtoken,$caller,$mailtoken) = @_; + my $action = '/adm/preferences'; + if ($caller eq 'reset_by_email') { + $action = '/adm/resetpw'; + } + my $output = qq| +
    + + + + + |; + if ($caller eq 'reset_by_email') { + $output .= qq| + + + + +|; + } + $output .= qq| + +
    +|; + return $output; } sub verify_and_change_password { - my $r = shift; - my $user = $env{'user.name'}; - my $domain = $env{'user.domain'}; - my $homeserver = $env{'user.home'}; + my ($r,$caller,$mailtoken) = @_; + my ($user,$domain,$homeserver); + if ($caller eq 'reset_by_email') { + $user = $env{'form.uname'}; + $domain = $env{'form.udom'}; + if ($user ne '' && $domain ne '') { + $homeserver = &Apache::lonnet::homeserver($user,$domain); + if ($homeserver eq 'no_host') { + &passwordchanger($r,"

    \n". + &mt("Invalid username and/or domain")."\n

    ", + $caller,$mailtoken); + return 1; + } + } else { + &passwordchanger($r,"

    \n". + &mt("Username and domain were blank")."\n

    ", + $caller,$mailtoken); + return 1; + } + } else { + $user = $env{'user.name'}; + $domain = $env{'user.domain'}; + $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):/); + if ($currentauth !~ /^(unix|internal):/) { + if ($caller eq 'reset_by_email') { + &passwordchanger($r,"

    \n". + &mt("Authentication type for this user can not be changed by this mechanism"). + "\n

    ", + $caller,$mailtoken); + return 1; + } else { + return; + } + } # my $currentpass = $env{'form.currentpass'}; my $newpass1 = $env{'form.newpass_1'}; @@ -732,8 +1474,9 @@ sub verify_and_change_password { unless (defined($currentpass) && defined($newpass1) && defined($newpass2) ){ - &passwordchanger($r,"

    \nERROR". - "Password data was blank.\n

    "); + &passwordchanger($r,"

    \n". + &mt("One or more password fields were blank"). + "\n

    ",$caller,$mailtoken); return; } # Get the keys @@ -741,10 +1484,14 @@ sub verify_and_change_password { my $tmpinfo = Apache::lonnet::reply('tmpget:'.$logtoken,$lonhost); if (($tmpinfo=~/^error/) || ($tmpinfo eq 'con_lost')) { # I do not a have a better idea about how to handle this + my $tryagain_text = &mt('Please log out and try again.'); + if ($caller eq 'reset_by_email') { + $tryagain_text = &mt('Please try again later.'); + } + my $unable=&mt("Unable to retrieve saved token for password decryption"); $r->print(< -ERROR: Unable to retrieve stored token for -password decryption. Please log out and try again. +$unable. $tryagain_text

    ENDERROR # Probably should log an error here @@ -755,19 +1502,36 @@ ENDERROR $currentpass = &des_decrypt($ckey ,$currentpass); $newpass1 = &des_decrypt($n1key,$newpass1); $newpass2 = &des_decrypt($n2key,$newpass2); - # + # + 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, + ''. + &mt('Could not verify current authentication.').' '. + &mt('Please try again.').'',$caller,$mailtoken); + return 1; + } + } if ($newpass1 ne $newpass2) { &passwordchanger($r, - 'ERROR:'. - 'The new passwords you entered do not match. '. - 'Please try again.'); + ''. + &mt('The new passwords you entered do not match.').' '. + &mt('Please try again.').'',$caller,$mailtoken); return 1; } if (length($newpass1) < 7) { &passwordchanger($r, - 'ERROR:'. - 'Passwords must be a minimum of 7 characters long. '. - 'Please try again.'); + ''. + &mt('Passwords must be a minimum of 7 characters long.').' '. + &mt('Please try again.').'',$caller,$mailtoken); return 1; } # @@ -778,31 +1542,39 @@ ENDERROR } if ($badpassword) { # I can't figure out how to enter bad characters on my browser. - &passwordchanger($r,<ERROR: -The password you entered contained illegal characters.
    -Valid characters are: space and
    + my $errormessage =''. + &mt('The password you entered contained illegal characters.').'
    '. + &mt('Valid characters are').(<<"ENDERROR"); +: space and
     !"\#$%&\'()*+,-./0123456789:;<=>?\@
     ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_\`abcdefghijklmnopqrstuvwxyz{|}~
    -
    +
    ENDERROR + &passwordchanger($r,$errormessage,$caller,$mailtoken); + return 1; } # # Change the password (finally) my $result = &Apache::lonnet::changepass - ($user,$domain,$currentpass,$newpass1,$homeserver); + ($user,$domain,$currentpass,$newpass1,$homeserver,$caller); # Inform the user the password has (not?) been changed + my $message; if ($result =~ /^ok$/) { - $r->print(<<"ENDTEXT"); -

    The password for $user was successfully changed

    -ENDTEXT + $message = &Apache::lonhtmlcommon::confirm_success(&mt('The password for user [_1] was successfully changed.',''.$user.'')); + if ($caller eq 'reset_by_email') { + $r->print($message.'
    '); + } else { + &print_main_menu($r, $message); + } } else { # error error: run in circles, scream and shout - $r->print(<The password for $user was not changed -Please make sure your old password was entered correctly. -ENDERROR + $message = &Apache::lonhtmlcommon::confirm_success( + &mt("The password for user [_1] was not changed.",''.$user.'').' '.&mt('Please make sure your old password was entered correctly.'),1); + unless ($caller eq 'reset_by_email') { + $message=&Apache::loncommon::confirmwrapper($message); + &print_main_menu($r, $message); + } return 1; } return; @@ -813,6 +1585,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('Message Management')); + $r->print(Apache::lonhtmlcommon::breadcrumbs('Change Discussion Preferences')); my $user = $env{'user.name'}; my $domain = $env{'user.domain'}; my %userenv = &Apache::lonnet::get @@ -841,9 +1618,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', @@ -872,13 +1649,14 @@ sub discussionchanger { } $r->print(<<"END"); -
    +
    -$lt{'sdpf'}
    $lt{'prca'}
    1. $lt{'whpo'}
    2. $lt{'unwh'}
    -
    -
    +$lt{'sdpf'}
    $lt{'prca'}
    1. $lt{'whpo'}
    2. $lt{'unwh'}
    END + + $r->print('

    '.$lt{'thde'}.'

    '); + $r->print(&Apache::loncommon::start_data_table()); $r->print(<<"END"); @@ -903,15 +1681,11 @@ END END $r->print(&Apache::loncommon::end_data_table_row(). &Apache::loncommon::end_data_table()); - $r->print(<<"END"); -
    -
    - -
    -
    -Note: $lt{'thde'} -
    -END + + $r->print('
    ' + .'' + .'' + ); } sub verify_and_change_discussion { @@ -922,30 +1696,29 @@ sub verify_and_change_discussion { if (defined($env{'form.discdisp'}) ) { my $newdisp = $env{'form.newdisp'}; if ($newdisp eq 'unread') { - $message .='In discussions: only new posts will be displayed.
    '; + $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 .= 'In discussions: all posts will be displayed.
    '; + $message .= &mt('In discussions: all posts will be displayed.').'
    '; &Apache::lonnet::del('environment',['discdisplay']); - &Apache::lonnet::delenv('environment\.discdisplay'); + &Apache::lonnet::delenv('environment.discdisplay'); } } 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.
    '; + $message.=&Apache::lonhtmlcommon::confirm_success(&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.='In discussions: posts will be identified as "new" until marked as read by the reader.
    '; + $message.=&Apache::lonhtmlcommon::confirm_success(&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'); + &Apache::lonnet::delenv('environment.discmarkread'); } } - $r->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']); @@ -966,22 +1744,29 @@ 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(< +


    ENDLSCREEN - $r->print('

    + $r->print('

    '); } @@ -994,18 +1779,18 @@ sub verify_and_change_coursepage { '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", + 'dasp' => "Display the What's New Page", ); my $newdisp = $env{'form.newdisp'}; $message = ''.$lt{'defs'}.': '.$lt{'when'}.', '; if ($newdisp eq 'firstres') { - $message .= $lt{'ywbt'}.'
    '; + $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'}.'
    '; + $message .= $lt{'apwb'}.'
    '; &Apache::lonnet::del('environment',['course_init_display']); - &Apache::lonnet::delenv('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'})) { @@ -1020,12 +1805,195 @@ sub verify_and_change_coursepage { $refpage.'">'.$lt{'dasp'}.''; } } - $r->print(<
    -ENDVCSCREEN + &print_main_menu($r, &Apache::lonhtmlcommon::confirm_success($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 => 'Personal Information Page', + 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('My Space')); + $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 # @@ -1034,7 +2002,93 @@ 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', + help => + 'Prefs_About_Me,Prefs_Language,Prefs_Screen_Name_Nickname,Change_Colors,Change_Password,Prefs_Messages,Change_Discussion_Display'}); + 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'}; @@ -1091,25 +2145,26 @@ sub handler { })); push (@Options,({ action => 'changemsgforward', - linktext => 'Change Message Forwarding and Notification 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'}, + text => 'Change Message Forwarding/Notification'}, 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}, + q{Edit the Personal Information Page}, help => 'Prefs_About_Me', href => $aboutmeaction}); push (@Options,({ action => 'changecolors', @@ -1175,20 +2230,21 @@ sub handler { printmenu => 'yes', subroutine => \&verify_and_change_discussion, } )); - + + my $role = ($env{'user.adv'} ? 'Roles' : 'Course'); push (@Options,({ action => 'changerolespref', - linktext => 'Change Roles Page Preferences', + linktext => 'Change '.$role.' Page Preferences', href => '/adm/preferences', subroutine => \&rolesprefchanger, breadcrumb => { href => '/adm/preferences?action=changerolespref', - text => 'Change Roles Pref'}, + text => 'Change '.$role.' Page Pref'}, }, { action => 'verify_and_change_rolespref', subroutine => \&verify_and_change_rolespref, breadcrumb => { href => '/adm/preferences?action=changerolespref', - text => 'Change Roles Preferences'}, + text => 'Change '.$role.' Page Preferences'}, printmenu => 'yes', })); @@ -1207,6 +2263,84 @@ sub handler { text => 'Change Math Preferences'}, printmenu => 'yes', })); + + if ($env{'environment.remote'} eq 'off') { + push (@Options,({ action => 'launch', + linktext => 'Launch Remote Control', + href => '/adm/remote?url=/adm/preferences', + })); + } else { + push (@Options,({ action => 'collapse', + linktext => 'Collapse Remote Control', + href => '/adm/remote?url=/adm/preferences', + })); + } + + push (@Options,({ action => 'changeicons', + linktext => 'Change How Menus are Displayed', + href => '/adm/preferences', + subroutine => \&iconchanger, + breadcrumb => + { href => '/adm/preferences?action=changeicons', + text => 'Change Main Menu'}, + }, + { action => 'verify_and_change_icons', + subroutine => \&verify_and_change_icons, + breadcrumb => + { href => '/adm/preferences?action=changeicons', + text => 'Change Main Menu'}, + printmenu => 'yes', + })); + + push (@Options,({ action => 'changeclicker', + linktext => 'Register Response Devices ("Clickers")', + href => '/adm/preferences', + subroutine => \&clickerchanger, + breadcrumb => + { href => '/adm/preferences?action=changeclicker', + text => 'Register Clicker'}, + }, + { action => 'verify_and_change_clicker', + subroutine => \&verify_and_change_clicker, + breadcrumb => + { href => '/adm/preferences?action=changeclicker', + 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'}) || &Apache::lonnet::allowed('whn',$env{'request.course.id'}.'/' .$env{'request.course.sec'})) { @@ -1226,7 +2360,8 @@ sub handler { })); } - if ($env{'user.name'} =~ /^(albertel|fox|foxr|koretemey|korte|hallmat3|turtle|raeburn)$/) { + if (($env{'user.name'} =~ /^(albertel|fox|foxr|kortemey|korte|raeburn)$/) + && ($env{'user.domain'} =~/^(msu|gerd)$/)){ push (@Options,({ action => 'debugtoggle', printmenu => 'yes', subroutine => \&toggle_debug, @@ -1273,9 +2408,10 @@ sub handler { foreach my $option(@Options) { my $optiontext = ''; if (exists($option->{'href'})) { - $optiontext .= - ''. + $option->{'href_args'}{'action'}=$option->{'action'}; + $optiontext .= + ''. &mt($option->{'linktext'}).''; } if (exists($option->{'text'})) { @@ -1306,9 +2442,9 @@ sub handler { sub toggle_debug { if ($env{'user.debug'}) { - &Apache::lonnet::delenv('user\.debug'); + &Apache::lonnet::delenv('user.debug'); } else { - &Apache::lonnet::appenv('user.debug' => 1); + &Apache::lonnet::appenv({'user.debug' => 1}); } }