--- loncom/interface/lonpreferences.pm 2004/11/19 20:17:52 1.50
+++ loncom/interface/lonpreferences.pm 2009/09/23 15:12:54 1.125.8.1
@@ -1,7 +1,7 @@
# The LearningOnline Network
# Preferences
#
-# $Id: lonpreferences.pm,v 1.50 2004/11/19 20:17:52 albertel Exp $
+# $Id: lonpreferences.pm,v 1.125.8.1 2009/09/23 15:12:54 gci 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;
@@ -40,6 +41,8 @@ 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.
@@ -97,31 +100,40 @@ sub wysiwygchanger {
my $r = shift;
my %userenv = &Apache::lonnet::get
('environment',['wysiwygeditor']);
+ my $onselect='checked="checked"';
my $offselect='';
- my $onselect='checked="1"';
- if ($userenv{'wysiwygeditor'}) {
+ if ($userenv{'wysiwygeditor'} eq 'on') {
$onselect='';
- $offselect='checked="1"';
+ $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(<
+
-ENDSCREEN
+ $r->print('
'
+ .&mt('Change the name that is displayed in your posts.')
+ .'
'
+ );
+ $r->print('
'
+ .''
+ .&Apache::lonhtmlcommon::start_pick_box()
+ .&Apache::lonhtmlcommon::row_title(&mt('New screenname (shown if you post anonymously)'))
+ .''
+ .&Apache::lonhtmlcommon::row_closure()
+ .&Apache::lonhtmlcommon::row_title(&mt('New nickname (shown if you post non-anonymously)'))
+ .''
+ .&Apache::lonhtmlcommon::row_closure()
+ .&Apache::lonhtmlcommon::row_title()
+ .''
+ .&Apache::lonhtmlcommon::row_closure(1)
+ .&Apache::lonhtmlcommon::end_pick_box()
+ .'
'
+ );
}
sub verify_and_change_screenname {
my $r = shift;
- my $user = $ENV{'user.name'};
- my $domain = $ENV{'user.domain'};
+ my $user = $env{'user.name'};
+ my $domain = $env{'user.domain'};
# Screenname
- my $newscreen = $ENV{'form.screenname'};
+ my $newscreen = $env{'form.screenname'};
$newscreen=~s/[^ \w]//g;
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.=' ';
- $newscreen = $ENV{'form.nickname'};
+ $newscreen = $env{'form.nickname'};
$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);
+ $message=&Apache::loncommon::confirmwrapper($message);
+ $r->print(<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);
+ $r->print(<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);
+ $r->print(<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);
$r->print(<
$message
ENDVCSCREEN
}
+#################################################################
+## 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 $user = $ENV{'user.name'};
- my $domain = $ENV{'user.domain'};
- my %userenv = &Apache::lonnet::get('environment',['msgforward','notification','critnotification']);
+ my ($r,$message) = @_;
+ my $user = $env{'user.name'};
+ my $domain = $env{'user.domain'};
+ 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',
+ 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 'Save' and then add the next one",
+ prme => 'Back',
+ );
+ 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(<
-
",
+ $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):/);
- #
- $r->print(<
-
-LON-CAPA Preferences: Change password for $user
-
-ENDHEADER
+ 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'};
- my $newpass2 = $ENV{'form.newpass_2'};
- my $logtoken = $ENV{'form.logtoken'};
+ my $currentpass = $env{'form.currentpass'};
+ my $newpass1 = $env{'form.newpass_1'};
+ my $newpass2 = $env{'form.newpass_2'};
+ my $logtoken = $env{'form.logtoken'};
# Check for empty data
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
@@ -672,34 +1439,55 @@ ENDHEADER
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
- return;
+ return 1;
}
my ($ckey,$n1key,$n2key)=split(/&/,$tmpinfo);
#
$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.');
- return;
+ ''.
+ &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.');
- return;
+ ''.
+ &mt('Passwords must be a minimum of 7 characters long.').' '.
+ &mt('Please try again.').'',$caller,$mailtoken);
+ return 1;
}
#
# Check for bad characters
@@ -709,31 +1497,41 @@ 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
+
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 {
+ $r->print(&Apache::loncommon::confirmwrapper($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);
+ if ($caller eq 'reset_by_email') {
+ $r->print($message.' ');
+ } else {
+ $r->print(&Apache::loncommon::confirmwrapper($message));
+ }
+ return 1;
}
return;
}
@@ -743,8 +1541,8 @@ ENDERROR
################################################################
sub discussionchanger {
my $r = shift;
- my $user = $ENV{'user.name'};
- my $domain = $ENV{'user.domain'};
+ my $user = $env{'user.name'};
+ my $domain = $env{'user.domain'};
my %userenv = &Apache::lonnet::get
('environment',['discdisplay','discmarkread']);
my $discdisp = 'allposts';
@@ -756,7 +1554,7 @@ sub discussionchanger {
}
}
if (defined($userenv{'discmarkread'})) {
- unless ($userenv{'discdisplay'} eq '') {
+ unless ($userenv{'discmarkread'} eq '') {
$discmark = $userenv{'discmarkread'};
}
}
@@ -766,14 +1564,14 @@ sub discussionchanger {
my $function = &Apache::loncommon::get_users_function();
my $color = &Apache::loncommon::designparm($function.'.tabbg',
- $ENV{'user.domain'});
+ $env{'user.domain'});
my %lt = &Apache::lonlocal::texthash(
'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',
@@ -782,7 +1580,7 @@ sub discussionchanger {
'disa' => 'Posts displayed?',
'npmr' => 'New posts cease to be identified as "New"?',
'thde' => 'The preferences you set here can be overridden within each individual discussion.',
- 'chgt' => 'Change to '
+ 'chgt' => 'Change to ',
);
my $dispchange = $lt{'unread'};
my $markchange = $lt{'ondisp'};
@@ -802,85 +1600,161 @@ sub discussionchanger {
}
$r->print(<<"END");
-
END
+ $r->print(&Apache::loncommon::end_data_table_row().
+ &Apache::loncommon::end_data_table());
+ $r->print(' '.
+ ''.
+ '');
}
sub verify_and_change_discussion {
my $r = shift;
- my $user = $ENV{'user.name'};
- my $domain = $ENV{'user.domain'};
+ my $user = $env{'user.name'};
+ my $domain = $env{'user.domain'};
my $message='';
- if (defined($ENV{'form.discdisp'}) ) {
- my $newdisp = $ENV{'form.newdisp'};
+ if (defined($env{'form.discdisp'}) ) {
+ my $newdisp = $env{'form.newdisp'};
if ($newdisp eq 'unread') {
- $message .='In discussions: only new posts will be displayed. ';
+ $message .= &Apache::lonhtmlcommon::confirm_success(&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 .= &Apache::lonhtmlcommon::confirm_success(&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 (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');
}
}
+ $message=&Apache::loncommon::confirmwrapper($message);
+ $r->print(< 'First resource',
+ whatsnew => "What's New Page",
+ );
+ 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]What's New Page[_2] page in the course.",'','').
+ '