--- loncom/interface/lonpreferences.pm 2007/05/08 18:26:54 1.103 +++ loncom/interface/lonpreferences.pm 2008/01/20 22:34:40 1.111 @@ -1,7 +1,7 @@ # The LearningOnline Network # Preferences # -# $Id: lonpreferences.pm,v 1.103 2007/05/08 18:26:54 raeburn Exp $ +# $Id: lonpreferences.pm,v 1.111 2008/01/20 22:34:40 raeburn Exp $ # # Copyright Michigan State University Board of Trustees # @@ -168,11 +168,11 @@ sub verify_and_change_languages { if ($newlanguage) { &Apache::lonnet::put('environment',{'languages' => $newlanguage}); &Apache::lonnet::appenv('environment.languages' => $newlanguage); - $message='Set new preferred languages to '.$newlanguage; + $message=&mt('Set new preferred languages to ').'"'.$newlanguage.'".'; } else { &Apache::lonnet::del('environment',['languages']); &Apache::lonnet::delenv('environment\.languages'); - $message='Reset preferred language'; + $message=&mt('Reset preferred language.'); } $r->print(< $newtexengine}); &Apache::lonnet::appenv('environment.texengine' => $newtexengine); - $message='Set new preferred math display to '.$newtexengine; + $message=&mt('Set new preferred math display to ').'"'.$newtexengine.'".'; } else { &Apache::lonnet::del('environment',['texengine']); &Apache::lonnet::delenv('environment\.texengine'); - $message='Reset preferred math display.'; + $message=&mt('Reset preferred math display.'); } @@ -467,14 +467,20 @@ sub screennamechanger { ('environment',['screenname','nickname']); my $screenname=$userenv{'screenname'}; my $nickname=$userenv{'nickname'}; + my %lt = &Apache::lonlocal::texthash( + text_screenname => 'New screenname (shown if you post anonymously):', + text_nickname => 'New nickname (shown if you post non-anonymously):', + text_submit => 'Change', + ); $r->print(< -New screenname (shown if you post anonymously): +$lt{'text_screenname'} -New nickname (shown if you post non-anonymously): +$lt{'text_nickname'} - + + ENDSCREEN } @@ -490,11 +496,11 @@ sub verify_and_change_screenname { if ($newscreen) { &Apache::lonnet::put('environment',{'screenname' => $newscreen}); &Apache::lonnet::appenv('environment.screenname' => $newscreen); - $message='Set new screenname to '.$newscreen; + $message=&mt('Set new screenname to ').'"'.$newscreen.'.".'; } else { &Apache::lonnet::del('environment',['screenname']); &Apache::lonnet::delenv('environment\.screenname'); - $message='Reset screenname'; + $message=&mt('Reset screenname.'); } # Nickname $message.=''; @@ -503,11 +509,11 @@ sub verify_and_change_screenname { if ($newscreen) { &Apache::lonnet::put('environment',{'nickname' => $newscreen}); &Apache::lonnet::appenv('environment.nickname' => $newscreen); - $message.='Set new nickname to '.$newscreen; + $message.=&mt('Set new nickname to ').'"'.$newscreen.'".'; } else { &Apache::lonnet::del('environment',['nickname']); &Apache::lonnet::delenv('environment\.nickname'); - $message.='Reset nickname'; + $message.=&mt('Reset nickname.'); } &Apache::lonnet::devalidate_cache_new('namescache',$user.':'.$domain); $r->print(<print(< + +$text $helplink +$clickers + + + +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); + $r->print(&mt('Registering clickers: [_1]',$newclickers)); +} + +################################################################ # Message Forward # ################################################################ @@ -576,47 +624,75 @@ sub msgforwardchanger { crit => 'Critical only', reg => 'Non-critical only', foad => 'Forwarding Address(es)', - mnot => 'Message Notification Email Address(es)', + foad_exmpl => 'e.g. userA:domain1,userB:domain2,...', + mnot => 'Email 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 => 'Change', - email => 'The e-mail address you entered', + 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 to preferences menu', ); my $forwardingHelp = Apache::loncommon::help_open_topic("Prefs_Forwarding", - "What are forwarding ". - "and notification ". - "addresses"); + &mt("What are forwarding and notification addresses?")); my $criticalMessageHelp = Apache::loncommon::help_open_topic("Course_Critical_Message", - "What are critical messages"); + &mt("What are critical messages?")); my @allow_html = split(/,/,$userenv{'notifywithhtml'}); my %allnot = &get_notifications(\%userenv); my $validatescript = &Apache::lonhtmlcommon::javascript_valid_email(); my $jscript = qq| |; @@ -626,26 +702,36 @@ $message $forwardingHelp -$lt{'foad'} (user:domain,user:domain,...): +$lt{'foad'} ($lt{'foad_exmpl'}): $criticalMessageHelp -$lt{'mnot'} (joe\@doe.com): +$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('Messages to forward').''. - &mt('Excerpt retains HTML tags included in message').''. + &mt('Types of message to send notification of, to this address').''. + &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(). - ''. - &mt('Delete').''. + ''.$counter.''. + ''. + ''. + &mt('Modify').' '. + ''. + ''. + &mt('Delete').''. ''; + $num.'" onFocus="javascript:address_changes('."'$num'". + ')" />'; my %chk; if (defined($allnot{$item}{'crit'})) { if (defined($allnot{$item}{'reg'})) { @@ -659,7 +745,9 @@ ENDMSG foreach my $type ('all','crit','reg') { $output .= ''. ''.$lt{$type}.' '; + '" value="'.$type.'" '.$chk{$type}. + ' onchange="javascript:address_changes('."'$num'".')" />'. + $lt{$type}.' '; } my $htmlon = ''; my $htmloff = ''; @@ -669,11 +757,16 @@ ENDMSG $htmloff = 'checked="checked" '; } $output .= ''.&mt('Yes').' '. + '" value="1" '.$htmlon. + ' onchange="javascript:address_changes('."'$num'".')" />'. + &mt('Yes').' '. ''.&mt('No').''. + $htmloff. ' onchange="javascript:address_changes('."'$num'". +')" />'. + &mt('No').''. &Apache::loncommon::end_data_table_row(); $num ++; + $counter ++; } my %defchk = ( all => 'checked="checked" ', @@ -681,10 +774,12 @@ ENDMSG reg => '', ); $output .= &Apache::loncommon::start_data_table_row(). - ''. - &mt('Add').''. + ''.$counter.''. + ''. + ''.&mt('Add new address').''. ''; + '" onFocus="javascript:new_address('."'$num'".')" />'; foreach my $type ('all','crit','reg') { $output .= ''. '.' + .''; } else { &Apache::lonnet::del('environment',['msgforward']); &Apache::lonnet::delenv('environment\.msgforward'); @@ -757,9 +852,10 @@ sub verify_and_change_msgforward { 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) && (defined($env{'form.add_notify_'.$lastnotify}))) || + ((($i==$lastnotify) && ($env{'form.add_notify_'.$lastnotify} == 1)) || ($i<$lastnotify))) { if (defined($env{'form.address_'.$i})) { if ($env{'form.notify_type_'.$i} eq 'all') { @@ -773,6 +869,7 @@ sub verify_and_change_msgforward { if ($env{'form.html_'.$i} eq '1') { $notify_with_html .= $env{'form.address_'.$i}.','; } + $totaladdresses ++; } } } @@ -785,30 +882,34 @@ sub verify_and_change_msgforward { if ($notification) { &Apache::lonnet::put('environment',{'notification' => $notification}); &Apache::lonnet::appenv('environment.notification' => $notification); - $message.=&mt('Set non-critical message notification address(es) to: ').''.$notification.''; + $message.=&mt('Set non-critical message notification address(es) to ').'"'.$notification.'".'; } else { &Apache::lonnet::del('environment',['notification']); &Apache::lonnet::delenv('environment\.notification'); - $message.=&mt("Non-critical message notification set to 'off'.").''; + $message.=&mt("Set non-critical message notification to 'off'.").''; } if ($critnotification) { &Apache::lonnet::put('environment',{'critnotification' => $critnotification}); &Apache::lonnet::appenv('environment.critnotification' => $critnotification); - $message.=&mt('Set critical message notification address(es) to: ').''.$critnotification.''; + $message.=&mt('Set critical message notification address(es) to ').'"'.$critnotification.'".'; } else { &Apache::lonnet::del('environment',['critnotification']); &Apache::lonnet::delenv('environment\.critnotification'); - $message.=&mt('Critical message notification set to off').''; + $message.=&mt("Set critical message notification to 'off'.").''; } if ($critnotification || $notification) { if ($notify_with_html) { &Apache::lonnet::put('environment',{'notifywithhtml' => $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.''; + $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'); - $message.=&mt("Set all notification address(es) to receive excerpts with html stripped.").''; + 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']); @@ -817,6 +918,7 @@ sub verify_and_change_msgforward { if ($message) { $message .= ''; } + &Apache::loncommon::flush_email_cache($user,$domain); &msgforwardchanger($r,$message); } @@ -915,11 +1017,11 @@ sub verify_and_change_colors { if (($color=~/^\#[0-9A-Fa-f]{6}$/) && (!$env{'form.resetall'})) { &Apache::lonnet::put('environment',{$entry => $color}); &Apache::lonnet::appenv('environment.'.$entry => $color); - $message.='Set '.$colortypes{$item}.' to '.$color.''; + $message.=&mt('Set '.$colortypes{$item}.' to ').'"'.$color.'".'; } else { &Apache::lonnet::del('environment',[$entry]); &Apache::lonnet::delenv('environment\.'.$entry); - $message.='Reset '.$colortypes{$item}.''; + $message.=&mt('Reset '.$colortypes{$item}.'.').''; } } my $now = time; @@ -953,7 +1055,7 @@ sub passwordchanger { $defdom = $r->dir_config('lonDefDomain'); my %data = &Apache::lonnet::tmpget($mailtoken); if (keys(%data) == 0) { - $r->print(&mt('Sorry, the URL you provided to complete the reset of your password was invalid. Either the token included in the URL has been deleted or the URL you provided was invalid. Please submit a new request for a password reset, and follow the link to the new URL included in the e-mail that will be sent to you, to allow you to enter a new password.')); + $r->print(&mt('Sorry, the URL you provided to complete the reset of your password was invalid. Either the token included in the URL has been deleted or the URL you provided was invalid. Please submit a new request for a password reset, and follow the link to the new URL included in the e-mail that will be sent to you, to allow you to enter a new password.')); return; } if (defined($data{time})) { @@ -1225,23 +1327,23 @@ ENDERROR if ($currentpass ne $data{'temppasswd'}) { &passwordchanger($r, ''. - &mt('Could not verify current authentication').'. '. - &mt('Please try again').'.',$caller,$mailtoken); + &mt('Could not verify current authentication.').' '. + &mt('Please try again.').'',$caller,$mailtoken); return 1; } } if ($newpass1 ne $newpass2) { &passwordchanger($r, ''. - &mt('The new passwords you entered do not match').'. '. - &mt('Please try again').'.',$caller,$mailtoken); + &mt('The new passwords you entered do not match.').' '. + &mt('Please try again.').'',$caller,$mailtoken); return 1; } if (length($newpass1) < 7) { &passwordchanger($r, ''. - &mt('Passwords must be a minimum of 7 characters long').'. '. - &mt('Please try again').'.',$caller,$mailtoken); + &mt('Passwords must be a minimum of 7 characters long.').' '. + &mt('Please try again.').'',$caller,$mailtoken); return 1; } # @@ -1253,7 +1355,7 @@ ENDERROR if ($badpassword) { # I can't figure out how to enter bad characters on my browser. my $errormessage =''. - &mt('The password you entered contained illegal characters').'.'. + &mt('The password you entered contained illegal characters.').''. &mt('Valid characters are').(<<"ENDERROR"); : space and @@ -1274,7 +1376,7 @@ ENDERROR } else { # error error: run in circles, scream and shout $r->print("".&mt("The password for [_1] was not changed",$user)."". - &mt('Please make sure your old password was entered correctly').'.'); + &mt('Please make sure your old password was entered correctly.')); return 1; } return; @@ -1394,11 +1496,11 @@ 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); } 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'); } @@ -1406,11 +1508,11 @@ sub verify_and_change_discussion { 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.=&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); } else { - $message.='In discussions: posts will be identified as "new" until marked as read by the reader.'; + $message.=&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'); } @@ -1709,6 +1811,23 @@ sub handler { printmenu => 'yes', })); + push (@Options,({ action => 'changeclicker', + linktext => 'Register Response Devices ("Clickers")', + href => '/adm/preferences', + subroutine => \&clickerchanger, + breadcrumb => + { href => '/adm/preferences?action=changeicons', + text => 'Register Clicker'}, + }, + { action => 'verify_and_change_clicker', + subroutine => \&verify_and_change_clicker, + breadcrumb => + { href => '/adm/preferences?action=changeclicker', + text => 'Register Clicker'}, + printmenu => 'yes', + })); + + if (&Apache::lonnet::allowed('whn',$env{'request.course.id'}) || &Apache::lonnet::allowed('whn',$env{'request.course.id'}.'/' .$env{'request.course.sec'})) {
@@ -1274,7 +1376,7 @@ ENDERROR } else { # error error: run in circles, scream and shout $r->print("".&mt("The password for [_1] was not changed",$user)."". - &mt('Please make sure your old password was entered correctly').'.'); + &mt('Please make sure your old password was entered correctly.')); return 1; } return; @@ -1394,11 +1496,11 @@ 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); } 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'); } @@ -1406,11 +1508,11 @@ sub verify_and_change_discussion { 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.=&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); } else { - $message.='In discussions: posts will be identified as "new" until marked as read by the reader.'; + $message.=&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'); } @@ -1709,6 +1811,23 @@ sub handler { printmenu => 'yes', })); + push (@Options,({ action => 'changeclicker', + linktext => 'Register Response Devices ("Clickers")', + href => '/adm/preferences', + subroutine => \&clickerchanger, + breadcrumb => + { href => '/adm/preferences?action=changeicons', + text => 'Register Clicker'}, + }, + { action => 'verify_and_change_clicker', + subroutine => \&verify_and_change_clicker, + breadcrumb => + { href => '/adm/preferences?action=changeclicker', + text => 'Register Clicker'}, + printmenu => 'yes', + })); + + if (&Apache::lonnet::allowed('whn',$env{'request.course.id'}) || &Apache::lonnet::allowed('whn',$env{'request.course.id'}.'/' .$env{'request.course.sec'})) {