--- loncom/interface/lonpreferences.pm 2010/03/10 21:25:50 1.185
+++ loncom/interface/lonpreferences.pm 2013/06/10 20:28:12 1.196.4.11
@@ -1,7 +1,7 @@
# The LearningOnline Network
# Preferences
#
-# $Id: lonpreferences.pm,v 1.185 2010/03/10 21:25:50 droeschl Exp $
+# $Id: lonpreferences.pm,v 1.196.4.11 2013/06/10 20:28:12 raeburn Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -152,31 +152,16 @@ sub languagechanger {
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
- ('environment',['languages']);
+ my %userenv = &Apache::lonnet::get('environment',['languages']);
my $language=$userenv{'languages'};
- my $pref=&mt('Preferred language');
- my %langchoices=('' => 'No language preference');
- foreach (&Apache::loncommon::languageids()) {
- if (&Apache::loncommon::supportedlanguagecode($_)) {
- $langchoices{&Apache::loncommon::supportedlanguagecode($_)}
- = &Apache::loncommon::plainlanguagedescription($_);
- }
- }
- my $selectionbox=
- &Apache::loncommon::select_form(
- $language,
- 'language',
- &Apache::lonlocal::texthash(%langchoices));
- $r->print(<
-
- $pref: $selectionbox
-ENDLSCREEN
- $r->print(' ');
+ $r->print(
+ ''
+ );
}
@@ -226,20 +211,24 @@ sub texenginechanger {
'tth' => 'tth (TeX to HTML)',
#'ttm' => 'TeX to MathML',
'jsMath' => 'jsMath',
+ 'MathJax' => 'MathJax',
'mimetex' => 'mimetex (Convert to Images)',
'raw' => 'Raw (Screen Reader)'
);
+ %mathchoices = &Apache::lonlocal::texthash(%mathchoices);
my $selectionbox=
&Apache::loncommon::select_form(
$texengine,
'texengine',
- &Apache::lonlocal::texthash(%mathchoices));
+ \%mathchoices);
+ my $MathJax_start=&Apache::lontexconvert::MathJax_header();
my $jsMath_start=&Apache::lontexconvert::jsMath_header();
my %lt=&Apache::lonlocal::texthash(
'headline' => 'Change how math is displayed',
'preftxt' => 'Preferred method to display math',
'change' => 'Save',
'exmpl' => 'Examples',
+ 'mathjax' => 'MathJax:',
'jsmath' => 'jsMath:',
'tth' => 'tth (TeX to HTML):',
'mimetex' => 'mimetex (Convert to Images):',
@@ -274,6 +263,14 @@ $lt{'preftxt'}: $selectionbox
$lt{'exmpl'}
+$lt{'mathjax'}
+
+
+
+
+MathJax provides rendered equations whose source code can be extracted in TeX and MathML formats by right clicking the equation.
+
+
$lt{'jsmath'}
$jsMath_start
@@ -281,6 +278,7 @@ $jsMath_start
if (jsMath.nofonts == 1) {
document.writeln($jsMathWarning);
}
+
@@ -340,16 +338,25 @@ sub rolesprefchanger {
my $domain = $env{'user.domain'};
my %userenv = &Apache::lonnet::get
('environment',['recentroles','recentrolesn']);
+ my $brtext = 'Change '.$role.' Page Pref';
+ my $brtitle;
+ if ($env{'form.returnurl'} eq '/adm/roles') {
+ $brtext = 'Configure Hotlist';
+ } else {
+ $brtitle = $brtext;
+ }
Apache::lonhtmlcommon::add_breadcrumb(
{ href => '/adm/preferences?action=changerolespref',
- text => 'Change '.$role.' Page Pref'});
+ text => $brtext});
$r->print(Apache::loncommon::start_page('Content Display Settings'));
- $r->print(Apache::lonhtmlcommon::breadcrumbs('Change '.$role.' Page Pref'));
+ $r->print(Apache::lonhtmlcommon::breadcrumbs($brtitle));
my $hotlist_flag=$userenv{'recentroles'};
my $hotlist_n=$userenv{'recentrolesn'};
- my $checked;
+ my ($checkedon,$checkedoff);
if ($hotlist_flag) {
- $checked = 'checked="checked"';
+ $checkedon = 'checked="checked"';
+ } else {
+ $checkedoff = 'checked="checked"';
}
if (!$hotlist_n) { $hotlist_n=3; }
@@ -376,7 +383,7 @@ sub rolesprefchanger {
&Apache::loncommon::start_data_table().
&Apache::loncommon::start_data_table_header_row().
"".&mt('Freeze '.$role)." ".
- "".&mt($role)."".
+ " ".&mt($role)." ".
&Apache::loncommon::end_data_table_header_row().
"\n";
my $count;
@@ -399,28 +406,51 @@ sub rolesprefchanger {
$roles_check_list .= "\n";
}
+ my $actionurl = '/adm/preferences';
+ if ($env{'form.returnurl'} eq '/adm/roles') {
+ $actionurl = '/adm/roles';
+ }
+ $r->print(''.&mt('Recent Roles Hotlist').' ');
+ unless ($checkedon) {
+ $r->print(&mt('LON-CAPA users with several '.$lc_role.'s may wish to enable the Hotlist.').' ');
+ }
$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.').'
-
-');
}
@@ -511,7 +541,11 @@ sub verify_and_change_rolespref {
}
}
$message=&Apache::loncommon::confirmwrapper($message);
- &print_main_menu($r, $message);
+ if ($env{'form.returnurl'} eq '/adm/roles') {
+ return $message;
+ } else {
+ &print_main_menu($r, $message);
+ }
}
@@ -594,36 +628,50 @@ sub verify_and_change_screenname {
sub iconchanger {
my $r = shift;
&Apache::lonhtmlcommon::add_breadcrumb(
- { href => '/adm/preferences?action=changeicons',
- text => 'Change Main Menu'});
+ { href => '/adm/preferences?action=changeicons',
+ text => 'Change Menu Display'});
$r->print(Apache::loncommon::start_page('Page Display Settings'));
- $r->print(Apache::lonhtmlcommon::breadcrumbs('Change Main Menu'));
+ $r->print(Apache::lonhtmlcommon::breadcrumbs('Change Menu Display'));
my $user = $env{'user.name'};
my $domain = $env{'user.domain'};
- my %userenv = &Apache::lonnet::get
- ('environment',['icons']);
+ my %userenv = &Apache::lonnet::get('environment',['icons']);
my $iconic='checked="checked"';
- my $classic='';
- my $onlyicon='';
+ my ($classic,$onlyicon,$iconic_preview,$iconsonly_preview);
if ($userenv{'icons'} eq 'classic') {
- $classic='checked="checked"';
- $iconic='';
+ $iconic='';
+ $classic=''.
+ &mt('Your current selection: "Use buttons and text" is deprecated - it is recommended that you change this to "Use icons and text".').'
';
}
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');
+ my %lt = &icon_options();
+ my ($inlinetools,$toolsorder) = &icon_previews();
+ if ((ref($inlinetools) eq 'HASH') && (ref($toolsorder) eq 'ARRAY')) {
+ foreach my $tool (@{$toolsorder}) {
+ my ($command,$row,$col,$img,$top,$bot,$act,$desc) =
+ split(/\&/,$inlinetools->{$tool});
+ $iconic_preview .= ' ';
+ $iconsonly_preview .= ' ';
+ }
+ }
+ $iconsonly_preview = '';
+ $iconic_preview = '';
$r->print(<
- $useicons
- $usebuttons
- $useicononly
+ $lt{'iconic'} $iconic_preview
+ $lt{'iconsonly'} $iconsonly_preview
ENDSCREEN
@@ -634,14 +682,46 @@ sub verify_and_change_icons {
my $user = $env{'user.name'};
my $domain = $env{'user.domain'};
my $newicons = $env{'form.menumode'};
-
+ my %lt = &icon_options();
+ my $newchoice = $newicons;
+ if ($lt{$newicons}) {
+ $newchoice = $lt{$newicons};
+ }
&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.' '));
+ my $message=&Apache::lonhtmlcommon::confirm_success(&mt('Set [_1] to [_2]',''.&mt('Menu Display').' ',''.$newchoice.' '));
$message=&Apache::loncommon::confirmwrapper($message);
&print_main_menu($r, $message);
}
+sub icon_options {
+ return &Apache::lonlocal::texthash(
+ iconic => 'Use icons and text',
+ iconsonly => 'Use icons only',
+ );
+}
+
+sub icon_previews {
+ my %icon_text = (
+ annotate => 'Notes',
+ wishlist => 'Stored Links',
+ catalog => 'Info',
+ evaluate => 'Evaluate',
+ feedback => 'Communicate',
+ printout => 'Print',
+ );
+ my %inlinetools = (
+ printout => "s&8&3&prt.png&$icon_text{'printout'}&printout[_1]&gopost('/adm/printout',currentURL)&Prepare a printable document",
+ wishlist => "s&9&1&wishlist-link.png&$icon_text{'wishlist'}&wishlistlink[_2]&set_wishlistlink()&Save a link for this resource in your personal Stored Links repository",
+ evaluate => "s&8&1&eval.png&$icon_text{'evaluate'}&this[_1]&gopost('/adm/evaluate',currentURL,1)&Provide my evaluation of this resource",
+ feedback => "s&8&2&fdbk.png&$icon_text{'feedback'}&discuss[_1]&gopost('/adm/feedback',currentURL,1)&Provide feedback messages or contribute to the course discussion about this resource",
+ annotate => "s&9&3&anot.png&$icon_text{'annotate'}&tations[_1]&annotate()&Make notes and annotations about this resource",
+ catalog => "s&6&3&catalog.png&$icon_text{'catalog'}&info[_1]&catalog_info()&Show Metadata",
+ );
+ my @toolsorder = qw(annotate wishlist evaluate feedback printout catalog);
+ return (\%inlinetools,\@toolsorder);
+}
+
################################################################
# Clicker Subroutines #
################################################################
@@ -711,8 +791,8 @@ sub domcoordchanger {
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 $text=&mt('By default, the Domain Coordinator can enter your Authoring Space.');
+ my $construction=&mt('Block access to Authoring Space');
my $change=&mt('Save');
$r->print(<
@@ -738,7 +818,7 @@ sub verify_and_change_domcoord {
} else {
$status=&mt('off');
}
- my $message=&Apache::lonhtmlcommon::confirm_success(&mt('Set [_1] to [_2]',''.&mt('Block access to construction space').' ',''.$status.' '));
+ my $message=&Apache::lonhtmlcommon::confirm_success(&mt('Set [_1] to [_2]',''.&mt('Block access to Authoring Space').' ',''.$status.' '));
$message=&Apache::loncommon::confirmwrapper($message);
&print_main_menu($r,$message);
}
@@ -1131,46 +1211,24 @@ sub colorschanger {
foreach my $item (sort(keys(%colortypes))) {
my $curcol=&Apache::loncommon::designparm($function.'.'.$item,$domain);
$chtable.=&Apache::loncommon::start_data_table_row().
- ''.$colortypes{$item}.' '.&mt('Select').' '.
- &Apache::loncommon::end_data_table_row()."\n";
+ ''.$colortypes{$item}.' '.
+ &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(<
-
- function pclose() {
- parmwin=window.open("/adm/rat/empty.html","LONCAPAparms",
- "height=350,width=350,scrollbars=no,menubar=no");
- parmwin.close();
- }
-
- $pjump_def
-
- function psub() {
- pclose();
- if (document.parmform.pres_marker.value!='') {
- if (document.parmform.pres_type.value!='') {
- eval('document.prefs.'+
- document.parmform.pres_marker.value+
- '.value=document.parmform.pres_value.value;');
- }
- } else {
- document.parmform.pres_value.value='';
- document.parmform.pres_marker.value='';
- }
- }
+ my $colorchooser=&Apache::lonhtmlcommon::color_picker();
+ $r->print('
+');
+ $r->print(<
+ENDSCREEN
+ } else {
+ my $message = &mt('Based on your institutional affiliation no name information is automatically updated for your LON-CAPA account.');
+ &print_main_menu($r,$message);
+ }
+ } else {
+ my $message = &mt('You are not permitted to set a user preference for automatic name updates for your LON-CAPA account.');
+ &print_main_menu($r,$message);
+ }
+}
+
+sub verify_and_change_lockednames {
+ my $r = shift;
+ my $message;
+ if (&can_toggle_namelocking()) {
+ my $newlockedname = $env{'form.lockednames'};
+ $newlockedname =~ s/\D//g;
+ my $currlockedname = $env{'environment.lockedname'};
+ if ($newlockedname ne $currlockedname) {
+ if ($newlockedname) {
+ if (&Apache::lonnet::put('environment',{lockedname => $newlockedname}) eq 'ok') {
+ &Apache::lonnet::appenv({'environment.lockedname' => $newlockedname});
+ }
+ } elsif (&Apache::lonnet::del('environment',['lockedname']) eq 'ok') {
+ &Apache::lonnet::delenv('environment.lockedname');
+ }
+ }
+ my $status='';
+ if ($newlockedname) {
+ $status=&mt('disallowed');
+ } else {
+ $status=&mt('allowed');
+ }
+ $message=&Apache::lonhtmlcommon::confirm_success(&mt('[_1] set to [_2]',''.&mt('Automatic update of first, middle and last names if institutional directory information indicates changes').' ',''.$status.' '));
+ $message=&Apache::loncommon::confirmwrapper($message);
+ }
+ &print_main_menu($r,$message);
+}
+
sub print_main_menu {
my ($r, $message) = @_;
# Determine current authentication method
@@ -1888,14 +2055,14 @@ my @menu=
url => '/adm/preferences?action=changerolespref',
permission => 'F',
#help => '',
- icon => 'sctr.png',
+ icon => 'role_hotlist.png',
linktitle => 'Configure the roles hotlist.'
},
{ linktext => 'Math display settings',
url => '/adm/preferences?action=changetexenginepref',
permission => 'F',
#help => '',
- icon => 'stat.png',
+ icon => 'dismath.png',
linktitle => 'Change how math is displayed.'
},
]
@@ -1909,14 +2076,13 @@ my @menu=
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.'
- }
-
+ { linktext => 'Menu Display',
+ url => '/adm/preferences?action=changeicons',
+ permission => 'F',
+ #help => '',
+ icon => 'preferences-system-windows.png',
+ linktitle => 'Change whether the menus are displayed with icons or icons and text.'
+ }
]
},
{ categorytitle=>'Messages & Notifications',
@@ -1932,7 +2098,7 @@ my @menu=
url => '/adm/preferences?action=changediscussions',
permission => 'F',
#help => 'Change_Discussion_Display',
- icon => 'mail-message-new.png',
+ icon => 'chat.png',
linktitle => 'Set display preferences for discussion posts for both discussion boards and individual resources in all your courses.'
},
]
@@ -1960,6 +2126,37 @@ push(@{ $menu[0]->{items} }, {
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 => 'remotecontrol.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 => 'remotecontrol.png',
+ linktitle => 'Collapse the remote control for LON-CAPA.',
+ });
+ }
+
+ if (&can_toggle_namelocking()) {
+ push(@{ $menu[0]->{items} }, {
+ linktext => 'Automatic name changes',
+ url => '/adm/preferences?action=changelockednames',
+ permission => 'F',
+ #help => '',
+ icon => 'system-lock-screen.png',
+ linktitle => 'Allow/disallow propagation of name changes from institutional directory service',
+ });
+ }
+
my %author_roles = &Apache::lonnet::get_my_roles($user,$domain,'userroles','',['au']);
if (keys(%author_roles) > 0) {
push(@{ $menu[4]->{items} }, {
@@ -1980,7 +2177,7 @@ push(@{ $menu[4]->{items} }, {
url => '/adm/preferences?action=changecourseinit',
permission => 'F',
#help => '',
- icon => 'edit-copy.png',
+ icon => 'course_ini.png',
linktitle => 'Set the default page to be displayed when you select a course role.',
});
@@ -1994,7 +2191,7 @@ push(@{ $menu[4]->{items} }, {
icon => 'blog.png',
linktitle => 'Toggle Debug Messages.',
});
- }
+ }
$r->print(&Apache::loncommon::start_page('My Space'));
$r->print(Apache::lonhtmlcommon::breadcrumbs('Change Preferences'));
@@ -2022,11 +2219,19 @@ sub handler {
['action','wysiwyg','returnurl','refpage']);
#
Apache::lonhtmlcommon::clear_breadcrumbs();
+ my ($brlink,$brtxt,$brhelp);
+ if (($env{'form.action'} eq 'changerolespref') && ($env{'form.returnurl'} eq '/adm/roles')) {
+ $brlink ='/adm/roles';
+ $brtxt = 'User Roles';
+ } else {
+ $brlink ='/adm/preferences';
+ $brtxt = 'Set User Preferences';
+ $brhelp = 'Prefs_About_Me,Prefs_Language,Prefs_Screen_Name_Nickname,Change_Colors,Change_Password,Prefs_Messages,Change_Discussion_Display';
+ }
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'});
+ ({href => $brlink,
+ text => $brtxt,
+ help => $brhelp,});
if(!exists $env{'form.action'}) {
&print_main_menu($r);
}elsif($env{'form.action'} eq 'changepass'){
@@ -2090,6 +2295,10 @@ sub handler {
&toggle_debug();
}
&print_main_menu($r);
+ } elsif ($env{'form.action'} eq 'changelockednames') {
+ &lockednameschanger($r);
+ } elsif ($env{'form.action'} eq 'verify_and_change_lockednames') {
+ &verify_and_change_lockednames($r);
}
# Properly end the HTML page of all preference pages
@@ -2122,5 +2331,52 @@ sub can_toggle_debug {
return $can_toggle;
}
+sub can_toggle_namelocking {
+ my $lockablenames;
+ my %domconfig =
+ &Apache::lonnet::get_dom('configuration',['autoupdate'],$env{'user.domain'});
+ if (ref($domconfig{'autoupdate'}) eq 'HASH') {
+ if ($domconfig{'autoupdate'}{'run'}) {
+ my @inststatuses = split(':',$env{'environment.inststatus'});
+ unless (@inststatuses) {
+ @inststatuses = ('default');
+ }
+ my %updateable = &updateable_userinfo($domconfig{'autoupdate'},\@inststatuses);
+ if ($updateable{'lastname'} || $updateable{'firstname'} ||
+ $updateable{'middlename'}) {
+ if (ref($domconfig{'autoupdate'}{'lockablenames'}) eq 'ARRAY') {
+ unless (@inststatuses) {
+ @inststatuses = ('default');
+ }
+ foreach my $status (@inststatuses) {
+ if (grep(/^\Q$status\E$/,@{$domconfig{'autoupdate'}{'lockablenames'}})) {
+ $lockablenames = 1;
+ last;
+ }
+ }
+ }
+ }
+ }
+ }
+ return $lockablenames;
+}
+
+sub updateable_userinfo {
+ my ($autoupdate,$inststatuses) = @_;
+ my %updateable;
+ return %updateable unless ((ref($autoupdate) eq 'HASH') &&
+ (ref($inststatuses) eq 'ARRAY'));
+ if (ref($autoupdate->{'fields'}) eq 'HASH') {
+ foreach my $status (@{$inststatuses}) {
+ if (ref($autoupdate->{'fields'}{$status}) eq 'ARRAY') {
+ foreach my $field (@{$autoupdate->{'fields'}{$status}}) {
+ $updateable{$field} = 1;
+ }
+ }
+ }
+ }
+ return %updateable;
+}
+
1;
__END__