--- loncom/interface/courseprefs.pm 2022/02/20 22:18:23 1.49.2.28.2.5
+++ loncom/interface/courseprefs.pm 2024/12/30 00:27:15 1.49.2.33
@@ -1,7 +1,7 @@
# The LearningOnline Network with CAPA
# Handler to set configuration settings for a course
#
-# $Id: courseprefs.pm,v 1.49.2.28.2.5 2022/02/20 22:18:23 raeburn Exp $
+# $Id: courseprefs.pm,v 1.49.2.33 2024/12/30 00:27:15 raeburn Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -52,16 +52,12 @@ This module is used for configuration of
=item process_changes()
-=item process_linkprot()
-
=item get_sec_str()
=item check_clone()
=item store_changes()
-=item store_linkprot()
-
=item update_env()
=item display_disallowed()
@@ -224,7 +220,6 @@ use Apache::lonparmset;
use Apache::courseclassifier;
use Apache::lonlocal;
use LONCAPA qw(:DEFAULT :match);
-use Crypt::CBC;
my $registered_cleanup;
my $modified_courses;
@@ -370,29 +365,9 @@ sub handler {
}
my %values=&Apache::lonnet::dump('environment',$cdom,$cnum);
- my %linkprot=&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(%linkprot)) {
- if (ref($linkprot{$id}) eq 'HASH') {
- if (ref($ltienc{$id}) eq 'HASH') {
- $values{'linkprot'}{$id} = { %{$linkprot{$id}}, %{$ltienc{$id}} };
- } else {
- $values{'linkprot'}{$id} = $linkprot{$id};
- }
- }
- unless ($phase eq 'process') {
- if (ref($values{'linkprot'}{$id}) eq 'HASH') {
- delete($values{'linkprot'}{$id}{'secret'});
- }
- }
- }
- if ($linkprot{'lock'}) {
- delete($linkprot{'lock'});
- }
my @prefs_order = ('courseinfo','localization','feedback','discussion',
'classlists','appearance','grading','printouts',
- 'menuitems','linkprot','spreadsheet','bridgetasks',
- 'other');
+ 'spreadsheet','bridgetasks','other');
my %prefs = (
'courseinfo' =>
@@ -553,29 +528,6 @@ sub handler {
suppress_embed_prompt => 'Hide upload references prompt if uploading file to portfolio',
},
},
- 'menuitems' =>
- {
- text => 'Menu display',
- help => 'Course_Prefs_Menus',
- header => [{col1 => 'Default Menu',
- col2 => 'Value',},
- {col1 => 'Menu collections',
- col2 => 'Settings',
- }],
- ordered => ['menudefault','menucollections'],
- itemtext => {
- menudefault => 'Choose default collection of menu items for course',
- menucollections => 'Menu collections',
- },
- },
- 'linkprot' =>
- {
- text => 'Link protection',
- help => 'Course_Prefs_Linkprotection',
- header => [{col1 => 'Item',
- col2 => 'Settings',
- }],
- },
'other' =>
{ text => 'Other settings',
help => 'Course_Prefs_Other',
@@ -674,7 +626,7 @@ sub print_config_box {
}
$output .= ''."\n".
'';
- if (($action eq 'feedback') || ($action eq 'classlists') || ($action eq 'menuitems')) {
+ if (($action eq 'feedback') || ($action eq 'classlists')) {
$output .= '
@@ -699,8 +651,6 @@ sub print_config_box {
$output .= &print_feedback('top',$cdom,$settings,$ordered,$itemtext,\$rowtotal,$noedit);
} elsif ($action eq 'classlists') {
$output .= &print_classlists('top',$cdom,$settings,$itemtext,\$rowtotal,$crstype,$noedit);
- } elsif ($action eq 'menuitems') {
- $output .= &print_menuitems('top',$cdom,$settings,$itemtext,\$rowtotal,$crstype,$noedit);
}
$output .= '
@@ -772,17 +722,13 @@ sub print_config_box {
} elsif ($action eq 'appearance') {
$output .= &print_appearance($cdom,$settings,$ordered,$itemtext,\$rowtotal,$crstype,$noedit);
} elsif ($action eq 'grading') {
- $output .= &print_grading($cdom,$settings,$ordered,$itemtext,\$rowtotal,$crstype,$noedit);
+ $output .= &print_grading($cdom,$cnum,$settings,$ordered,$itemtext,\$rowtotal,$crstype,$noedit);
} elsif ($action eq 'printouts') {
$output .= &print_printouts($cdom,$settings,$ordered,$itemtext,\$rowtotal,$crstype,$noedit);
} elsif ($action eq 'spreadsheet') {
$output .= &print_spreadsheet($cdom,$settings,$ordered,$itemtext,\$rowtotal,$crstype,$noedit);
} elsif ($action eq 'bridgetasks') {
$output .= &print_bridgetasks($cdom,$settings,$ordered,$itemtext,\$rowtotal,$crstype,$noedit);
- } elsif ($action eq 'menuitems') {
- $output .= &print_menuitems('bottom',$cdom,$settings,$itemtext,\$rowtotal,$crstype,$noedit);
- } elsif ($action eq 'linkprot') {
- $output .= &print_linkprotection($cdom,$cnum,$settings,\$rowtotal,$crstype,$noedit,'course');
} elsif ($action eq 'other') {
$output .= &print_other($cdom,$settings,$allitems,\$rowtotal,$crstype,$noedit);
}
@@ -796,7 +742,7 @@ sub print_config_box {
sub process_changes {
my ($cdom,$cnum,$action,$values,$item,$changes,$allitems,$disallowed,$crstype) = @_;
- my (%newvalues,$errors);
+ my %newvalues;
if (ref($item) eq 'HASH') {
if (ref($changes) eq 'HASH') {
my @ordered;
@@ -813,18 +759,6 @@ sub process_changes {
}
}
}
- } elsif ($action eq 'linkprot') {
- if (ref($values->{$action}) eq 'HASH') {
- foreach my $id (keys(%{$values->{$action}})) {
- if ($id =~ /^\d+$/) {
- push(@ordered,$id);
- }
- }
- }
- @ordered = sort { $a <=> $b } @ordered;
- if (($env{'form.linkprot_add'}) && ($env{'form.linkprot_maxnum'} =~ /^\d+$/)) {
- push(@ordered,$env{'form.linkprot_maxnum'});
- }
} elsif (ref($item->{'ordered'}) eq 'ARRAY') {
if ($action eq 'courseinfo') {
my ($can_toggle_cat,$can_categorize) =
@@ -887,85 +821,6 @@ sub process_changes {
$changes->{$ext_entry} = $newvalues{$ext_entry};
}
}
- } elsif ($action eq 'menuitems') {
- my (%current,@colls);
- my $next = 1;
- if ($values->{'menucollections'}) {
- foreach my $item (split(/;/,$values->{'menucollections'})) {
- my ($num,$value) = split(/\%/,$item);
- if ($num =~ /^\d+$/) {
- unless (grep(/^$num$/,@colls)) {
- push(@colls,$num);
- }
- my @entries = split(/\&/,$value);
- foreach my $entry (@entries) {
- my ($name,$fields) = split(/=/,$entry);
- $current{$num}{$name} = $fields;
- }
- }
- }
- }
- if (@colls) {
- @colls = sort { $a <=> $b } @colls;
- $next += $colls[-1];
- }
- if ($env{'form.menucollections_add'} eq $next) {
- push(@colls,$next);
- }
- my $currdef = $values->{'menudefault'};
- my $possdef = $env{'form.menudefault'};
- if (($possdef =~ /^\d+$/) && (grep(/^$possdef$/,@colls))) {
- if ($currdef ne $possdef) {
- $changes->{'menudefault'} = $possdef;
- }
- } elsif ($currdef) {
- $changes->{'menudefault'} = '';
- }
- my $menucoll;
- if (@colls) {
- my ($ordered,$cats) = &menuitems_categories();
- my %shortcats = &menuitems_abbreviations();
- foreach my $num (@colls) {
- my ($entry,%include);
- map { $include{$_}= 1; } &Apache::loncommon::get_env_multiple('form.menucollections_'.$num);
- foreach my $item (@{$ordered}) {
- if ($item eq 'shown') {
- foreach my $type (@{$cats->{$item}}) {
- $entry .= $type.'=';
- if ($include{$type}) {
- $entry .= 'y';
- } else {
- $entry .= 'n';
- }
- $entry .= '&';
- }
- } else {
- $entry .= $shortcats{$item}.'=';
- foreach my $type (@{$cats->{$item}}) {
- if ($include{$type}) {
- $entry .= $type.',';
- }
- }
- $entry =~ s/,$//;
- $entry .= '&';
- }
- }
- $entry =~ s/\&$//;
- if ($menucoll) {
- $menucoll .= ';';
- }
- $menucoll .= $num.'%'.$entry;
- }
- if ($menucoll ne $values->{'menucollections'}) {
- $changes->{'menucollections'} = $menucoll;
- }
- } elsif ($values->{'menucollections'}) {
- $changes->{'menucollections'} = '';
- }
- } elsif ($action eq 'linkprot') {
- if (ref($values) eq 'HASH') {
- $errors = &process_linkprot($cdom,$cnum,$values->{$action},$changes,'course');
- }
} else {
foreach my $entry (@ordered) {
if ($entry eq 'cloners') {
@@ -1006,7 +861,7 @@ sub process_changes {
my $clonedom = $env{'form.cloners_newdom'};
if (&check_clone($clonedom,$disallowed) eq 'ok') {
my $newdom = '*:'.$env{'form.cloners_newdom'};
- if (@clonedoms) {
+ if (@clonedoms) {
if (!grep(/^\Q$newdom\E$/,@clonedoms)) {
$newvalues{$entry} .= ','.$newdom;
}
@@ -1409,6 +1264,33 @@ sub process_changes {
$settings =~ s/,$//;
}
$newvalues{$entry} = $settings;
+ } elsif ($entry eq 'grading') {
+ if ($env{'form.'.$entry} eq 'standard') {
+ if ($env{'form.hidetotals'}) {
+ my %sections = &Apache::loncommon::get_sections($cdom,$cnum);
+ if (keys(%sections)) {
+ my @secs = &Apache::loncommon::get_env_multiple('form.hidetotals_sections');
+ if (grep(/^all$/,@secs)) {
+ $newvalues{'hidetotals'} = 'all';
+ } elsif (@secs) {
+ $newvalues{'hidetotals'} = '';
+ foreach my $sec (sort {$a <=> $b} @secs) {
+ if (exists($sections{$sec})) {
+ $newvalues{'hidetotals'} .= $sec.','
+ }
+ }
+ $newvalues{'hidetotals'} =~ s/,$//;
+ }
+ } else {
+ $newvalues{'hidetotals'} = 'all';
+ }
+ }
+ }
+ if ($newvalues{'hidetotals'} ne $values->{'hidetotals'}) {
+ $changes->{'hidetotals'} = $newvalues{'hidetotals'};
+ $changes->{'grading'} = $env{'form.'.$entry};
+ }
+ $newvalues{$entry} = $env{'form.'.$entry};
} else {
$newvalues{$entry} = $env{'form.'.$entry};
}
@@ -1422,276 +1304,7 @@ sub process_changes {
}
}
}
- return $errors;
-}
-
-sub process_linkprot {
- my ($cdom,$cnum,$values,$changes,$context) = @_;
- my ($home,$dest,$ltiauth,$privkey,$privnum,$cipher,$errors,%linkprot);
- if (ref($values) eq 'HASH') {
- foreach my $id (keys(%{$values})) {
- if ($id =~ /^\d+$/) {
- unless (ref($values->{$id}) eq 'HASH') {
- $linkprot{$id} = '';
- }
- }
- }
- }
- my %domdefs = &Apache::lonnet::get_domain_defaults($cdom);
- my @ids=&Apache::lonnet::current_machine_ids();
- if ($context eq 'domain') {
- $home = &Apache::lonnet::domain($cdom,'primary');
- } else {
- $home = &Apache::lonnet::homeserver($cnum,$cdom);
- }
- if ((($context eq 'domain') && ($domdefs{'linkprotenc_dom'})) ||
- (($context eq 'course') && ($domdefs{'linkprotenc_crs'}))) {
- unless (($home eq 'no_host') || ($home eq '')) {
- if (grep(/^\Q$home\E$/,@ids)) {
- if (ref($domdefs{'privhosts'}) eq 'ARRAY') {
- if (grep(/^\Q$home\E$/,@{$domdefs{'privhosts'}})) {
- my %privhash = &Apache::lonnet::restore_dom('lti','private',$cdom,$home,1);
- $privkey = $privhash{'key'};
- $privnum = $privhash{'version'};
- if (($privnum) && ($privkey ne '')) {
- $cipher = Crypt::CBC->new({'key' => $privkey,
- 'cipher' => 'DES'});
- }
- }
- }
- }
- }
- }
- if ($context eq 'domain') {
- $dest = '/adm/domainprefs';
- $ltiauth = 1;
- } else {
- $dest = '/adm/courseprefs';
- if (exists($env{'course.'.$env{'request.course.id'}.'.internal.ltiauth'})) {
- $ltiauth = $env{'course.'.$env{'request.course.id'}.'.internal.ltiauth'};
- } else {
- my %domdefs = &Apache::lonnet::get_domain_defaults($cdom);
- $ltiauth = $domdefs{'crsltiauth'};
- }
- }
- my $switchserver = &check_switchserver($cdom,$cnum,$context,$dest);
- my (@items,%deletions,%itemids,%haschanges);
- if ($env{'form.linkprot_add'}) {
- my $name = $env{'form.linkprot_name_add'};
- $name =~ s/(`)/'/g;
- my ($newid,$error) = &get_linkprot_id($cdom,$cnum,$name,$context);
- if ($newid) {
- $itemids{'add'} = $newid;
- push(@items,'add');
- $haschanges{$newid} = 1;
- } else {
- $errors .= ''.
- &mt('Failed to acquire unique ID for link protection').
- '';
- }
- }
- if (ref($values) 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->{$itemid}) eq 'HASH') {
- push(@items,$i);
- $itemids{$i} = $itemid;
- if ((@todelete > 0) && (grep(/^$i$/,@todelete))) {
- $deletions{$itemid} = $values->{$itemid}->{'name'};
- }
- }
- }
- }
- }
- foreach my $idx (@items) {
- my $itemid = $itemids{$idx};
- next unless ($itemid);
- if (exists($deletions{$itemid})) {
- $linkprot{$itemid} = $deletions{$itemid};
- $haschanges{$itemid} = 1;
- next;
- }
- my %current;
- if (ref($values) eq 'HASH') {
- if (ref($values->{$itemid}) eq 'HASH') {
- foreach my $key (keys(%{$values->{$itemid}})) {
- $current{$key} = $values->{$itemid}->{$key};
- }
- }
- }
- foreach my $inner ('name','lifetime','version') {
- my $formitem = 'form.linkprot_'.$inner.'_'.$idx;
- $env{$formitem} =~ s/(`)/'/g;
- if ($inner eq 'lifetime') {
- $env{$formitem} =~ s/[^\d.]//g;
- }
- unless ($idx eq 'add') {
- if ($current{$inner} ne $env{$formitem}) {
- $haschanges{$itemid} = 1;
- }
- }
- if ($env{$formitem} ne '') {
- $linkprot{$itemid}{$inner} = $env{$formitem};
- }
- }
- if ($ltiauth) {
- my $reqitem = 'form.linkprot_requser_'.$idx;
- $env{$reqitem} =~ s/(`)/'/g;
- unless ($idx eq 'add') {
- if ((!$current{'requser'} && $env{$reqitem}) ||
- ($current{'requser'} && !$env{$reqitem})) {
- $haschanges{$itemid} = 1;
- }
- }
- if ($env{$reqitem} == 1) {
- $linkprot{$itemid}{'requser'} = $env{$reqitem};
- foreach my $inner ('mapuser','notstudent') {
- my $formitem = 'form.linkprot_'.$inner.'_'.$idx;
- $env{$formitem} =~ s/(`)/'/g;
- if ($inner eq 'mapuser') {
- if ($env{$formitem} eq 'other') {
- my $mapuser = $env{'form.linkprot_customuser_'.$idx};
- $mapuser =~ s/(`)/'/g;
- $mapuser =~ s/^\s+|\s+$//g;
- if ($mapuser ne '') {
- $linkprot{$itemid}{$inner} = $mapuser;
- } else {
- delete($linkprot{$itemid}{'requser'});
- last;
- }
- } elsif ($env{$formitem} eq 'sourcedid') {
- $linkprot{$itemid}{$inner} = 'lis_person_sourcedid';
- } elsif ($env{$formitem} eq 'email') {
- $linkprot{$itemid}{$inner} = 'lis_person_contact_email_primary';
- }
- } else {
- $linkprot{$itemid}{$inner} = $env{$formitem};
- }
- unless ($idx eq 'add') {
- if ($current{$inner} ne $linkprot{$itemid}{$inner}) {
- $haschanges{$itemid} = 1;
- }
- }
- }
- }
- }
- 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 '') {
- $linkprot{$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 '') {
- if ($privnum && $cipher) {
- $linkprot{$itemid}{'secret'} = $cipher->encrypt_hex($env{$secretitem});
- $linkprot{$itemid}{'cipher'} = $privnum;
- } else {
- $linkprot{$itemid}{'secret'} = $env{$secretitem};
- }
- $haschanges{$itemid} = 1;
- }
- } else {
- $linkprot{$itemid}{'secret'} = $current{'secret'};
- }
- } elsif ($env{$secretitem} ne '') {
- if ($privnum && $cipher) {
- $linkprot{$itemid}{'secret'} = $cipher->encrypt_hex($env{$secretitem});
- $linkprot{$itemid}{'cipher'} = $privnum;
- } else {
- $linkprot{$itemid}{'secret'} = $env{$secretitem};
- }
- $haschanges{$itemid} = 1;
- }
- }
- }
- if (keys(%haschanges)) {
- foreach my $entry (keys(%haschanges)) {
- $changes->{$entry} = $linkprot{$entry};
- }
- }
- return $errors;
-}
-
-sub get_linkprot_id {
- my ($cdom,$cnum,$name,$context) = @_;
- # get lock on lti db in course or linkprot db in domain
- my $lockhash = {
- lock => $env{'user.name'}.
- ':'.$env{'user.domain'},
- };
- my $tries = 0;
- my $gotlock;
- if ($context eq 'domain') {
- $gotlock = &Apache::lonnet::newput_dom('linkprot',$lockhash,$cdom);
- } else {
- $gotlock = &Apache::lonnet::newput('lti',$lockhash,$cdom,$cnum);
- }
- my ($id,$error);
- while (($gotlock ne 'ok') && ($tries<10)) {
- $tries ++;
- sleep (0.1);
- if ($context eq 'domain') {
- $gotlock = &Apache::lonnet::newput_dom('linkprot',$lockhash,$cdom);
- } else {
- $gotlock = &Apache::lonnet::newput('lti',$lockhash,$cdom,$cnum);
- }
- }
- if ($gotlock eq 'ok') {
- my %currids;
- if ($context eq 'domain') {
- %currids = &Apache::lonnet::dump_dom('linkprot',$cdom);
- } else {
- %currids = &Apache::lonnet::dump('lti',$cdom,$cnum,undef,undef,undef,1);
- }
- if ($currids{'lock'}) {
- delete($currids{'lock'});
- if (keys(%currids)) {
- my @curr = sort { $a <=> $b } keys(%currids);
- if ($curr[-1] =~ /^\d+$/) {
- $id = 1 + $curr[-1];
- } else {
- $id = 1;
- }
- } else {
- $id = 1;
- }
- if ($id) {
- if ($context eq 'domain') {
- unless (&Apache::lonnet::newput_dom('linkprot',{ $id => $name },$cdom) eq 'ok') {
- $error = 'nostore';
- }
- } else {
- unless (&Apache::lonnet::newput('lti',{ $id => $name },$cdom,$cnum) eq 'ok') {
- $error = 'nostore';
- }
- }
- } else {
- $error = 'nonumber';
- }
- }
- my $dellockoutcome;
- if ($context eq 'domain') {
- $dellockoutcome = &Apache::lonnet::del_dom('linkprot',['lock'],$cdom);
- } else {
- $dellockoutcome = &Apache::lonnet::del('lti',['lock'],$cdom,$cnum);
- }
- } else {
- $error = 'nolock';
- }
- return ($id,$error);
+ return;
}
sub get_sec_str {
@@ -1736,12 +1349,8 @@ sub check_clone {
sub store_changes {
my ($cdom,$cnum,$prefs_order,$actions,$prefs,$values,$changes,$crstype) = @_;
my ($chome,$output);
- my (%storehash,@delkeys,@need_env_update,@oldcloner,%oldlinkprot);
+ my (%storehash,@delkeys,@need_env_update,@oldcloner);
if ((ref($values) eq 'HASH') && (ref($changes) eq 'HASH')) {
- if (ref($values->{'linkprot'}) eq 'HASH') {
- %oldlinkprot = %{$values->{'linkprot'}};
- }
- delete($values->{'linkprot'});
%storehash = %{$values};
} else {
if ($crstype eq 'Community') {
@@ -1751,20 +1360,6 @@ sub store_changes {
}
return $output;
}
- my ($numchanges,$skipstore);
- if (ref($changes) eq 'HASH') {
- $numchanges = scalar(keys(%{$changes}));
- if (($numchanges == 1) && (exists($changes->{'linkprot'}))) {
- $skipstore = 1;
- } elsif (!$numchanges) {
- if ($crstype eq 'Community') {
- $output = &mt('No changes made to community settings.');
- } else {
- $output = &mt('No changes made to course settings.');
- }
- return $output;
- }
- }
my %yesno = (
hidefromcat => '1',
problem_stream_switch => '1',
@@ -1790,8 +1385,6 @@ sub store_changes {
"'$storehash{$key}'")).'';
}
}
- } elsif ($item eq 'linkprot') {
- $output .= &store_linkprot($cdom,$cnum,'course',$changes->{$item},\%oldlinkprot);
} else {
if (ref($prefs->{$item}->{'ordered'}) eq 'ARRAY') {
my @settings = @{$prefs->{$item}->{'ordered'}};
@@ -1831,6 +1424,40 @@ sub store_changes {
unless (($key eq 'co-owners') || ($key eq 'discussion_post_fonts')) {
$displayval = $changes->{$item}{$key};
}
+ if (($item eq 'grading') && ($key eq 'grading')) {
+ if ($displayval eq 'standard') {
+ my $hidetotals;
+ if (exists($changes->{$item}{'hidetotals'})) {
+ if ($changes->{$item}{'hidetotals'} eq '') {
+ if (exists($values->{'hidetotals'})) {
+ push(@delkeys,'hidetotals');
+ }
+ } else {
+ $hidetotals = $changes->{$item}{'hidetotals'};
+ }
+ } elsif (exists($values->{'hidetotals'})) {
+ $hidetotals = $values->{'hidetotals'};
+ }
+ if ($hidetotals eq '') {
+ $displayval = &mt('standard with "hide course totals" set to "No"');
+ if (exists($values->{'hidetotals'})) {
+ push(@delkeys,'hidetotals');
+ }
+ } elsif ($hidetotals =~ /^([\w,]+)$/) {
+ my $secstr = $1;
+ my @secs = split(/,/,$secstr);
+ if (grep(/^all$/,@secs)) {
+ $displayval = &mt('standard with "hide course totals" set to "Yes" for all users');
+ $hidetotals = 'all';
+ } else {
+ $displayval = &mt('standard with "hide course totals" set to "Yes" for users in section(s): [_1]',join(', ',@secs));
+ }
+ $storehash{'hidetotals'} = $hidetotals;
+ }
+ } elsif (exists($values->{'hidetotals'})) {
+ push(@delkeys,'hidetotals');
+ }
+ }
if ($item eq 'feedback') {
if ($key =~ /^(question|policy|comment)(\.email)\.text$/) {
$text = $prefs->{$item}->{'itemtext'}{$1.$2};
@@ -1908,16 +1535,6 @@ sub store_changes {
}
}
$displayname = &mt($text);
- } elsif ($item eq 'menuitems') {
- unless ($changes->{$item}{$key} eq '') {
- if ($key eq 'menudefault') {
- $displayname = &mt('Default collection of menu items');
- $displayval = &mt('Collection: [_1]',
- $changes->{$item}{$key});
- } elsif ($key eq 'menucollections') {
- $displayval = &menucollections_display($changes->{$item}{$key});
- }
- }
} else {
$displayname = &mt($text);
}
@@ -1981,19 +1598,8 @@ sub store_changes {
}
} elsif ($changes->{$item}{$key} eq '') {
push(@delkeys,$key);
- if ($item eq 'menuitems') {
- if ($key eq 'menudefault') {
- $output .= ''.&mt("Default collection of menu items set to: 'Standard' (all menus shown)").'';
- } elsif ($key eq 'menucollections') {
- $output .= ''.&mt('Specific collections of menus no longer available').'';
- }
- } else {
- $output .= ''.&Apache::lonhtmlcommon::confirm_success(&mt('Deleted setting for [_1]',
- ''.$displayname.'')).'';
- }
- } elsif ($key eq 'menucollections') {
- $output .= ''.&Apache::lonhtmlcommon::confirm_success(&mt('Numbered menu collections:')).' '.
- $displayval.'';
+ $output .= ''.&Apache::lonhtmlcommon::confirm_success(&mt('Deleted setting for [_1]',
+ ''.$displayname.'')).'';
} else {
$output .= ''.&Apache::lonhtmlcommon::confirm_success(&mt('[_1] set to [_2]',
''.$displayname.'',
@@ -2049,9 +1655,6 @@ sub store_changes {
}
}
}
- if ($skipstore) {
- return $output;
- }
if (&Apache::lonnet::put('environment',\%storehash,$cdom,$cnum) eq 'ok') {
if (ref($changes) eq 'HASH') {
if (ref($changes->{'courseinfo'}) eq 'HASH') {
@@ -2094,157 +1697,6 @@ sub store_changes {
return $output;
}
-sub store_linkprot {
- my ($cdom,$cnum,$context,$changes,$oldlinkprot) = @_;
- my ($ltiauth,$home,$lti_save_error,$output,$error,%ltienc,@deletions);
- if ($context eq 'domain') {
- $ltiauth = 1;
- $home = &Apache::lonnet::domain($cdom,'primary');
- } else {
- $home = &Apache::lonnet::homeserver($cnum,$cdom);
- if (exists($env{'course.'.$env{'request.course.id'}.'.internal.ltiauth'})) {
- $ltiauth = $env{'course.'.$env{'request.course.id'}.'.internal.ltiauth'};
- } else {
- my %domdefs = &Apache::lonnet::get_domain_defaults($cdom);
- $ltiauth = $domdefs{'crsltiauth'};
- }
- }
- if (ref($changes) eq 'HASH') {
- foreach my $id (sort { $a <=> $b } keys(%{$changes})) {
- if (ref($changes->{$id}) eq 'HASH') {
- if (exists($changes->{$id}->{'key'})) {
- $ltienc{$id}{'key'} = $changes->{$id}->{'key'};
- delete($changes->{$id}->{'key'});
- }
- if (exists($changes->{$id}->{'secret'})) {
- $ltienc{$id}{'secret'} = $changes->{$id}->{'secret'};
- delete($changes->{$id}->{'secret'});
- } elsif (ref($oldlinkprot->{$id}) eq 'HASH') {
- if (exists($oldlinkprot->{$id}{'usable'})) {
- $changes->{$id}->{'usable'} = 1;
- }
- }
- }
- }
- }
- my @ids=&Apache::lonnet::current_machine_ids();
- if (keys(%ltienc) > 0) {
- if ($context eq 'domain') {
- foreach my $id (keys(%ltienc)) {
- if (exists($ltienc{$id}{'secret'})) {
- $changes->{$id}->{'usable'} = 1;
- }
- }
- } else {
- unless (($home eq 'no_host') || ($home eq '')) {
- my $allowed;
- foreach my $id (@ids) { if ($id eq $home) { $allowed=1; } }
- if ($allowed) {
- if (&Apache::lonnet::put('nohist_ltienc',\%ltienc,$cdom,$cnum,1) eq 'ok') {
- foreach my $id (keys(%ltienc)) {
- if (exists($ltienc{$id}{'secret'})) {
- $changes->{$id}->{'usable'} = 1;
- }
- }
- } else {
- $lti_save_error = 1;
- }
- }
- }
- }
- }
- unless ($lti_save_error) {
- if ($context eq 'course') {
- if (&Apache::lonnet::put('lti',$changes,$cdom,$cnum,1) eq 'ok') {
- my $hashid=$cdom.'_'.$cnum;
- &Apache::lonnet::devalidate_cache_new('courselti',$hashid);
- unless (($home eq 'no_host') || ($home eq '')) {
- if (grep(/^\Q$home\E$/,@ids)) {
- &Apache::lonnet::devalidate_cache_new('courseltienc',$hashid);
- }
- }
- } else {
- $lti_save_error = 1;
- }
- }
- unless ($lti_save_error) {
- foreach my $id (sort { $a <=> $b } %{$changes}) {
- if (ref($changes->{$id}) eq 'HASH') {
- my %values = %{$changes->{$id}};
- my %desc = &linkprot_names();
- my $display;
- foreach my $title ('name','lifetime','version','key','secret') {
- if (($title eq 'key') || ($title eq 'secret')) {
- if (ref($ltienc{$id}) eq 'HASH') {
- if (exists($ltienc{$id}{$title})) {
- if ($title eq 'secret') {
- my $length = length($ltienc{$id}{$title});
- $display .= $desc{$title}.': ['.&mt('not shown').'], ';
- } else {
- $display .= $desc{$title}.': '.$ltienc{$id}{$title}.', ';
- }
- }
- }
- } elsif ($title eq 'version') {
- if ($values{$title} eq 'LTI-1p0') {
- $display .= $desc{$title}.': 1.1, ';
- }
- } else {
- $display .= $desc{$title}.': '.$values{$title}.', ';
- }
- }
- if ($ltiauth) {
- if (($values{'requser'}) && ($values{'mapuser'} ne '')) {
- if ($values{'mapuser'} eq 'lis_person_contact_email_primary') {
- $display .= &mt('Source of username: Email address [_1]',
- '(lis_person_contact_email_primary)').', ';
- } elsif ($values{'mapuser'} eq 'lis_person_sourcedid') {
- $display .= &mt('Source of username: User ID [_1]',
- '(lis_person_sourcedid)').', ';
- } else {
- $display .= &mt('Source of username: [_1]',$values{'mapuser'}).', ';
- }
- if ($values{'notstudent'} eq 'auth') {
- $display .= &mt('Display LON-CAPA login page if no match').', ';
- } elsif ($values{'notstudent'} eq 'reject') {
- $display .= &mt('Discontinue launch if no match').', ';
- }
- }
- }
- $display =~ s/, $//;
- $output .= ''.&Apache::lonhtmlcommon::confirm_success(&mt('[_1] set to [_2]',''.$id.'',
- "'$display'")).'';
- } elsif (ref($oldlinkprot->{$id}) eq 'HASH') {
- my $oldname = $oldlinkprot->{$id}{'name'};
- $output .= ''.&Apache::lonhtmlcommon::confirm_success(&mt('Deleted setting for [_1]',''."$id ($oldname)".'')).'';
- }
- }
- } else {
- $lti_save_error = 1;
- }
- }
- unless ($lti_save_error) {
- foreach my $id (sort { $a <=> $b } keys(%{$changes})) {
- unless (ref($changes->{$id}) eq 'HASH') {
- push(@deletions,$id);
- }
- }
- if (@deletions) {
- if ($context eq 'course') {
- &Apache::lonnet::del('nohist_ltienc',\@deletions,$cdom,$cnum);
- }
- }
- }
- if ($lti_save_error) {
- $output .= ''.
- ''.
- &mt('An error occurred when saving changes to link protection settings, which remain unchanged.').
- ''.
- '';
- }
- return $output;
-}
-
sub update_env {
my ($cnum,$cdom,$chome,$need_env_update,$storehash) = @_;
my $count = 0;
@@ -2499,86 +1951,48 @@ function syllabusinfo() {
}
}
ENDSCRIPT
- my $menuitems_js;
+ my $grading_js;
unless ($noedit) {
- my $collections;
- my $next = 1;
- if (ref($settings) eq 'HASH') {
- if ($settings->{'menucollections'} ne '') {
- my @current;
- foreach my $item (split(/;/,$settings->{'menucollections'})) {
- my ($num) = split(/\%/,$item);
- if ($num =~ /^\d+$/) {
- push(@current,$num);
- }
- }
- $collections = join("','",sort { $a <=> $b } @current);
- if ($collections) {
- $collections = "'$collections'";
- }
- $next += $current[-1];
- }
- }
- my $deftext = &mt('Standard (all menus shown)');
- $menuitems_js = < 0) {
+ var setvis;
+ for (var i=0; i'."\n".
+ $syllabus_js."\n".$grading_js."\n".'//]]>'."\n".
''."\n".$stubrowse_js."\n";
return $jscript;
}
@@ -2673,68 +2086,6 @@ function getIndexByName(item) {
ENDSCRIPT
}
-sub linkprot_javascript {
- return <<"ENDSCRIPT";
-function toggleLinkProt(form,num,item) {
- var radioname = '';
- var currdivid = '';
- var newdivid = '';
- if ((document.getElementById('linkprot_divcurr'+item+'_'+num)) &&
- (document.getElementById('linkprot_divchg'+item+'_'+num))) {
- currdivid = document.getElementById('linkprot_divcurr'+item+'_'+num);
- newdivid = document.getElementById('linkprot_divchg'+item+'_'+num);
- radioname = form.elements['linkprot_change'+item+'_'+num];
- if (radioname) {
- if (radioname.length > 0) {
- var setvis;
- for (var i=0; i 0) {
- var setvis;
- for (var i=0; i 1) {
$mult = ' multiple="multiple"';
+ my $size;
if (@{$sections} > 3) {
- $mult .= ' size="4"';
+ $size = 4;
+ } else {
+ $size = 1 + scalar(@{$sections});
}
+ $mult .= ' size="'.$size.'"';
}
- $output = ' |