--- loncom/interface/lonpreferences.pm 2024/03/01 21:28:39 1.196.4.28.2.4 +++ loncom/interface/lonpreferences.pm 2023/11/11 03:13:07 1.243 @@ -1,7 +1,7 @@ # The LearningOnline Network # Preferences # -# $Id: lonpreferences.pm,v 1.196.4.28.2.4 2024/03/01 21:28:39 raeburn Exp $ +# $Id: lonpreferences.pm,v 1.243 2023/11/11 03:13:07 raeburn Exp $ # # Copyright Michigan State University Board of Trustees # @@ -165,7 +165,7 @@ sub texenginechanger { my %mathchoices=('' => 'Default', 'tth' => 'tth (TeX to HTML)', #'ttm' => 'TeX to MathML', - 'MathJax' => 'MathJax', + 'MathJax' => 'MathJax', 'mimetex' => 'mimetex (Convert to Images)', 'raw' => 'Raw (Screen Reader)' ); @@ -182,7 +182,7 @@ sub texenginechanger { 'change' => 'Save', 'exmpl' => 'Examples', 'mathjax' => 'MathJax:', - 'mathjaxinfo' => 'MathJax provides rendered equations whose source code can be extracted in TeX and MathML formats by right clicking the equation.', + 'mathjaxinfo' => 'MathJax provides rendered equations whose source code can be extracted in TeX and MathML formats by right clicking the equation.', 'tth' => 'tth (TeX to HTML):', 'mimetex' => 'mimetex (Convert to Images):', ); @@ -280,7 +280,7 @@ sub rolesprefchanger { my $hotlist_n=$userenv{'recentrolesn'}; my ($checkedon,$checkedoff); if ($hotlist_flag) { - $checkedon = 'checked="checked"'; + $checkedon = 'checked="checked"'; } else { $checkedoff = 'checked="checked"'; } @@ -683,16 +683,51 @@ sub verify_and_change_clicker { my $r = shift; my $user = $env{'user.name'}; my $domain = $env{'user.domain'}; + my $uhome = $env{'user.home'}; my $newclickers = $env{'form.clickers'}; + my $message; $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}); - my $message=&Apache::lonhtmlcommon::confirm_success(&mt('Registering clickers: [_1]',$newclickers)); + my @oldclickers = split(/,/,$env{'environment.clickers'}); + my @newclickers = split(/,/,$newclickers); + my %newuniq; + map { $newuniq{$_} = 1; } @newclickers; + @newclickers = sort(keys(%newuniq)); + my @differences = &Apache::loncommon::compare_arrays(\@oldclickers,\@newclickers); + if (@differences) { + my $putres = &Apache::lonnet::put('environment',{'clickers' => $newclickers}); + if ($putres eq 'ok') { + my @adds = (); + my @dels = (); + foreach my $item (@differences) { + if (grep(/^\Q$item\E$/,@newclickers)) { + push(@adds,$item); + } else { + push(@dels,$item); + } + } + if (@dels) { + my %delclicker; + map { $delclicker{$_} = $user; } @dels; + my $putresult = &Apache::lonnet::iddel($domain,\%delclicker,$uhome,'clickers'); + } + if (@adds) { + my %addclicker; + map { $addclicker{$_} = $user; } @adds; + my $putresult = &Apache::lonnet::updateclickers($domain,'add',\%addclicker,$uhome,1); + } + &Apache::lonnet::appenv({'environment.clickers' => $newclickers}); + $message=&Apache::lonhtmlcommon::confirm_success(&mt('Registering clickers: [_1]',$newclickers)); + } else { + $message=&Apache::lonhtmlcommon::confirm_success(&mt('Error saving clicker ID').1); + } + } else { + $message=''.&mt('Clicker information unchanged').''; + } $message=&Apache::loncommon::confirmwrapper($message); &print_main_menu($r, $message); } @@ -1142,10 +1177,10 @@ sub colorschanger { foreach my $item (sort(keys(%colortypes))) { my $curcol=&Apache::loncommon::designparm($function.'.'.$item,$domain); $chtable.=&Apache::loncommon::start_data_table_row(). - ''.$colortypes{$item}.''. - &Apache::loncommon::end_data_table_row()."\n"; + ''.$colortypes{$item}.''. + &Apache::loncommon::end_data_table_row()."\n"; } my $end_data_table = &Apache::loncommon::end_data_table(); my $pjump_def = &Apache::lonhtmlcommon::pjump_javascript_definition(); @@ -1197,9 +1232,9 @@ sub verify_and_change_colors { my $message=''; foreach my $item (keys(%colortypes)) { my $color=$env{'form.'.$item}; - if (!($color =~ /^#/)) { - $color = '#' . $color; - } + if (!($color =~ /^#/)) { + $color = '#' . $color; + } my $entry='color.'.$function.'.'.$item; if (($color=~/^\#[0-9A-Fa-f]{6}$/) && (!$env{'form.resetall'})) { &Apache::lonnet::put('environment',{$entry => $color}); @@ -1285,9 +1320,9 @@ sub passwordchanger { } else { $r->print( '

