@@ -1348,26 +1230,26 @@ ENDHEAD
sub print_row {
my ($r,$which,$part,$name,$symbp,$rid,$default,$defaulttype,$display,$defbgone,
- $defbgtwo,$defbgthree,$parmlev,$uname,$udom,$csec,$cgroup,$usersgroups,$noeditgrp,
- $readonly)=@_;
+ $defbgtwo,$defbgthree,$parmlev,$uname,$udom,$csec,$cgroup,$usersgroups,$noeditgrp)=@_;
my $cnum = $env{'course.'.$env{'request.course.id'}.'.num'};
my $cdom = $env{'course.'.$env{'request.course.id'}.'.domain'};
my $courseopt=&Apache::lonnet::get_courseresdata($cnum,$cdom);
-# get the values for the parameter in cascading order
-# empty levels will remain empty
+
+ # get the values for the parameter in cascading order
+ # empty levels will remain empty
my ($result,@outpar)=&parmval($$part{$which}.'.'.$$name{$which},
$rid,$$default{$which},$uname,$udom,$csec,$cgroup,$courseopt);
-# get the type for the parameters
-# problem: these may not be set for all levels
+ # get the type for the parameters
+ # problem: these may not be set for all levels
my ($typeresult,@typeoutpar)=&parmval($$part{$which}.'.'.
$$name{$which}.'.type',$rid,
$$defaulttype{$which},$uname,$udom,$csec,$cgroup,$courseopt);
-# cascade down manually
+ # cascade down manually
my $cascadetype=$$defaulttype{$which};
- for (my $i=14;$i>0;$i--) {
- if ($typeoutpar[$i]) {
+ for (my $i=18;$i>0;$i--) {
+ if ($typeoutpar[$i]) {
$cascadetype=$typeoutpar[$i];
- } else {
+ } else {
$typeoutpar[$i]=$cascadetype;
}
}
@@ -1381,94 +1263,48 @@ sub print_row {
}
my $automatic=&rulescache(($which=~/\_([^\_]+)$/)[0].'_triggers');
if ($automatic) {
- $parm.=' '.&mt('Automatically sets').' '.join(', ',split(/\:/,$automatic)).' ';
+ $parm.=' '.&mt('Automatically sets').' '.join(', ',split(/\:/,$automatic)).' ';
}
$r->print(''.$parm.' ');
my $thismarker=$which;
$thismarker=~s/^parameter\_//;
my $mprefix=$rid.'&'.$thismarker.'&';
- my ($parmname)=($thismarker=~/\_([^\_]+)$/);
- my $effective_parm = &valout($outpar[$result],$typeoutpar[$result]);
- my ($othergrp,$grp_parm,$controlgrp,$extra);
+ my $effective_parm = &valout($outpar[$result],$typeoutpar[$result],$thismarker);
+ my ($othergrp,$grp_parm,$controlgrp);
- if ($parmname eq 'deeplink') {
- my ($domltistr,$crsltistr);
- my %lti =
- &Apache::lonnet::get_domain_lti($env{'course.'.$env{'request.course.id'}.'.domain'},
- 'linkprot');
- if (keys(%lti)) {
- foreach my $item (sort { $a <=> $b } (keys(%lti))) {
- if (($item =~ /^\d+$/) && (ref($lti{$item}) eq 'HASH')) {
- $domltistr .= $item.':'.&escape(&escape($lti{$item}{'name'})).',';
- }
- }
- $domltistr =~ s/,$//;
- if ($domltistr) {
- $extra = 'ltid_'.$domltistr;
- }
- }
- my %courselti = &Apache::lonnet::get_course_lti($cnum,$cdom,'provider');
- if (keys(%courselti)) {
- foreach my $item (sort { $a <=> $b } keys(%courselti)) {
- if (($item =~ /^\d+$/) && (ref($courselti{$item}) eq 'HASH')) {
- $crsltistr .= $item.':'.&escape(&escape($courselti{$item}{'name'})).',';
- }
- }
- $crsltistr =~ s/,$//;
- if ($crsltistr) {
- if ($extra) {
- $extra .= '&';
- }
- $extra .= 'ltic_'.$crsltistr;
- }
- }
- if ($env{'course.'.$env{'request.course.id'}.'.menucollections'}) {
- my @colls;
- foreach my $item (split(/;/,$env{'course.'.$env{'request.course.id'}.'.menucollections'})) {
- my ($num,$value) = split(/\%/,$item);
- if ($num =~ /^\d+$/) {
- push(@colls,$num);
- }
- }
- if (@colls) {
- if ($extra) {
- $extra .= '&';
- }
- $extra .= 'menus_'.join(',',@colls);
- }
- }
- }
if ($parmlev eq 'general') {
-
if ($uname) {
- &print_td($r,3,$defbgone,$result,\@outpar,$mprefix,$_,\@typeoutpar,$display,'',$readonly,$extra);
+ &print_td($r,4,$defbgone,$result,\@outpar,$mprefix,$which,\@typeoutpar,$display);
} elsif ($cgroup) {
- &print_td($r,6,$defbgthree,$result,\@outpar,$mprefix,$_,\@typeoutpar,$display,$noeditgrp,$readonly,$extra);
+ &print_td($r,8,$defbgthree,$result,\@outpar,$mprefix,$which,\@typeoutpar,$display,$noeditgrp);
} elsif ($csec) {
- &print_td($r,9,$defbgtwo,$result,\@outpar,$mprefix,$_,\@typeoutpar,$display,'',$readonly,$extra);
+ &print_td($r,12,$defbgtwo,$result,\@outpar,$mprefix,$which,\@typeoutpar,$display);
} else {
- &print_td($r,14,$defbgone,$result,\@outpar,$mprefix,$_,\@typeoutpar,$display,'',$readonly,$extra);
+ &print_td($r,18,$defbgone,$result,\@outpar,$mprefix,$which,\@typeoutpar,$display);
}
} elsif ($parmlev eq 'map') {
-
if ($uname) {
- &print_td($r,2,$defbgone,$result,\@outpar,$mprefix,$_,\@typeoutpar,$display,'',$readonly,$extra);
+ &print_td($r,3,$defbgone,$result,\@outpar,$mprefix,$which,\@typeoutpar,$display);
+ &print_td($r,2,$defbgone,$result,\@outpar,$mprefix,$which,\@typeoutpar,$display);
} elsif ($cgroup) {
- &print_td($r,5,$defbgthree,$result,\@outpar,$mprefix,$_,\@typeoutpar,$display,$noeditgrp,$readonly,$extra);
+ &print_td($r,7,$defbgthree,$result,\@outpar,$mprefix,$which,\@typeoutpar,$display,$noeditgrp);
+ &print_td($r,6,$defbgthree,$result,\@outpar,$mprefix,$which,\@typeoutpar,$display,$noeditgrp);
} elsif ($csec) {
- &print_td($r,8,$defbgtwo,$result,\@outpar,$mprefix,$_,\@typeoutpar,$display,'',$readonly,$extra);
+ &print_td($r,11,$defbgtwo,$result,\@outpar,$mprefix,$which,\@typeoutpar,$display);
+ &print_td($r,10,$defbgtwo,$result,\@outpar,$mprefix,$which,\@typeoutpar,$display);
} else {
- &print_td($r,13,$defbgone,$result,\@outpar,$mprefix,$_,\@typeoutpar,$display,'',$readonly,$extra);
+ &print_td($r,17,$defbgone,$result,\@outpar,$mprefix,$which,\@typeoutpar,$display);
+ &print_td($r,16,$defbgone,$result,\@outpar,$mprefix,$which,\@typeoutpar,$display);
}
} else {
if ($uname) {
if (@{$usersgroups} > 1) {
my ($coursereply,$grp_parm,$controlgrp);
($coursereply,$othergrp,$grp_parm,$controlgrp) =
- &check_other_groups($$part{$which}.'.'.$$name{$which},
+ &print_usergroups($r,$$part{$which}.'.'.$$name{$which},
$rid,$cgroup,$defbgone,$usersgroups,$result,$courseopt);
- if ($coursereply && $result > 3) {
+ if ($coursereply && $result > 4) {
if (defined($controlgrp)) {
if ($cgroup ne $controlgrp) {
$effective_parm = $grp_parm;
@@ -1479,33 +1315,36 @@ sub print_row {
}
}
- &print_td($r,14,$defbgone,$result,\@outpar,$mprefix,$_,\@typeoutpar,$display,'',$readonly,$extra);
-
- &print_td($r,13,$defbgone,$result,\@outpar,$mprefix,$_,\@typeoutpar,$display,'',$readonly,$extra);
- &print_td($r,12,'#FFDDDD',$result,\@outpar,$mprefix,$_,\@typeoutpar,$display,'',$readonly,$extra);
- &print_td($r,11,'#FFDDDD',$result,\@outpar,$mprefix,$_,\@typeoutpar,$display,'',$readonly,$extra);
- &print_td($r,10,$defbgone,$result,\@outpar,$mprefix,$_,\@typeoutpar,$display,'',$readonly,$extra);
-
- if ($csec) {
- &print_td($r,9,$defbgtwo,$result,\@outpar,$mprefix,$_,\@typeoutpar,$display,'',$readonly,$extra);
- &print_td($r,8,$defbgtwo,$result,\@outpar,$mprefix,$_,\@typeoutpar,$display,'',$readonly,$extra);
- &print_td($r,7,$defbgtwo,$result,\@outpar,$mprefix,$_,\@typeoutpar,$display,'',$readonly,$extra);
- }
+ &print_td($r,18,$defbgone,$result,\@outpar,$mprefix,$which,\@typeoutpar,$display);
+ &print_td($r,17,$defbgone,$result,\@outpar,$mprefix,$which,\@typeoutpar,$display);
+ &print_td($r,16,$defbgone,$result,\@outpar,$mprefix,$which,\@typeoutpar,$display);
+ &print_td($r,15,'#FFDDDD',$result,\@outpar,$mprefix,$which,\@typeoutpar,$display);
+ &print_td($r,14,'#FFDDDD',$result,\@outpar,$mprefix,$which,\@typeoutpar,$display);
+ &print_td($r,13,$defbgone,$result,\@outpar,$mprefix,$which,\@typeoutpar,$display);
+
+ if ($csec) {
+ &print_td($r,12,$defbgtwo,$result,\@outpar,$mprefix,$which,\@typeoutpar,$display);
+ &print_td($r,11,$defbgtwo,$result,\@outpar,$mprefix,$which,\@typeoutpar,$display);
+ &print_td($r,10,$defbgtwo,$result,\@outpar,$mprefix,$which,\@typeoutpar,$display);
+ &print_td($r,9,$defbgtwo,$result,\@outpar,$mprefix,$which,\@typeoutpar,$display);
+ }
if ($cgroup) {
- &print_td($r,6,$defbgthree,$result,\@outpar,$mprefix,$_,\@typeoutpar,$display,$noeditgrp,$readonly,$extra);
- &print_td($r,5,$defbgthree,$result,\@outpar,$mprefix,$_,\@typeoutpar,$display,$noeditgrp,$readonly,$extra);
- &print_td($r,4,$defbgthree,$result,\@outpar,$mprefix,$_,\@typeoutpar,$display,$noeditgrp,$readonly,$extra);
+ &print_td($r,8,$defbgthree,$result,\@outpar,$mprefix,$which,\@typeoutpar,$display,$noeditgrp);
+ &print_td($r,7,$defbgthree,$result,\@outpar,$mprefix,$which,\@typeoutpar,$display,$noeditgrp);
+ &print_td($r,6,$defbgthree,$result,\@outpar,$mprefix,$which,\@typeoutpar,$display,$noeditgrp);
+ &print_td($r,5,$defbgthree,$result,\@outpar,$mprefix,$which,\@typeoutpar,$display,$noeditgrp);
}
- if ($uname) {
+ if ($uname) {
if ($othergrp) {
$r->print($othergrp);
}
- &print_td($r,3,$defbgone,$result,\@outpar,$mprefix,$_,\@typeoutpar,$display,'',$readonly,$extra);
- &print_td($r,2,$defbgone,$result,\@outpar,$mprefix,$_,\@typeoutpar,$display,'',$readonly,$extra);
- &print_td($r,1,$defbgone,$result,\@outpar,$mprefix,$_,\@typeoutpar,$display,'',$readonly,$extra);
- }
+ &print_td($r,4,$defbgone,$result,\@outpar,$mprefix,$which,\@typeoutpar,$display);
+ &print_td($r,3,$defbgone,$result,\@outpar,$mprefix,$which,\@typeoutpar,$display);
+ &print_td($r,2,$defbgone,$result,\@outpar,$mprefix,$which,\@typeoutpar,$display);
+ &print_td($r,1,$defbgone,$result,\@outpar,$mprefix,$which,\@typeoutpar,$display);
+ }
} # end of $parmlev if/else
$r->print(''.$effective_parm.' ');
@@ -1514,9 +1353,11 @@ sub print_row {
my $sessionval=&Apache::lonnet::EXT('resource.'.$$part{$which}.
'.'.$$name{$which},$$symbp{$rid});
my $sessionvaltype=$typeoutpar[$result];
- if (!defined($sessionvaltype)) { $sessionvaltype=$$defaulttype{$which}; }
+ if (!defined($sessionvaltype)) {
+ $sessionvaltype=$$defaulttype{$which};
+ }
$r->print(''.
- &valout($sessionval,$sessionvaltype).' '.
+ &valout($sessionval,$sessionvaltype,$$name{$which}).' '.
' ');
}
$r->print('');
@@ -1524,57 +1365,57 @@ sub print_row {
}
sub print_td {
- my ($r,$which,$defbg,$result,$outpar,$mprefix,$value,$typeoutpar,$display,$noeditgrp,$readonly,$extra)=@_;
+ my ($r,$which,$defbg,$result,$outpar,$mprefix,$value,$typeoutpar,$display,$noeditgrp)=@_;
$r->print('');
my $nolink = 0;
- if ($readonly) {
+ if ($which == 14 || $which == 15) {
$nolink = 1;
- } else {
- if ($which == 11 || $which == 12) {
+ } elsif (($env{'request.course.sec'} ne '') && ($which > 12)) {
+ $nolink = 1;
+ } elsif ($which == 5 || $which == 6 || $which == 7 || $which == 8) {
+ if ($noeditgrp) {
$nolink = 1;
- } elsif (($env{'request.course.sec'} ne '') && ($which > 9)) {
+ }
+ } elsif ($mprefix =~ /availablestudent\&$/) {
+ if ($which > 4) {
$nolink = 1;
- } elsif ($which == 4 || $which == 5 || $which == 6) {
- if ($noeditgrp) {
- $nolink = 1;
- }
- } elsif ($mprefix =~ /availablestudent\&$/) {
+ }
+ } elsif ($mprefix =~ /examcode\&$/) {
+ unless ($which == 2) {
$nolink = 1;
- } elsif ($mprefix =~ /examcode\&$/) {
- unless ($which == 2) {
- $nolink = 1;
- }
}
}
if ($nolink) {
- $r->print(&valout($$outpar[$which],$$typeoutpar[$which]));
+ $r->print(&valout($$outpar[$which],$$typeoutpar[$which],$mprefix));
} else {
$r->print(&plink($$typeoutpar[$which],
$$display{$value},$$outpar[$which],
- $mprefix."$which",'parmform.pres','psub',$extra));
+ $mprefix."$which",'parmform.pres','psub'));
}
$r->print(' '."\n");
}
-sub check_other_groups {
- my ($what,$rid,$cgroup,$defbg,$usersgroups,$result,$courseopt) = @_;
+sub print_usergroups {
+ my ($r,$what,$rid,$cgroup,$defbg,$usersgroups,$result,$courseopt) = @_;
my $courseid = $env{'request.course.id'};
my $output;
my $symb = &symbcache($rid);
my $symbparm=$symb.'.'.$what;
my $map=(&Apache::lonnet::decode_symb($symb))[0];
+ my $recurseparm=$map.'___(rec).'.$what;
my $mapparm=$map.'___(all).'.$what;
my ($coursereply,$resultitem,$resultgroup,$resultlevel,$resulttype) =
- &parm_control_group($courseid,$usersgroups,$symbparm,$mapparm,$what,
- $courseopt);
+ &parm_control_group($courseid,$usersgroups,$symbparm,$mapparm,
+ $recurseparm,$what,$courseopt);
my $bgcolor = $defbg;
my $grp_parm;
if (($coursereply) && ($cgroup ne $resultgroup)) {
if ($result > 3) {
$bgcolor = '#AAFFAA';
+ $grp_parm = &valout($coursereply,$resulttype,$what);
}
- $grp_parm = &valout($coursereply,$resulttype);
+ $grp_parm = &valout($coursereply,$resulttype,$what);
$output = '';
if ($resultgroup && $resultlevel) {
$output .= ''.$resultgroup.' ('.$resultlevel.'): '.$grp_parm;
@@ -1589,11 +1430,11 @@ sub check_other_groups {
}
sub parm_control_group {
- my ($courseid,$usersgroups,$symbparm,$mapparm,$what,$courseopt) = @_;
+ my ($courseid,$usersgroups,$symbparm,$mapparm,$recurseparm,$what,$courseopt) = @_;
my ($coursereply,$resultitem,$resultgroup,$resultlevel,$resulttype);
my $grpfound = 0;
- my @levels = ($symbparm,$mapparm,$what);
- my @levelnames = ('resource','map/folder','general');
+ my @levels = ($symbparm,$mapparm,$recurseparm,$what);
+ my @levelnames = ('resource','map/folder','recursive','general');
foreach my $group (@{$usersgroups}) {
if ($grpfound) { last; }
for (my $i=0; $i<@levels; $i++) {
@@ -1640,27 +1481,23 @@ sub extractResourceInformation {
my $srcf=$resource->src();
$srcf=~/\.(\w+)$/;
$$typep{$id}=$1;
- my $toolsymb;
- if ($srcf =~ /ext\.tool$/) {
- $toolsymb = $resource->symb();
- }
$$keyp{$id}='';
$$uris{$id}=$srcf;
- foreach my $key (split(/\,/,&Apache::lonnet::metadata($srcf,'allpossiblekeys',$toolsymb))) {
+ foreach my $key (split(/\,/,&Apache::lonnet::metadata($srcf,'allpossiblekeys'))) {
next if ($key!~/^parameter_/);
# Hidden parameters
- next if (&Apache::lonnet::metadata($srcf,$key.'.hidden',$toolsymb) eq 'parm');
+ next if (&Apache::lonnet::metadata($srcf,$key.'.hidden') eq 'parm');
#
# allparms is a hash of parameter names
#
- my $name=&Apache::lonnet::metadata($srcf,$key.'.name',$toolsymb);
+ my $name=&Apache::lonnet::metadata($srcf,$key.'.name');
if (!exists($$allparms{$name}) || $$allparms{$name} =~ m/^\s*$/ ) {
my ($display,$parmdis);
$display = &standard_parameter_names($name);
if ($display eq '') {
- $display= &Apache::lonnet::metadata($srcf,$key.'.display',$toolsymb);
+ $display= &Apache::lonnet::metadata($srcf,$key.'.display');
$parmdis = $display;
$parmdis =~ s/\s*\[Part.*$//g;
} else {
@@ -1669,14 +1506,14 @@ sub extractResourceInformation {
$$allparms{$name}=$parmdis;
if (ref($defkeytype)) {
$$defkeytype{$name}=
- &Apache::lonnet::metadata($srcf,$key.'.type',$toolsymb);
+ &Apache::lonnet::metadata($srcf,$key.'.type');
}
}
#
# allparts is a hash of all parts
#
- my $part= &Apache::lonnet::metadata($srcf,$key.'.part',$toolsymb);
+ my $part= &Apache::lonnet::metadata($srcf,$key.'.part');
$$allparts{$part} = &mt('Part: [_1]',$part);
#
# Remember all keys going with this resource
@@ -1707,7 +1544,9 @@ sub extractResourceInformation {
$$maptitles{$mapid}=&Apache::lonnet::gettitle($$mapp{$id});
}
$$maptitles{$$mapp{$id}}=$$maptitles{$mapid};
- $$symbp{$mapid}=$$mapp{$id}.'___(all)';
+ $$symbp{$mapid}=$$mapp{$id}.'___(all)'; # Added in rev. 1.57, but seems not to be used.
+ # Lines 1038 and 1114 which use $symbp{$mapid}
+ # are commented out in rev. 1.57
} else {
$$mapp{$id} = $$mapp{$mapid};
}
@@ -1722,21 +1561,14 @@ sub isdateparm {
return (($type=~/^date/) && (!($type eq 'date_interval')));
}
-# Determine if parameter type is specialized string type (i.e.,
-# not just string or string_yesno.
-
-sub is_specialstring {
- my $type=shift;
- return (($type=~/^string_/) && ($type ne 'string_yesno'));
-}
-
#
# parmmenu displays a list of the selected parameters.
# It also offers a link to show/hide the complete parameter list
# from which you can select all desired parameters.
#
sub parmmenu {
- my ($r)=@_;
+ my ($r,$allparms,$pscat,$keyorder)=@_;
+ my $tempkey;
$r->print(<
// print(' ');
- &shortCuts($r);
+ &shortCuts($r,$allparms,$pscat,$keyorder);
$r->print(' ');
}
# return a hash
@@ -1843,8 +1675,8 @@ sub lookUpTableParameter {
'contentopen' => 'time_settings',
'contentclose' => 'time_settings',
'discussend' => 'time_settings',
- 'printstartdate' => 'time_settings',
- 'printenddate' => 'time_settings',
+ 'printstartdate' => 'time_settings',
+ 'printenddate' => 'time_settings',
'weight' => 'grading',
'handgrade' => 'grading',
'maxtries' => 'tries',
@@ -1864,7 +1696,6 @@ sub lookUpTableParameter {
'buttonshide' => 'hiding',
'turnoffeditor' => 'hiding',
'encrypturl' => 'hiding',
- 'deeplink' => 'hiding',
'randomorder' => 'high_level_randomization',
'randompick' => 'high_level_randomization',
'available' => 'slots',
@@ -1880,9 +1711,8 @@ sub lookUpTableParameter {
'lenient' => 'grading',
'retrypartial' => 'tries',
'discussvote' => 'misc',
- 'texdisplay' => 'misc',
- 'examcode' => 'high_level_randomization',
- );
+ 'examcode' => 'high_level_randomization',
+ );
}
sub whatIsMyCategory {
@@ -1933,9 +1763,7 @@ sub category_order {
sub parmboxes {
my ($r,$allparms,$pscat,$keyorder)=@_;
- my $tempkey;
- my $tempparameter;
- my %categories = &categories;
+ my %categories = &categories();
my %category_order = &category_order();
my %categoryList = (
'time_settings' => [],
@@ -1950,41 +1778,35 @@ sub parmboxes {
'misc' => [],
);
- foreach $tempparameter (keys %$allparms) {
+ foreach my $tempparameter (keys(%$allparms)) {
&whatIsMyCategory($tempparameter, \%categoryList);
}
#part to print the parm-list
- $r->print(''."\n");
-
- #Print parameters
- for my $key (sort { $category_order{$a} <=> $category_order{$b} } keys %categoryList) {
- next if(@{$categoryList{$key}} == 0);
+ foreach my $key (sort { $category_order{$a} <=> $category_order{$b} } keys(%categoryList)) {
+ next if (@{$categoryList{$key}} == 0);
+ next if ($key eq '');
$r->print('
'
- .'
'
- .&mt($categories{$key})
- .' '."\n");
- foreach $tempkey (&keysindisplayorderCategory($categoryList{$key},$keyorder)) {
- next if ($tempkey eq '');
+ .''.&mt($categories{$key}).' '."\n");
+ foreach my $tempkey (&keysindisplayorderCategory($categoryList{$key},$keyorder)) {
$r->print(''
.' print(' checked="checked"');
+ $r->print( ' checked="checked"');
}
$r->print(' />'.($$allparms{$tempkey}=~/\S/ ? $$allparms{$tempkey}
: $tempkey)
.' '."\n");
}
- $r->print("\n");
+ $r->print('
');
}
-
- $r->print("\n");
+ $r->print("\n");
}
#
# This function offers some links on the parameter section to get with one click a group a parameters
#
sub shortCuts {
- my ($r)=@_;
+ my ($r,$allparms,$pscat,$keyorder)=@_;
# Parameter Selection
$r->print(
@@ -2029,15 +1851,15 @@ sub partmenu {
my %temphash=();
foreach (@{$psprt}) { $temphash{$_}=1; }
foreach my $tempkey (sort {
- if ($a==$b) { return ($a cmp $b) } else { return ($a <=> $b); }
- } keys(%{$allparts})) {
- unless ($tempkey =~ /\./) {
- $r->print('print(' selected="selected"');
+ if ($a==$b) { return ($a cmp $b) } else { return ($a <=> $b); }
+ } keys(%{$allparts})) {
+ unless ($tempkey =~ /\./) {
+ $r->print(' print(' selected="selected"');
+ }
+ $r->print('>'.$$allparts{$tempkey}.' ');
}
- $r->print('>'.$$allparts{$tempkey}.'');
- }
}
$r->print('');
}
@@ -2045,37 +1867,9 @@ sub partmenu {
sub usermenu {
my ($r,$uname,$id,$udom,$csec,$cgroup,$parmlev,$usersgroups,$pssymb)=@_;
my $chooseopt=&Apache::loncommon::select_dom_form($udom,'udom').' '.
- &Apache::loncommon::selectstudent_link('parmform','uname','udom','condition').
- &Apache::lonhtmlcommon::scripttag(< '.
- $stuonly.' '.
- ' '.
- &mt('any role').' ';
my $sections='';
my %sectionhash = &Apache::loncommon::get_sections();
@@ -2084,7 +1878,7 @@ ENDJS
if (($pssymb) || &Apache::lonnet::allowed('mdg',$env{'request.course.id'})) {
%grouphash = &Apache::longroup::coursegroups();
} elsif ($env{'request.course.groups'} ne '') {
- map { $grouphash{$_} = 1; } split(/:/,$env{'request.course.groups'});
+ map { $grouphash{$_} = 1; } split(/,/,$env{'request.course.groups'});
}
my $g_s_header='';
@@ -2102,7 +1896,7 @@ ENDJS
$sections .= qq| onchange="group_or_section('csec')" |;
}
$sections .= '>';
- foreach my $section ('',sort keys %sectionhash) {
+ foreach my $section ('',sort(keys(%sectionhash))) {
$sections.=''.$section.
' ';
@@ -2129,7 +1923,7 @@ function group_or_section(caller) {
// ]]>
|;
- } elsif ($currsec eq '') {
+ } else {
$sections .= qq|
@@ -2938,7 +2667,7 @@ ENDPARMSELSCRIPT
$r->print(&Apache::lonhtmlcommon::start_pick_box(undef,'parmlevel'));
&levelmenu($r,\%alllevs,$parmlev);
$r->print(&Apache::lonhtmlcommon::row_closure());
- &mapmenu($r,\%allmaps,$pschp,\%maptitles,\%symbp,$parmlev);
+ &mapmenu($r,\%allmaps,$pschp,\%maptitles, \%symbp);
$r->print(&Apache::lonhtmlcommon::row_closure());
$r->print(&Apache::lonhtmlcommon::row_title(&mt('Select Parts to View')));
&partmenu($r,\%allparts,\@psprt);
@@ -2947,7 +2676,7 @@ ENDPARMSELSCRIPT
# Step 2
$r->print(&Apache::lonhtmlcommon::topic_bar(2,&mt('Parameter Specification'),'parmstep2'));
- &displaymenu($r,\%allparms,\@pscat,\%keyorder,'parmmenuscroll');
+ &displaymenu($r,\%allparms,\@pscat,\@psprt,\%keyorder,'parmmenuscroll');
# Step 3
$r->print(&Apache::lonhtmlcommon::topic_bar(3,&mt('User Specification (optional)'),'parmstep3'));
@@ -2975,7 +2704,6 @@ ENDPARMSELSCRIPT
.''
.'');
} else {
- $r->print();
# parameter screen for a single resource.
my ($map,$iid,$resource)=&Apache::lonnet::decode_symb($pssymb);
my $title = &Apache::lonnet::gettitle($pssymb);
@@ -2985,12 +2713,6 @@ ENDPARMSELSCRIPT
' ');
$r->print(&Apache::lonhtmlcommon::topic_bar('',&mt('Additional Display Specification (optional)')));
$r->print(&Apache::lonhtmlcommon::start_pick_box());
- $r->print(&Apache::lonhtmlcommon::row_title(&mt('Select Parts to View')).
- ''.
- ' '.
- &mt('Show all parts').
- ' ');
&usermenu($r,$uname,$id,$udom,$csec,$cgroup,$parmlev,\@usersgroups,$pssymb);
$r->print(&Apache::lonhtmlcommon::row_closure(1));
$r->print(&Apache::lonhtmlcommon::end_pick_box());
@@ -3015,41 +2737,37 @@ ENDPARMSELSCRIPT
@pscat = @temp_pscat;
+
if (($env{'form.prevvisit'}) || ($pschp) || ($pssymb)) {
# ----------------------------------------------------------------- Start Table
my @catmarker=map { tr|.|_|; 'parameter_'.$_; } @pscat;
my $csuname=$env{'user.name'};
my $csudom=$env{'user.domain'};
- my $readonly = 1;
- if ($parm_permission->{'edit'}) {
- undef($readonly);
- }
- $r->print('');
if ($parmlev eq 'full') {
#
# This produces the cascading table output of parameters
#
- my $coursespan=$csec?8:5;
- my $userspan=3;
- if ($cgroup ne '') {
- $coursespan += 3;
- }
+ my $coursespan=$csec?10:6;
+ my $userspan=4;
+ if ($cgroup ne '') {
+ $coursespan += 4;
+ }
- $r->print(&Apache::loncommon::start_data_table());
-#
-# This produces the headers
-#
- $r->print('
');
- $r->print(''.&mt('Any User').' ');
- if ($uname) {
+ $r->print(&Apache::loncommon::start_data_table());
+ #
+ # This produces the headers
+ #
+ $r->print(' ');
+ $r->print(''.&mt('Any User').' ');
+ if ($uname) {
if (@usersgroups > 1) {
- $userspan ++;
- }
- $r->print('');
- $r->print(&mt("User")." $uname ".&mt('at Domain')." $udom ");
- }
- my %lt=&Apache::lonlocal::texthash(
+ $userspan ++;
+ }
+ $r->print('');
+ $r->print(&mt('User [_1] at Domain [_2]',"'".$uname."'","'".$udom."'").' ');
+ }
+ my %lt=&Apache::lonlocal::texthash(
'pie' => "Parameter in Effect",
'csv' => "Current Session Value",
'rl' => "Resource Level",
@@ -3063,62 +2781,62 @@ 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(<print(<$lt{'pie'}
$lt{'csv'} ($csuname:$csudom)
- $lt{'ic'} $lt{'rl'}
+$lt{'ic'} $lt{'rl'}
$lt{'ic'}
ENDTABLETWO
- if ($csec) {
- $r->print(''.
- &mt("in Section")." $csec ");
- }
- if ($cgroup) {
- $r->print(''.
+ if ($csec) {
+ $r->print(' '.
+ &mt("in Section")." $csec ");
+ }
+ if ($cgroup) {
+ $r->print(''.
&mt("in Group")." $cgroup ");
- }
- $r->print(<print(<$lt{'aut'} $lt{'type'}
$lt{'emof'} $lt{'part'} $lt{'pn'}
-$lt{'gen'} $lt{'foremf'}
+$lt{'gen'} $lt{'formfr'} $lt{'foremf'}
$lt{'def'} $lt{'femof'} $lt{'fr'}
ENDTABLEHEADFOUR
- if ($csec) {
- $r->print(''.&mt('general').' '.&mt('for Enclosing Map or Folder').' '.&mt('for Resource').' ');
- }
-
- if ($cgroup) {
- $r->print(''.&mt('general').' '.&mt('for Enclosing Map or Folder').' '.&mt('for Resource').' ');
- }
+ if ($csec) {
+ $r->print(''.$lt{'gen'}.' '.$lt{'formfr'}.' '.$lt{'foremf'}.' '.$lt{'fr'}.' ');
+ }
- if ($uname) {
+ if ($cgroup) {
+ $r->print(''.$lt{'gen'}.' '.$lt{'formfr'}.' '.&mt('foremf').' '.$lt{'fr'}.' ');
+ }
+
+ if ($uname) {
if (@usersgroups > 1) {
$r->print(''.&mt('Control by other group?').' ');
- }
- $r->print(''.&mt('general').' '.&mt('for Enclosing Map or Folder').' '.&mt('for Resource').' ');
- }
+ }
+ $r->print(''.$lt{'gen'}.' '.$lt{'formfr'}.' '.$lt{'foremf'}.' '.$lt{'fr'}.' ');
+ }
- $r->print(' ');
+ $r->print(' ');
#
# Done with the headers
#
- my $defbgone='';
- my $defbgtwo='';
- my $defbgthree = '';
+ my $defbgone='';
+ my $defbgtwo='';
+ my $defbgthree = '';
- foreach (@ids) {
+ foreach my $rid (@ids) {
- my $rid=$_;
my ($inmapid)=($rid=~/\.(\d+)$/);
if ((!$pssymb &&
- (($pschp eq 'all') || ($allmaps{$pschp} eq $mapp{$rid})))
- ||
- ($pssymb && $pssymb eq $symbp{$rid})) {
+ (($pschp eq 'all') || ($allmaps{$pschp} eq $mapp{$rid})))
+ ||
+ ($pssymb && $pssymb eq $symbp{$rid})) {
# ------------------------------------------------------ Entry for one resource
if ($defbgone eq '#E0E099') {
$defbgone='#E0E0DD';
@@ -3144,43 +2862,38 @@ ENDTABLEHEADFOUR
my %type= ();
my %default=();
my $uri=&Apache::lonnet::declutter($uris{$rid});
- my $toolsymb;
- if ($uri =~ /ext\.tool$/) {
- $toolsymb = $symbp{$rid};
- }
my $filter=$env{'form.filter'};
- foreach (&keysplit($keyp{$rid})) {
- my $tempkeyp = $_;
+ foreach my $tempkeyp (&keysplit($keyp{$rid})) {
if (grep $_ eq $tempkeyp, @catmarker) {
- my $parmname=&Apache::lonnet::metadata($uri,$_.'.name',$toolsymb);
-# We may only want certain parameters listed
- if ($filter) {
- unless ($filter=~/\Q$parmname\E/) { next; }
- }
- $name{$_}=$parmname;
- $part{$_}=&Apache::lonnet::metadata($uri,$_.'.part',$toolsymb);
-
- my $parmdis=&Apache::lonnet::metadata($uri,$_.'.display',$toolsymb);
- if ($allparms{$name{$_}} ne '') {
- my $identifier;
- if ($parmdis =~ /(\s*\[Part.*)$/) {
- $identifier = $1;
- }
- $display{$_} = $allparms{$name{$_}}.$identifier;
- } else {
- $display{$_} = $parmdis;
- }
- unless ($display{$_}) { $display{$_}=''; }
- $display{$_}.=' ('.$name{$_}.')';
- $default{$_}=&Apache::lonnet::metadata($uri,$_,$toolsymb);
- $type{$_}=&Apache::lonnet::metadata($uri,$_.'.type',$toolsymb);
- $thistitle=&Apache::lonnet::metadata($uri,$_.'.title',$toolsymb);
+ my $parmname=&Apache::lonnet::metadata($uri,$tempkeyp.'.name');
+ # We may only want certain parameters listed
+ if ($filter) {
+ unless ($filter=~/\Q$parmname\E/) { next; }
+ }
+ $name{$tempkeyp}=$parmname;
+ $part{$tempkeyp}=&Apache::lonnet::metadata($uri,$tempkeyp.'.part');
+
+ my $parmdis=&Apache::lonnet::metadata($uri,$tempkeyp.'.display');
+ if ($allparms{$name{$tempkeyp}} ne '') {
+ my $identifier;
+ if ($parmdis =~ /(\s*\[Part.*)$/) {
+ $identifier = $1;
+ }
+ $display{$tempkeyp} = $allparms{$name{$tempkeyp}}.$identifier;
+ } else {
+ $display{$tempkeyp} = $parmdis;
+ }
+ unless ($display{$tempkeyp}) { $display{$tempkeyp}=''; }
+ $display{$tempkeyp}.=' ('.$name{$tempkeyp}.')';
+ $default{$tempkeyp}=&Apache::lonnet::metadata($uri,$tempkeyp);
+ $type{$tempkeyp}=&Apache::lonnet::metadata($uri,$tempkeyp.'.type');
+ $thistitle=&Apache::lonnet::metadata($uri,$tempkeyp.'.title');
}
}
- my $totalparms=scalar keys %name;
+ my $totalparms=scalar(keys(%name));
if ($totalparms>0) {
- my $firstrow=1;
+ my $firstrow=1;
my $title=&Apache::lonnet::gettitle($symbp{$rid});
$r->print('
'.$maptitles{$mapp{$rid}}.' ');
- foreach (&keysinorder_bytype(\%name,\%keyorder)) {
-
+ foreach my $item (&keysinorder_bytype(\%name,\%keyorder)) {
unless ($firstrow) {
$r->print('');
} else {
undef $firstrow;
}
- &print_row($r,$_,\%part,\%name,\%symbp,$rid,\%default,
+ &print_row($r,$item,\%part,\%name,\%symbp,$rid,\%default,
\%type,\%display,$defbgone,$defbgtwo,
$defbgthree,$parmlev,$uname,$udom,$csec,
- $cgroup,\@usersgroups,$noeditgrp,$readonly);
+ $cgroup,\@usersgroups,$noeditgrp);
}
}
}
@@ -3238,7 +2950,7 @@ ENDTABLEHEADFOUR
#-------------------------------------------- for each map, gather information
my $mapid;
- foreach $mapid (sort { $a <=> $b } keys(%maplist)) {
+ foreach $mapid (sort {$maplist{$a} cmp $maplist{$b}} keys(%maplist)) {
my $maptitle = $maplist{$mapid};
#----------------------- loop through ids and get all parameter types for map
@@ -3252,18 +2964,14 @@ ENDTABLEHEADFOUR
# $r->print("Catmarker: @catmarker \n");
- foreach (@ids) {
- ($map)=(/([\d]*?)\./);
- my $rid = $_;
+ foreach my $id (@ids) {
+ ($map)=($id =~ /([\d]*?)\./);
+ my $rid = $id;
# $r->print("$mapid:$map: $rid \n");
- if ($map eq $mapid) {
+ if ($map eq $mapid) {
my $uri=&Apache::lonnet::declutter($uris{$rid});
- my $toolsymb;
- if ($uri =~ /ext\.tool$/) {
- $toolsymb = $symbp{$rid};
- }
# $r->print("Keys: $keyp{$rid} \n");
#--------------------------------------------------------------------
@@ -3273,15 +2981,14 @@ ENDTABLEHEADFOUR
# When storing information, store as part 0
# When requesting information, request from full part
#-------------------------------------------------------------------
- foreach (&keysplit($keyp{$rid})) {
- my $tempkeyp = $_;
- my $fullkeyp = $tempkeyp;
- $tempkeyp =~ s/_\w+_/_0_/;
+ foreach my $fullkeyp (&keysplit($keyp{$rid})) {
+ my $tempkeyp = $fullkeyp;
+ $tempkeyp =~ s/_\w+_/_0_/;
- if ((grep $_ eq $fullkeyp, @catmarker) &&(!$name{$tempkeyp})) {
+ if ((grep $_ eq $fullkeyp, @catmarker) &&(!$name{$tempkeyp})) {
$part{$tempkeyp}="0";
- $name{$tempkeyp}=&Apache::lonnet::metadata($uri,$fullkeyp.'.name',$toolsymb);
- my $parmdis=&Apache::lonnet::metadata($uri,$fullkeyp.'.display',$toolsymb);
+ $name{$tempkeyp}=&Apache::lonnet::metadata($uri,$fullkeyp.'.name');
+ my $parmdis=&Apache::lonnet::metadata($uri,$fullkeyp.'.display');
if ($allparms{$name{$tempkeyp}} ne '') {
my $identifier;
if ($parmdis =~ /(\s*\[Part.*)$/) {
@@ -3294,11 +3001,11 @@ ENDTABLEHEADFOUR
unless ($display{$tempkeyp}) { $display{$tempkeyp}=''; }
$display{$tempkeyp}.=' ('.$name{$tempkeyp}.')';
$display{$tempkeyp} =~ s/_\w+_/_0_/;
- $default{$tempkeyp}=&Apache::lonnet::metadata($uri,$fullkeyp,$toolsymb);
- $type{$tempkeyp}=&Apache::lonnet::metadata($uri,$fullkeyp.'.type',$toolsymb);
+ $default{$tempkeyp}=&Apache::lonnet::metadata($uri,$fullkeyp);
+ $type{$tempkeyp}=&Apache::lonnet::metadata($uri,$fullkeyp.'.type');
}
} # end loop through keys
- }
+ }
} # end loop through ids
#---------------------------------------------------- print header information
@@ -3332,17 +3039,17 @@ ENDTABLEHEADFOUR
$r->print(''.&Apache::loncommon::start_data_table()
.&Apache::loncommon::start_data_table_header_row()
.'
'.&mt('Parameter Name').' '
- .''.&mt('Default Value').' '
+ .''.&mt('Recursive Value').' '
+ .''.&mt('Non-Recursive Value').' '
.''.&mt('Parameter in Effect').' '
.&Apache::loncommon::end_data_table_header_row()
);
- foreach (&keysinorder(\%name,\%keyorder)) {
+ foreach my $item (&keysinorder(\%name,\%keyorder)) {
$r->print(&Apache::loncommon::start_data_table_row());
- &print_row($r,$_,\%part,\%name,\%symbp,$mapid,\%default,
+ &print_row($r,$item,\%part,\%name,\%symbp,$mapid,\%default,
\%type,\%display,$defbgone,$defbgtwo,$defbgthree,
- $parmlev,$uname,$udom,$csec,$cgroup,'',$noeditgrp,
- $readonly);
+ $parmlev,$uname,$udom,$csec,$cgroup,'',$noeditgrp);
}
$r->print(&Apache::loncommon::end_data_table().''
.''
@@ -3365,14 +3072,10 @@ ENDTABLEHEADFOUR
my %type = ();
my %default = ();
- foreach (@ids) {
- my $rid = $_;
+ foreach $id (@ids) {
+ my $rid = $id;
my $uri=&Apache::lonnet::declutter($uris{$rid});
- my $toolsymb;
- if ($uri =~ /ext\.tool$/) {
- $toolsymb = $symbp{$rid};
- }
#--------------------------------------------------------------------
# @catmarker contains list of all possible parameters including part #s
@@ -3381,14 +3084,13 @@ ENDTABLEHEADFOUR
# When storing information, store as part 0
# When requesting information, request from full part
#-------------------------------------------------------------------
- foreach (&keysplit($keyp{$rid})) {
- my $tempkeyp = $_;
- my $fullkeyp = $tempkeyp;
- $tempkeyp =~ s/_\w+_/_0_/;
- if ((grep $_ eq $fullkeyp, @catmarker) &&(!$name{$tempkeyp})) {
+ foreach my $fullkeyp (&keysplit($keyp{$rid})) {
+ my $tempkeyp = $fullkeyp;
+ $tempkeyp =~ s/_\w+_/_0_/;
+ if ((grep $_ eq $fullkeyp, @catmarker) &&(!$name{$tempkeyp})) {
$part{$tempkeyp}="0";
- $name{$tempkeyp}=&Apache::lonnet::metadata($uri,$fullkeyp.'.name',$toolsymb);
- my $parmdis=&Apache::lonnet::metadata($uri,$fullkeyp.'.display',$toolsymb);
+ $name{$tempkeyp}=&Apache::lonnet::metadata($uri,$fullkeyp.'.name');
+ my $parmdis=&Apache::lonnet::metadata($uri,$fullkeyp.'.display');
if ($allparms{$name{$tempkeyp}} ne '') {
my $identifier;
if ($parmdis =~ /(\s*\[Part.*)$/) {
@@ -3401,9 +3103,9 @@ ENDTABLEHEADFOUR
unless ($display{$tempkeyp}) { $display{$tempkeyp}=''; }
$display{$tempkeyp}.=' ('.$name{$tempkeyp}.')';
$display{$tempkeyp} =~ s/_\w+_/_0_/;
- $default{$tempkeyp}=&Apache::lonnet::metadata($uri,$fullkeyp,$toolsymb);
- $type{$tempkeyp}=&Apache::lonnet::metadata($uri,$fullkeyp.'.type',$toolsymb);
- }
+ $default{$tempkeyp}=&Apache::lonnet::metadata($uri,$fullkeyp);
+ $type{$tempkeyp}=&Apache::lonnet::metadata($uri,$fullkeyp.'.type');
+ }
} # end loop through keys
} # end loop through ids
@@ -3433,26 +3135,27 @@ ENDMAPONE
.&Apache::loncommon::end_data_table_header_row()
);
- foreach (&keysinorder(\%name,\%keyorder)) {
+ foreach my $item (&keysinorder(\%name,\%keyorder)) {
$r->print(&Apache::loncommon::start_data_table_row());
- &print_row($r,$_,\%part,\%name,\%symbp,$mapid,\%default,
- \%type,\%display,$defbgone,$defbgtwo,$defbgthree,
- $parmlev,$uname,$udom,$csec,$cgroup,'',$noeditgrp,
- $readonly);
+ &print_row($r,$item,\%part,\%name,\%symbp,$mapid,\%default,
+ \%type,\%display,$defbgone,$defbgtwo,$defbgthree,
+ $parmlev,$uname,$udom,$csec,$cgroup,'',$noeditgrp);
}
$r->print(&Apache::loncommon::end_data_table()
.''
.''
);
} # end of $parmlev eq general
- $r->print('');
}
$r->print('');
+ &endSettingsScreen($r);
$r->print(&Apache::loncommon::end_page());
} # end sub assessparms
+
+
##################################################
-# Overview mode
+# OVERVIEW MODE
##################################################
my $tableopen;
@@ -3475,10 +3178,10 @@ sub tablestart {
sub tableend {
if ($tableopen) {
- $tableopen=0;
- return &Apache::loncommon::end_data_table();
+ $tableopen=0;
+ return &Apache::loncommon::end_data_table();
} else {
- return'';
+ return'';
}
}
@@ -3489,19 +3192,19 @@ sub readdata {
# Read userdata
my $classlist=&Apache::loncoursedata::get_classlist();
- foreach (keys %$classlist) {
- if ($_=~/^($match_username)\:($match_domain)$/) {
- my ($tuname,$tudom)=($1,$2);
- my $useropt=&Apache::lonnet::get_userresdata($tuname,$tudom);
- foreach my $userkey (keys %{$useropt}) {
- if ($userkey=~/^$env{'request.course.id'}/) {
+ foreach my $user (keys(%$classlist)) {
+ if ($user=~/^($match_username)\:($match_domain)$/) {
+ my ($tuname,$tudom)=($1,$2);
+ my $useropt=&Apache::lonnet::get_userresdata($tuname,$tudom);
+ foreach my $userkey (keys(%{$useropt})) {
+ if ($userkey=~/^\Q$env{'request.course.id'}\E/) {
my $newkey=$userkey;
- $newkey=~s/^($env{'request.course.id'}\.)/$1\[useropt\:$tuname\:$tudom\]\./;
- $$resourcedata{$newkey}=$$useropt{$userkey};
- }
+ $newkey=~s/^($env{'request.course.id'}\.)/$1\[useropt\:$tuname\:$tudom\]\./;
+ $$resourcedata{$newkey}=$$useropt{$userkey};
+ }
+ }
}
}
- }
if (wantarray) {
return ($resourcedata,$classlist);
} else {
@@ -3523,160 +3226,202 @@ sub storedata {
undef @deldata;
my ($got_chostname,$chostname,$cmajor,$cminor);
my $now = time;
- foreach my $key (keys(%env)) {
- if ($key =~ /^form\.([a-z]+)\_(.+)$/) {
- my $cmd=$1;
- my $thiskey=$2;
- next if ($cmd eq 'setipallow' || $cmd eq 'setipdeny' || $cmd eq 'setdeeplink');
- my ($tuname,$tudom)=&extractuser($thiskey);
- my $tkey=$thiskey;
+ foreach my $key (keys(%env)) {
+ if ($key =~ /^form\.([a-z]+)\_(.+)$/) {
+ my $cmd=$1;
+ my $thiskey=$2;
+ next if ($cmd eq 'settext' || $cmd eq 'setipallow' || $cmd eq 'setipdeny');
+ my ($tuname,$tudom)=&extractuser($thiskey);
+ my $tkey=$thiskey;
if ($tuname) {
- $tkey=~s/\.\[useropt\:$tuname\:$tudom\]\./\./;
- }
- if ($cmd eq 'set' || $cmd eq 'datepointer' || $cmd eq 'dateinterval') {
- my ($data, $typeof, $text, $name, $valchk, $valmatch, $namematch);
- if ($cmd eq 'set') {
- $data=$env{$key};
- $valmatch = '';
- $valchk = $data;
- $typeof=$env{'form.typeof_'.$thiskey};
- $text = &mt('Saved modified parameter for');
- if ($typeof eq 'string_questiontype') {
- $name = 'type';
- } elsif ($typeof eq 'string_deeplink') {
- ($name) = ($typeof =~ /^string_(deeplink)$/);
- my $stringmatch = &standard_string_matches($typeof);
- if (ref($stringmatch) eq 'ARRAY') {
- foreach my $item (@{$stringmatch}) {
- if (ref($item) eq 'ARRAY') {
- my ($regexpname,$pattern) = @{$item};
- if ($pattern ne '') {
- if ($data =~ /$pattern/) {
- $valmatch = $regexpname;
- $valchk = '';
- last;
+ $tkey=~s/\.\[useropt\:$tuname\:$tudom\]\./\./;
+ }
+ if ($cmd eq 'set' || $cmd eq 'datepointer' || $cmd eq 'dateinterval') {
+ my ($data, $typeof, $text, $name, $valchk, $valmatch, $namematch);
+ if ($cmd eq 'set') {
+ $data=$env{$key};
+ $valmatch = '';
+ $valchk = $data;
+ $typeof=$env{'form.typeof_'.$thiskey};
+ $text = &mt('Saved modified parameter for');
+ if ($typeof eq 'string_questiontype') {
+ $name = 'type';
+ } elsif ($typeof eq 'string_lenient') {
+ $name = 'lenient';
+ my $stringmatch = &standard_string_matches($typeof);
+ if (ref($stringmatch) eq 'ARRAY') {
+ foreach my $item (@{$stringmatch}) {
+ if (ref($item) eq 'ARRAY') {
+ my ($regexpname,$pattern) = @{$item};
+ if ($pattern ne '') {
+ if ($data =~ /$pattern/) {
+ $valmatch = $regexpname;
+ $valchk = '';
+ last;
+ }
}
}
}
}
+ } elsif ($typeof eq 'string_discussvote') {
+ $name = 'discussvote';
+ } elsif ($typeof eq 'string_examcode') {
+ $name = 'examcode';
+ if (&Apache::lonnet::validCODE($data)) {
+ $valchk = 'valid';
+ }
+ } elsif ($typeof eq 'string_yesno') {
+ if ($thiskey =~ /\.retrypartial$/) {
+ $name = 'retrypartial';
+ }
+ }
+ } elsif ($cmd eq 'datepointer') {
+ $data=&Apache::lonhtmlcommon::get_date_from_form($env{$key});
+ $typeof=$env{'form.typeof_'.$thiskey};
+ $text = &mt('Saved modified date for');
+ if ($typeof eq 'date_start') {
+ if ($thiskey =~ /\.printstartdate$/) {
+ $name = 'printstartdate';
+ if (($data) && ($data > $now)) {
+ $valchk = 'future';
+ }
+ }
+ } elsif ($typeof eq 'date_end') {
+ if ($thiskey =~ /\.printenddate$/) {
+ $name = 'printenddate';
+ if (($data) && ($data < $now)) {
+ $valchk = 'past';
+ }
+ }
}
- } elsif ($typeof eq 'string_lenient') {
- $name = 'lenient';
- } elsif ($typeof eq 'string_discussvote') {
- $name = 'discussvote';
- } elsif ($typeof eq 'string_examcode') {
- $name = 'examcode';
- if (&Apache::lonnet::validCODE($data)) {
- $valchk = 'valid';
- }
- } elsif ($typeof eq 'string_yesno') {
- if ($thiskey =~ /\.retrypartial$/) {
- $name = 'retrypartial';
- }
- } elsif ($typeof eq 'string_tex') {
- $name = 'texdisplay';
- }
- } elsif ($cmd eq 'datepointer') {
- $data=&Apache::lonhtmlcommon::get_date_from_form($env{$key});
- $typeof=$env{'form.typeof_'.$thiskey};
- $text = &mt('Saved modified date for');
- if ($typeof eq 'date_start') {
- if ($thiskey =~ /\.printstartdate$/) {
- $name = 'printstartdate';
- if (($data) && ($data > $now)) {
- $valchk = 'future';
- }
- }
- } elsif ($typeof eq 'date_end') {
- if ($thiskey =~ /\.printenddate$/) {
- $name = 'printenddate';
- if (($data) && ($data < $now)) {
- $valchk = 'past';
+ } elsif ($cmd eq 'dateinterval') {
+ $data=&get_date_interval_from_form($thiskey);
+ if ($thiskey =~ /\.interval$/) {
+ $name = 'interval';
+ my $intervaltype = &get_intervaltype($name);
+ my $intervalmatch = &standard_interval_matches($intervaltype);
+ if (ref($intervalmatch) eq 'ARRAY') {
+ foreach my $item (@{$intervalmatch}) {
+ if (ref($item) eq 'ARRAY') {
+ my ($regexpname,$pattern) = @{$item};
+ if ($pattern ne '') {
+ if ($data =~ /$pattern/) {
+ $valmatch = $regexpname;
+ $valchk = '';
+ last;
+ }
+ }
+ }
+ }
}
}
+ $typeof=$env{'form.typeof_'.$thiskey};
+ $text = &mt('Saved modified date for');
}
- } elsif ($cmd eq 'dateinterval') {
- $data=&get_date_interval_from_form($thiskey);
- $typeof=$env{'form.typeof_'.$thiskey};
- $text = &mt('Saved modified date for');
- }
- if ($name ne '') {
- my ($needsrelease,$needsnewer);
- $needsrelease = $Apache::lonnet::needsrelease{"parameter:$name:$valchk"};
- if ($needsrelease) {
- unless ($got_chostname) {
- ($chostname,$cmajor,$cminor)=¶meter_release_vars();
- $got_chostname = 1;
+ if ($thiskey =~ m{\.(?:sequence|page)___\(rec\)}) {
+ $namematch = 'maplevelrecurse';
+ }
+ if (($name ne '') || ($namematch ne '')) {
+ my ($needsrelease,$needsnewer);
+ if ($name ne '') {
+ $needsrelease = $Apache::lonnet::needsrelease{"parameter:$name:$valchk:$valmatch:"};
+ if ($needsrelease) {
+ unless ($got_chostname) {
+ ($chostname,$cmajor,$cminor)=¶meter_release_vars();
+ $got_chostname = 1;
+ }
+ $needsnewer = ¶meter_releasecheck($name,$valchk,$valmatch,undef,
+ $needsrelease,
+ $cmajor,$cminor);
+ }
+ }
+ if ($namematch ne '') {
+ if ($needsnewer) {
+ undef($namematch);
+ } else {
+ my $currneeded;
+ if ($needsrelease) {
+ $currneeded = $needsrelease;
+ }
+ $needsrelease =
+ $Apache::lonnet::needsrelease{"parameter::::$namematch"};
+ if (($needsrelease) && (($currneeded eq '') || ($needsrelease < $currneeded))) {
+ unless ($got_chostname) {
+ ($chostname,$cmajor,$cminor) = ¶meter_release_vars();
+ $got_chostname = 1;
+ }
+ $needsnewer = ¶meter_releasecheck(undef,$valchk,$valmatch,$namematch,
+ $needsrelease,$cmajor,$cminor);
+ } else {
+ undef($namematch);
+ }
+ }
}
- $needsnewer = ¶meter_releasecheck($name,$valchk,
- $needsrelease,
- $cmajor,$cminor);
if ($needsnewer) {
- $r->print(' '.&oldversion_warning($name,$data,
- $chostname,$cmajor,
- $cminor,$needsrelease));
+ $r->print(' '.&oldversion_warning($name,$namematch,$data,
+ $chostname,$cmajor,
+ $cminor,$needsrelease));
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));
- } else {
- $r->print(''.
- &mt('Error saving parameters').'
');
+ 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));
+ } else {
+ $r->print(''.
+ &mt('Error saving parameters').'
');
+ }
+ &Apache::lonnet::devalidateuserresdata($tuname,$tudom);
+ } else {
+ $newdata{$thiskey}=$data;
+ $newdata{$thiskey.'.type'}=$typeof;
+ }
}
- &Apache::lonnet::devalidateuserresdata($tuname,$tudom);
- } else {
- $newdata{$thiskey}=$data;
- $newdata{$thiskey.'.type'}=$typeof;
- }
- }
- } elsif ($cmd eq 'del') {
- if ($tuname) {
- if (&Apache::lonnet::del('resourcedata',[$tkey],$tudom,$tuname) eq 'ok') {
- &log_parmset({$tkey=>''},1,$tuname,$tudom);
- $r->print(' '.&mt('Deleted parameter for').' '.&Apache::loncommon::plainname($tuname,$tudom));
- } else {
- $r->print(''.
- &mt('Error deleting parameters').'
');
+ } elsif ($cmd eq 'del') {
+ if ($tuname) {
+ if (&Apache::lonnet::del('resourcedata',[$tkey],$tudom,$tuname) eq 'ok') {
+ &log_parmset({$tkey=>''},1,$tuname,$tudom);
+ $r->print(' '.&mt('Deleted parameter for').' '.&Apache::loncommon::plainname($tuname,$tudom));
+ } else {
+ $r->print(''.
+ &mt('Error deleting parameters').'
');
+ }
+ &Apache::lonnet::devalidateuserresdata($tuname,$tudom);
+ } else {
+ push (@deldata,$thiskey,$thiskey.'.type');
+ }
}
- &Apache::lonnet::devalidateuserresdata($tuname,$tudom);
- } else {
- push (@deldata,$thiskey,$thiskey.'.type');
- }
}
}
- }
# Store all course level
my $delentries=$#deldata+1;
- my @newdatakeys=keys %newdata;
+ my @newdatakeys=keys(%newdata);
my $putentries=$#newdatakeys+1;
if ($delentries) {
- if (&Apache::lonnet::del('resourcedata',\@deldata,$dom,$crs) eq 'ok') {
- my %loghash=map { $_ => '' } @deldata;
- &log_parmset(\%loghash,1);
- $r->print(''.&mt('Deleted [quant,_1,parameter]',$delentries/2).' ');
- } else {
- $r->print(''.
- &mt('Error deleting parameters').'
');
- }
- &Apache::lonnet::devalidatecourseresdata($crs,$dom);
+ if (&Apache::lonnet::del('resourcedata',\@deldata,$dom,$crs) eq 'ok') {
+ my %loghash=map { $_ => '' } @deldata;
+ &log_parmset(\%loghash,1);
+ $r->print(''.&mt('Deleted [quant,_1,parameter]',$delentries/2).' ');
+ } else {
+ $r->print(''.
+ &mt('Error deleting parameters').'
');
+ }
+ &Apache::lonnet::devalidatecourseresdata($crs,$dom);
}
if ($putentries) {
- if (&Apache::lonnet::put('resourcedata',\%newdata,$dom,$crs) eq 'ok') {
- &log_parmset(\%newdata,0);
- $r->print(''.&mt('Saved [quant,_1,parameter]',$putentries/2).' ');
- } else {
- $r->print(''.
- &mt('Error saving parameters').'
');
- }
- &Apache::lonnet::devalidatecourseresdata($crs,$dom);
+ if (&Apache::lonnet::put('resourcedata',\%newdata,$dom,$crs) eq 'ok') {
+ &log_parmset(\%newdata,0);
+ $r->print(''.&mt('Saved [quant,_1,parameter]',$putentries/2).' ');
+ } else {
+ $r->print(''.
+ &mt('Error saving parameters').'
');
+ }
+ &Apache::lonnet::devalidatecourseresdata($crs,$dom);
}
}
@@ -3693,11 +3438,11 @@ sub parse_listdata_key {
($key=~/^\Q$env{'request.course.id'}\E\.\[([^\.]+)\]\.(.+)$/);
# if course wide student would be undefined
if (!defined($student)) {
- ($realm)=($key=~/^\Q$env{'request.course.id'}\E\.(.+)$/);
+ ($realm)=($key=~/^\Q$env{'request.course.id'}\E\.(.+)$/);
}
# strip off the .type if it's not the Question type parameter
if ($realm=~/\.type$/ && !exists($listdata->{$key.'.type'})) {
- $realm=~s/\.type//;
+ $realm=~s/\.type//;
}
# split into resource+part and parameter name
my ($res, $parm) = ($realm=~/^(.*)\.(.*)$/);
@@ -3705,8 +3450,10 @@ sub parse_listdata_key {
return ($student,$res,$part,$parm);
}
+# Displays forms for the given data in overview mode (newoverview or overview).
sub listdata {
- my ($r,$resourcedata,$listdata,$sortorder,$caller,$classlist,$readonly,$parmlev)=@_;
+ my ($r,$resourcedata,$listdata,$sortorder,$caller,$classlist)=@_;
+
# Start list output
my $oldsection='';
@@ -3716,7 +3463,6 @@ sub listdata {
$tableopen=0;
my $foundkeys=0;
my %keyorder=&standardkeyorder();
- my $readonlyall = $readonly;
my ($secidx,%grouphash);
if (($env{'request.course.sec'} ne '') && ($caller eq 'overview')) {
@@ -3724,285 +3470,201 @@ sub listdata {
if (&Apache::lonnet::allowed('mdg',$env{'request.course.id'})) {
%grouphash = &Apache::longroup::coursegroups();
} elsif ($env{'request.course.groups'} ne '') {
- map { $grouphash{$_} = 1; } split(/:/,$env{'request.course.groups'});
+ map { $grouphash{$_} = 1; } split(/,/,$env{'request.course.groups'});
}
}
foreach my $thiskey (sort {
- my ($astudent,$ares,$apart,$aparm) = &parse_listdata_key($a,$listdata);
- my ($bstudent,$bres,$bpart,$bparm) = &parse_listdata_key($b,$listdata);
+ my ($astudent,$ares,$apart,$aparm) = &parse_listdata_key($a,$listdata);
+ my ($bstudent,$bres,$bpart,$bparm) = &parse_listdata_key($b,$listdata);
- # get the numerical order for the param
- $aparm=$keyorder{'parameter_0_'.$aparm};
- $bparm=$keyorder{'parameter_0_'.$bparm};
+ # get the numerical order for the param
+ $aparm=$keyorder{'parameter_0_'.$aparm};
+ $bparm=$keyorder{'parameter_0_'.$bparm};
- my $result=0;
+ my $result=0;
- if ($sortorder eq 'realmstudent') {
+ if ($sortorder eq 'realmstudent') {
if ($ares ne $bres ) {
- $result = ($ares cmp $bres);
+ $result = ($ares cmp $bres);
} elsif ($astudent ne $bstudent) {
- $result = ($astudent cmp $bstudent);
- } elsif ($apart ne $bpart ) {
- $result = ($apart cmp $bpart);
- }
- } else {
- if ($astudent ne $bstudent) {
- $result = ($astudent cmp $bstudent);
- } elsif ($ares ne $bres ) {
- $result = ($ares cmp $bres);
- } elsif ($apart ne $bpart ) {
- $result = ($apart cmp $bpart);
+ $result = ($astudent cmp $bstudent);
+ } elsif ($apart ne $bpart ) {
+ $result = ($apart cmp $bpart);
+ }
+ } else {
+ if ($astudent ne $bstudent) {
+ $result = ($astudent cmp $bstudent);
+ } elsif ($ares ne $bres ) {
+ $result = ($ares cmp $bres);
+ } elsif ($apart ne $bpart ) {
+ $result = ($apart cmp $bpart);
+ }
}
- }
- if (!$result) {
+ if (!$result) {
if (defined($aparm) && defined($bparm)) {
- $result = ($aparm <=> $bparm);
+ $result = ($aparm <=> $bparm);
} elsif (defined($aparm)) {
- $result = -1;
+ $result = -1;
} elsif (defined($bparm)) {
- $result = 1;
+ $result = 1;
+ }
}
- }
- $result;
- } keys %{$listdata}) {
+ $result;
+
+ } keys(%{$listdata})) { # foreach my $thiskey
- if ($$listdata{$thiskey.'.type'}) {
- my $thistype=$$listdata{$thiskey.'.type'};
- if ($$resourcedata{$thiskey.'.type'}) {
- $thistype=$$resourcedata{$thiskey.'.type'};
- }
- my ($middle,$part,$name)=
- ($thiskey=~/^$env{'request.course.id'}\.(?:(.+)\.)*([\w\s]+)\.(\w+)$/);
- my $section=&mt('All Students');
- $readonly = $readonlyall;
- my $userscope;
- my $showval = $$resourcedata{$thiskey};
- if ($middle=~/^\[(.*)\]/) {
- my $issection=$1;
- if ($issection=~/^useropt\:($match_username)\:($match_domain)/) {
- my ($stuname,$studom) = ($1,$2);
- if (($env{'request.course.sec'} ne '') && ($caller eq 'overview')) {
- if (ref($classlist) eq 'HASH') {
- if (ref($classlist->{$stuname.':'.$studom}) eq 'ARRAY') {
- next unless ($classlist->{$stuname.':'.$studom}->[$secidx] eq $env{'request.course.sec'});
+ my $readonly;
+ if ($$listdata{$thiskey.'.type'}) {
+ my $thistype=$$listdata{$thiskey.'.type'};
+ if ($$resourcedata{$thiskey.'.type'}) {
+ $thistype=$$resourcedata{$thiskey.'.type'};
+ }
+ my ($middle,$part,$name)=
+ ($thiskey=~/^$env{'request.course.id'}\.(?:(.+)\.)*([\w\s]+)\.(\w+)$/);
+ my $section=&mt('All Students');
+ if ($middle=~/^\[(.*)\]/) {
+ my $issection=$1;
+ if ($issection=~/^useropt\:($match_username)\:($match_domain)/) {
+ my ($stuname,$studom) = ($1,$2);
+ if (($env{'request.course.sec'} ne '') && ($caller eq 'overview')) {
+ if (ref($classlist) eq 'HASH') {
+ if (ref($classlist->{$stuname.':'.$studom}) eq 'ARRAY') {
+ next unless ($classlist->{$stuname.':'.$studom}->[$secidx] eq $env{'request.course.sec'});
+ }
}
}
- }
- $section=&mt('User').": ".&Apache::loncommon::plainname($1,$2);
- $userscope = 1;
- } else {
- if (($env{'request.course.sec'} ne '') && ($caller eq 'overview')) {
- if (exists($grouphash{$issection})) {
- $section=&mt('Group').': '.$issection;
- } elsif ($issection eq $env{'request.course.sec'}) {
- $section = &mt('Section').': '.$issection;
+ $section=&mt('User').": ".&Apache::loncommon::plainname($stuname,$studom);
+ } else {
+ if (($env{'request.course.sec'} ne '') && ($caller eq 'overview')) {
+ if (exists($grouphash{$issection})) {
+ $section=&mt('Group').': '.$issection;
+ } elsif ($issection eq $env{'request.course.sec'}) {
+ $section = &mt('Section').': '.$issection;
+ } else {
+ next;
+ }
} else {
- next;
+ $section=&mt('Group/Section').': '.$issection;
}
- } else {
- $section=&mt('Group/Section').': '.$issection;
}
+ $middle=~s/^\[(.*)\]//;
+ } elsif (($env{'request.course.sec'} ne '') && ($caller eq 'overview')) {
+ $readonly = 1;
}
- $middle=~s/^\[(.*)\]//;
- } elsif (($env{'request.course.sec'} ne '') && ($caller eq 'overview')) {
- $readonly = 1;
- }
- $middle=~s/\.+$//;
- $middle=~s/^\.+//;
- my $realm=''.&mt('All Resources').' ';
-
- if ($middle=~/^(.+)\_\_\_\(all\)$/) {
- $realm=''.&mt('Folder/Map').': '.&Apache::lonnet::gettitle($1).' ('.$1.') ';
- } elsif ($middle) {
- my ($map,$id,$url)=&Apache::lonnet::decode_symb($middle);
- next if (($url =~ /\.(page|sequence)$/) && ($parmlev eq 'full') && ($caller eq 'newoverview'));
- $realm=''.&mt('Resource').': '.&Apache::lonnet::gettitle($middle).' ('.$url.' in '.$map.' id: '.$id.') ';
- }
- if ($sortorder eq 'realmstudent') {
- if ($realm ne $oldrealm) {
- $r->print(&tableend()."\n$realm ");
- $oldrealm=$realm;
- $oldsection='';
- }
- if ($section ne $oldsection) {
- $r->print(&tableend()."\n$section ");
- $oldsection=$section;
- $oldpart='';
- }
- } else {
- if ($section ne $oldsection) {
- $r->print(&tableend()."\n$section ");
- $oldsection=$section;
- $oldrealm='';
- }
- if ($realm ne $oldrealm) {
- $r->print(&tableend()."\n$realm ");
- $oldrealm=$realm;
- $oldpart='';
- }
- }
- if ($part ne $oldpart) {
- $r->print(&tableend().
- "\n".''.&mt('Part').": $part ");
- $oldpart=$part;
- }
-#
-# Ready to print
-#
- my $parmitem = &standard_parameter_names($name);
- $r->print(&tablestart($readonly).
- &Apache::loncommon::start_data_table_row().
- ''.&mt($parmitem).
- ' ');
- unless ($readonly) {
- my $disabled;
- if (($name eq 'availablestudent') &&
- (($showval eq '') || ($userscope))) {
- $disabled = ' disabled="disabled"';
- }
- $r->print(' ');
- }
- $r->print('');
- $foundkeys++;
- if (&isdateparm($thistype)) {
- my $jskey='key_'.$pointer;
- my $state;
- $pointer++;
- if ($readonly) {
- $state = 'disabled';
+ $middle=~s/\.+$//;
+ $middle=~s/^\.+//;
+ my $realm=''.&mt('All Resources').' ';
+ if ($middle=~/^(.+)\_\_\_\((all|rec)\)$/) {
+ my $mapurl = $1;
+ my $maplevel = $2;
+ my $leveltitle = &mt('Folder/Map');
+ if ($maplevel eq 'rec') {
+ $leveltitle = &mt('Recursive');
+ }
+ $realm=''.$leveltitle.': '.&Apache::lonnet::gettitle($mapurl).' ('.$mapurl.') ';
+ } elsif ($middle) {
+ my ($map,$id,$url)=&Apache::lonnet::decode_symb($middle);
+ $realm=''.&mt('Resource').
+ ': '.&Apache::lonnet::gettitle($middle).
+ ' ('.$url.' in '.$map.' id: '.
+ $id.') ';
+ }
+ if ($sortorder eq 'realmstudent') {
+ if ($realm ne $oldrealm) {
+ $r->print(&tableend()."\n$realm ");
+ $oldrealm=$realm;
+ $oldsection='';
+ }
+ if ($section ne $oldsection) {
+ $r->print(&tableend()."\n$section ");
+ $oldsection=$section;
+ $oldpart='';
+ }
+ } else {
+ if ($section ne $oldsection) {
+ $r->print(&tableend()."\n$section ");
+ $oldsection=$section;
+ $oldrealm='';
+ }
+ if ($realm ne $oldrealm) {
+ $r->print(&tableend()."\n$realm ");
+ $oldrealm=$realm;
+ $oldpart='';
+ }
}
- $r->print(
- &Apache::lonhtmlcommon::date_setter('parmform',
- $jskey,
- $$resourcedata{$thiskey},
- '',1,$state));
+ if ($part ne $oldpart) {
+ $r->print(&tableend().
+ "\n".''.&mt('Part').": $part ");
+ $oldpart=$part;
+ }
+ #
+ # Ready to print
+ #
+ my $parmitem = &standard_parameter_names($name);
+ $r->print(&tablestart($readonly).
+ &Apache::loncommon::start_data_table_row().
+ ' '.&mt($parmitem).
+ ' ');
unless ($readonly) {
- $r->print(
-' '.
-(($$resourcedata{$thiskey}!=0)?''.
-&mt('Shift all dates based on this date').' ':'').
-&date_sanity_info($$resourcedata{$thiskey})
- );
- }
- } elsif ($thistype eq 'date_interval') {
- $r->print(&date_interval_selector($thiskey,$name,
- $$resourcedata{$thiskey},$readonly));
- } elsif ($thistype =~ m/^string/) {
- if ($name eq 'availablestudent') {
- $readonly = 1;
+ $r->print(' ');
}
- $r->print(&string_selector($thistype,$thiskey,
- $$resourcedata{$thiskey},$name,$readonly));
- } else {
- $r->print(&default_selector($thiskey,$$resourcedata{$thiskey},$readonly));
- }
- unless ($readonly) {
- $r->print(' ');
- }
- $r->print(''.&Apache::loncommon::end_data_table_row());
- }
- }
- return $foundkeys;
-}
-
-
-sub date_interval_selector {
- my ($thiskey, $pname, $showval, $readonly) = @_;
- my ($result,%skipval);
- my $currval = $showval;
- foreach my $which (['days', 86400, 31],
- ['hours', 3600, 23],
- ['minutes', 60, 59],
- ['seconds', 1, 59]) {
- my ($name, $factor, $max) = @{ $which };
- my $amount = int($showval/$factor);
- $showval %= $factor;
- my %select = ((map {$_ => $_} (0..$max)),
- 'select_form_order' => [0..$max]);
- if ($currval eq '') {
- unshift(@{$select{'select_form_order'}},'');
- $select{''} = '';
- $amount = '';
- }
- $result .= &Apache::loncommon::select_form($amount,$name.'_'.$thiskey,
- \%select,'',$readonly);
- $result .= ' '.&mt($name);
- }
- if ($pname eq 'interval') {
- unless ($skipval{'done'}) {
- my $checkedon = '';
- my $checkedoff = '';
- my $checkedproc = '';
- my $currproctorkey = '';
- my $currprocdisplay = 'hidden';
- my $currdonetext = &mt('Done');
- my $checkedoff = ' checked="checked"';
- if ($currval =~ /^(?:\d+)_done$/) {
- $checkedon = ' checked="checked"';
- } elsif ($currval =~ /^(?:\d+)_done\:([^\:]+)\:$/) {
- $currdonetext = $1;
- $checkedon = ' checked="checked"';
- } elsif ($currval =~ /^(?:\d+)_done_proctor_(.+)$/) {
- $currproctorkey = $1;
- $checkedproc = ' checked="checked"';
- $currprocdisplay = 'text';
- } elsif ($currval =~ /^(?:\d+)_done\:([^\:]+)\:_proctor_(.+)$/) {
- $currdonetext = $1;
- $currproctorkey = $2;
- $checkedproc = ' checked="checked"';
- $currprocdisplay = 'text';
- } elsif ($currval ne '') {
- $checkedoff = ' checked="checked"';
+ $r->print('');
+ $foundkeys++;
+ if (&isdateparm($thistype)) {
+ my $jskey='key_'.$pointer;
+ my $state;
+ $pointer++;
+ if ($readonly) {
+ $state = 'disabled';
+ }
+ $r->print(
+ &Apache::lonhtmlcommon::date_setter('parmform',
+ $jskey,
+ $$resourcedata{$thiskey},
+ '',1,$state));
+ unless ($readonly) {
+ $r->print(
+ ' '.
+ (($$resourcedata{$thiskey}!=0)?''.
+ &mt('Shift all dates based on this date').' ':'').
+ &date_sanity_info($$resourcedata{$thiskey})
+ );
+ }
+ } elsif ($thistype eq 'date_interval') {
+ $r->print(&date_interval_selector($thiskey,$name,
+ $$resourcedata{$thiskey},$readonly));
+ } elsif ($thistype =~ m/^string/) {
+ $r->print(&string_selector($thistype,$thiskey,
+ $$resourcedata{$thiskey},$name,$readonly));
} else {
- $currdonetext = '';
+ $r->print(&default_selector($thiskey,$$resourcedata{$thiskey},$readonly));
}
- my $onclick = ' onclick="toggleSecret(this.form,'."'done_','$thiskey'".');"';
- my $disabled;
- if ($readonly) {
- $disabled = ' disabled="disabled"';
+ unless ($readonly) {
+ $r->print(' ');
}
- $result .= ''.&mt('Include "done" button').
- ' '.
- &mt('No').' '.(' 'x2).
- ' '.
- &mt('Yes').' '.(' 'x2).
- ' '.
- &mt('Yes, with proctor key').' '.
- ' &').'"'.$disabled.' /> '.
- ''.&mt('Button text').': '.
- ' &').'"'.$disabled.' /> ';
+ $r->print(' '.&Apache::loncommon::end_data_table_row());
}
}
- unless ($readonly) {
- $result .= ' ';
- }
- return $result;
-
+ return $foundkeys;
}
sub get_date_interval_from_form {
my ($key) = @_;
my $seconds = 0;
- my $numnotnull = 0;
foreach my $which (['days', 86400],
['hours', 3600],
['minutes', 60],
['seconds', 1]) {
- my ($name, $factor) = @{ $which };
- if (defined($env{'form.'.$name.'_'.$key})) {
- unless ($env{'form.'.$name.'_'.$key} eq '') {
- $numnotnull ++;
+ my ($name, $factor) = @{ $which };
+ if (defined($env{'form.'.$name.'_'.$key})) {
$seconds += $env{'form.'.$name.'_'.$key} * $factor;
}
}
- }
if (($key =~ /\.interval$/) &&
(($env{'form.done_'.$key} eq '_done') || ($env{'form.done_'.$key} eq '_done_proctor'))) {
if ($env{'form.done_'.$key.'_buttontext'}) {
@@ -4012,14 +3674,13 @@ sub get_date_interval_from_form {
$seconds .= '_proctor';
}
} else {
- $seconds .= $env{'form.done_'.$key};
+ $seconds .= $env{'form.done_'.$key};
}
- if (($env{'form.done_'.$key} eq '_done_proctor') &&
+ if (($env{'form.done_'.$key} eq '_done_proctor') &&
($env{'form.done_'.$key.'_proctorkey'})) {
$seconds .= '_'.$env{'form.done_'.$key.'_proctorkey'};
}
}
- return if (!$numnotnull);
return $seconds;
}
@@ -4061,7 +3722,7 @@ sub string_ip_selector {
@{$access{'deny'}} = ('');
}
my ($disabled,$addmore);
- if ($readonly) {
+ if ($disabled) {
$disabled=' disabled="disabled"';
} else {
$addmore = "\n".''.&mt('Add more').' ';
@@ -4077,7 +3738,7 @@ sub string_ip_selector {
foreach my $curr (@{$access{$acctype}}) {
$output .= ''."\n";
$num ++;
@@ -4093,265 +3754,14 @@ sub string_ip_selector {
return $output;
}
-sub string_deeplink_selector {
- my ($thiskey, $showval, $readonly) = @_;
- my (@tables,%values,@current,%titles,%options,%optiontext,%defaults,
- %selectnull,%domlti,%crslti,@possmenus,%components);
- @tables = ('upper','lower');
- %components = (
- upper => ['state','others','listing','scope'],
- lower => ['protect','menus','target','exit'],
- );
- %titles = &Apache::lonlocal::texthash (
- state => 'Access status',
- others => 'Hide other resources',
- listing => 'In Contents and/or Gradebook',
- scope => 'Access scope for link',
- protect => 'Link protection',
- menus => 'Menu Items Displayed',
- target => 'Embedded?',
- exit => 'Exit Tool Button?',
- );
- %options = (
- state => ['only','off','both'],
- others => ['hide','unhide'],
- listing => ['full','absent','grades','details','datestatus'],
- scope => ['res','map','rec'],
- protect => ['none','key','ltid','ltic'],
- menus => ['std','colls'],
- target => ['_self','_top'],
- exit => ['no','yes','url'],
- );
- %optiontext = &Apache::lonlocal::texthash (
- only => 'deep only',
- off => 'deeplink off',
- both => 'regular + deep',
- hide => 'Hidden',
- unhide => 'Unhidden',
- full => 'Listed (linked) in both',
- absent => 'Not listed',
- grades => 'Listed in grades only',
- details => 'Listed (unlinked) in both',
- datestatus => 'Listed (unlinked) inc. status in both',
- res => 'resource only',
- map => 'enclosing map/folder',
- rec => 'recursive map/folder',
- none => 'not in use',
- key => 'key access',
- ltic => 'LTI access (course)',
- ltid => 'LTI access (domain)' ,
- std => 'Standard (all menus)',
- colls => 'Numbered collection',
- _self => 'Embedded',
- _top => 'Not embedded',
- no => 'Not in use',
- yes => 'In use, no URL redirect',
- url => 'In use, redirect to URL',
- );
- %selectnull = &Apache::lonlocal::texthash (
- ltic => 'Select Launcher',
- ltid => 'Select Launcher',
- colls => 'Select',
- );
- if ($showval =~ /,/) {
- %values=();
- @current = split(/,/,$showval);
- ($values{'state'}) = ($current[0] =~ /^(only|off|both)$/);
- ($values{'others'}) = ($current[1] =~ /^(hide|unhide)$/);
- ($values{'listing'}) = ($current[2] =~ /^(full|absent|grades|details|datestatus)$/);
- ($values{'scope'}) = ($current[3] =~ /^(res|map|rec)$/);
- ($values{'protect'}) = ($current[4] =~ /^(key:[a-zA-Z\d_.!\@#\$%^&*()+=-]+|ltic:\d+|ltid:\d+)$/);
- ($values{'menus'}) = ($current[5] =~ /^(\d+)$/);
- ($values{'target'}) = ($current[6] =~ /^(_self|_top)$/);
- ($values{'exit'}) = ($current[7] =~ /^((?:(?:yes|url)(?:|\:[^:;"',]+))|no)$/);
- } else {
- $defaults{'state'} = 'off',
- $defaults{'others'} = 'unhide',
- $defaults{'listing'} = 'full';
- $defaults{'scope'} = 'res';
- $defaults{'protect'} = 'none';
- $defaults{'menus'} = '0';
- $defaults{'target'} = '_top';
- $defaults{'exit'} = 'yes';
- }
- my $disabled;
- if ($readonly) {
- $disabled=' disabled="disabled"';
- }
- my %courselti =
- &Apache::lonnet::get_course_lti($env{'course.'.$env{'request.course.id'}.'.num'},
- $env{'course.'.$env{'request.course.id'}.'.domain'},
- 'provider');
- foreach my $item (keys(%courselti)) {
- if (ref($courselti{$item}) eq 'HASH') {
- $crslti{$item} = $courselti{$item}{'name'};
- }
- }
- my %lti =
- &Apache::lonnet::get_domain_lti($env{'course.'.$env{'request.course.id'}.'.domain'},
- 'linkprot');
- foreach my $item (keys(%lti)) {
- if (($item =~ /^\d+$/) && (ref($lti{$item}) eq 'HASH')) {
- $domlti{$item} = $lti{$item}{'name'};
- }
- }
- if ($env{'course.'.$env{'request.course.id'}.'.menucollections'}) {
- foreach my $item (split(/;/,$env{'course.'.$env{'request.course.id'}.'.menucollections'})) {
- my ($num,$value) = split(/\%/,$item);
- if ($num =~ /^\d+$/) {
- push(@possmenus,$num);
- }
- }
- }
-
- my $output = ' ';
- foreach my $table ('upper','lower') {
- next unless (ref($components{$table}) eq 'ARRAY');
- $output .= ''."\n";
- if ($table eq 'upper') {
- $output .= ' ';
- }
- }
- return $output;
-}
-{
+{ # block using some constants related to parameter types (overview mode)
my %strings =
(
'string_yesno'
=> [[ 'yes', 'Yes' ],
- [ 'no', 'No' ]],
+ [ 'no', 'No' ]],
'string_problemstatus'
=> [[ 'yes', 'Yes' ],
[ 'answer', 'Yes, and show correct answer if they exceed the maximum number of tries.' ],
@@ -4361,7 +3771,7 @@ my %strings =
=> [[ 'problem', 'Standard Problem'],
[ 'survey', 'Survey'],
[ 'anonsurveycred', 'Anonymous Survey (credit for submission)'],
- [ 'exam', 'Exam'],
+ [ 'exam', 'Bubblesheet Exam'],
[ 'anonsurvey', 'Anonymous Survey'],
[ 'randomizetry', 'New Randomization Each N Tries (default N=1)'],
[ 'practice', 'Practice'],
@@ -4369,27 +3779,23 @@ my %strings =
'string_lenient'
=> [['yes', 'Yes' ],
[ 'no', 'No' ],
- [ 'default', 'Default - only bubblesheet grading is lenient' ]],
+ [ 'default', 'Default - only bubblesheet grading is lenient' ],
+ [ 'weighted', 'Yes, weighted (optionresponse in checkbox mode)' ]],
'string_discussvote'
=> [['yes','Yes'],
['notended','Yes, unless discussion ended'],
['no','No']],
'string_ip'
=> [['_allowfrom_','Hostname(s), or IP(s) from which access is allowed'],
- ['_denyfrom_','Hostname(s) or IP(s) from which access is disallowed']],
- 'string_deeplink'
- => [['on','Set choices for link protection, resource listing, access scope, shown menu items, embedding, and exit link']],
- 'string_tex'
- => [['tth', 'tth (TeX to HTML)'],
- ['mathjax', 'MathJax']],
+ ['_denyfrom_',], 'Hostname(s) or IP(s) from which access is disallowed'],
);
my %stringmatches = (
+ 'string_lenient'
+ => [['weighted','^\-?[.\d]+,\-?[.\d]+,\-?[.\d]+,\-?[.\d]+$'],],
'string_ip'
=> [['_allowfrom_','[^\!]+'],
['_denyfrom_','\!']],
- 'string_deeplink'
- => [['on','^(only|off|both)\,(hide|unhide)\,(full|absent|grades|details|datestatus)\,(res|map|rec)\,(none|key\:\w+|ltic\:\d+|ltid\:\d+)\,(\d+|)\,_(self|top),(yes|url|no)(|:[^:;\'",]+)$']],
);
my %stringtypes = (
@@ -4399,8 +3805,6 @@ my %stringtypes = (
discussvote => 'string_discussvote',
examcode => 'string_examcode',
acc => 'string_ip',
- deeplink => 'string_deeplink',
- texdisplay => 'string_tex',
);
sub standard_string_options {
@@ -4419,43 +3823,66 @@ sub standard_string_matches {
return;
}
+sub get_stringtype {
+ my ($name) = @_;
+ if (exists($stringtypes{$name})) {
+ return $stringtypes{$name};
+ }
+ return;
+}
+
sub string_selector {
my ($thistype, $thiskey, $showval, $name, $readonly) = @_;
if (!exists($strings{$thistype})) {
- return &default_selector($thiskey,$showval,$readonly);
+ return &default_selector($thiskey,$showval,$readonly);
}
my %skiptype;
if (($thistype eq 'string_questiontype') ||
- ($thistype eq 'string_lenient') ||
- ($thistype eq 'string_discussvote') ||
- ($name eq 'retrypartial')) {
+ ($thistype eq 'string_lenient') ||
+ ($thistype eq 'string_discussvote') ||
+ ($thistype eq 'string_ip') ||
+ ($name eq 'retrypartial')) {
my ($got_chostname,$chostname,$cmajor,$cminor);
foreach my $possibilities (@{ $strings{$thistype} }) {
next unless (ref($possibilities) eq 'ARRAY');
my ($parmval, $description) = @{ $possibilities };
- my $needsrelease=$Apache::lonnet::needsrelease{"parameter:$name:$parmval"};
+ my $parmmatch;
+ if (ref($stringmatches{$thistype}) eq 'ARRAY') {
+ foreach my $item (@{$stringmatches{$thistype}}) {
+ if (ref($item) eq 'ARRAY') {
+ if ($parmval eq $item->[0]) {
+ $parmmatch = $parmval;
+ $parmval = '';
+ last;
+ }
+ }
+ }
+ }
+ my $needsrelease=$Apache::lonnet::needsrelease{"parameter:$name:$parmval:$parmmatch"};
if ($needsrelease) {
unless ($got_chostname) {
($chostname,$cmajor,$cminor)=¶meter_release_vars();
$got_chostname = 1;
}
- my $needsnewer=¶meter_releasecheck($name,$parmval,$needsrelease,
- $cmajor,$cminor);
+ my $needsnewer=¶meter_releasecheck($name,$parmval,$parmmatch,undef,
+ $needsrelease,$cmajor,$cminor);
if ($needsnewer) {
- $skiptype{$parmval} = 1;
+ if ($parmmatch ne '') {
+ $skiptype{$parmmatch} = 1;
+ } elsif ($parmval ne '') {
+ $skiptype{$parmval} = 1;
+ }
}
}
}
}
if ($thistype eq 'string_ip') {
- return &string_ip_selector($thiskey,$showval,$readonly);
- } elsif ($thistype eq 'string_deeplink') {
- return &string_deeplink_selector($thiskey,$showval,$readonly);
+ return &string_ip_selector($thiskey,$showval,$readonly);
}
-
+
my ($result,$disabled);
if ($readonly) {
@@ -4475,7 +3902,7 @@ sub string_selector {
foreach my $possibilities (@{ $strings{$thistype} }) {
next unless (ref($possibilities) eq 'ARRAY');
my ($name, $description) = @{ $possibilities };
- next if ($skiptype{$name});
+ next if ($skiptype{$name});
$rem = $i%($numinrow);
if ($rem == 0) {
if ($i > 0) {
@@ -4483,24 +3910,66 @@ sub string_selector {
}
$result .= ' ';
}
- $result .= ''.
+ my $colspan;
+ if ($i == @{ $strings{$thistype} }-1) {
+ $rem = @{ $strings{$thistype} }%($numinrow);
+ if ($rem) {
+ my $colsleft = $numinrow - $rem;
+ if ($colsleft) {
+ $colspan = $colsleft+1;
+ $colspan = ' colspan="'.$colspan.'"';
+ }
+ }
+ }
+ my ($add,$onchange,$css_class);
+ if ($thistype eq 'string_lenient') {
+ if ($name eq 'weighted') {
+ my $display;
+ my %relatives = &Apache::lonlocal::texthash(
+ corrchkd => 'Correct (checked)',
+ corrunchkd => 'Correct (unchecked)',
+ incorrchkd => 'Incorrect (checked)',
+ incorrunchkd => 'Incorrect (unchecked)',
+ );
+ my %textval = (
+ corrchkd => '1.0',
+ corrunchkd => '1.0',
+ incorrchkd => '0.0',
+ incorrunchkd => '0.0',
+ );
+ if ($showval =~ /^([\-\d\.]+)\,([\-\d\.]+)\,([\-\d\.]+)\,([\-\d\.]+)$/) {
+ $textval{'corrchkd'} = $1;
+ $textval{'corrunchkd'} = $2;
+ $textval{'incorrchkd'} = $3;
+ $textval{'incorrunchkd'} = $4;
+ $display = 'inline';
+ $showval = $name;
+ } else {
+ $display = 'none';
+ }
+ $add = ' '."\n";
+ }
+ $onchange = ' onclick="javascript:toggleParmTextbox(this.form,'."'$thiskey'".');"';
+ $css_class = ' class="LC_lenient_radio"';
+ }
+ $result .= ' '.
''.
' ';
+ $result .= ' />'.&mt($description).''.$add.'';
$i++;
}
- $rem = @{ $strings{$thistype} }%($numinrow);
- my $colsleft = $numinrow - $rem;
- if ($colsleft > 1 ) {
- $result .= ''.
- ' ';
- } elsif ($colsleft == 1) {
- $result .= ' ';
- }
$result .= ' ';
}
if ($result) {
@@ -4509,24 +3978,193 @@ sub string_selector {
return $result;
}
+my %intervals =
+ (
+ 'date_interval'
+ => [[ 'done', 'Yes' ],
+ [ 'done_proctor', 'Yes, with proctor key'],
+ [ '', 'No' ]],
+ );
+
+my %intervalmatches = (
+ 'date_interval'
+ => [['done','\d+_done(|\:[^\:]+\:)$'],
+ ['done_proctor','\d+_done(|\:[^\:]+\:)_proctor_']],
+ );
+
+my %intervaltypes = (
+ interval => 'date_interval',
+ );
+
+sub standard_interval_matches {
+ my ($interval_type) = @_;
+ if (ref($intervalmatches{$interval_type}) eq 'ARRAY') {
+ return $intervalmatches{$interval_type};
+ }
+ return;
+}
+
+sub get_intervaltype {
+ my ($name) = @_;
+ if (exists($intervaltypes{$name})) {
+ return $intervaltypes{$name};
+ }
+ return;
+}
+
+sub standard_interval_options {
+ my ($interval_type) = @_;
+ if (ref($intervals{$interval_type}) eq 'ARRAY') {
+ return $intervals{$interval_type};
+ }
+ return;
+}
+
+sub date_interval_selector {
+ my ($thiskey, $name, $showval, $readonly) = @_;
+ my ($result,%skipval);
+ if ($name eq 'interval') {
+ my $intervaltype = &get_intervaltype($name);
+ my ($got_chostname,$chostname,$cmajor,$cminor);
+ foreach my $possibilities (@{ $intervals{$intervaltype} }) {
+ next unless (ref($possibilities) eq 'ARRAY');
+ my ($parmval, $description) = @{ $possibilities };
+ my $parmmatch;
+ if (ref($intervalmatches{$intervaltype}) eq 'ARRAY') {
+ foreach my $item (@{$intervalmatches{$intervaltype}}) {
+ if (ref($item) eq 'ARRAY') {
+ if ($parmval eq $item->[0]) {
+ $parmmatch = $parmval;
+ $parmval = '';
+ last;
+ }
+ }
+ }
+ }
+ my $needsrelease=$Apache::lonnet::needsrelease{"parameter:$name:$parmval:$parmmatch"};
+ if ($needsrelease) {
+ unless ($got_chostname) {
+ ($chostname,$cmajor,$cminor)=¶meter_release_vars();
+ $got_chostname = 1;
+ }
+ my $needsnewer=¶meter_releasecheck($name,$parmval,$parmmatch,undef,
+ $needsrelease,$cmajor,$cminor);
+ if ($needsnewer) {
+ if ($parmmatch ne '') {
+ $skipval{$parmmatch} = 1;
+ } elsif ($parmval ne '') {
+ $skipval{$parmval} = 1;
+ }
+ }
+ }
+ }
+ }
+
+ my $currval = $showval;
+ foreach my $which (['days', 86400, 31],
+ ['hours', 3600, 23],
+ ['minutes', 60, 59],
+ ['seconds', 1, 59]) {
+ my ($name, $factor, $max) = @{ $which };
+ my $amount = int($showval/$factor);
+ $showval %= $factor;
+ my %select = ((map {$_ => $_} (0..$max)),
+ 'select_form_order' => [0..$max]);
+ $result .= &Apache::loncommon::select_form($amount,$name.'_'.$thiskey,
+ \%select,'',$readonly);
+ $result .= ' '.&mt($name);
+ }
+ if ($name eq 'interval') {
+ unless ($skipval{'done'}) {
+ my $checkedon = '';
+ my $checkedproc = '';
+ my $currproctorkey = '';
+ my $currprocdisplay = 'hidden';
+ my $currdonetext = &mt('Done');
+ my $checkedoff = ' checked="checked"';
+ if ($currval =~ /^(?:\d+)_done$/) {
+ $checkedon = ' checked="checked"';
+ $checkedoff = '';
+ } elsif ($currval =~ /^(?:\d+)_done\:([^\:]+)\:$/) {
+ $currdonetext = $1;
+ $checkedon = ' checked="checked"';
+ $checkedoff = '';
+ } elsif ($currval =~ /^(?:\d+)_done_proctor_(.+)$/) {
+ $currproctorkey = $1;
+ $checkedproc = ' checked="checked"';
+ $checkedoff = '';
+ $currprocdisplay = 'text';
+ } elsif ($currval =~ /^(?:\d+)_done\:([^\:]+)\:_proctor_(.+)$/) {
+ $currdonetext = $1;
+ $currproctorkey = $2;
+ $checkedproc = ' checked="checked"';
+ $checkedoff = '';
+ $currprocdisplay = 'text';
+ }
+ my $onclick = ' onclick="toggleSecret(this.form,'."'done_','$thiskey'".');"';
+ $result .= '
'.&mt('Include "done" button').
+ ' '.
+ &mt('No').' '.(' 'x2).
+ ' '.
+ &mt('Yes').' '.(' 'x2).
+ ' '.
+ &mt('Yes, with proctor key').' '.
+ ' &').'" /> '.
+ '
'.&mt('Button text').': '.
+ ' &').'" /> ';
+ }
+ }
+ unless ($readonly) {
+ $result .= '
';
+ }
+ return $result;
+}
+
sub oldversion_warning {
- my ($name,$value,$chostname,$cmajor,$cminor,$needsrelease) = @_;
+ my ($name,$namematch,$value,$chostname,$cmajor,$cminor,$needsrelease) = @_;
+ my $standard_name = &standard_parameter_names($name);
+ if ($namematch) {
+ my $level = &standard_parameter_levels($namematch);
+ my $msg = '';
+ if ($level) {
+ $msg = &mt('[_1] was [_2]not[_3] set at the level of: [_4].',
+ $standard_name,'
',' ','"'.$level.'"');
+ } else {
+ $msg = &mt('[_1] was [_2]not[_3] set.',
+ $standard_name,'
',' ');
+ }
+ return '
'.$msg.' '.
+ &mt('LON-CAPA version ([_1]) installed on home server ([_2]) does not meet version requirements ([_3] or newer).',
+ $cmajor.'.'.$cminor,$chostname,
+ $needsrelease).
+ '
';
+ }
my $desc;
- my %stringtypes = (
- type => 'string_questiontype',
- lenient => 'string_lenient',
- retrypartial => 'string_yesno',
- discussvote => 'string_discussvote',
- examcode => 'string_examcode',
- );
- if (exists($stringtypes{$name})) {
+ my $stringtype = &get_stringtype($name);
+ if ($stringtype ne '') {
if ($name eq 'examcode') {
$desc = $value;
} elsif (ref($strings{$stringtypes{$name}}) eq 'ARRAY') {
foreach my $possibilities (@{ $strings{$stringtypes{$name}} }) {
next unless (ref($possibilities) eq 'ARRAY');
my ($parmval, $description) = @{ $possibilities };
- if ($parmval eq $value) {
+ my $parmmatch;
+ if (ref($stringmatches{$stringtypes{$name}}) eq 'ARRAY') {
+ foreach my $item (@{$stringmatches{$stringtypes{$name}}}) {
+ if (ref($item) eq 'ARRAY') {
+ my ($regexpname,$pattern) = @{$item};
+ if ($parmval eq $regexpname) {
+ if ($value =~ /$pattern/) {
+ $desc = $description;
+ $parmmatch = 1;
+ last;
+ }
+ }
+ }
+ }
+ last if ($parmmatch);
+ } elsif ($parmval eq $value) {
$desc = $description;
last;
}
@@ -4546,42 +4184,29 @@ sub oldversion_warning {
}
}
}
- my $standard_name = &standard_parameter_names($name);
return '
'.
- &mt('[_1] was [_2]not[_3] set to [_4].',
- $standard_name,'',' ','"'.$desc.'"').' '.
- &mt('LON-CAPA version ([_1]) installed on home server ([_2]) does not meet version requirements ([_3] or newer).',
- $cmajor.'.'.$cminor,$chostname,
- $needsrelease).
- '
';
+ &mt('[_1] was [_2]not[_3] set to [_4].',
+ $standard_name,'
',' ','"'.$desc.'"').'
'.
+ &mt('LON-CAPA version ([_1]) installed on home server ([_2]) does not meet version requirements ([_3] or newer).',
+ $cmajor.'.'.$cminor,$chostname,
+ $needsrelease).
+ '';
}
-}
+} # end of block using some constants related to parameter types
+
#
# Shift all start and end dates by $shift
#
sub dateshift {
- my ($shift,$numchanges)=@_;
+ my ($shift)=@_;
my $dom = $env{'course.'.$env{'request.course.id'}.'.domain'};
my $crs = $env{'course.'.$env{'request.course.id'}.'.num'};
- my $sec = $env{'request.course.sec'};
- my $secgrpregex;
- if ($sec ne '') {
- my @groups;
- if ($env{'request.course.groups'} ne '') {
- @groups = split(/:/,$env{'request.course.groups'});
- }
- if (@groups) {
- $secgrpregex = '(?:'.join('|',($sec,@groups)).')';
- } else {
- $secgrpregex = $sec;
- }
- }
my %data=&Apache::lonnet::dump('resourcedata',$dom,$crs);
# ugly retro fix for broken version of types
- foreach my $key (keys %data) {
+ foreach my $key (keys(%data)) {
if ($key=~/\wtype$/) {
my $newkey=$key;
$newkey=~s/type$/\.type/;
@@ -4591,13 +4216,9 @@ sub dateshift {
}
my %storecontent=();
# go through all parameters and look for dates
- foreach my $key (keys %data) {
+ foreach my $key (keys(%data)) {
if ($data{$key.'.type'}=~/^date_(start|end)$/) {
- if ($sec ne '') {
- next unless ($key =~ /^$env{'request.course.id'}\.\[$secgrpregex\]\./);
- }
my $newdate=$data{$key}+$shift;
- $$numchanges ++;
$storecontent{$key}=$newdate;
}
}
@@ -4611,19 +4232,16 @@ sub dateshift {
}
sub newoverview {
- my ($r,$parm_permission) = @_;
+ my ($r) = @_;
my $dom = $env{'course.'.$env{'request.course.id'}.'.domain'};
my $crs = $env{'course.'.$env{'request.course.id'}.'.num'};
- my $readonly = 1;
- if ($parm_permission->{'edit'}) {
- undef($readonly);
- }
+ my $crstype = $env{'course.'.$env{'request.course.id'}.'.type'};
&Apache::lonhtmlcommon::add_breadcrumb({href=>'/adm/parmset?action=setoverview',
text=>"Overview Mode"});
my %loaditems = (
- 'onload' => "showHide_courseContent(); resize_scrollbox('mapmenuscroll','1','1');",
+ 'onload' => "showHide_courseContent(); resize_scrollbox('mapmenuscroll','1','1'); showHideLenient();",
);
my $js = '
';
+
my $start_page = &Apache::loncommon::start_page('Set Parameters',$js,
{'add_entries' => \%loaditems,});
my $breadcrumbs = &Apache::lonhtmlcommon::breadcrumbs('Overview');
$r->print($start_page.$breadcrumbs);
+ &startSettingsScreen($r,'parmset',$crstype);
$r->print(<
ENDOVER
@@ -4670,7 +4290,7 @@ ENDOVER
my $pschp=$env{'form.pschp'};
my @psprt=&Apache::loncommon::get_env_multiple('form.psprt');
- if (!@psprt) { $psprt[0]='0'; }
+ if (!@psprt) { $psprt[0]='all'; }
my @selected_sections =
&Apache::loncommon::get_env_multiple('form.Section');
@@ -4709,8 +4329,10 @@ ENDOVER
$r->print('');
$r->print(&Apache::lonhtmlcommon::start_pick_box(undef,'parmlevel'));
&levelmenu($r,\%alllevs,$parmlev);
- $r->print(&Apache::lonhtmlcommon::row_closure());
- &mapmenu($r,\%allmaps,$pschp,\%maptitles,\%symbp,$parmlev);
+ if ($parmlev ne 'general') {
+ $r->print(&Apache::lonhtmlcommon::row_closure());
+ &mapmenu($r,\%allmaps,$pschp,\%maptitles,\%symbp);
+ }
$r->print(&Apache::lonhtmlcommon::row_closure(1));
$r->print(&Apache::lonhtmlcommon::end_pick_box());
$r->print('
');
@@ -4733,7 +4355,7 @@ ENDOVER
$r->print('');
&partmenu($r,\%allparts,\@psprt);
$r->print(' ');
- if ($sectionselector) {
+ if ($sectionselector) {
$r->print(''.$sectionselector.' ');
}
if ($groupselector) {
@@ -4773,13 +4395,12 @@ ENDOVER
# List data
- &listdata($r,$resourcedata,$listdata,$sortorder,'newoverview',undef,$readonly,$parmlev);
+ &listdata($r,$resourcedata,$listdata,$sortorder,'newoverview');
}
- $r->print(&tableend());
- unless ($readonly) {
- $r->print(((($env{'form.store'}) || ($env{'form.dis'}))?'
':''));
- }
- $r->print('');
+ $r->print(&tableend().
+ ((($env{'form.store'}) || ($env{'form.dis'}))?'
':'').
+ '');
+ &endSettingsScreen($r);
$r->print(&Apache::loncommon::end_page());
}
@@ -4798,11 +4419,14 @@ sub secgroup_lister {
$$listdata{$newparmkey.'.type'}=$$defkeytype{$cat};
} elsif ($parmlev eq 'map') {
# map-level parameter
- foreach my $mapid (keys %{$allmaps}) {
+ foreach my $mapid (keys(%{$allmaps})) {
if (($pschp ne 'all') && ($pschp ne $mapid)) { next; }
my $newparmkey=$rootparmkey.'.'.$$allmaps{$mapid}.'___(all).'.$part.'.'.$cat;
$$listdata{$newparmkey}=1;
$$listdata{$newparmkey.'.type'}=$$defkeytype{$cat};
+ $newparmkey=$rootparmkey.'.'.$$allmaps{$mapid}.'___(rec).'.$part.'.'.$cat;
+ $$listdata{$newparmkey}=1;
+ $$listdata{$newparmkey.'.type'}=$$defkeytype{$cat};
}
} else {
# resource-level parameter
@@ -4818,34 +4442,35 @@ sub secgroup_lister {
}
}
+# Display all existing parameter settings.
sub overview {
- my ($r,$parm_permission) = @_;
+ my ($r) = @_;
my $dom = $env{'course.'.$env{'request.course.id'}.'.domain'};
my $crs = $env{'course.'.$env{'request.course.id'}.'.num'};
my $crstype = $env{'course.'.$env{'request.course.id'}.'.type'};
my $js = ''."\n";
- my $readonly = 1;
- if ($parm_permission->{'edit'}) {
- undef($readonly);
- }
&Apache::lonhtmlcommon::add_breadcrumb({href=>'/adm/parmset?action=setoverview',
text=>"Overview Mode"});
- my $start_page=&Apache::loncommon::start_page('Modify Parameters',$js);
+ my %loaditems = (
+ 'onload' => "showHideLenient();",
+ );
+
+ my $start_page=&Apache::loncommon::start_page('Modify Parameters',$js,{'add_entries' => \%loaditems,});
my $breadcrumbs = &Apache::lonhtmlcommon::breadcrumbs('Overview');
$r->print($start_page.$breadcrumbs);
+ &startSettingsScreen($r,'parmset',$crstype);
$r->print(''.&Apache::loncommon::end_page());
+ my $foundkeys=&listdata($r,$resourcedata,$resourcedata,$sortorder,'overview',$classlist);
+ $r->print(&tableend().''.
+ ($foundkeys?' ':''.&mt('There are no parameters.').' ').'
'.
+ &Apache::loncommon::end_page());
}
+# Unused sub.
sub clean_parameters {
my ($r) = @_;
my $dom = $env{'course.'.$env{'request.course.id'}.'.domain'};
@@ -4913,78 +4525,72 @@ ENDOVER
''.&mt('Parameter').' '.
' ');
foreach my $thiskey (sort(keys(%{$resourcedata}))) {
- next if (!exists($resourcedata->{$thiskey.'.type'})
- && $thiskey=~/\.type$/);
- my %data = &parse_key($thiskey);
- if (1) { #exists($data{'realm_exists'})
- #&& !$data{'realm_exists'}) {
- $r->print(&Apache::loncommon::start_data_table_row().
- ''.
- ' ' );
-
- $r->print('');
- my $display_value = $resourcedata->{$thiskey};
- if (&isdateparm($resourcedata->{$thiskey.'.type'})) {
- $display_value =
- &Apache::lonlocal::locallocaltime($display_value);
- }
+ next if (!exists($resourcedata->{$thiskey.'.type'})
+ && $thiskey=~/\.type$/);
+ my %data = &parse_key($thiskey);
+ if (1) { #exists($data{'realm_exists'})
+ #&& !$data{'realm_exists'}) {
+ $r->print(&Apache::loncommon::start_data_table_row().
+ ' '.
+ ' ' );
+
+ $r->print('');
+ my $display_value = $resourcedata->{$thiskey};
+ if (&isdateparm($resourcedata->{$thiskey.'.type'})) {
+ $display_value =
+ &Apache::lonlocal::locallocaltime($display_value);
+ }
my $parmitem = &standard_parameter_names($data{'parameter_name'});
$parmitem = &mt($parmitem);
- $r->print(&mt('Parameter: "[_1]" with value: "[_2]"',
- $parmitem,$resourcedata->{$thiskey}));
- $r->print(' ');
- if ($data{'scope_type'} eq 'all') {
- $r->print(&mt('All users'));
- } elsif ($data{'scope_type'} eq 'user') {
- $r->print(&mt('User: [_1]',join(':',@{$data{'scope'}})));
- } elsif ($data{'scope_type'} eq 'secgroup') {
- $r->print(&mt('Group/Section: [_1]',$data{'scope'}));
- }
- $r->print(' ');
- if ($data{'realm_type'} eq 'all') {
- $r->print(&mt('All Resources'));
- } elsif ($data{'realm_type'} eq 'folder') {
- $r->print(&mt('Folder: [_1]'),$data{'realm'});
- } elsif ($data{'realm_type'} eq 'symb') {
- my ($map,$resid,$url) =
- &Apache::lonnet::decode_symb($data{'realm'});
- $r->print(&mt('Resource: [_1]with ID: [_2]in folder [_3]',
- $url.' ',
- $resid.' ',$map));
- }
- $r->print(' '.&mt('Part: [_1]',$data{'parameter_part'}));
- $r->print(' ');
+ $r->print(&mt('Parameter: "[_1]" with value: "[_2]"',
+ $parmitem,$resourcedata->{$thiskey}));
+ $r->print(' ');
+ if ($data{'scope_type'} eq 'all') {
+ $r->print(&mt('All users'));
+ } elsif ($data{'scope_type'} eq 'user') {
+ $r->print(&mt('User: [_1]',join(':',@{$data{'scope'}})));
+ } elsif ($data{'scope_type'} eq 'section') {
+ $r->print(&mt('Section: [_1]',$data{'scope'}));
+ } elsif ($data{'scope_type'} eq 'group') {
+ $r->print(&mt('Group: [_1]',$data{'scope'}));
+ }
+ $r->print(' ');
+ if ($data{'realm_type'} eq 'all') {
+ $r->print(&mt('All Resources'));
+ } elsif ($data{'realm_type'} eq 'folder') {
+ $r->print(&mt('Folder: [_1]'),$data{'realm'});
+ } elsif ($data{'realm_type'} eq 'symb') {
+ my ($map,$resid,$url) =
+ &Apache::lonnet::decode_symb($data{'realm'});
+ $r->print(&mt('Resource: [_1]with ID: [_2]in folder [_3]',
+ $url.' ',
+ $resid.' ',$map));
+ }
+ $r->print(' '.&mt('Part: [_1]',$data{'parameter_part'}));
+ $r->print('');
- }
+ }
}
$r->print(&Apache::loncommon::end_data_table().''.
' '.
'
');
+ &endSettingsScreen($r);
$r->print(&Apache::loncommon::end_page());
}
+# Overview mode, UI to shift all dates.
sub date_shift_one {
my ($r) = @_;
my $dom = $env{'course.'.$env{'request.course.id'}.'.domain'};
my $crs = $env{'course.'.$env{'request.course.id'}.'.num'};
- my $sec = $env{'request.course.sec'};
+ my $crstype = $env{'course.'.$env{'request.course.id'}.'.type'};
+
&Apache::lonhtmlcommon::add_breadcrumb({href=>'/adm/parmset?action=dateshift1&timebase='.$env{'form.timebase'},
text=>"Shifting Dates"});
- my $submit_text = &mt('Shift all dates accordingly');
- if ($sec ne '') {
- my @groups;
- if ($env{'request.course.groups'} ne '') {
- @groups = split(/:/,$env{'request.course.groups'});
- }
- if (@groups) {
- $submit_text = &mt("Shift dates set just for your section/group(s), accordingly");
- } else {
- $submit_text = &mt("Shift dates set just for your section, accordingly");
- }
- }
my $start_page=&Apache::loncommon::start_page('Shift Dates');
my $breadcrumbs = &Apache::lonhtmlcommon::breadcrumbs('Shift');
$r->print($start_page.$breadcrumbs);
+ &startSettingsScreen($r,'parmset',$crstype);
$r->print('');
+ ' ');
+ &endSettingsScreen($r);
$r->print(&Apache::loncommon::end_page());
}
+# Overview mode, UI to shift all dates (second form).
sub date_shift_two {
my ($r) = @_;
my $dom = $env{'course.'.$env{'request.course.id'}.'.domain'};
my $crs = $env{'course.'.$env{'request.course.id'}.'.num'};
- my $sec = $env{'request.course.sec'};
+ my $crstype = $env{'course.'.$env{'request.course.id'}.'.type'};
&Apache::lonhtmlcommon::add_breadcrumb({href=>'/adm/parmset?action=dateshift1&timebase='.$env{'form.timebase'},
text=>"Shifting Dates"});
my $start_page=&Apache::loncommon::start_page('Shift Dates');
my $breadcrumbs = &Apache::lonhtmlcommon::breadcrumbs('Shift');
$r->print($start_page.$breadcrumbs);
+ &startSettingsScreen($r,'parmset',$crstype);
my $timeshifted=&Apache::lonhtmlcommon::get_date_from_form('timeshifted');
- $r->print(''.&mt('Shift Dates').' ');
- if ($sec ne '') {
- my @groups;
- if ($env{'request.course.groups'} ne '') {
- @groups = split(/:/,$env{'request.course.groups'});
- }
- if (@groups) {
- $r->print(''.
- &mt("Shift dates set just for your section/group(s), such that [_1] becomes [_2]",
- &Apache::lonlocal::locallocaltime($env{'form.timebase'}),
- &Apache::lonlocal::locallocaltime($timeshifted)).
- '
');
- } else {
- $r->print(''.
- &mt("Shift dates set just for your section, such that [_1] becomes [_2]",
- &Apache::lonlocal::locallocaltime($env{'form.timebase'}),
- &Apache::lonlocal::locallocaltime($timeshifted)).
- '
');
- }
- } else {
- $r->print(''.&mt('Shifting all dates such that [_1] becomes [_2]',
- &Apache::lonlocal::locallocaltime($env{'form.timebase'}),
- &Apache::lonlocal::locallocaltime($timeshifted)).
- '
');
- }
+ $r->print(''.&mt('Shift Dates').' '.
+ ''.&mt('Shifting all dates such that [_1] becomes [_2]',
+ &Apache::lonlocal::locallocaltime($env{'form.timebase'}),
+ &Apache::lonlocal::locallocaltime($timeshifted)).'
');
my $delta=$timeshifted-$env{'form.timebase'};
- my $numchanges = 0;
- my $result = &dateshift($delta,\$numchanges);
- if ($result eq 'ok') {
- $r->print(
- &Apache::lonhtmlcommon::confirm_success(&mt('Completed shifting of [quant,_1,date setting]',
- $numchanges)));
- } elsif ($result eq 'con_delayed') {
- $r->print(
- &Apache::lonhtmlcommon::confirm_success(&mt('Queued shifting of [quant,_1,date setting]',
- $numchanges)));
- } else {
- $r->print(
- &Apache::lonhtmlcommon::confirm_success(&mt('An error occurred attempting to shift dates'),1));
- }
+ &dateshift($delta);
$r->print(
+ &Apache::lonhtmlcommon::confirm_success(&mt('Done')).
' '.
&Apache::lonhtmlcommon::actionbox(
[''.&mt('Content and Problem Settings').' ']));
+ &endSettingsScreen($r);
$r->print(&Apache::loncommon::end_page());
}
@@ -5065,29 +4642,30 @@ sub parse_key {
($key=~/^$env{'request.course.id'}\.(?:(.+)\.)*([\w\s]+)\.(\w+)$/);
$data{'scope_type'} = 'all';
if ($middle=~/^\[(.*)\]/) {
- $data{'scope'} = $1;
- if ($data{'scope'}=~/^useropt\:($match_username)\:($match_domain)/) {
- $data{'scope_type'} = 'user';
- $data{'scope'} = [$1,$2];
- } else {
- $data{'scope_type'} = 'secgroup';
- }
- $middle=~s/^\[(.*)\]//;
+ $data{'scope'} = $1;
+ if ($data{'scope'}=~/^useropt\:($match_username)\:($match_domain)/) {
+ $data{'scope_type'} = 'user';
+ $data{'scope'} = [$1,$2];
+ } else {
+ #FIXME check for group scope
+ $data{'scope_type'} = 'section';
+ }
+ $middle=~s/^\[(.*)\]//;
}
$middle=~s/\.+$//;
$middle=~s/^\.+//;
$data{'realm_type'}='all';
if ($middle=~/^(.+)\_\_\_\(all\)$/) {
- $data{'realm'} = $1;
- $data{'realm_type'} = 'folder';
- $data{'realm_title'} = &Apache::lonnet::gettitle($data{'realm'});
- ($data{'realm_exists'}) = &Apache::lonnet::is_on_map($data{'realm'});
+ $data{'realm'} = $1;
+ $data{'realm_type'} = 'folder';
+ $data{'realm_title'} = &Apache::lonnet::gettitle($data{'realm'});
+ ($data{'realm_exists'}) = &Apache::lonnet::is_on_map($data{'realm'});
} elsif ($middle) {
- $data{'realm'} = $middle;
- $data{'realm_type'} = 'symb';
- $data{'realm_title'} = &Apache::lonnet::gettitle($data{'realm'});
- my ($map,$resid,$url) = &Apache::lonnet::decode_symb($data{'realm'});
- $data{'realm_exists'} = &Apache::lonnet::symbverify($data{'realm'},$url);
+ $data{'realm'} = $middle;
+ $data{'realm_type'} = 'symb';
+ $data{'realm_title'} = &Apache::lonnet::gettitle($data{'realm'});
+ my ($map,$resid,$url) = &Apache::lonnet::decode_symb($data{'realm'});
+ $data{'realm_exists'} = &Apache::lonnet::symbverify($data{'realm'},$url);
}
$data{'parameter_part'} = $part;
@@ -5098,11 +4676,15 @@ sub parse_key {
sub header {
- return &Apache::loncommon::start_page('Content and Problem Settings');
+ return &Apache::loncommon::start_page('Settings');
}
+##################################################
+# MAIN MENU
+##################################################
+
sub print_main_menu {
my ($r,$parm_permission)=@_;
#
@@ -5111,6 +4693,7 @@ sub print_main_menu {
my $crstype = &Apache::loncommon::course_type();
my $lc_crstype = lc($crstype);
+ &startSettingsScreen($r,'parmset',$crstype);
$r->print(<
@@ -5121,73 +4704,35 @@ ENDMAINFORMHEAD
my $vgr = &Apache::lonnet::allowed('vgr',$env{'request.course.id'});
my $mgr = &Apache::lonnet::allowed('mgr',$env{'request.course.id'});
my $dcm = &Apache::lonnet::allowed('dcm',$env{'request.course.id'});
- my $vcb = &Apache::lonnet::allowed('vcb',$env{'request.course.id'});
- my $vpa = &Apache::lonnet::allowed('vpa',$env{'request.course.id'});
if ((!$dcm) && ($env{'request.course.sec'} ne '')) {
$dcm = &Apache::lonnet::allowed('dcm',$env{'request.course.id'}.
'/'.$env{'request.course.sec'});
}
- if ((!$vcb) && ($env{'request.course.sec'} ne '')) {
- $vcb = &Apache::lonnet::allowed('vcb',$env{'request.course.id'}.
- '/'.$env{'request.course.sec'});
- }
- my (%linktext,%linktitle,%url);
- if ($parm_permission->{'edit'}) {
- %linktext = (
- newoverview => 'Edit Resource Parameters - Overview Mode',
- settable => 'Edit Resource Parameters - Table Mode',
- setoverview => 'Modify Resource Parameters - Overview Mode',
- );
- %linktitle = (
- newoverview => 'Set/Modify resource parameters in overview mode.',
- settable => 'Set/Modify resource parameters in table mode.',
- setoverview => 'Set/Modify existing resource parameters in overview mode.',
- );
- } else {
- %linktext = (
- newoverview => 'View Resource Parameters - Overview Mode',
- settable => 'View Resource Parameters - Table Mode',
- setoverview => 'View Resource Parameters - Overview Mode',
- );
- %linktitle = (
- newoverview => 'Display resource parameters in overview mode.',
- settable => 'Display resource parameters in table mode.',
- setoverview => 'Display existing resource parameters in overview mode.',
- );
- }
- if ($mgr) {
- $linktext{'resettimes'} = 'Reset Student Access Times';
- $linktitle{'resettimes'} = "Reset access times for folders/maps, resources or the $lc_crstype.";
- $url{'resettimes'} = '/adm/helper/resettimes.helper';
- } elsif ($vgr) {
- $linktext{'resettimes'} = 'Display Student Access Times',
- $linktitle{'resettimes'} = "Display access times for folders/maps, resources or the $lc_crstype.",
- $url{'resettimes'} = '/adm/accesstimes';
- }
+
my @menu =
( { categorytitle=>"Content Settings for this $crstype",
items => [
{ linktext => 'Portfolio Metadata',
url => '/adm/parmset?action=setrestrictmeta',
- permission => $parm_permission->{'setrestrictmeta'},
+ permission => $parm_permission,
linktitle => "Restrict metadata for this $lc_crstype." ,
icon =>'contact-new.png' ,
},
- { linktext => $linktext{'resettimes'},
- url => $url{'resettimes'},
- permission => ($vgr || $mgr),
- linktitle => $linktitle{'resettimes'},
- icon => 'start-here.png',
+ { linktext => 'Reset Student Access Times',
+ url => '/adm/helper/resettimes.helper',
+ permission => $mgr,
+ linktitle => "Reset access times for folders/maps, resources or the $lc_crstype." ,
+ icon => 'start-here.png' ,
},
{ linktext => 'Blocking Communication/Resource Access',
url => '/adm/setblock',
- permission => ($vcb || $dcm),
+ permission => $dcm,
linktitle => 'Configure blocking of communication/collaboration and access to resources during an exam',
icon => 'comblock.png',
},
{ linktext => 'Set Parameter Setting Default Actions',
url => '/adm/parmset?action=setdefaults',
- permission => $parm_permission->{'setdefaults'},
+ permission => $parm_permission,
linktitle =>'Set default actions for parameters.' ,
icon => 'folder-new.png' ,
}]},
@@ -5195,48 +4740,54 @@ ENDMAINFORMHEAD
items => [
{ linktext => 'Edit Resource Parameters - Helper Mode',
url => '/adm/helper/parameter.helper',
- permission => $parm_permission->{'helper'},
+ permission => $parm_permission,
linktitle =>'Set/Modify resource parameters in helper mode.' ,
icon => 'dialog-information.png' ,
#help => 'Parameter_Helper',
},
- { linktext => $linktext{'newoverview'},
+ { linktext => 'Edit Resource Parameters - Overview Mode',
url => '/adm/parmset?action=newoverview',
- permission => $parm_permission->{'newoverview'},
- linktitle => $linktitle{'newoverview'},
- icon => 'edit-find.png',
+ permission => $parm_permission,
+ linktitle =>'Set/Modify resource parameters in overview mode.' ,
+ icon => 'edit-find.png' ,
#help => 'Parameter_Overview',
},
- { linktext => $linktext{'settable'},
+ { linktext => 'Edit Resource Parameters - Table Mode',
url => '/adm/parmset?action=settable',
- permission => $parm_permission->{'settable'},
- linktitle => $linktitle{'settable'},
- icon => 'edit-copy.png',
+ permission => $parm_permission,
+ linktitle =>'Set/Modify resource parameters in table mode.' ,
+ icon => 'edit-copy.png' ,
#help => 'Table_Mode',
}]},
{ categorytitle => 'Existing Parameter Settings for Resources',
items => [
- { linktext => $linktext{'setoverview'},
+ { linktext => 'Modify Resource Parameters - Overview Mode',
url => '/adm/parmset?action=setoverview',
- permission => $parm_permission->{'setoverview'},
- linktitle => $linktitle{'setoverview'},
- icon => 'preferences-desktop-wallpaper.png',
+ permission => $parm_permission,
+ linktitle =>'Set/Modify existing resource parameters in overview mode.' ,
+ icon => 'preferences-desktop-wallpaper.png' ,
#help => 'Parameter_Overview',
},
{ linktext => 'Change Log',
url => '/adm/parmset?action=parameterchangelog',
- permission => $parm_permission->{'parameterchangelog'},
+ permission => $parm_permission,
linktitle =>"View parameter and $lc_crstype blog posting/user notification change log." ,
icon => 'document-properties.png',
}]}
);
$r->print(&Apache::lonhtmlcommon::generate_menu(@menu));
- $r->print(''.&Apache::loncommon::end_page());
+ $r->print('');
+ &endSettingsScreen($r);
+ $r->print(&Apache::loncommon::end_page());
return;
}
+##################################################
+# PORTFOLIO METADATA
+##################################################
+
sub output_row {
my ($r, $field_name, $field_text, $added_flag) = @_;
my $output;
@@ -5258,14 +4809,14 @@ sub output_row {
$output .= ''.$field_text.': ';
$output .= &Apache::loncommon::end_data_table_row();
foreach my $opt (@options) {
- my $checked = ($options =~ m/$opt->[0]/) ? ' checked="checked" ' : '' ;
- $output .= &Apache::loncommon::continue_data_table_row();
- $output .= ''.(' ' x 5).'
- '.
- &mt($opt->[1]).' ';
- $output .= &Apache::loncommon::end_data_table_row();
- }
+ my $checked = ($options =~ m/$opt->[0]/) ? ' checked="checked" ' : '' ;
+ $output .= &Apache::loncommon::continue_data_table_row();
+ $output .= ''.(' ' x 5).'
+ '.
+ &mt($opt->[1]).' ';
+ $output .= &Apache::loncommon::end_data_table_row();
+ }
$output .= &Apache::loncommon::continue_data_table_row();
$output .= ''.(' ' x 10).' ';
$output .= &Apache::loncommon::end_data_table_row();
@@ -5278,52 +4829,55 @@ sub output_row {
$multiple_checked = ' checked="checked"';
$single_checked = '';
}
- $output .= &Apache::loncommon::continue_data_table_row();
- $output .= ''.(' ' x 10).'
-
- '.&mt('Student may select multiple choices from list').' ';
- $output .= &Apache::loncommon::end_data_table_row();
- $output .= &Apache::loncommon::continue_data_table_row();
- $output .= ''.(' ' x 10).'
-
- '.&mt('Student may select only one choice from list').' ';
- $output .= &Apache::loncommon::end_data_table_row();
+ $output .= &Apache::loncommon::continue_data_table_row();
+ $output .= ''.(' ' x 10).'
+
+ '.&mt('Student may select multiple choices from list').' ';
+ $output .= &Apache::loncommon::end_data_table_row();
+ $output .= &Apache::loncommon::continue_data_table_row();
+ $output .= ''.(' ' x 10).'
+
+ '.&mt('Student may select only one choice from list').' ';
+ $output .= &Apache::loncommon::end_data_table_row();
}
return ($output);
}
-
+# UI to order portfolio metadata fields.
sub order_meta_fields {
my ($r)=@_;
my $idx = 1;
my $dom = $env{'course.'.$env{'request.course.id'}.'.domain'};
my $crs = $env{'course.'.$env{'request.course.id'}.'.num'};
+ my $crstype = $env{'course.'.$env{'request.course.id'}.'.type'};;
$r->print(&Apache::loncommon::start_page('Order Metadata Fields'));
- &Apache::lonhtmlcommon::add_breadcrumb({href=>'/adm/parmset?action=addmetadata',
+ &Apache::lonhtmlcommon::add_breadcrumb(
+ {href=>'/adm/parmset?action=addmetadata',
text=>"Add Metadata Field"});
- &Apache::lonhtmlcommon::add_breadcrumb
- ({href=>"/adm/parmset?action=setrestrictmeta",
- text=>"Restrict Metadata"},
- {text=>"Order Metadata"});
+ &Apache::lonhtmlcommon::add_breadcrumb(
+ {href=>"/adm/parmset?action=setrestrictmeta",
+ text=>"Restrict Metadata"},
+ {text=>"Order Metadata"});
$r->print(&Apache::lonhtmlcommon::breadcrumbs('Order Metadata'));
+ &startSettingsScreen($r,'parmset',$crstype);
if ($env{'form.storeorder'}) {
my $newpos = $env{'form.newpos'} - 1;
my $currentpos = $env{'form.currentpos'} - 1;
my @neworder = ();
- my @oldorder = split /,/,$env{'course.'.$env{'request.course.id'}.'.metadata.addedorder'};
+ my @oldorder = split(/,/,$env{'course.'.$env{'request.course.id'}.'.metadata.addedorder'});
my $i;
if ($newpos > $currentpos) {
# moving stuff up
for ($i=0;$i<$currentpos;$i++) {
- $neworder[$i]=$oldorder[$i];
+ $neworder[$i]=$oldorder[$i];
}
for ($i=$currentpos;$i<$newpos;$i++) {
- $neworder[$i]=$oldorder[$i+1];
+ $neworder[$i]=$oldorder[$i+1];
}
$neworder[$newpos]=$oldorder[$currentpos];
for ($i=$newpos+1;$i<=$#oldorder;$i++) {
- $neworder[$i]=$oldorder[$i];
+ $neworder[$i]=$oldorder[$i];
}
} else {
# moving stuff down
@@ -5338,17 +4892,17 @@ sub order_meta_fields {
$neworder[$i]=$oldorder[$i];
}
}
- my $ordered_fields = join ",", @neworder;
+ my $ordered_fields = join ",", @neworder;
my $put_result = &Apache::lonnet::put('environment',
- {'metadata.addedorder'=>$ordered_fields},$dom,$crs);
- &Apache::lonnet::appenv({'course.'.$env{'request.course.id'}.'.metadata.addedorder' => $ordered_fields});
+ {'metadata.addedorder'=>$ordered_fields},$dom,$crs);
+ &Apache::lonnet::appenv({'course.'.$env{'request.course.id'}.'.metadata.addedorder' => $ordered_fields});
}
my $fields = &get_added_meta_fieldnames($env{'request.course.id'});
my $ordered_fields;
- my @fields_in_order = split /,/,$env{'course.'.$env{'request.course.id'}.'.metadata.addedorder'};
+ my @fields_in_order = split(/,/,$env{'course.'.$env{'request.course.id'}.'.metadata.addedorder'});
if (!@fields_in_order) {
# no order found, pick sorted order then create metadata.addedorder key.
- foreach my $key (sort keys %$fields) {
+ foreach my $key (sort(keys(%$fields))) {
push @fields_in_order, $key;
$ordered_fields = join ",", @fields_in_order;
}
@@ -5376,6 +4930,7 @@ sub order_meta_fields {
$idx ++;
}
$r->print('');
+ &endSettingsScreen($r);
return 'ok';
}
@@ -5384,7 +4939,7 @@ sub continue {
my $output;
$output .= '');
}
- $r->print(' '.
- &mt('[_1]Or[_2] you may enter a new metadata field name.',
- '',' ').
- '');
+ &endSettingsScreen($r);
}
+# Display or save portfolio metadata.
sub setrestrictmeta {
my ($r)=@_;
my $next_meta;
@@ -5463,13 +5011,10 @@ sub setrestrictmeta {
$r->print(&Apache::lonhtmlcommon::breadcrumbs('Restrict Metadata'));
my $dom = $env{'course.'.$env{'request.course.id'}.'.domain'};
my $crs = $env{'course.'.$env{'request.course.id'}.'.num'};
+ my $crstype = $env{'course.'.$env{'request.course.id'}.'.type'};
+ &startSettingsScreen($r,'parmset',$crstype);
my $key_base = $env{'course.'.$env{'request.course.id'}.'.'};
my $save_field = '';
- my %lt = &Apache::lonlocal::texthash(
- addm => 'Add Metadata Field',
- ordm => 'Order Metadata Fields',
- save => 'Save',
- );
if ($env{'form.restrictmeta'}) {
foreach my $field (sort(keys(%env))) {
if ($field=~m/^form.(.+)_(.+)$/) {
@@ -5494,10 +5039,10 @@ sub setrestrictmeta {
$options.='deleted,';
}
my $name = $save_field;
- $put_result = &Apache::lonnet::put('environment',
- {'metadata.'.$meta_field.'.options'=>$options,
- 'metadata.'.$meta_field.'.values'=>$env{'form.'.$meta_field.'_values'},
- },$dom,$crs);
+ $put_result = &Apache::lonnet::put('environment',
+ {'metadata.'.$meta_field.'.options'=>$options,
+ 'metadata.'.$meta_field.'.values'=>$env{'form.'.$meta_field.'_values'},
+ },$dom,$crs);
}
}
}
@@ -5508,25 +5053,28 @@ sub setrestrictmeta {
my %metadata_fields = &Apache::lonmeta::fieldnames('portfolio');
# Now get possible added metadata fields
my $added_metadata_fields = &get_added_meta_fieldnames($env{'request.course.id'});
+ my $row_alt = 1;
$output .= &Apache::loncommon::start_data_table();
foreach my $field (sort(keys(%metadata_fields))) {
if ($field ne 'courserestricted') {
- $output.= &output_row($r, $field, $metadata_fields{$field});
- }
+ $row_alt = $row_alt ? 0 : 1;
+ $output.= &output_row($r, $field, $metadata_fields{$field});
+ }
}
my $buttons = (<
+