--- loncom/interface/lonpreferences.pm 2003/04/19 01:34:22 1.19 +++ loncom/interface/lonpreferences.pm 2009/05/05 16:01:50 1.158 @@ -1,7 +1,7 @@ # The LearningOnline Network # Preferences # -# $Id: lonpreferences.pm,v 1.19 2003/04/19 01:34:22 www Exp $ +# $Id: lonpreferences.pm,v 1.158 2009/05/05 16:01:50 bisitz Exp $ # # Copyright Michigan State University Board of Trustees # @@ -25,18 +25,6 @@ # # http://www.lon-capa.org/ # -# (Internal Server Error Handler -# -# (Login Screen -# 5/21/99,5/22,5/25,5/26,5/31,6/2,6/10,7/12,7/14, -# 1/14/00,5/29,5/30,6/1,6/29,7/1,11/9 Gerd Kortemeyer) -# -# 3/1/1 Gerd Kortemeyer) -# -# 3/1 Gerd Kortemeyer -# -# 2/13/02 2/14 2/15 Matthew Hall -# # This package uses the "londes.js" javascript code. # # TODOs that have to be completed: @@ -45,11 +33,16 @@ package Apache::lonpreferences; use strict; +use LONCAPA; use Apache::Constants qw(:common); use Apache::File; use Crypt::DES; use DynaLoader; # for Crypt::DES version use Apache::loncommon(); +use Apache::lonhtmlcommon(); +use Apache::lonlocal; +use Apache::lonnet; +use LONCAPA(); # # Write lonnet::passwd to do the call below. @@ -61,7 +54,7 @@ use Apache::loncommon(); ################################################## sub des_keys { # Make a new key for DES encryption. - # Each key has two parts which are returned seperately. + # Each key has two parts which are returned separately. # Please note: Each key must be passed through the &hex function # before it is output to the web browser. The hex versions cannot # be used to decrypt. @@ -100,75 +93,990 @@ sub des_decrypt { ################################################################ ################################################################ +# Language Change Subroutines # +################################################################ + +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"'; + my $offselect=''; + if ($userenv{'wysiwygeditor'} eq 'on') { + $onselect=''; + $offselect='checked="checked"'; + } + 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(<+$jsMath_start + + +
+ ++ +
+ ++ +
+ENDLSCREEN + if ($env{'environment.texengine'} ne 'jsMath') { + $r->print(''); + } +} + + +sub verify_and_change_texengine { + my $r = shift; + my $user = $env{'user.name'}; + my $domain = $env{'user.domain'}; +# Screenname + my $newtexengine = $env{'form.texengine'}; + $newtexengine=~s/[^\-\w]//g; + if ($newtexengine eq 'ttm') { + &Apache::lonnet::appenv({'browser.mathml' => 1}); + } else { + if ($env{'environment.texengine'} eq 'ttm') { + &Apache::lonnet::appenv({'browser.mathml' => 0}); + } + } + my $message=''; + if ($newtexengine) { + &Apache::lonnet::put('environment',{'texengine' => $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=&Apache::lonhtmlcommon::confirm_success(&mt('Reset [_1]',''.&mt('Preferred method to display Math').'')); + } + $message=&Apache::loncommon::confirmwrapper($message); + &print_main_menu($r, $message); +} + +################################################################ +# Roles Page Preference Change Subroutines # +################################################################ +sub rolesprefchanger { + my $r = shift; + my $role = ($env{'user.adv'} ? 'Role' : 'Course'); + my $lc_role = ($env{'user.adv'} ? 'role' : 'course'); + my $user = $env{'user.name'}; + my $domain = $env{'user.domain'}; + my %userenv = &Apache::lonnet::get + ('environment',['recentroles','recentrolesn']); + Apache::lonhtmlcommon::add_breadcrumb( + { href => '/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; + if ($hotlist_flag) { + $checked = 'checked="checked"'; + } + + if (!$hotlist_n) { $hotlist_n=3; } + my $options; + for (my $i=1; $i<10; $i++) { + my $select; + if ($hotlist_n == $i) { $select = 'selected="selected"'; } + $options .= "\n"; + } + +# 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('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.').' +
+'); +} + +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='