' - .&mt('Sorry, the URL generated when you requested reset of' - .' your password contained incomplete information.') - .'

' + .&mt('Sorry, the URL generated when you requested reset of' + .' your password contained incomplete information.') + .'

' ); return; } @@ -1402,7 +1437,7 @@ sub jscript_send { var posspass = this.document.client.elements.newpass_1.value; if (min > 0) { if (posspass.length < min) { - errors.push("$js_lt{'short'}"); + errors.push("$js_lt{'short'}"); } } if (currauth == 'internal:') { @@ -1431,7 +1466,7 @@ sub jscript_send { } else if (rules[i] == 'spec') { var pattern = /^[!@#$%^&*()_+\\-=\\[\\]{};':"\\\|,.\\/?]/; if (!posspass.match(pattern)) { - errors.push("$js_lt{'spec'}"); + errors.push("$js_lt{'spec'}"); } } } @@ -1725,10 +1760,10 @@ ENDERROR } else { my $warning = &Apache::loncommon::check_passwd_rules($domain,$newpass1); if ($warning) { - &passwordchanger($r,''. - $warning. - &mt('Please try again.').'', - $caller,$mailtoken,$timelimit,$extrafields); + &passwordchanger($r,''. + $warning. + &mt('Please try again.').'', + $caller,$mailtoken,$timelimit,$extrafields); if ($caller eq 'reset_by_email') { return 'rules'; } else { @@ -2046,25 +2081,11 @@ sub author_space_settings { my ($showdomdefs,$js,$args,@items); my $returnurl = &HTML::Entities::encode($env{'form.returnurl'},'"<>&\''); my $reqdmajor = 2; - my $reqdminor = 11; - my $reqddotnum = 4; - my $reqddotlett= 'B'; - my $reqdreldate = '2024030109'; - my $reqletterfail; + my $reqdminor = 12; my $loncaparev = &Apache::lonnet::get_server_loncaparev($env{'user.domain'},$env{'user.home'}); - my ($major,$minor,$dotrel,$reldate) = ($loncaparev =~ /^\'?(\d+)\.(\d+)\.([\w.]+)\-(\d+)\'?$/); - my ($dotnum,$dotlett) = split(/\./,$dotrel); - my %lettdig = &Apache::lonnet::letter_to_digits(); - if ((exists($lettdig{$dotlett})) && (exists($lettdig{$reqddotlett}))) { - if ($lettdig{$reqddotlett} > $lettdig{$dotlett}) { - $reqletterfail = 1; - } - } + my ($major,$minor) = ($loncaparev =~ /^\'?(\d+)\.(\d+)\.[\w.\-]+\'?$/); unless (($major eq '' && $minor eq '') || - ($reqdmajor > $major) || (($reqdmajor == $major) && ($reqdminor > $minor)) || - (($reqdmajor == $major) && ($reqdminor == $minor) && ($reqddotnum > $dotnum)) || - (($reqdmajor == $major) && ($reqdminor == $minor) && ($reqddotnum == $dotnum) && $reqletterfail) || - (($reqdmajor == $major) && ($reqdminor == $minor) && ($reqddotnum == $dotnum) && ($reqdreldate > $reldate))) { + ($reqdmajor > $major) || (($reqdmajor == $major) && ($reqdminor > $minor))) { @items = ('nocodemirror','copyright','sourceavail'); $showdomdefs = 1; $js = &toggle_options_js(); @@ -2176,7 +2197,12 @@ 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; - if (0) { + 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))) { my %ausettings=('environment.nocodemirror' => ''); if ($env{'form.cmoff'}) { $ausettings{'environment.nocodemirror'}='yes'; } &Apache::lonnet::put('environment',\%ausettings); @@ -2639,7 +2665,7 @@ push(@menu, }, ] }, - ); +); if ($currentauth =~ /^(unix|internal):/) { push(@{ $menu[0]->{items} }, { @@ -2651,25 +2677,6 @@ push(@menu, linktitle => 'Change your password.', }); } - if ($env{'environment.remote'} eq 'off') { - push(@{ $menu[1]->{items} }, { - linktext => 'Launch Remote Control', - url => '/adm/remote?url=/adm/preferences&action=launch', - permission => 'F', - #help => '', - icon => 'remotecontrol.png', - linktitle => 'Launch the remote control for LON-CAPA.', - }); - }else{ -push(@{ $menu[1]->{items} }, { - linktext => 'Collapse Remote Control', - url => '/adm/remote?url=/adm/preferences&action=collapse', - permission => 'F', - #help => '', - icon => 'remotecontrol.png', - linktitle => 'Collapse the remote control for LON-CAPA.', - }); - } if (&can_toggle_namelocking()) { push(@{ $menu[0]->{items} }, { @@ -2759,8 +2766,8 @@ sub handler { text => $brtxt, help => $brhelp,}); if(!exists $env{'form.action'}) { - &print_main_menu($r); - $ended = 1; + &print_main_menu($r); + $ended = 1; }elsif($env{'form.action'} eq 'changepass'){ &passwordchanger($r); }elsif($env{'form.action'} eq 'verify_and_change_pass'){