--- loncom/interface/lonpreferences.pm 2009/05/12 14:56:27 1.161
+++ loncom/interface/lonpreferences.pm 2016/01/31 21:25:37 1.218
@@ -1,7 +1,7 @@
# The LearningOnline Network
# Preferences
#
-# $Id: lonpreferences.pm,v 1.161 2009/05/12 14:56:27 bisitz Exp $
+# $Id: lonpreferences.pm,v 1.218 2016/01/31 21:25:37 raeburn Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -36,58 +36,13 @@ 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::lonauthcgi();
use LONCAPA();
-#
-# Write lonnet::passwd to do the call below.
-# Use:
-# my $answer=reply("encrypt:passwd:$udom:$uname:$upass",$tryserver);
-#
-##################################################
-# password associated functions #
-##################################################
-sub des_keys {
- # Make a new key for DES encryption.
- # 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.
- my @hexstr=('0','1','2','3','4','5','6','7',
- '8','9','a','b','c','d','e','f');
- my $lkey='';
- for (0..7) {
- $lkey.=$hexstr[rand(15)];
- }
- my $ukey='';
- for (0..7) {
- $ukey.=$hexstr[rand(15)];
- }
- return ($lkey,$ukey);
-}
-
-sub des_decrypt {
- my ($key,$cyphertext) = @_;
- my $keybin=pack("H16",$key);
- my $cypher;
- if ($Crypt::DES::VERSION>=2.03) {
- $cypher=new Crypt::DES $keybin;
- } else {
- $cypher=new DES $keybin;
- }
- my $plaintext=
- $cypher->decrypt(unpack("a8",pack("H16",substr($cyphertext,0,16))));
- $plaintext.=
- $cypher->decrypt(unpack("a8",pack("H16",substr($cyphertext,16,16))));
- $plaintext=substr($plaintext,1,ord(substr($plaintext,0,1)) );
- return $plaintext;
-}
-
################################################################
# Handler subroutines #
################################################################
@@ -116,7 +71,7 @@ sub wysiwygchanger {
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.")."
";
+ $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(<
@@ -151,28 +106,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',
- %langchoices);
- $r->print(<
-
- $pref: $selectionbox
-ENDLSCREEN
- $r->print(' ');
+ $r->print(
+ ''
+ );
}
@@ -187,7 +130,12 @@ sub verify_and_change_languages {
if ($newlanguage) {
&Apache::lonnet::put('environment',{'languages' => $newlanguage});
&Apache::lonnet::appenv({'environment.languages' => $newlanguage});
- $message=&Apache::lonhtmlcommon::confirm_success(&mt('Set [_1] to [_2]',''.&mt('Preferred language').' ','"'.$newlanguage.'" .'));
+ $message=&Apache::lonhtmlcommon::confirm_success(
+ &mt('Set [_1] to [_2]',
+ ''.&mt('Preferred language').' ',
+ '"'.$newlanguage.'" .'))
+ .' '
+ .&mt('The change will become active on the next page.');
} else {
&Apache::lonnet::del('environment',['languages']);
&Apache::lonnet::delenv('environment.languages');
@@ -205,9 +153,9 @@ sub texenginechanger {
my $r = shift;
Apache::lonhtmlcommon::add_breadcrumb(
{ href => '/adm/preferences?action=changetexenginepref',
- text => 'Change How Math Equations Are Displayed'});
+ text => 'Math display settings'});
$r->print(Apache::loncommon::start_page('Content Display Settings'));
- $r->print(Apache::lonhtmlcommon::breadcrumbs('Change How Math Equations Are Displayed'));
+ $r->print(Apache::lonhtmlcommon::breadcrumbs('Math display settings'));
my $user = $env{'user.name'};
my $domain = $env{'user.domain'};
my %userenv = &Apache::lonnet::get('environment',['texengine']);
@@ -217,21 +165,45 @@ sub texenginechanger {
'tth' => 'tth (TeX to HTML)',
#'ttm' => 'TeX to MathML',
'jsMath' => 'jsMath',
- 'mimetex' => 'mimetex (Convert to Images)'
+ 'MathJax' => 'MathJax',
+ 'mimetex' => 'mimetex (Convert to Images)',
+ 'raw' => 'Raw (Screen Reader)'
);
- my $selectionbox=&Apache::loncommon::select_form($texengine,'texengine',
- %mathchoices);
+ %mathchoices = &Apache::lonlocal::texthash(%mathchoices);
+ my $selectionbox=
+ &Apache::loncommon::select_form(
+ $texengine,
+ 'texengine',
+ \%mathchoices);
+ my $MathJax_start=&Apache::lontexconvert::MathJax_header();
my $jsMath_start=&Apache::lontexconvert::jsMath_header();
my %lt=&Apache::lonlocal::texthash(
- 'headline' => 'Change Math Preferences',
- 'preftxt' => 'Preferred method to display Math',
+ 'headline' => 'Change how math is displayed',
+ 'preftxt' => 'Preferred method to display math',
'change' => 'Save',
'exmpl' => 'Examples',
+ 'mathjax' => 'MathJax:',
+ 'mathjaxinfo' => 'MathJax provides rendered equations whose source code can be extracted in TeX and MathML formats by right clicking the equation.',
'jsmath' => 'jsMath:',
'tth' => 'tth (TeX to HTML):',
'mimetex' => 'mimetex (Convert to Images):',
);
+ my $jsMathWarning=''
+ .'
'
+ .&mt("It looks like you don't have the TeX math fonts installed.")
+ .'
'
+ .''
+ .&mt('The jsMath example on this page may not look right without them. '
+ .'The [_1]jsMath Home Page[_2] has information on how to download the '
+ .'needed fonts. In the meantime, jsMath will do the best it can '
+ .'with the fonts you have, but it may not be pretty and some equations '
+ .'may not be rendered correctly.'
+ ,'
'
+ ,' ')
+ .'
'
+ .'';
+
$r->print(<$lt{'headline'}
');
}
@@ -443,19 +452,15 @@ sub verify_and_change_rolespref {
if ($hotlist_flag) {
&Apache::lonnet::put('environment',{'recentroles' => $hotlist_flag});
&Apache::lonnet::appenv({'environment.recentroles' => $hotlist_flag});
- $message=&mt('Recent '.$role.'s Hotlist is Enabled');
+ $message=&Apache::lonhtmlcommon::confirm_success(&mt('Recent '.$role.'s Hotlist is Enabled.')." ".&mt('Display [_1] Most Recent '.$role.'s.',$hotlist_n));
} else {
&Apache::lonnet::del('environment',['recentroles']);
&Apache::lonnet::delenv('environment.recentroles');
- $message=&mt('Recent '.$role.'s Hotlist is Disabled');
+ $message=&Apache::lonhtmlcommon::confirm_success(&mt('Recent '.$role.'s Hotlist is Disabled'));
}
if ($hotlist_n) {
&Apache::lonnet::put('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";
- }
}
# Get list of froze roles and list of recent roles
@@ -491,7 +496,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);
+ }
}
@@ -574,36 +583,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
@@ -614,14 +637,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 #
################################################################
@@ -658,16 +713,51 @@ sub verify_and_change_clicker {
my $r = shift;
my $user = $env{'user.name'};
my $domain = $env{'user.domain'};
+ my $uhome = $env{'user.home'};
my $newclickers = $env{'form.clickers'};
+ my $message;
$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));
+ my @oldclickers = split(/,/,$env{'environment.clickers'});
+ my @newclickers = split(/,/,$newclickers);
+ my %newuniq;
+ map { $newuniq{$_} = 1; } @newclickers;
+ @newclickers = sort(keys(%newuniq));
+ my @differences = &Apache::loncommon::compare_arrays(\@oldclickers,\@newclickers);
+ if (@differences) {
+ my $putres = &Apache::lonnet::put('environment',{'clickers' => $newclickers});
+ if ($putres eq 'ok') {
+ my @adds = ();
+ my @dels = ();
+ foreach my $item (@differences) {
+ if (grep(/^\Q$item\E$/,@newclickers)) {
+ push(@adds,$item);
+ } else {
+ push(@dels,$item);
+ }
+ }
+ if (@dels) {
+ my %delclicker;
+ map { $delclicker{$_} = $user; } @dels;
+ my $putresult = &Apache::lonnet::iddel($domain,\%delclicker,$uhome,'clickers');
+ }
+ if (@adds) {
+ my %addclicker;
+ map { $addclicker{$_} = $user; } @adds;
+ my $putresult = &Apache::lonnet::updateclickers($domain,'add',\%addclicker,$uhome,1);
+ }
+ &Apache::lonnet::appenv({'environment.clickers' => $newclickers});
+ $message=&Apache::lonhtmlcommon::confirm_success(&mt('Registering clickers: [_1]',$newclickers));
+ } else {
+ $message=&Apache::lonhtmlcommon::confirm_success(&mt('Error saving clicker ID').1);
+ }
+ } else {
+ $message=''.&mt('Clicker information unchanged').' ';
+ }
$message=&Apache::loncommon::confirmwrapper($message);
&print_main_menu($r, $message);
}
@@ -691,8 +781,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(<
@@ -718,7 +808,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);
}
@@ -734,7 +824,7 @@ sub lockwarning {
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) {
+ foreach my $id (keys(%which)) {
$which.=''.$which{$id}.' ';
}
my $change=&mt('Override');
@@ -773,23 +863,23 @@ sub msgforwardchanger {
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 ',
+ foad => 'Forward to account(s)',
+ fwdm => 'Forward messages to other account(s) in LON-CAPA',
+ noti => 'E-mail notification of LON-CAPA messages',
+ mnot => 'E-mail address(es) which should be notified about new LON-CAPA messages',
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',
);
+ $lt{'foad_exmpl'} = &mt('e.g. [_1]userA:domain1,userB:domain2,...[_2]','',' ');
+ $lt{'mnot_exmpl'} = &mt('e.g. [_1]joe@doe.com[_2]','',' ');
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'));
+ text => 'Messages & Notifications'});
+ $r->print(Apache::loncommon::start_page('Messages & Notifications'));
+ $r->print(Apache::lonhtmlcommon::breadcrumbs('Messages & Notifications'));
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");
@@ -855,11 +945,12 @@ $validatescript
$r->print(<$lt{'foad'} $forwardingHelp
+$lt{'fwdm'} $forwardingHelp
+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 {
- $message .= ''.$lt{'dasp'}.' ';
+ $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, &Apache::lonhtmlcommon::confirm_success($message));
+ &print_main_menu($r,$message);
}
sub print_main_menu {
@@ -1841,25 +2095,6 @@ my @menu=
},
]
},
- { 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',
@@ -1869,30 +2104,41 @@ my @menu=
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',
+ icon => 'role_hotlist.png',
linktitle => 'Configure the roles hotlist.'
},
- { linktext => 'Display of Scientific Equations',
+ { linktext => 'Math display settings',
url => '/adm/preferences?action=changetexenginepref',
permission => 'F',
#help => '',
- icon => 'stat.png',
- linktitle => 'Change how Scientific Equations are displayed.'
+ icon => 'dismath.png',
+ linktitle => 'Change how math is displayed.'
},
]
},
- { categorytitle=>'Message Management',
+ { 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 icons or icons and text.'
+ }
+ ]
+ },
+ { categorytitle=>'Messages & Notifications',
items =>[
{ linktext => 'Messages & Notifications',
url => '/adm/preferences?action=changemsgforward',
@@ -1905,7 +2151,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.'
},
]
@@ -1933,25 +2179,18 @@ 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 => '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.',
- });
+
+ 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} }, {
@@ -1972,21 +2211,33 @@ 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.',
});
}
- if ($env{'user.name'} =~ /^(albertel|fox|foxr|kortemey|korte|raeburn)$/) {
+
+ my %author_roles = &Apache::lonnet::get_my_roles($user,$domain,'userroles','',['au','ca','aa']);
+ if (keys(%author_roles) > 0) {
+ push(@{ $menu[4]->{items} }, {
+ linktext => 'Authoring Space Configuration',
+ url => '/adm/preferences?action=authorsettings',
+ permission => 'F',
+ icon => 'course_ini.png',
+ linktitle => 'Settings for your authoring space.',
+ });
+ }
+
+ if (&can_toggle_debug()) {
push(@{ $menu[4]->{items} }, {
- linktext => 'Toggle Debug Messages (Current:'.$env{'user.debug'}.')',
+ linktext => 'Toggle Debug Messages (Currently '.($env{'user.debug'} ? 'on)' : 'off)'),
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'));
@@ -2014,11 +2265,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'){
@@ -2077,375 +2336,96 @@ sub handler {
&coursedisplaychanger($r);
}elsif($env{'form.action'} eq 'verify_and_change_coursepage'){
&verify_and_change_coursepage($r);
+ }elsif($env{'form.action'} eq 'authorsettings'){
+ &author_space_settings($r);
+ }elsif($env{'form.action'} eq 'change_authoring_settings'){
+ &change_authoring_settings($r);
}elsif($env{'form.action'} eq 'debugtoggle'){
- &toggle_debug();
+ if (&can_toggle_debug()) {
+ &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);
}
- return OK;
-
+ # Properly end the HTML page of all preference pages
+ # started in each sub routine
+ # Exception: print_main_menu has its own end_page call
+ unless (!exists $env{'form.action'} ||
+ $env{'form.action'} eq 'debugtoggle') {
+ $r->print(&Apache::loncommon::end_page());
+ }
+ return OK;
}
-#remove when done
-#old handler routine
-sub handler2 {
- my $r = shift;
- my $user = $env{'user.name'};
- my $domain = $env{'user.domain'};
- &Apache::loncommon::content_type($r,'text/html');
- # Some pages contain DES keys and should not be cached.
- &Apache::loncommon::no_cache($r);
- $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'});
-
- my @Options;
- # Determine current authentication method
- my $currentauth=&Apache::lonnet::queryauthenticate($user,$domain);
- if ($currentauth =~ /^(unix|internal):/) {
- push (@Options,({ action => 'changepass',
- linktext => 'Change Password',
- href => '/adm/preferences',
- help => 'Change_Password',
- subroutine => \&passwordchanger,
- breadcrumb =>
- { href => '/adm/preferences?action=changepass',
- text => 'Change Password'},
- },
- { action => 'verify_and_change_pass',
- subroutine => \&verify_and_change_password,
- breadcrumb =>
- { href =>'/adm/preferences?action=changepass',
- text => 'Change Password'},
- printmenu => 'not_on_error',
- }));
- }
- push (@Options,({ action => 'changescreenname',
- linktext => 'Change Screen Name',
- href => '/adm/preferences',
- help => 'Prefs_Screen_Name_Nickname',
- subroutine => \&screennamechanger,
- breadcrumb =>
- { href => '/adm/preferences?action=changescreenname',
- text => 'Change Screen Name'},
- },
- { action => 'verify_and_change_screenname',
- subroutine => \&verify_and_change_screenname,
- breadcrumb =>
- { href => '/adm/preferences?action=changescreenname',
- text => 'Change Screen Name'},
- printmenu => 'yes',
- }));
-
- push (@Options,({ action => 'changemsgforward',
- linktext => 'Change Message Forwarding and Notification E-mail Addresses',
- href => '/adm/preferences',
- help => 'Prefs_Messages',
- breadcrumb =>
- { href => '/adm/preferences?action=changemsgforward',
- 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/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 Personal Information Page},
- help => 'Prefs_About_Me',
- href => $aboutmeaction});
- push (@Options,({ action => 'changecolors',
- linktext => 'Change Color Scheme',
- href => '/adm/preferences',
- help => 'Change_Colors',
- breadcrumb =>
- { href => '/adm/preferences?action=changecolors',
- text => 'Change Colors'},
- subroutine => \&colorschanger,
- },
- { action => 'verify_and_change_colors',
- breadcrumb =>
- { href => '/adm/preferences?action=changecolors',
- text => 'Change Colors'},
- printmenu => 'yes',
- subroutine => \&verify_and_change_colors,
- }));
- push (@Options,({ action => 'changelanguages',
- linktext => 'Change Language Preferences',
- href => '/adm/preferences',
- help => 'Prefs_Language',
- breadcrumb=>
- { href => '/adm/preferences?action=changelanguages',
- text => 'Change Language'},
- subroutine => \&languagechanger,
- },
- { action => 'verify_and_change_languages',
- breadcrumb=>
- {href => '/adm/preferences?action=changelanguages',
- text => 'Change Language'},
- printmenu => 'yes',
- subroutine=>\&verify_and_change_languages, }
- ));
- push (@Options,({ action => 'changewysiwyg',
- linktext => 'Change WYSIWYG Editor Preferences',
- href => '/adm/preferences',
- breadcrumb =>
- { href => '/adm/preferences?action=changewysiwyg',
- text => 'Change WYSIWYG Preferences'},
- subroutine => \&wysiwygchanger,
- },
- { action => 'set_wysiwyg',
- breadcrumb =>
- { href => '/adm/preferences?action=changewysiwyg',
- text => 'Change WYSIWYG Preferences'},
- printmenu => 'yes',
- subroutine => \&verify_and_change_wysiwyg, }
- ));
- push (@Options,({ action => 'changediscussions',
- linktext => 'Change Discussion Display Preferences',
- href => '/adm/preferences',
- help => 'Change_Discussion_Display',
- breadcrumb =>
- { href => '/adm/preferences?action=changediscussions',
- text => 'Change Discussion Preferences'},
- subroutine => \&discussionchanger,
- },
- { action => 'verify_and_change_discussion',
- breadcrumb =>
- { href => '/adm/preferences?action=changediscussions',
- text => 'Change Discussion Preferences'},
- printmenu => 'yes',
- subroutine => \&verify_and_change_discussion, }
- ));
-
- my $role = ($env{'user.adv'} ? 'Roles' : 'Course');
- push (@Options,({ action => 'changerolespref',
- linktext => 'Change '.$role.' Page Preferences',
- href => '/adm/preferences',
- subroutine => \&rolesprefchanger,
- breadcrumb =>
- { href => '/adm/preferences?action=changerolespref',
- text => 'Change '.$role.' Page Pref'},
- },
- { action => 'verify_and_change_rolespref',
- subroutine => \&verify_and_change_rolespref,
- breadcrumb =>
- { href => '/adm/preferences?action=changerolespref',
- text => 'Change '.$role.' Page Preferences'},
- printmenu => 'yes',
- }));
-
- push (@Options,({ action => 'changetexenginepref',
- linktext => 'Change How Math Equations Are Displayed',
- href => '/adm/preferences',
- subroutine => \&texenginechanger,
- breadcrumb =>
- { href => '/adm/preferences?action=changetexenginepref',
- text => 'Change Math Pref'},
- },
- { action => 'verify_and_change_texengine',
- subroutine => \&verify_and_change_texengine,
- breadcrumb =>
- { href => '/adm/preferences?action=changetexenginepref',
- 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',
- }));
+sub toggle_debug {
+ if ($env{'user.debug'}) {
+ &Apache::lonnet::delenv('user.debug');
+ } else {
+ &Apache::lonnet::appenv({'user.debug' => 1});
+ }
+}
- if (&Apache::lonnet::allowed('whn',$env{'request.course.id'})
- || &Apache::lonnet::allowed('whn',$env{'request.course.id'}.'/'
- .$env{'request.course.sec'})) {
- push (@Options,({ action => 'changecourseinit',
- linktext => 'Change Course Initialization Preference',
- href => '/adm/preferences',
- subroutine => \&coursedisplaychanger,
- breadcrumb =>
- { href => '/adm/preferences?action=changecourseinit',
- text => 'Change Course Init. Pref.'},
- },
- { action => 'verify_and_change_coursepage',
- breadcrumb =>
- { href => '/adm/preferences?action=changecourseinit', text => 'Change Course Initialization Preference'},
- printmenu => 'yes',
- subroutine => \&verify_and_change_coursepage,
- }));
- }
-
- if (($env{'user.name'} =~ /^(albertel|fox|foxr|kortemey|korte|raeburn)$/)
- && ($env{'user.domain'} =~/^(msu|gerd)$/)){
- push (@Options,({ action => 'debugtoggle',
- printmenu => 'yes',
- subroutine => \&toggle_debug,
- }));
- }
-
- $r->print(&Apache::loncommon::start_page('Change Preferences'));
-
- my $call = undef;
- my $help = undef;
- my $printmenu = 'yes';
- foreach my $option (@Options) {
- if ($option->{'action'} eq $env{'form.action'}) {
- $call = $option->{'subroutine'};
- $printmenu = $option->{'printmenu'};
- if (exists($option->{'breadcrumb'})) {
- &Apache::lonhtmlcommon::add_breadcrumb
- ($option->{'breadcrumb'});
- }
- $help=$option->{'help'};
- }
- }
- $r->print(&Apache::lonhtmlcommon::breadcrumbs('Change Preferences',$help));
- my $error;
- if (defined($call)) {
- $error = $call->($r);
- }
- if ( ( ($printmenu eq 'yes')
- || ($printmenu eq 'not_on_error' && !$error) )
- && (!$env{'form.returnurl'})) {
- my $optionlist = '';
- if ($env{'user.name'} =~
- /^(albertel|kortemey|fox|foxr|korte|hallmat3|turtle|raeburn)$/
- ) {
- push (@Options,({ action => 'debugtoggle',
- linktext => 'Toggle Debug Messages',
- text => 'Current Debug status is -'.
- $env{'user.debug'}.'-.',
- href => '/adm/preferences',
- printmenu => 'yes',
- subroutine => \&toggle_debug,
- }));
- }
- foreach my $option(@Options) {
- my $optiontext = '';
- if (exists($option->{'href'})) {
- $option->{'href_args'}{'action'}=$option->{'action'};
- $optiontext .=
- ''.
- &mt($option->{'linktext'}).' ';
- }
- if (exists($option->{'text'})) {
- $optiontext .= ' '.&mt($option->{'text'});
- }
- if ($optiontext ne '') {
- $optiontext = ''.$optiontext.' ';
- my $helplink = ' ';
- if (exists($option->{'help'})) {
- $helplink = &Apache::loncommon::help_open_topic
- ($option->{'help'});
+sub can_toggle_debug {
+ my $can_toggle = 0;
+ my $page = 'toggledebug';
+ if (&LONCAPA::lonauthcgi::can_view($page)) {
+ $can_toggle = 1;
+ } elsif (&LONCAPA::lonauthcgi::check_ipbased_access($page)) {
+ $can_toggle = 1;
+ }
+ 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;
+ }
+ }
}
- $optionlist .= ''.
- ''.$helplink.' '.
- ''.$optiontext.' '.
- ' ';
}
}
- $optionlist .= '
';
- $r->print($optionlist);
- } elsif ($env{'form.returnurl'}) {
- $r->print(''.
- &mt('Return').' ');
}
- $r->print(&Apache::loncommon::end_page());
- return OK;
+ return $lockablenames;
}
-sub toggle_debug {
- if ($env{'user.debug'}) {
- &Apache::lonnet::delenv('user.debug');
- } else {
- &Apache::lonnet::appenv({'user.debug' => 1});
+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;