--- loncom/interface/lonpreferences.pm 2010/09/19 14:22:40 1.179.2.4
+++ loncom/interface/lonpreferences.pm 2010/04/14 13:58:11 1.188
@@ -1,7 +1,7 @@
# The LearningOnline Network
# Preferences
#
-# $Id: lonpreferences.pm,v 1.179.2.4 2010/09/19 14:22:40 raeburn Exp $
+# $Id: lonpreferences.pm,v 1.188 2010/04/14 13:58:11 wenzelju Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -117,7 +117,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(<
@@ -191,7 +191,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');
@@ -399,13 +404,20 @@ sub rolesprefchanger {
-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);
- &print_main_menu($r, $message);
-}
-
-################################################################
# Clicker Subroutines #
################################################################
@@ -1005,9 +959,9 @@ sub verify_and_change_msgforward {
$msuser = &LONCAPA::clean_username($msuser);
$msdomain = &LONCAPA::clean_domain($msdomain);
if (($msuser) && ($msdomain)) {
- if (&Apache::lonnet::homeserver($msuser,$msdomain) ne 'no_host') {
+ if (&Apache::lonnet::homeserver($msuser,$msdomain) ne 'no_host') {
$newscreen.=$msuser.':'.$msdomain.',';
- } else {
+ } else {
$message.= &mt('No such user: ').''.$msuser.':'.$msdomain.' ';
}
}
@@ -1016,12 +970,11 @@ sub verify_and_change_msgforward {
if ($newscreen) {
&Apache::lonnet::put('environment',{'msgforward' => $newscreen});
&Apache::lonnet::appenv({'environment.msgforward' => $newscreen});
- $message .= &mt('Set message forwarding to ').'"'.$newscreen.'".'
- .' ';
+ $message .= &Apache::lonhtmlcommon::confirm_success(&mt('Set message forwarding to ').'"'.$newscreen.'". ');
} else {
&Apache::lonnet::del('environment',['msgforward']);
&Apache::lonnet::delenv('environment.msgforward');
- $message.= &mt("Set message forwarding to 'off'.").' ';
+ $message.= &Apache::lonhtmlcommon::confirm_success(&mt("Set message forwarding to 'off'.").' ');
}
my $critnotification;
my $notification;
@@ -1057,43 +1010,41 @@ 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.=&Apache::lonhtmlcommon::confirm_success(&mt('Set non-critical message notification address(es) to ').'"'.$notification.'". ');
} else {
&Apache::lonnet::del('environment',['notification']);
&Apache::lonnet::delenv('environment.notification');
- $message.=&mt("Set non-critical message notification to 'off'.").' ';
+ $message.=&Apache::lonhtmlcommon::confirm_success(&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.=&Apache::lonhtmlcommon::confirm_success(&mt('Set critical message notification address(es) to ').'"'.$critnotification.'". ');
} else {
&Apache::lonnet::del('environment',['critnotification']);
&Apache::lonnet::delenv('environment.critnotification');
- $message.=&mt("Set critical message notification to 'off'.").' ';
+ $message.=&Apache::lonhtmlcommon::confirm_success(&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.=&Apache::lonhtmlcommon::confirm_success(&mt('Set address(es) to receive excerpts with html retained ').'"'.$notify_with_html.'".');
} else {
&Apache::lonnet::del('environment',['notifywithhtml']);
&Apache::lonnet::delenv('environment.notifywithhtml');
if ($totaladdresses == 1) {
- $message.=&mt("Set notification address to receive excerpts with html stripped.");
+ $message.=&Apache::lonhtmlcommon::confirm_success(&mt("Set notification address to receive excerpts with html stripped."));
} else {
- $message.=&mt("Set all notification addresses to receive excerpts with html stripped.");
+ $message.=&Apache::lonhtmlcommon::confirm_success(&mt("Set all notification addresses to receive excerpts with html stripped."));
}
}
} else {
&Apache::lonnet::del('environment',['notifywithhtml']);
&Apache::lonnet::delenv('environment.notifywithhtml');
}
- if ($message) {
- $message .= ' ';
- }
&Apache::loncommon::flush_email_cache($user,$domain);
+ $message=&Apache::loncommon::confirmwrapper($message);
&msgforwardchanger($r,$message);
}
@@ -1383,7 +1334,7 @@ sub client_form {
.&Apache::lonhtmlcommon::row_closure()
.&Apache::lonhtmlcommon::row_title(
'')
- .''
+ .''
.''
.&Apache::lonhtmlcommon::row_closure()
.&Apache::lonhtmlcommon::row_title(
@@ -1583,6 +1534,7 @@ ENDERROR
my $message;
if ($result =~ /^ok$/) {
$message = &Apache::lonhtmlcommon::confirm_success(&mt('The password for user [_1] was successfully changed.',''.$user.''));
+ $message = &Apache::loncommon::confirmwrapper($message);
if ($caller eq 'reset_by_email') {
$r->print($message.' ');
} else {
@@ -1825,13 +1777,102 @@ sub verify_and_change_coursepage {
my $cnum = $env{'course.'.$env{'request.course.id'}.'.num'};
my ($furl,$ferr)=
&Apache::lonuserstate::readmap($cdom.'/'.$cnum);
- $message .= ' '.$lt{'gtts'}.' '.&mt('now').'';
+ $message .= ' '.$lt{'gtts'}.' '.&mt('now').'';
} else {
- $message .= ' '.$lt{'dasp'}.'';
+ $message .= ' '.$lt{'dasp'}.'';
}
}
- &print_main_menu($r, &Apache::lonhtmlcommon::confirm_success($message));
+ $message = &Apache::lonhtmlcommon::confirm_success($message);
+ $message = &Apache::loncommon::confirmwrapper($message);
+ &print_main_menu($r,$message);
+}
+
+sub lockednameschanger {
+ my $r = shift;
+ &Apache::lonhtmlcommon::add_breadcrumb(
+ { href => '/adm/preferences?action=changelockednames',
+ text => 'Automatic name changes'});
+ $r->print(Apache::loncommon::start_page('Automatic name changes'));
+ $r->print(Apache::lonhtmlcommon::breadcrumbs('Allow/disallow name updates'));
+ my %userenv = &Apache::lonnet::get('environment',['lockedname']);
+ my $lockedname='';
+ if (&can_toggle_namelocking()) {
+ if ($userenv{'lockedname'}) {
+ $lockedname = ' checked="checked"';
+ }
+ my %updateable;
+ 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');
+ }
+ %updateable = &updateable_userinfo($domconfig{'autoupdate'},\@inststatuses);
+ }
+ }
+ if (keys(%updateable)) {
+ my %longnames = &Apache::lonlocal::texthash (
+ firstname => 'First Name',
+ middlename => 'Middle Name',
+ lastname => 'Last Name',
+ );
+ my $text=&mt('By default, based on your institutional affiliation, your LON-CAPA account can be automatically updated nightly based on directory information from your institution.').' '.&mt('The following may be updated, unless you disallow updates:').
+ '
';
+ foreach my $item ('firstname','middlename','lastname') {
+ if ($updateable{$item}) {
+ $text .= '
'.$longnames{$item}.'
';
+ }
+ }
+ $text .= '
';
+ my $locking=&mt('Disallow automatic updates to name information for your LON-CAPA account');
+ my $change=&mt('Save');
+ $r->print(<
+
+$text
+
+
+
+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 {
@@ -1850,37 +1891,59 @@ if (&Apache::lonnet::usertools_access($u
}
my @menu=
({ categorytitle=>'Personal Data',
- items =>[]
- },
- { categorytitle=>'Page Display Settings',
items =>[
- { linktext => 'Color Scheme',
- url => '/adm/preferences?action=changecolors',
+ { linktext => 'Personal Information Page',
+ url => $aboutmeurl,
+ permission => $permissions{'aboutme'},
+ #help => 'Prefs_About_Me',
+ icon => 'system-users.png',
+ linktitle => 'Edit information about yourself that should be displayed on your public profile.'
+ },
+ { linktext => 'Screen Name',
+ url => '/adm/preferences?action=changescreenname',
permission => 'F',
- #help => 'Change_Colors',
- icon => 'preferences-desktop-theme.png',
- linktitle => 'Change LON-CAPA default colors.'
+ #help => 'Prefs_Screen_Name_Nickname',
+ icon => 'preferences-desktop-font.png',
+ linktitle => 'Change the name that is displayed in your posts.'
},
]
},
{ categorytitle=>'Content Display Settings',
items =>[
- { linktext => 'WYSIWYG Editor',
- url => '/adm/preferences?action=changewysiwyg',
+ { linktext => 'Language',
+ url => '/adm/preferences?action=changelanguages',
+ permission => 'F',
+ #help => 'Prefs_Language',
+ icon => 'preferences-desktop-locale.png',
+ linktitle => 'Choose the default language for this user.'
+ },
+ { linktext => $role.' Page',
+ url => '/adm/preferences?action=changerolespref',
permission => 'F',
#help => '',
- icon => 'edit-select-all.png',
- linktitle => 'Enable or disable the WYSIWYG-Editor.'
+ icon => 'sctr.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.'
},
]
},
+ { 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.'
+ },
+ ]
+ },
{ categorytitle=>'Messages & Notifications',
items =>[
{ linktext => 'Messages & Notifications',
@@ -1890,36 +1953,28 @@ my @menu=
icon => 'mail-reply-all.png',
linktitle => 'Change messageforwarding or notifications settings.'
},
+ { linktext => 'Discussion Display',
+ url => '/adm/preferences?action=changediscussions',
+ permission => 'F',
+ #help => 'Change_Discussion_Display',
+ icon => 'mail-message-new.png',
+ linktitle => 'Set display preferences for discussion posts for both discussion boards and individual resources in all your courses.'
+ },
]
},
{ categorytitle=>'Other',
- items =>[]
+ items =>[
+ { linktext => 'Register Response Devices ("Clickers")',
+ url => '/adm/preferences?action=changeclicker',
+ permission => 'F',
+ #help => '',
+ icon => 'network-workgroup.png',
+ linktitle => 'Register your clicker.'
+ },
+ ]
},
);
- if (&Apache::lonnet::usertools_access($env{'user.name'},
- $env{'user.domain'},'aboutme')) {
- push(@{ $menu[0]->{items} },
- { linktext => 'Personal Information Page',
- url => $aboutmeurl,
- permission => $permissions{'aboutme'},
- #help => 'Prefs_About_Me',
- icon => 'system-users.png',
- linktitle => 'Edit information about yourself that should be displayed on your public profile.'
- });
- }
-
- unless ($env{'user.domain'} eq 'gcitest') {
- push(@{ $menu[0]->{items} },
- { linktext => 'Screen Name',
- url => '/adm/preferences?action=changescreenname',
- permission => 'F',
- #help => 'Prefs_Screen_Name_Nickname',
- icon => 'preferences-desktop-font.png',
- linktitle => 'Change the name that is displayed in your posts.'
- });
- }
-
if ($currentauth =~ /^(unix|internal):/) {
push(@{ $menu[0]->{items} }, {
linktext => 'Password',
@@ -1931,26 +1986,15 @@ push(@{ $menu[0]->{items} }, {
});
}
- unless ((&Apache::loncommon::needs_gci_custom()) || ($env{'user.domain'} eq 'gcitest')) {
- push(@{ $menu[1]->{items} },
- { 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.'
- });
- }
-
- unless ($env{'user.domain'} eq 'gcitest') {
- push(@{ $menu[3]->{items} },
- { linktext => 'Discussion Display',
- url => '/adm/preferences?action=changediscussions',
- permission => 'F',
- #help => 'Change_Discussion_Display',
- icon => 'mail-message-new.png',
- linktitle => 'Set display preferences for discussion posts for both discussion boards and individual resources in all your courses.'
- });
+ 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']);
@@ -1965,10 +2009,9 @@ push(@{ $menu[4]->{items} }, {
});
}
- unless ((&Apache::loncommon::needs_gci_custom()) || ($env{'user.domain'} eq 'gcitest')) {
- if (&Apache::lonnet::allowed('whn',$env{'request.course.id'})
- || &Apache::lonnet::allowed('whn',$env{'request.course.id'}.'/'
- .$env{'request.course.sec'})) {
+ if (&Apache::lonnet::allowed('whn',$env{'request.course.id'})
+ || &Apache::lonnet::allowed('whn',$env{'request.course.id'}.'/'
+ .$env{'request.course.sec'})) {
push(@{ $menu[4]->{items} }, {
linktext => 'Course Initialization',
url => '/adm/preferences?action=changecourseinit',
@@ -1978,7 +2021,6 @@ push(@{ $menu[4]->{items} }, {
linktitle => 'Set the default page to be displayed when you select a course role.',
});
- }
}
if (&can_toggle_debug()) {
push(@{ $menu[4]->{items} }, {
@@ -2060,10 +2102,6 @@ sub handler {
&texenginechanger($r);
}elsif($env{'form.action'} eq 'verify_and_change_texengine'){
&verify_and_change_texengine($r);
- }elsif($env{'form.action'} eq 'changeicons'){
- &iconchanger($r);
- }elsif($env{'form.action'} eq 'verify_and_change_icons'){
- &verify_and_change_icons($r);
}elsif($env{'form.action'} eq 'changeclicker'){
&clickerchanger($r);
}elsif($env{'form.action'} eq 'verify_and_change_clicker'){
@@ -2085,6 +2123,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
@@ -2117,5 +2159,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__