--- loncom/interface/lonpreferences.pm 2023/11/06 21:24:23 1.242
+++ loncom/interface/lonpreferences.pm 2025/03/05 05:24:42 1.247
@@ -1,7 +1,7 @@
# The LearningOnline Network
# Preferences
#
-# $Id: lonpreferences.pm,v 1.242 2023/11/06 21:24:23 raeburn Exp $
+# $Id: lonpreferences.pm,v 1.247 2025/03/05 05:24:42 raeburn Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -491,24 +491,24 @@ sub screennamechanger {
text => 'Change Screen Name'});
$r->print(Apache::loncommon::start_page('Personal Data'));
$r->print(Apache::lonhtmlcommon::breadcrumbs('Change Screen Name'));
- $r->print('
'
+ $r->print('
'
.&mt('Change the name that is displayed in your posts.')
.'
'
);
$r->print('
'
+ .'
'
);
}
@@ -864,6 +864,7 @@ sub msgforwardchanger {
my $validatescript = &Apache::lonhtmlcommon::javascript_valid_email();
my $jscript = qq|
|;
$r->print(<print('
');
$r->print(< 'Change Password'});
unless ($caller eq 'reset_by_email') {
$r->print(Apache::loncommon::start_page('Personal Data'));
- $r->print(Apache::lonhtmlcommon::breadcrumbs('Change Password'));
+ $r->print(Apache::lonhtmlcommon::breadcrumbs('Change Password').
+ '');
}
if ((!defined($caller)) || ($caller eq 'preferences')) {
$user = $env{'user.name'};
@@ -1371,7 +1376,7 @@ sub passwordchanger {
$r->print(<
+
@@ -1480,7 +1485,7 @@ sub jscript_send {
ENDJS
my $output = qq|
|;
}
@@ -1557,16 +1563,16 @@ sub client_form {
} else {
$output .= &Apache::lonhtmlcommon::row_title(
'')
- .''
+ .''
.&Apache::lonhtmlcommon::row_closure();
}
$output .= &Apache::lonhtmlcommon::row_title(
'')
- .''
+ .''
.&Apache::lonhtmlcommon::row_closure()
.&Apache::lonhtmlcommon::row_title(
'')
- .''
+ .''
.&Apache::lonhtmlcommon::row_closure(1)
.&Apache::lonhtmlcommon::end_pick_box();
if ($caller eq 'reset_by_email') {
@@ -1581,7 +1587,6 @@ sub client_form {
-
|;
return $output;
}
@@ -2080,13 +2085,12 @@ sub author_space_settings {
if (keys(%author_roles) > 0) {
my ($showdomdefs,$js,$args,@items);
my $returnurl = &HTML::Entities::encode($env{'form.returnurl'},'"<>&\'');
- my $reqdmajor = 2;
- my $reqdminor = 12;
- my $loncaparev = &Apache::lonnet::get_server_loncaparev($env{'user.domain'},$env{'user.home'});
- my ($major,$minor) = ($loncaparev =~ /^\'?(\d+)\.(\d+)\.[\w.\-]+\'?$/);
- unless (($major eq '' && $minor eq '') ||
- ($reqdmajor > $major) || (($reqdmajor == $major) && ($reqdminor > $minor))) {
- @items = ('nocodemirror','copyright','sourceavail');
+ if (&expanded_authoring_settings()) {
+ @items = ('nocodemirror');
+ if (&daxe_permitted(\%author_roles)) {
+ push(@items,'daxecollapse');
+ }
+ push(@items,('copyright','sourceavail'));
$showdomdefs = 1;
$js = &toggle_options_js();
my $onload;
@@ -2102,13 +2106,15 @@ sub author_space_settings {
my %domdefs = &Apache::lonnet::get_domain_defaults($domain);
my %staticdefaults = (
'nocodemirror' => '0',
+ 'daxecollapse' => '0',
'copyright' => 'default',
'sourceavail' => 'closed',
);
my %lt = &authoring_settings_text();
my %titles = &authoring_settings_titles();
- $r->print("$lt{'auss'}
\n".
+ $r->print("$lt{'auss'}
".
''."\n");
} else {
my $constchecked='';
@@ -2197,12 +2221,7 @@ sub change_authoring_settings {
my %author_roles = &Apache::lonnet::get_my_roles($user,$domain,'userroles','',['au','ca','aa']);
if (keys(%author_roles) > 0) {
my $message;
- my $reqdmajor = 2;
- my $reqdminor = 12;
- my $loncaparev = &Apache::lonnet::get_server_loncaparev($env{'user.domain'},$env{'user.home'});
- my ($major,$minor) = ($loncaparev =~ /^\'?(\d+)\.(\d+)\.[\w.\-]+\'?$/);
- if (($major eq '' && $minor eq '') ||
- ($reqdmajor > $major) || (($reqdmajor == $major) && ($reqdminor > $minor))) {
+ if (!&expanded_authoring_settings()) {
my %ausettings=('environment.nocodemirror' => '');
if ($env{'form.cmoff'}) { $ausettings{'environment.nocodemirror'}='yes'; }
&Apache::lonnet::put('environment',\%ausettings);
@@ -2216,7 +2235,11 @@ sub change_authoring_settings {
$message=&Apache::lonhtmlcommon::confirm_success(&mt('Set [_1] to [_2]',''.&mt('Deactivate CodeMirror in Authoring Space').'',''.$status.''));
$message=&Apache::loncommon::confirmwrapper($message);
} else {
- my @items = ('nocodemirror','copyright','sourceavail');
+ my @items = ('nocodemirror');
+ if (&daxe_permitted(\%author_roles)) {
+ push(@items,'daxecollapse');
+ }
+ push(@items,('copyright','sourceavail'));
my %oldsettings = &Apache::lonnet::get('environment',\@items);
my %domdefs = &Apache::lonnet::get_domain_defaults($domain);
my %lt = &authoring_settings_text();
@@ -2232,7 +2255,7 @@ sub change_authoring_settings {
} elsif ($env{'form.'.$item} eq 'user') {
my $newval = $env{'form.userchoice_'.$item};
my @possibles;
- if ($item eq 'nocodemirror') {
+ if (($item eq 'nocodemirror') || ($item eq 'daxecollapse')) {
if ($newval =~ /^yes|no$/) {
$newsettings{$item} = $newval;
}
@@ -2287,6 +2310,12 @@ sub change_authoring_settings {
my $value = $changes{$item};
if ($item eq 'nocodemirror') {
$value = $lt{$changes{$item}};
+ } elsif ($item eq 'daxecollapse') {
+ if ($value eq 'yes') {
+ $value = $lt{'coll'};
+ } else {
+ $value = $lt{'expa'};
+ }
} elsif ($item eq 'copyright') {
$value = &Apache::loncommon::copyrightdescription($changes{$item});
} elsif ($item eq 'sourceavail') {
@@ -2334,17 +2363,59 @@ sub authoring_settings_text {
'save' => 'Save',
'yes' => 'Deactivated',
'no' => 'Activated',
+ 'expa' => 'Start Expanded',
+ 'coll' => 'Start Collapsed',
);
}
sub authoring_settings_titles {
return &Apache::lonlocal::texthash(
'nocodemirror' => 'CodeMirror for EditXML editor',
+ 'daxecollapse' => 'Daxe editor: collapsible standard LON-CAPA menus',
'copyright' => 'Default Copyright/Distribution in new metadata file',
'sourceavail' => 'Default Source Available in new metadata file',
);
}
+sub expanded_authoring_settings {
+ my $reqdmajor = 2;
+ my $reqdminor = 12;
+ my $loncaparev = &Apache::lonnet::get_server_loncaparev($env{'user.domain'},$env{'user.home'});
+ my ($major,$minor) = ($loncaparev =~ /^\'?(\d+)\.(\d+)\.[\w.\-]+\'?$/);
+ unless (($major eq '' && $minor eq '') ||
+ ($reqdmajor > $major) || (($reqdmajor == $major) && ($reqdminor > $minor))) {
+ return 1;
+ }
+ return;
+}
+
+sub daxe_permitted {
+ my ($aurolesref) = @_;
+ my $hasdaxe;
+ if (ref($aurolesref) eq 'HASH') {
+ my %editors;
+ foreach my $key (keys(%{$aurolesref})) {
+ if ($key =~ /^:$LONCAPA::match_domain:au$/) {
+ if (exists($env{'environment.editors'})) {
+ if (grep(/^daxe$/,split(/,/,$env{'environment.editors'}))) {
+ $hasdaxe = 1;
+ last;
+ }
+ }
+ } else {
+ my ($auname,$audom) = ($key =~ /^($LONCAPA::match_username):($LONCAPA::match_domain):(ca|aa)$/);
+ if (exists($env{"environment.internal.editors./$audom/$auname"})) {
+ if (grep(/^daxe$/,split(/,/,$env{"environment.internal.editors./$audom/$auname"}))) {
+ $hasdaxe = 1;
+ last;
+ }
+ }
+ }
+ }
+ }
+ return $hasdaxe;
+}
+
sub lockednameschanger {
my $r = shift;
my %userenv = &Apache::lonnet::get('environment',['lockedname']);
@@ -2547,6 +2618,7 @@ my @menu=
permission => $permissions{'aboutme'},
#help => 'Prefs_About_Me',
icon => 'system-users.png',
+ alttext => 'About Me Icon',
linktitle => 'Edit information about yourself that should be displayed on your public profile.'
},
{ linktext => 'Screen Name',
@@ -2554,6 +2626,7 @@ my @menu=
permission => 'F',
#help => 'Prefs_Screen_Name_Nickname',
icon => 'preferences-desktop-font.png',
+ alttext => 'Nickname Icon',
linktitle => 'Change the name that is displayed in your posts.'
},
]
@@ -2565,6 +2638,7 @@ my @menu=
permission => 'F',
#help => 'Prefs_Language',
icon => 'preferences-desktop-locale.png',
+ alttext => 'Language Icon',
linktitle => 'Choose the default language for this user.'
},
{ linktext => $role.' Page',
@@ -2572,6 +2646,7 @@ my @menu=
permission => 'F',
#help => '',
icon => 'role_hotlist.png',
+ alttext => 'Switch Role Icon',
linktitle => 'Configure the roles hotlist.'
},
{ linktext => 'Math display settings',
@@ -2579,6 +2654,7 @@ my @menu=
permission => 'F',
#help => '',
icon => 'dismath.png',
+ alttext => 'Math Icon',
linktitle => 'Change how math is displayed.'
},
{
@@ -2587,6 +2663,7 @@ my @menu=
permission => $permissions{'timezone'},
#help => '',
icon => 'timezone.png',
+ alttext => 'Clock Icon',
linktitle => 'Set your time zone.',
}
]
@@ -2598,6 +2675,7 @@ my @menu=
permission => 'F',
#help => 'Change_Colors',
icon => 'preferences-desktop-theme.png',
+ alttext => 'Colors Icon',
linktitle => 'Change LON-CAPA default colors.'
},
{ linktext => 'Menu Display',
@@ -2605,6 +2683,7 @@ my @menu=
permission => 'F',
#help => '',
icon => 'preferences-system-windows.png',
+ alttext => 'Menus Icon',
linktitle => 'Change whether the menus are displayed with icons or icons and text.'
}
]
@@ -2616,6 +2695,7 @@ my @menu=
permission => 'F',
#help => 'Prefs_Messages',
icon => 'mail-reply-all.png',
+ alttext => 'Notifications Icon',
linktitle => 'Change messageforwarding or notifications settings.'
},
{ linktext => 'Discussion Display',
@@ -2623,6 +2703,7 @@ my @menu=
permission => 'F',
#help => 'Change_Discussion_Display',
icon => 'chat.png',
+ alttext => 'Discussions Icon',
linktitle => 'Set display preferences for discussion posts for both discussion boards and individual resources in all your courses.'
},
]
@@ -2637,6 +2718,7 @@ if (keys(%author_coauthor_roles) > 0) {
url => '/adm/preferences?action=authorsettings',
permission => 'F',
icon => 'codemirror.png',
+ alttext => 'Coding Icon',
linktitle => 'Settings for your authoring space.',
},
]
@@ -2649,6 +2731,7 @@ if (keys(%author_coauthor_roles) > 0) {
permission => 'F',
#help => '',
icon => 'system-lock-screen.png',
+ alttext => 'Lock Icon',
linktitle => 'Restrict domain coordinator access.',
});
}
@@ -2661,6 +2744,7 @@ push(@menu,
permission => 'F',
#help => '',
icon => 'network-workgroup.png',
+ alttext => 'Clicker Icon',
linktitle => 'Register your clicker.'
},
]
@@ -2674,6 +2758,7 @@ push(@menu,
permission => 'F',
#help => 'Change_Password',
icon => 'emblem-readonly.png',
+ alttext => 'Secure Icon',
linktitle => 'Change your password.',
});
}
@@ -2685,6 +2770,7 @@ push(@menu,
permission => 'F',
#help => '',
icon => 'system-lock-screen.png',
+ alttext => 'Screen Lock Icon',
linktitle => 'Allow/disallow propagation of name changes from institutional directory service',
});
}
@@ -2698,6 +2784,7 @@ push(@{ $menu[-1]->{items} }, {
permission => 'F',
#help => '',
icon => 'course_ini.png',
+ alttext => 'Course Launch Icon',
linktitle => 'Set the default page to be displayed when you select a course role.',
});
@@ -2710,14 +2797,15 @@ push(@{ $menu[-1]->{items} }, {
permission => 'F',
#help => '',
icon => 'blog.png',
+ alttext => 'Debugging Icon',
linktitle => 'Toggle Debug Messages.',
});
}
$r->print(&Apache::loncommon::start_page('My Space'));
$r->print(Apache::lonhtmlcommon::breadcrumbs('Change Preferences'));
- $r->print($message);
- $r->print(Apache::lonhtmlcommon::generate_menu(@menu));
+ $r->print(''."\n".$message);
+ $r->print(Apache::lonhtmlcommon::generate_menu(@menu)."\n".'
');
$r->print(Apache::loncommon::end_page());
}
@@ -2770,6 +2858,7 @@ sub handler {
$ended = 1;
}elsif($env{'form.action'} eq 'changepass'){
&passwordchanger($r);
+ $r->print(' ');
}elsif($env{'form.action'} eq 'verify_and_change_pass'){
&verify_and_change_password($r,'preferences','','','',\$ended);
}elsif($env{'form.action'} eq 'changescreenname'){