--- loncom/interface/lonpreferences.pm 2024/03/02 16:09:04 1.196.4.28.2.5 +++ loncom/interface/lonpreferences.pm 2024/03/03 01:57:35 1.196.4.28.2.6 @@ -1,7 +1,7 @@ # The LearningOnline Network # Preferences # -# $Id: lonpreferences.pm,v 1.196.4.28.2.5 2024/03/02 16:09:04 raeburn Exp $ +# $Id: lonpreferences.pm,v 1.196.4.28.2.6 2024/03/03 01:57:35 raeburn Exp $ # # Copyright Michigan State University Board of Trustees # @@ -2046,7 +2046,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; @@ -2062,13 +2066,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". + '

'."\n". ''."\n". ''."\n"); foreach my $item (@items) { @@ -2090,22 +2096,41 @@ sub author_space_settings { $userelem = &selectbox('userchoice_'.$item,$userenv{$item},'', \&Apache::loncommon::source_copyrightdescription, (&Apache::loncommon::source_copyrightids)); - } elsif ($item eq 'nocodemirror') { + } elsif (($item eq 'nocodemirror') || ($item eq 'daxecollapse')) { if ($domdef) { - $domdefdisplay = $lt{'yes'}; + if ($item eq 'daxecollapse') { + $domdefdisplay = $lt{'coll'}; + } else { + $domdefdisplay = $lt{'yes'}; + } } else { - $domdefdisplay = $lt{'no'}; + if ($item eq 'daxecollapse') { + $domdefdisplay = $lt{'expa'}; + } else { + $domdefdisplay = $lt{'no'}; + } } - my %checked; + my (%checked,%text); $checked{'no'} = ' checked="checked"'; if ($userenv{$item} eq 'yes') { $checked{'yes'} = $checked{'no'}; $checked{'no'} = ''; } + if ($item eq 'daxecollapse') { + %text = ( + yes => $lt{'coll'}, + no => $lt{'expa'}, + ); + } else { + %text = ( + yes => $lt{'yes'}, + no => $lt{'no'}, + ); + } $userelem = ''; foreach my $choice ('yes','no') { $userelem .= '   '; + $checked{$choice}.' />'.$text{$choice}.'   '; } $userelem .= ''; } @@ -2126,8 +2151,7 @@ $userelem

END } - $r->print('
'. - ''. + $r->print(''. '
'."\n"); } else { my $constchecked=''; @@ -2171,7 +2195,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(); @@ -2187,7 +2215,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; } @@ -2242,6 +2270,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') { @@ -2289,17 +2323,47 @@ 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 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 expanded_authoring_settings { my $reqdmajor = 2; my $reqdminor = 11;