--- loncom/interface/courseprefs.pm 2022/02/01 18:23:24 1.98 +++ loncom/interface/courseprefs.pm 2022/02/01 23:13:19 1.99 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # Handler to set configuration settings for a course # -# $Id: courseprefs.pm,v 1.98 2022/02/01 18:23:24 raeburn Exp $ +# $Id: courseprefs.pm,v 1.99 2022/02/01 23:13:19 raeburn Exp $ # # Copyright Michigan State University Board of Trustees # @@ -365,11 +365,25 @@ sub handler { } my %values=&Apache::lonnet::dump('environment',$cdom,$cnum); - my %courselti=&Apache::lonnet::dump('lti',$cdom,$cnum,undef,undef,undef,1); - if ($courselti{'lock'}) { - delete($courselti{'lock'}); + my %lti=&Apache::lonnet::dump('lti',$cdom,$cnum,undef,undef,undef,1); + my %ltienc = &Apache::lonnet::dump('nohist_ltienc',$cdom,$cnum,undef,undef,undef,1); + foreach my $id (keys(%lti)) { + if (ref($lti{$id}) eq 'HASH') { + if (ref($ltienc{$id}) eq 'HASH') { + $values{'linkprotection'}{$id} = { %{$lti{$id}}, %{$ltienc{$id}} }; + } else { + $values{'linkprotection'}{$id} = $lti{$id}; + } + } + unless ($phase eq 'process') { + if (ref($values{'linkprotection'}{$id}) eq 'HASH') { + delete($values{'linkprotection'}{$id}{'secret'}); + } + } + } + if ($lti{'lock'}) { + delete($lti{'lock'}); } - $values{'linkprotection'} = \%courselti; my @prefs_order = ('courseinfo','localization','feedback','discussion', 'classlists','appearance','grading','printouts', 'menuitems','linkprotection','spreadsheet','bridgetasks', @@ -596,7 +610,7 @@ sub handler { my $jscript = &get_jscript($cid,$cdom,$phase,$crstype,\%values,$noedit); my @allitems = &get_allitems(%prefs); &Apache::lonconfigsettings::display_settings($r,$cdom,$phase,$context, - \@prefs_order,\%prefs,\%values,undef,$jscript,\@allitems,$crstype, + \@prefs_order,\%prefs,\%values,$cnum,$jscript,\@allitems,$crstype, 'coursepref',$parm_permission); } else { &Apache::lonconfigsettings::display_choices($r,$phase,$context, @@ -649,7 +663,7 @@ sub get_allitems { } sub print_config_box { - my ($r,$cdom,$phase,$action,$item,$settings,$allitems,$crstype,$parm_permission) = @_; + my ($r,$cdom,$cnum,$phase,$action,$item,$settings,$allitems,$crstype,$parm_permission) = @_; my $ordered = $item->{'ordered'}; my $itemtext = $item->{'itemtext'}; my $noedit; @@ -780,7 +794,7 @@ sub print_config_box { } elsif ($action eq 'menuitems') { $output .= &print_menuitems('bottom',$cdom,$settings,$itemtext,\$rowtotal,$crstype,$noedit); } elsif ($action eq 'linkprotection') { - $output .= &print_linkprotection($cdom,$settings,\$rowtotal,$crstype,$noedit); + $output .= &print_linkprotection($cdom,$cnum,$settings,\$rowtotal,$crstype,$noedit); } elsif ($action eq 'other') { $output .= &print_other($cdom,$settings,$allitems,\$rowtotal,$crstype,$noedit); } @@ -794,7 +808,7 @@ sub print_config_box { sub process_changes { my ($cdom,$cnum,$action,$values,$item,$changes,$allitems,$disallowed,$crstype) = @_; - my (%newvalues,%courselti,$errors); + my (%newvalues,%lti,%ltienc,$errors); if (ref($item) eq 'HASH') { if (ref($changes) eq 'HASH') { my @ordered; @@ -812,12 +826,12 @@ sub process_changes { } } } elsif ($action eq 'linkprotection') { - if (ref($values->{'linkprotection'}) eq 'HASH') { - foreach my $id (keys(%{$values->{'linkprotection'}})) { + if (ref($values->{$action}) eq 'HASH') { + foreach my $id (keys(%{$values->{$action}})) { if ($id =~ /^\d+$/) { push(@ordered,$id); - unless (ref($values->{'linkprotection'}->{$id}) eq 'HASH') { - $courselti{$id} = ''; + unless (ref($values->{$action}->{$id}) eq 'HASH') { + $lti{$id} = ''; } } } @@ -965,6 +979,7 @@ sub process_changes { } } elsif ($action eq 'linkprotection') { my %menutitles = <imenu_titles(); + my $switchserver = &check_switchserver($cdom,$cnum); my (@items,%deletions,%itemids,%haschanges); if ($env{'form.linkprot_add'}) { my $name = $env{'form.linkprot_name_add'}; @@ -980,18 +995,18 @@ sub process_changes { ''; } } - if (ref($values->{'linkprotection'}) eq 'HASH') { + if (ref($values->{$action}) eq 'HASH') { my @todelete = &Apache::loncommon::get_env_multiple('form.linkprot_del'); my $maxnum = $env{'form.linkprot_maxnum'}; for (my $i=0; $i<=$maxnum; $i++) { my $itemid = $env{'form.linkprot_id_'.$i}; $itemid =~ s/\D+//g; if ($itemid) { - if (ref($values->{'linkprotection'}->{$itemid}) eq 'HASH') { + if (ref($values->{$action}->{$itemid}) eq 'HASH') { push(@items,$i); $itemids{$i} = $itemid; if ((@todelete > 0) && (grep(/^$i$/,@todelete))) { - $deletions{$itemid} = $values->{'linkprotection'}->{$itemid}->{'name'}; + $deletions{$itemid} = $values->{$action}->{$itemid}->{'name'}; } } } @@ -1002,19 +1017,19 @@ sub process_changes { my $itemid = $itemids{$idx}; next unless ($itemid); if (exists($deletions{$itemid})) { - $courselti{$itemid} = $deletions{$itemid}; + $lti{$itemid} = $deletions{$itemid}; $haschanges{$itemid} = 1; next; } my %current; - if (ref($values->{'linkprotection'}) eq 'HASH') { - if (ref($values->{'linkprotection'}->{$itemid}) eq 'HASH') { - foreach my $key (keys(%{$values->{'linkprotection'}->{$itemid}})) { - $current{$key} = $values->{'linkprotection'}->{$itemid}->{$key}; + if (ref($values->{$action}) eq 'HASH') { + if (ref($values->{$action}->{$itemid}) eq 'HASH') { + foreach my $key (keys(%{$values->{$action}->{$itemid}})) { + $current{$key} = $values->{$action}->{$itemid}->{$key}; } } } - foreach my $inner ('name','key','secret','lifetime','version') { + foreach my $inner ('name','lifetime','version') { my $formitem = 'form.linkprot_'.$inner.'_'.$idx; $env{$formitem} =~ s/(`)/'/g; if ($inner eq 'lifetime') { @@ -1026,13 +1041,40 @@ sub process_changes { } } if ($env{$formitem} ne '') { - $courselti{$itemid}{$inner} = $env{$formitem}; + $lti{$itemid}{$inner} = $env{$formitem}; + } + } + unless ($switchserver) { + my $keyitem = 'form.linkprot_key_'.$idx; + $env{$keyitem} =~ s/(`)/'/g; + unless ($idx eq 'add') { + if ($current{'key'} ne $env{$keyitem}) { + $haschanges{$itemid} = 1; + } + } + if ($env{$keyitem} ne '') { + $lti{$itemid}{'key'} = $env{$keyitem}; + } + my $secretitem = 'form.linkprot_secret_'.$idx; + $env{$secretitem} =~ s/(`)/'/g; + if ($current{'usable'}) { + if ($env{'form.linkprot_changesecret_'.$idx}) { + if ($env{$secretitem} ne '') { + $lti{$itemid}{'secret'} = $env{$secretitem}; + $haschanges{$itemid} = 1; + } + } else { + $lti{$itemid}{'secret'} = $current{'secret'}; + } + } elsif ($env{$secretitem} ne '') { + $lti{$itemid}{'secret'} = $env{$secretitem}; + $haschanges{$itemid} = 1; } } } if (keys(%haschanges)) { foreach my $entry (keys(%haschanges)) { - $changes->{$entry} = $courselti{$entry}; + $changes->{$entry} = $lti{$entry}; } } } else { @@ -1655,7 +1697,7 @@ sub store_changes { if (grep(/^\Q$item\E$/,@{$actions})) { $output .= '

'.&mt($prefs->{$item}{'text'}).'

'; if (ref($changes->{$item}) eq 'HASH') { - if ((keys(%{$changes->{$item}}) > 0) || ($item eq 'linkprotection')) { + if (keys(%{$changes->{$item}}) > 0) { $output .= &mt('Changes made:').'