');
if ($parmlev eq 'full') {
my $sessionval=&Apache::lonnet::EXT('resource.'.$$part{$which}.
@@ -1535,15 +1576,40 @@ sub print_row {
# @param {hash reference} $display - parameter key -> full title for the parameter
# @param {boolean} $noeditgrp - true if no edit is allowed for group level parameters
# @param {boolean} $readonly -true if editing not allowed.
+# @param {boolean} $ismaplevel - true if level is for a map.
sub print_td {
- my ($r,$which,$defbg,$result,$outpar,$mprefix,$value,$typeoutpar,$display,$noeditgrp,$readonly)=@_;
- $r->print('
');
my $nolink = 0;
if ($readonly) {
$nolink = 1;
} else {
- if ($which == 14 || $which == 15 || $mprefix =~ /mapalias\&/) {
+ if ($which == 14 || $which == 15 || $mprefix =~ /mapalias\&$/) {
$nolink = 1;
} elsif (($env{'request.course.sec'} ne '') && ($which > 12)) {
$nolink = 1;
@@ -1559,19 +1625,15 @@ sub print_td {
unless ($which == 2) {
$nolink = 1;
}
- } elsif ($mprefix =~ /(encrypturl|hiddenresource)/) {
- if ($which == 16 || $which == 10 || $which == 6 || $which == 2) {
- $nolink = 1;
- }
}
}
if ($nolink) {
- $r->print(&valout($$outpar[$which],$$typeoutpar[$which],$mprefix));
-# FIXME: probably a good thing that mprefix is not used in valout, because it does not look like a parameter name !
+ my ($parmname)=((split(/\&/,$mprefix))[1]=~/\_([^\_]+)$/);
+ $r->print(&valout($currval,$currtype,$parmname));
} else {
- $r->print(&plink($$typeoutpar[$which],
- $$display{$value},$$outpar[$which],
- $mprefix."$which",'parmform.pres','psub'));
+ $r->print(&plink($currtype,
+ $$display{$value},$currval,
+ $mprefix.$currlevel,'parmform.pres','psub',$recursive));
}
$r->print('
'."\n");
}
@@ -3119,10 +3181,10 @@ ENDPARMSELSCRIPT
#
# This produces the cascading table output of parameters
#
- my $coursespan=$csec?10:6;
- my $userspan=4;
+ my $coursespan=$csec?8:5;
+ my $userspan=3;
if ($cgroup ne '') {
- $coursespan += 4;
+ $coursespan += 3;
}
$r->print(&Apache::loncommon::start_data_table());
@@ -3152,44 +3214,43 @@ ENDPARMSELSCRIPT
'femof' => 'from Enclosing Map or Folder',
'gen' => 'general',
'foremf' => 'for Enclosing Map or Folder',
- 'formfr' => 'for Map or Folder (recursive)',
'fr' => 'for Resource'
);
$r->print(<$lt{'pie'}
$lt{'csv'} ($csuname:$csudom)
-
$lt{'ic'}
$lt{'rl'}
+
$lt{'ic'}
$lt{'rl'}
$lt{'ic'}
ENDTABLETWO
if ($csec) {
- $r->print('
'.
+ $r->print('
'.
&mt("in Section")." $csec
");
}
if ($cgroup) {
- $r->print('
'.
+ $r->print('
'.
&mt("in Group")." $cgroup
");
}
$r->print(<
$lt{'aut'}
$lt{'type'}
$lt{'emof'}
$lt{'part'}
$lt{'pn'}
-
$lt{'gen'}
$lt{'formfr'}
$lt{'foremf'}
+
$lt{'gen'}
$lt{'foremf'}
$lt{'def'}
$lt{'femof'}
$lt{'fr'}
ENDTABLEHEADFOUR
if ($csec) {
- $r->print('
'.$lt{'gen'}.'
'.$lt{'formfr'}.'
'.$lt{'foremf'}.'
'.$lt{'fr'}.'
');
+ $r->print('
'.$lt{'gen'}.'
'.$lt{'foremf'}.'
'.$lt{'fr'}.'
');
}
if ($cgroup) {
- $r->print('
'.$lt{'gen'}.'
'.$lt{'formfr'}.'
'.&mt('foremf').'
'.$lt{'fr'}.'
');
+ $r->print('
'.$lt{'gen'}.'
'.$lt{'foremf'}.'
'.$lt{'fr'}.'
');
}
if ($uname) {
if (@usersgroups > 1) {
$r->print('
'
.&Apache::loncommon::end_data_table_header_row()
);
@@ -3537,7 +3597,7 @@ my $tableopen; # boolean, true if HTML t
# @param {boolean} $readonly - true if values cannot be edited (otherwise more columns are added)
# @returns {string}
sub tablestart {
- my ($readonly) = @_;
+ my ($readonly,$is_map) = @_;
if ($tableopen) {
return '';
} else {
@@ -3546,7 +3606,11 @@ sub tablestart {
if ($readonly) {
$output .= '
'.&mt('Current value').'
';
} else {
- $output .= '
'.&mt('Delete').'
'.&mt('Set to ...').'
';
+ $output .= '
'.&mt('Delete').'
'.
+ '
'.&mt('Set to ...').'
';
+ if ($is_map) {
+ $output .= '
'.&mt('Recursive?').'
';
+ }
}
$output .= '
';
return $output;
@@ -3625,6 +3689,8 @@ sub storedata {
my %newdata=();
undef %newdata;
my @deldata=();
+ my @delrec=();
+ my @delnonrec=();
undef @deldata;
my ($got_chostname,$chostname,$cmajor,$cminor);
my $now = time;
@@ -3632,11 +3698,27 @@ sub storedata {
if ($key =~ /^form\.([a-z]+)\_(.+)$/) {
my $cmd=$1;
my $thiskey=$2;
- next if ($cmd eq 'settext' || $cmd eq 'setipallow' || $cmd eq 'setipdeny');
+ my ($altkey,$recursive,$tkey,$tkeyrec,$tkeynonrec);
+ next if ($cmd eq 'rec' || $cmd eq 'settext' || $cmd eq 'setipallow' || $cmd eq 'setipdeny');
+ if ((($cmd eq 'set') || ($cmd eq 'datepointer') || ($cmd eq 'dateinterval') || ($cmd eq 'del')) &&
+ ($thiskey =~ /(?:sequence|page)\Q___(all)\E/)) {
+ unless ($thiskey =~ /(encrypturl|hiddenresource)$/) {
+ $altkey = $thiskey;
+ $altkey =~ s/\Q___(all)\E/___(rec)/;
+ if ($env{'form.rec_'.$thiskey}) {
+ $recursive = 1;
+ }
+ }
+ }
my ($tuname,$tudom)=&extractuser($thiskey);
- my $tkey=$thiskey;
if ($tuname) {
+ $tkey=$thiskey;
$tkey=~s/\.\[useropt\:$tuname\:$tudom\]\./\./;
+ if ($altkey) {
+ $tkeynonrec = $tkey;
+ $tkeyrec = $altkey;
+ $tkeyrec=~s/\.\[useropt\:$tuname\:$tudom\]\./\./;
+ }
}
if ($cmd eq 'set' || $cmd eq 'datepointer' || $cmd eq 'dateinterval') {
my ($data, $typeof, $text, $name, $valchk, $valmatch, $namematch);
@@ -3720,7 +3802,7 @@ sub storedata {
$typeof=$env{'form.typeof_'.$thiskey};
$text = &mt('Saved modified date for');
}
- if ($thiskey =~ m{\.(?:sequence|page)___\(rec\)}) {
+ if ($recursive) {
$namematch = 'maplevelrecurse';
}
if (($name ne '') || ($namematch ne '')) {
@@ -3767,54 +3849,195 @@ sub storedata {
next;
}
}
- if (defined($data) and $$olddata{$thiskey} ne $data) {
- if ($tuname) {
- if (&Apache::lonnet::put('resourcedata',{$tkey=>$data,
- $tkey.'.type' => $typeof},
- $tudom,$tuname) eq 'ok') {
- &log_parmset({$tkey=>$data,$tkey.'.type' => $typeof},0,$tuname,$tudom);
- $r->print(' '.$text.' '.
- &Apache::loncommon::plainname($tuname,$tudom));
+ my ($reconlychg,$haschange,$storekey);
+ if ($tuname) {
+ my $ustorekey;
+ if ($altkey) {
+ if ($recursive) {
+ if (exists($$olddata{$thiskey})) {
+ if ($$olddata{$thiskey} eq $data) {
+ $reconlychg = 1;
+ }
+ &Apache::lonnet::del('resourcedata',[$tkeynonrec,$tkeynonrec.'.type'],$tudom,$tuname);
+ }
+ if (exists($$olddata{$altkey})) {
+ if (defined($data) && $$olddata{$altkey} ne $data) {
+ $haschange = 1;
+ }
+ } elsif ((!$reconlychg) && ($data ne '')) {
+ $haschange = 1;
+ }
+ $ustorekey = $tkeyrec;
+ } else {
+ if (exists($$olddata{$altkey})) {
+ if ($$olddata{$altkey} eq $data) {
+ $reconlychg = 1;
+ }
+ &Apache::lonnet::del('resourcedata',[$tkeyrec,$tkeyrec.'.type'],$tudom,$tuname);
+ }
+ if (exists($$olddata{$thiskey})) {
+ if (defined($data) && $$olddata{$thiskey} ne $data) {
+ $haschange = 1;
+ }
+ } elsif ((!$reconlychg) && ($data ne '')) {
+ $haschange = 1;
+ }
+ $ustorekey = $tkeynonrec;
+ }
+ } else {
+ if (exists($$olddata{$tkey})) {
+ if (defined($data) && $$olddata{$tkey} ne $data) {
+ $haschange = 1;
+ }
+ $ustorekey = $tkey;
+ }
+ }
+ if ($haschange || $reconlychg) {
+ unless ($env{'form.del_'.$thiskey}) {
+ if (&Apache::lonnet::put('resourcedata',{$ustorekey=>$data,
+ $ustorekey.'.type' => $typeof},
+ $tudom,$tuname) eq 'ok') {
+ &log_parmset({$ustorekey=>$data,$ustorekey.'.type' => $typeof},0,$tuname,$tudom);
+ $r->print(' '.$text.' '.
+ &Apache::loncommon::plainname($tuname,$tudom));
+ } else {
+ $r->print('