--- loncom/interface/lonpreferences.pm 2024/03/02 18:47:15 1.244
+++ loncom/interface/lonpreferences.pm 2025/03/05 02:27:00 1.246
@@ -1,7 +1,7 @@
# The LearningOnline Network
# Preferences
#
-# $Id: lonpreferences.pm,v 1.244 2024/03/02 18:47:15 raeburn Exp $
+# $Id: lonpreferences.pm,v 1.246 2025/03/05 02:27:00 raeburn Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -864,6 +864,7 @@ sub msgforwardchanger {
my $validatescript = &Apache::lonhtmlcommon::javascript_valid_email();
my $jscript = qq|
|;
$r->print(<print('
');
$r->print(<
-
+//
|;
}
@@ -2081,7 +2086,11 @@ sub author_space_settings {
my ($showdomdefs,$js,$args,@items);
my $returnurl = &HTML::Entities::encode($env{'form.returnurl'},'"<>&\'');
if (&expanded_authoring_settings()) {
- @items = ('nocodemirror','copyright','sourceavail');
+ @items = ('nocodemirror');
+ if (&daxe_permitted(\%author_roles)) {
+ push(@items,'daxecollapse');
+ }
+ push(@items,('copyright','sourceavail'));
$showdomdefs = 1;
$js = &toggle_options_js();
my $onload;
@@ -2097,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='';
@@ -2206,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();
@@ -2222,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;
}
@@ -2277,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') {
@@ -2324,12 +2363,15 @@ 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',
);
@@ -2347,6 +2389,33 @@ sub expanded_authoring_settings {
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']);