:
+
+=back
+
=cut
##################################################
@@ -459,9 +770,9 @@ sub assessparms {
my $r=shift;
# -------------------------------------------------------- Variable declaration
- my %allkeys;
- my %allmaps;
- my %alllevs;
+ my %allkeys=();
+ my %allmaps=();
+ my %alllevs=();
$alllevs{'Resource Level'}='full';
# $alllevs{'Resource Level [BRIEF]'}='brief';
@@ -483,16 +794,22 @@ sub assessparms {
my $message='';
$csec=$ENV{'form.csec'};
- $udom=$ENV{'form.udom'};
- unless ($udom) { $udom=$r->dir_config('lonDefDomain'); }
+ if ($udom=$ENV{'form.udom'}) {
+ } elsif ($udom=$ENV{'request.role.domain'}) {
+ } elsif ($udom=$ENV{'user.domain'}) {
+ } else {
+ $udom=$r->dir_config('lonDefDomain');
+ }
- my @pscat=&get_env_multiple('form.pscat');
+ my @pscat=&Apache::loncommon::get_env_multiple('form.pscat');
my $pschp=$ENV{'form.pschp'};
- my @psprt=&get_env_multiple('form.psprt');
+ my @psprt=&Apache::loncommon::get_env_multiple('form.psprt');
+ if (!@psprt) { $psprt[0]='0'; }
my $showoptions=$ENV{'form.showoptions'};
my $pssymb='';
my $parmlev='';
+ my $trimheader='';
my $prevvisit=$ENV{'form.prevvisit'};
# unless ($parmlev==$ENV{'form.parmlev'}) {
@@ -512,14 +829,16 @@ sub assessparms {
my $url=$ENV{'form.url'};
$url=~s-^http://($ENV{'SERVER_NAME'}|$ENV{'HTTP_HOST'})--;
$pssymb=&Apache::lonnet::symbread($url);
- @pscat='all';
+ if (!@pscat) { @pscat=('all'); }
$pschp='';
$parmlev = 'full';
+ $trimheader='yes';
} elsif ($ENV{'form.symb'}) {
$pssymb=$ENV{'form.symb'};
- @pscat='all';
+ if (!@pscat) { @pscat=('all'); }
$pschp='';
$parmlev = 'full';
+ $trimheader='yes';
} else {
$ENV{'form.url'}='';
}
@@ -531,7 +850,8 @@ sub assessparms {
$id='';
} else {
$message=
- "Unknown ID '$id' at domain '$udom' ";
+ "".&mt("Unknown ID")." '$id' ".
+ &mt('at domain')." '$udom' ";
}
} else {
$uname=$ENV{'form.uname'};
@@ -542,24 +862,25 @@ sub assessparms {
$uhome=&Apache::lonnet::homeserver($uname,$udom);
if ($uhome eq 'no_host') {
$message=
- "Unknown user '$uname' at domain '$udom' ";
+ "".&mt("Unknown user")." '$uname' ".
+ &mt("at domain")." '$udom' ";
$uname='';
} else {
- $csec=&Apache::lonnet::usection($udom,$uname,
- $ENV{'request.course.id'});
+ $csec=&Apache::lonnet::getsection($udom,$uname,
+ $ENV{'request.course.id'});
if ($csec eq '-1') {
$message="".
- "User '$uname' at domain '$udom' not ".
- "in this course ";
+ &mt("User")." '$uname' ".&mt("at domain")." '$udom' ".
+ &mt("not in this course")."";
$uname='';
$csec=$ENV{'form.csec'};
} else {
my %name=&Apache::lonnet::userenvironment($udom,$uname,
('firstname','middlename','lastname','generation','id'));
- $message="\n\nFull Name: ".
+ $message="\n
\n".&mt("Full Name").": ".
$name{'firstname'}.' '.$name{'middlename'}.' '
.$name{'lastname'}.' '.$name{'generation'}.
- " \nID: ".$name{'id'}.'
';
+ " \n".&mt('ID').": ".$name{'id'}.'
';
}
}
}
@@ -580,124 +901,26 @@ sub assessparms {
$r->print("Unable to access parameter data. (File $ENV{'request.course.fn'}_parms.db not tieable)");
return ;
}
+
# --------------------------------------------------------- Get all assessments
- foreach (keys %bighash) {
- if ($_=~/^src\_(\d+)\.(\d+)$/) {
- my $mapid=$1;
- my $resid=$2;
- my $id=$mapid.'.'.$resid;
- my $srcf=$bighash{$_};
- if ($srcf=~/\.(problem|exam|quiz|assess|survey|form)$/) {
- $ids[$#ids+1]=$id;
- $typep{$id}=$1;
- $keyp{$id}='';
- foreach (split(/\,/,&Apache::lonnet::metadata($srcf,'keys'))) {
- if ($_=~/^parameter\_(.*)/) {
- my $key=$_;
- my $allkey=$1;
- $allkey=~s/\_/\./g;
- my $display= &Apache::lonnet::metadata($srcf,$key.'.display');
- my $name=&Apache::lonnet::metadata($srcf,$key.'.name');
- my $part= &Apache::lonnet::metadata($srcf,$key.'.part');
- my $parmdis = $display;
- $parmdis =~ s|(\[Part.*$)||g;
- my $partkey = $part;
- $partkey =~ tr|_|.|;
- $allparms{$name} = $parmdis;
- $allparts{$part} = "[Part $part]";
- $allkeys{$allkey}=$display;
- if ($allkey eq $fcat) {
- $defp{$id}= &Apache::lonnet::metadata($srcf,$key);
- }
- if ($keyp{$id}) {
- $keyp{$id}.=','.$key;
- } else {
- $keyp{$id}=$key;
- }
- }
- }
- $mapp{$id}=
- &Apache::lonnet::declutter($bighash{'map_id_'.$mapid});
- $mapp{$mapid}=$mapp{$id};
- $allmaps{$mapid}=$mapp{$id};
- $symbp{$id}=$mapp{$id}.
- '___'.$resid.'___'.
- &Apache::lonnet::declutter($srcf);
- $symbp{$mapid}=$mapp{$id}.'___(all)';
- }
- }
- }
+ extractResourceInformation(\%bighash, \@ids, \%typep,\%keyp, \%allparms, \%allparts, \%allkeys, \%allmaps, $fcat, \%defp, \%mapp, \%symbp,\%maptitles);
+
$mapp{'0.0'} = '';
$symbp{'0.0'} = '';
+
# ---------------------------------------------------------- Anything to store?
if ($ENV{'form.pres_marker'}) {
- my ($sresid,$spnam,$snum)=split(/\&/,$ENV{'form.pres_marker'});
- $spnam=~s/\_([^\_]+)$/\.$1/;
-# ---------------------------------------------------------- Construct prefixes
-
- my $symbparm=$symbp{$sresid}.'.'.$spnam;
- my $mapparm=$mapp{$sresid}.'___(all).'.$spnam;
-
- my $seclevel=$ENV{'request.course.id'}.'.['.$csec.'].'.$spnam;
- my $seclevelr=$ENV{'request.course.id'}.'.['.$csec.'].'.$symbparm;
- my $seclevelm=$ENV{'request.course.id'}.'.['.$csec.'].'.$mapparm;
-
- my $courselevel=$ENV{'request.course.id'}.'.'.$spnam;
- my $courselevelr=$ENV{'request.course.id'}.'.'.$symbparm;
- my $courselevelm=$ENV{'request.course.id'}.'.'.$mapparm;
-
- my $storeunder='';
- if (($snum==9) || ($snum==3)) { $storeunder=$courselevel; }
- if (($snum==8) || ($snum==2)) { $storeunder=$courselevelm; }
- if (($snum==7) || ($snum==1)) { $storeunder=$courselevelr; }
- if ($snum==6) { $storeunder=$seclevel; }
- if ($snum==5) { $storeunder=$seclevelm; }
- if ($snum==4) { $storeunder=$seclevelr; }
-
- my %storecontent = ($storeunder => $ENV{'form.pres_value'},
- $storeunder.'type' => $ENV{'form.pres_type'});
- my $reply='';
- if ($snum>3) {
-# ---------------------------------------------------------------- Store Course
-#
-# Expire sheets
- &Apache::lonnet::expirespread('','','studentcalc');
- if (($snum==7) || ($snum==4)) {
- &Apache::lonnet::expirespread('','','assesscalc',$symbp{$sresid});
- } elsif (($snum==8) || ($snum==5)) {
- &Apache::lonnet::expirespread('','','assesscalc',$mapp{$sresid});
- } else {
- &Apache::lonnet::expirespread('','','assesscalc');
- }
-# Store parameter
- $reply=&Apache::lonnet::cput
- ('resourcedata',\%storecontent,
- $ENV{'course.'.$ENV{'request.course.id'}.'.domain'},
- $ENV{'course.'.$ENV{'request.course.id'}.'.num'});
- } else {
-# ------------------------------------------------------------------ Store User
-#
-# Expire sheets
- &Apache::lonnet::expirespread($uname,$udom,'studentcalc');
- if ($snum==1) {
- &Apache::lonnet::expirespread
- ($uname,$udom,'assesscalc',$symbp{$sresid});
- } elsif ($snum==2) {
- &Apache::lonnet::expirespread
- ($uname,$udom,'assesscalc',$mapp{$sresid});
- } else {
- &Apache::lonnet::expirespread($uname,$udom,'assesscalc');
- }
-# Store parameter
- $reply=&Apache::lonnet::cput
- ('resourcedata',\%storecontent,$udom,$uname);
- }
-
- if ($reply=~/^error\:(.*)/) {
- $message.="Write Error: $1 ";
- }
+ $message.=&storeparm(split(/\&/,$ENV{'form.pres_marker'}),
+ $ENV{'form.pres_value'},
+ $ENV{'form.pres_type'});
# ---------------------------------------------------------------- Done storing
+ $message.='
'.&mt('Changes can take up to 10 minutes before being active for all students.').&Apache::loncommon::help_open_topic('Caching').' ';
}
+# --------------------------------------------- Devalidate cache for this child
+ &Apache::lonnet::devalidatecourseresdata(
+ $ENV{'course.'.$ENV{'request.course.id'}.'.num'},
+ $ENV{'course.'.$ENV{'request.course.id'}.'.domain'});
+ &Apache::lonnet::clear_EXT_cache_status();
# -------------------------------------------------------------- Get coursedata
%courseopt = &Apache::lonnet::dump
('resourcedata',
@@ -725,7 +948,17 @@ sub assessparms {
if ($pscat[0] eq "all" || !@pscat) {@pscat = (keys %allparms);}
if ($psprt[0] eq "all" || !@psprt) {@psprt = (keys %allparts);}
# ------------------------------------------------------------------ Start page
- &startpage($r,$id,$udom,$csec,$uname);
+
+ my $have_assesments=1;
+ if (scalar(keys(%allkeys)) eq 0) { $have_assesments=0; }
+
+ &startpage($r,$id,$udom,$csec,$uname,$have_assesments,$trimheader);
+
+ if (!$have_assesments) {
+ untie(%bighash);
+ untie(%parmhash);
+ return '';
+ }
# if ($ENV{'form.url'}) {
# $r->print(' ');
@@ -740,16 +973,11 @@ sub assessparms {
$r->print(''.$message.' ');
+ if (($prevvisit) || ($pschp) || ($pssymb)) {
+ $submitmessage = &mt("Update Course Assessment Parameter Display");
+ } else {
+ $submitmessage = &mt("Set/Modify Course Assessment Parameters");
+ }
+ $r->print(' ');
- my @temp_psprt;
- map {
- my $t = $_;
- push(@temp_psprt,
- grep {eval (/^$t\./ || ($_ == $t))} (keys %allparts));
- } @psprt;
+# my @temp_psprt;
+# foreach my $t (@psprt) {
+# push(@temp_psprt, grep {eval (/^$t\./ || ($_ == $t))} (keys %allparts));
+# }
- @psprt = @temp_psprt;
+# @psprt = @temp_psprt;
my @temp_pscat;
map {
@@ -892,39 +1137,56 @@ sub assessparms {
my $csuname=$ENV{'user.name'};
my $csudom=$ENV{'user.domain'};
-
if ($parmlev eq 'full' || $parmlev eq 'brief') {
-
my $coursespan=$csec?8:5;
$r->print('
');
$r->print(' ');
- $r->print('Any User ');
+ $r->print(''.&mt('Any User').' ');
if ($uname) {
$r->print("");
- $r->print("User $uname at Domain $udom ");
+ $r->print(&mt("User")." $uname ".&mt('at Domain')." $udom");
}
+ my %lt=&Apache::lonlocal::texthash(
+ 'pie' => "Parameter in Effect",
+ 'csv' => "Current Session Value",
+ 'at' => 'at',
+ 'rl' => "Resource Level",
+ 'ic' => 'in Course',
+ 'aut' => "Assessment URL and Title",
+ 'type' => 'Type',
+ 'emof' => "Enclosing Map or Folder",
+ 'part' => 'Part',
+ 'pn' => 'Parameter Name',
+ 'def' => 'default',
+ 'femof' => 'from Enclosing Map or Folder',
+ 'gen' => 'general',
+ 'foremf' => 'for Enclosing Map or Folder',
+ 'fr' => 'for Resource'
+ );
$r->print(<Parameter in Effect
-Current Session Value ($csuname at $csudom)
- Resource Level
-in Course
+$lt{'pie'}
+$lt{'csv'} ($csuname $lt{'at'} $csudom)
+$lt{'ic'} $lt{'rl'}
+$lt{'ic'}
+
ENDTABLETWO
if ($csec) {
- $r->print("in Section/Group $csec ");
+ $r->print("".
+ &mt("in Section/Group")." $csec ");
}
$r->print(<Assessment URL and Title Type
-Enclosing Map Part No. Parameter Name
-default from Enclosing Map
-general for Enclosing Map for Resource
+$lt{'aut'} $lt{'type'}
+$lt{'emof'} $lt{'part'} $lt{'pn'}
+$lt{'gen'} $lt{'femof'}
+$lt{'def'} $lt{'foremf'} $lt{'fr'}
ENDTABLEHEADFOUR
if ($csec) {
- $r->print('general for Enclosing Map for Resource ');
+ $r->print(''.&mt('general').' '.&mt('for Enclosing Map or Folder').' '.&mt('for Resource').' ');
}
if ($uname) {
- $r->print('general for Enclosing Map for Resource ');
+ $r->print(''.&mt('general').' '.&mt('for Enclosing Map or Folder').' '.&mt('for Resource').' ');
}
$r->print(' ');
@@ -937,18 +1199,20 @@ ENDTABLEHEADFOUR
my $rid=$_;
my ($inmapid)=($rid=~/\.(\d+)$/);
- if (($pschp eq 'all') || ($allmaps{$pschp} eq $mapp{$rid}) ||
- ($pssymb eq $symbp{$rid})) {
+ if ((!$pssymb &&
+ (($pschp eq 'all') || ($allmaps{$pschp} eq $mapp{$rid})))
+ ||
+ ($pssymb && $pssymb eq $symbp{$rid})) {
# ------------------------------------------------------ Entry for one resource
- if ($defbgone eq '"E0E099"') {
- $defbgone='"E0E0DD"';
+ if ($defbgone eq '"#E0E099"') {
+ $defbgone='"#E0E0DD"';
} else {
- $defbgone='"E0E099"';
+ $defbgone='"#E0E099"';
}
- if ($defbgtwo eq '"FFFF99"') {
- $defbgtwo='"FFFFDD"';
+ if ($defbgtwo eq '"#FFFF99"') {
+ $defbgtwo='"#FFFFDD"';
} else {
- $defbgtwo='"FFFF99"';
+ $defbgtwo='"#FFFF99"';
}
my $thistitle='';
my %name= ();
@@ -975,15 +1239,16 @@ ENDTABLEHEADFOUR
my $totalparms=scalar keys %name;
if ($totalparms>0) {
my $firstrow=1;
-
+ my $title=&Apache::lonnet::gettitle($uri);
$r->print(''.
join(' / ',split(/\//,$uri)).
' '.
- "$bighash{'title_'.$rid}");
+ " TARGET=_self>$title");
if ($thistitle) {
$r->print(' ('.$thistitle.')');
@@ -1034,8 +1299,8 @@ ENDTABLEHEADFOUR
#-------------------------------------------- for each map, gather information
my $mapid;
- foreach $mapid (keys %maplist) {
- my $maptitle = $allmaps{$mapid};
+ foreach $mapid (sort {$maplist{$a} cmp $maplist{$b}} keys %maplist) {
+ my $maptitle = $maplist{$mapid};
#----------------------- loop through ids and get all parameter types for map
#----------------------------------------- and associated information
@@ -1068,7 +1333,7 @@ ENDTABLEHEADFOUR
foreach (split(/\,/,$keyp{$rid})) {
my $tempkeyp = $_;
my $fullkeyp = $tempkeyp;
- $tempkeyp =~ s/_[\d_]+_/_0_/;
+ $tempkeyp =~ s/_\w+_/_0_/;
if ((grep $_ eq $fullkeyp, @catmarker) &&(!$name{$tempkeyp})) {
$part{$tempkeyp}="0";
@@ -1076,7 +1341,7 @@ ENDTABLEHEADFOUR
$display{$tempkeyp}=&Apache::lonnet::metadata($uri,$fullkeyp.'.display');
unless ($display{$tempkeyp}) { $display{$tempkeyp}=''; }
$display{$tempkeyp}.=' ('.$name{$tempkeyp}.')';
- $display{$tempkeyp} =~ s/_[\d_]+_/_0_/;
+ $display{$tempkeyp} =~ s/_\w+_/_0_/;
$default{$tempkeyp}=&Apache::lonnet::metadata($uri,$fullkeyp);
$type{$tempkeyp}=&Apache::lonnet::metadata($uri,$fullkeyp.'.type');
}
@@ -1085,10 +1350,12 @@ ENDTABLEHEADFOUR
} # end loop through ids
#---------------------------------------------------- print header information
+ my $foldermap=&mt($maptitle=~/^uploaded/?'Folder':'Map');
+ my $showtitle=$maptitles{$maptitle}.($maptitle!~/^uploaded/?' ['.$maptitle.']':'');
$r->print(<
-Set Defaults for All Resources in map
-$maptitle
+Set Defaults for All Resources in $foldermap
+$showtitle
Specifically for
ENDMAPONE
if ($uname) {
@@ -1096,22 +1363,25 @@ ENDMAPONE
('firstname','middlename','lastname','generation', 'id'));
my $person=$name{'firstname'}.' '.$name{'middlename'}.' '
.$name{'lastname'}.' '.$name{'generation'};
- $r->print("User $uname \($person\) in \n");
+ $r->print(&mt("User")." $uname \($person\) ".
+ &mt('in')." \n");
} else {
- $r->print("all users in \n");
+ $r->print("".&mt('all').' '.&mt('users in')." \n");
}
- if ($csec) {$r->print("Section $csec of \n")};
+ if ($csec) {$r->print(&mt("Section")." $csec ".
+ &mt('of')." \n")};
- $r->print("$coursename ");
- $r->print(" \n");
+ $r->print("$coursename ");
+ $r->print("\n");
#---------------------------------------------------------------- print table
$r->print('
');
- $r->print('Parameter Name ');
- $r->print('Default Value ');
- $r->print('Parameter in Effect ');
+ $r->print(''.&mt('Parameter Name').' ');
+ $r->print(''.&mt('Default Value').' ');
+ $r->print(''.&mt('Parameter in Effect').' ');
foreach (sort keys %name) {
+ $r->print('');
&print_row($r,$_,\%part,\%name,$mapid,\%default,
\%type,\%display,$defbgone,$defbgtwo,
$parmlev);
@@ -1150,14 +1420,14 @@ ENDMAPONE
foreach (split(/\,/,$keyp{$rid})) {
my $tempkeyp = $_;
my $fullkeyp = $tempkeyp;
- $tempkeyp =~ s/_[\d_]+_/_0_/;
+ $tempkeyp =~ s/_\w+_/_0_/;
if ((grep $_ eq $fullkeyp, @catmarker) &&(!$name{$tempkeyp})) {
$part{$tempkeyp}="0";
$name{$tempkeyp}=&Apache::lonnet::metadata($uri,$fullkeyp.'.name');
$display{$tempkeyp}=&Apache::lonnet::metadata($uri,$fullkeyp.'.display');
unless ($display{$tempkeyp}) { $display{$tempkeyp}=''; }
$display{$tempkeyp}.=' ('.$name{$tempkeyp}.')';
- $display{$tempkeyp} =~ s/_[\d_]+_/_0_/;
+ $display{$tempkeyp} =~ s/_\w+_/_0_/;
$default{$tempkeyp}=&Apache::lonnet::metadata($uri,$fullkeyp);
$type{$tempkeyp}=&Apache::lonnet::metadata($uri,$fullkeyp.'.type');
}
@@ -1165,30 +1435,31 @@ ENDMAPONE
} # end loop through ids
#---------------------------------------------------- print header information
+ my $setdef=&mt("Set Defaults for All Resources in Course");
$r->print(<
-Set Defaults for All Resources in Course
-$coursename
+ $setdef
+$coursename
ENDMAPONE
if ($uname) {
my %name=&Apache::lonnet::userenvironment($udom,$uname,
('firstname','middlename','lastname','generation', 'id'));
my $person=$name{'firstname'}.' '.$name{'middlename'}.' '
.$name{'lastname'}.' '.$name{'generation'};
- $r->print(" User $uname \($person\) \n");
+ $r->print(" ".&mt("User")." $uname \($person\) \n");
} else {
- $r->print("ALL USERS \n");
+ $r->print(" ".&mt("ALL")." ".&mt("USERS")." \n");
}
- if ($csec) {$r->print("Section $csec \n")};
- $r->print(" \n");
+ if ($csec) {$r->print(&mt("Section")." $csec \n")};
+ $r->print(" \n");
#---------------------------------------------------------------- print table
$r->print('
');
- $r->print('Parameter Name ');
- $r->print('Default Value ');
- $r->print('Parameter in Effect ');
+ $r->print(''.&mt('Parameter Name').' ');
+ $r->print(''.&mt('Default Value').' ');
+ $r->print(''.&mt('Parameter in Effect').' ');
foreach (sort keys %name) {
+ $r->print('');
&print_row($r,$_,\%part,\%name,$mapid,\%default,
\%type,\%display,$defbgone,$defbgtwo,$parmlev);
# $r->print(" resource.$part{$_}.$name{$_},$symbp{$mapid} \n");
@@ -1209,7 +1480,7 @@ ENDMAPONE
=item crsenv
-Show course data and parameters. This is a large routine that should
+Show and set course data and parameters. This is a large routine that should
be simplified and shortened... someday.
Inputs: $r
@@ -1223,168 +1494,551 @@ Returns: nothing
sub crsenv {
my $r=shift;
my $setoutput='';
+ my $bodytag=&Apache::loncommon::bodytag(
+ 'Set Course Environment Parameters');
my $dom = $ENV{'course.'.$ENV{'request.course.id'}.'.domain'};
my $crs = $ENV{'course.'.$ENV{'request.course.id'}.'.num'};
-# -------------------------------------------------- Go through list of changes
+
+ #
+ # Go through list of changes
foreach (keys %ENV) {
- if ($_=~/^form\.(.+)\_setparmval$/) {
- my $name=$1;
- my $value=$ENV{'form.'.$name.'_value'};
- if ($name eq 'newp') {
- $name=$ENV{'form.newp_name'};
- }
- if ($name eq 'url') {
- $value=~s/^\/res\///;
- my @tmp = &Apache::lonnet::get
- ('environment',['url'],$dom,$crs);
- $setoutput.='Backing up previous URL: '.
- &Apache::lonnet::put
- ('environment',
- {'top level map backup ' => $tmp[1] },
- $dom,$crs).
- ' ';
- }
- if ($name) {
- $setoutput.='Setting '.$name.' to '.
- $value.' : '.
- &Apache::lonnet::put
- ('environment',{$name=>$value},$dom,$crs).
- ' ';
- }
+ next if ($_!~/^form\.(.+)\_setparmval$/);
+ my $name = $1;
+ my $value = $ENV{'form.'.$name.'_value'};
+ if ($name eq 'newp') {
+ $name = $ENV{'form.newp_name'};
+ }
+ if ($name eq 'url') {
+ $value=~s/^\/res\///;
+ my $bkuptime=time;
+ my @tmp = &Apache::lonnet::get
+ ('environment',['url'],$dom,$crs);
+ $setoutput.=&mt('Backing up previous URL').': '.
+ &Apache::lonnet::put
+ ('environment',
+ {'top level map backup '.$bkuptime => $tmp[1] },
+ $dom,$crs).
+ ' ';
+ }
+ #
+ # Deal with modified default spreadsheets
+ if ($name =~ /^spreadsheet_default_(classcalc|
+ studentcalc|
+ assesscalc)$/x) {
+ my $sheettype = $1;
+ if ($sheettype eq 'classcalc') {
+ # no need to do anything since viewing the sheet will
+ # cause it to be updated.
+ } elsif ($sheettype eq 'studentcalc') {
+ # expire all the student spreadsheets
+ &Apache::lonnet::expirespread('','','studentcalc');
+ } else {
+ # expire all the assessment spreadsheets
+ # this includes non-default spreadsheets, but better to
+ # be safe than sorry.
+ &Apache::lonnet::expirespread('','','assesscalc');
+ # expire all the student spreadsheets
+ &Apache::lonnet::expirespread('','','studentcalc');
+ }
+ }
+ #
+ # Deal with the enrollment dates
+ if ($name =~ /^default_enrollment_(start|end)_date$/) {
+ $value=&Apache::lonhtmlcommon::get_date_from_form($name.'_value');
+ }
+ # Get existing cloners
+ my @oldcloner = ();
+ if ($name eq 'cloners') {
+ my %clonenames=&Apache::lonnet::dump('environment',$dom,$crs,'cloners');
+ if ($clonenames{'cloners'} =~ /,/) {
+ @oldcloner = split/,/,$clonenames{'cloners'};
+ } else {
+ $oldcloner[0] = $clonenames{'cloners'};
+ }
+ }
+ #
+ # Let the user know we made the changes
+ if ($name && defined($value)) {
+ if ($name eq 'cloners') {
+ $value =~ s/^,//;
+ $value =~ s/,$//;
+ }
+ my $put_result = &Apache::lonnet::put('environment',
+ {$name=>$value},$dom,$crs);
+ if ($put_result eq 'ok') {
+ $setoutput.=&mt('Set').' '.$name.' '.&mt('to').' '.$value.' . ';
+ if ($name eq 'cloners') {
+ &change_clone($value,\@oldcloner);
+ }
+ # Flush the course logs so course description is immediately updated
+ if ($name eq 'description' && defined($value)) {
+ &Apache::lonnet::flushcourselogs();
+ }
+ } else {
+ $setoutput.=&mt('Unable to set').' '.$name.' '.&mt('to').
+ ' '.$value.' '.&mt('due to').' '.$put_result.'. ';
+ }
}
}
+# ------------------------- Re-init course environment entries for this session
+
+ &Apache::lonnet::coursedescription($ENV{'request.course.id'});
+
# -------------------------------------------------------- Get parameters again
my %values=&Apache::lonnet::dump('environment',$dom,$crs);
+ my $SelectStyleFile=&mt('Select Style File');
+ my $SelectSpreadsheetFile=&mt('Select Spreadsheet File');
my $output='';
if (! exists($values{'con_lost'})) {
my %descriptions=
- ('url' => 'Top Level Map '.
+ ('url' => ''.&mt('Top Level Map').' '.
'".
- 'Browse '.
- 'Modification may make assessment data '.
- 'inaccessible ',
- 'description' => 'Course Description ',
- 'courseid' => 'Course ID or number '.
- '(internal, optional)',
- 'default_xml_style' => 'Default XML Style File '.
+ &mt('Select Map').' '.
+ &mt('Modification may make assessment data inaccessible').
+ ' ',
+ 'description' => ''.&mt('Course Description').' ',
+ 'courseid' => ''.&mt('Course ID or number').
+ ' '.
+ '('.&mt('internal').', '.&mt('optional').')',
+ 'cloners' => ''.&mt('Users allowed to clone course').' (user:domain,user:domain) '.&mt('Users with active Course Coordinator role in the course automatically have the right to clone it, and can be omitted from list.'),
+ 'grading' => ''.&mt('Grading').' '.
+ '"standard", "external", or "spreadsheet" '.&Apache::loncommon::help_open_topic('GradingOptions'),
+ 'default_xml_style' => ''.&mt('Default XML Style File').' '.
'Browse ",
- 'question.email' => 'Feedback Addresses for Content '.
- 'Questions (user:domain,'.
- 'user:domain,... )',
- 'comment.email' => 'Feedback Addresses for Comments '.
+ ",'sty')\">$SelectStyleFile ",
+ 'question.email' => ''.&mt('Feedback Addresses for Resource Content Question').
+ ' (user:domain,'.
+ 'user:domain(section;section;...;*;...),... )',
+ 'comment.email' => ''.&mt('Feedback Addresses for Course Content Comments').' '.
+ '(user:domain,user:domain(section;section;...;*;...),... )',
+ 'policy.email' => ''.&mt('Feedback Addresses for Course Policy').' '.
+ ' (user:domain,user:domain(section;section;...;*;...),... )',
+ 'hideemptyrows' => ''.&mt('Hide Empty Rows in Spreadsheets').' '.
+ '('.&mt('"[_1]" for default hiding','yes ').')',
+ 'pageseparators' => ''.&mt('Visibly Separate Items on Pages').' '.
+ '('.&mt('"[_1]" for visible separation','yes ').', '.
+ &mt('changes will not show until next login').')',
+ 'student_classlist_view' => ''.&mt('Allow students to view classlist.').' '.&mt('("all":students can view all sections,"section":students can only view their own section.blank or "disabled" prevents student view.'),
+
+ 'plc.roles.denied'=> ''.&mt('Disallow live chatroom use for Roles').
+ ' "st ": '.
+ &mt('student').', "ta ": '.
+ 'TA, "in ": '.
+ &mt('instructor').';'.&mt('role,role,...').' ) '.
+ Apache::loncommon::help_open_topic("Course_Disable_Discussion"),
+ 'plc.users.denied' =>
+ ''.&mt('Disallow live chatroom use for Users').' '.
'(user:domain,user:domain,... )',
- 'policy.email' => 'Feedback Addresses for Course Policy '.
- ' (user:domain,user:domain,... )',
- 'hideemptyrows' => 'Hide Empty Rows in Spreadsheets '.
- '("yes " for default hiding)',
- 'pageseparators' => 'Visibly Separate Items on Pages '.
- '("yes " for visible separation)',
- 'pch.roles.denied'=> 'Disallow Resource Discussion for '.
- 'Roles ' .
- Apache::loncommon::help_open_topic("Course_Disable_Discussion")
- ,
+
+ 'pch.roles.denied'=> ''.&mt('Disallow Resource Discussion for Roles').
+ ' "st ": '.
+ 'student, "ta ": '.
+ 'TA, "in ": '.
+ 'instructor;role,role,... ) '.
+ Apache::loncommon::help_open_topic("Course_Disable_Discussion"),
'pch.users.denied' =>
- 'Disallow Resource Discussion for Users '.
+ ''.&mt('Disallow Resource Discussion for Users').' '.
'(user:domain,user:domain,... )',
'spreadsheet_default_classcalc'
- => 'Default Course Spreadsheet '.
+ => ''.&mt('Default Course Spreadsheet').' '.
'Browse ",
+ ",'spreadsheet')\">$SelectSpreadsheetFile ",
'spreadsheet_default_studentcalc'
- => 'Default Student Spreadsheet '.
+ => ''.&mt('Default Student Spreadsheet').' '.
'Browse ",
+ ",'spreadsheet')\">$SelectSpreadsheetFile ",
'spreadsheet_default_assesscalc'
- => 'Default Assessment Spreadsheet '.
+ => ''.&mt('Default Assessment Spreadsheet').' '.
'Browse ",
- );
- foreach (keys(%values)) {
- unless ($descriptions{$_}) {
- $descriptions{$_}=$_;
- }
+ ",'spreadsheet')\">$SelectSpreadsheetFile ",
+ 'allow_limited_html_in_feedback'
+ => ''.&mt('Allow limited HTML in discussion posts').' '.
+ '('.&mt('Set value to "[_1]" to allow',"yes ").')',
+ 'allow_discussion_post_editing'
+ => ''.&mt('Allow users to edit/delete their own discussion posts').' '.
+ '('.&mt('Set value to "[_1]" to allow',"yes ").')',
+ 'rndseed'
+ => ''.&mt('Randomization algorithm used').' '.
+ ''.&mt('Modifying this will make problems').' '.
+ &mt('have different numbers and answers').' ',
+ 'receiptalg'
+ => ''.&mt('Receipt algorithm used').' '.
+ &mt('This controls how receipt numbers are generated.'),
+ 'suppress_tries'
+ => ''.&mt('Suppress number of tries in printing').' ('.
+ &mt('yes if supress').')',
+ 'problem_stream_switch'
+ => ''.&mt('Allow problems to be split over pages').' '.
+ ' ('.&mt('"[_1]" if allowed, anything else if not','yes ').')',
+ 'default_paper_size'
+ => ''.&mt('Default paper type').' '.
+ ' ('.&mt('supported types').': Letter [8 1/2x11 in], Legal [8 1/2x14 in],'.
+ ' Tabloid [11x17 in], Executive [7 1/2x10 in], A2 [420x594 mm],'.
+ ' A3 [297x420 mm], A4 [210x297 mm], A5 [148x210 mm], A6 [105x148 mm])',
+ 'anonymous_quiz'
+ => ''.&mt('Anonymous quiz/exam').' '.
+ ' ('.&mt('yes').' '.&mt('to avoid print students names').' )',
+ 'default_enrollment_start_date' => ''.&mt('Default beginning date when enrolling students').' ',
+ 'default_enrollment_end_date' => ''.&mt('Default ending date when enrolling students').' ',
+ 'nothideprivileged' => ''.&mt('Privileged users that should not be hidden on staff listings').' '.
+ ' (user:domain,user:domain,... )',
+ 'languages' => ''.&mt('Languages used').' ',
+ 'disable_receipt_display'
+ => ''.&mt('Disable display of problem receipts').' '.
+ ' ('.&mt('"[_1]" to disable, anything else if not','yes ').')',
+ 'disablesigfigs'
+ => ''.&mt('Disable checking of Significant Figures').' '.
+ ' ('.&mt('"[_1]" to disable, anything else if not','yes ').')',
+ 'tthoptions'
+ => ''.&mt('Default set of options to pass to tth/m when converting tex').' '
+ );
+ my @Display_Order = ('url','description','courseid','cloners','grading',
+ 'default_xml_style','pageseparators',
+ 'question.email','comment.email','policy.email',
+ 'student_classlist_view',
+ 'plc.roles.denied','plc.users.denied',
+ 'pch.roles.denied','pch.users.denied',
+ 'allow_limited_html_in_feedback',
+ 'allow_discussion_post_editing',
+ 'languages',
+ 'nothideprivileged',
+ 'rndseed',
+ 'receiptalg',
+ 'problem_stream_switch',
+ 'suppress_tries',
+ 'default_paper_size',
+ 'disable_receipt_display',
+ 'spreadsheet_default_classcalc',
+ 'spreadsheet_default_studentcalc',
+ 'spreadsheet_default_assesscalc',
+ 'hideemptyrows',
+ 'default_enrollment_start_date',
+ 'default_enrollment_end_date',
+ 'tthoptions',
+ 'disablesigfigs'
+ );
+ foreach my $parameter (sort(keys(%values))) {
+ unless ($parameter =~ m/^internal\./) {
+ if (! $descriptions{$parameter}) {
+ $descriptions{$parameter}=$parameter;
+ push(@Display_Order,$parameter);
+ }
+ }
}
- foreach (sort keys %descriptions) {
+ foreach my $parameter (@Display_Order) {
+ my $description = $descriptions{$parameter};
# onchange is javascript to automatically check the 'Set' button.
- my $onchange = 'onchange="javascript:window.document.forms'.
- '[\'envform\'].elements[\''.$_.'_setparmval\']'.
+ my $onchange = 'onFocus="javascript:window.document.forms'.
+ "['envform'].elements['".$parameter."_setparmval']".
'.checked=true;"';
- $output.=''.$descriptions{$_}.' '.
- ' '.
- ' '.
- ' '."\n";
+ $output .= ''.$description.' ';
+ if ($parameter =~ /^default_enrollment_(start|end)_date$/) {
+ $output .= ''.
+ &Apache::lonhtmlcommon::date_setter('envform',
+ $parameter.'_value',
+ $values{$parameter},
+ $onchange).
+ ' ';
+ } else {
+ $output .= ''.
+ &Apache::lonhtmlcommon::textbox($parameter.'_value',
+ $values{$parameter},
+ 40,$onchange).' ';
+ }
+ $output .= ''.
+ &Apache::lonhtmlcommon::checkbox($parameter.'_setparmval').
+ ' ';
+ $output .= " \n";
}
- my $onchange = 'onchange="javascript:window.document.forms'.
+ my $onchange = 'onFocus="javascript:window.document.forms'.
'[\'envform\'].elements[\'newp_setparmval\']'.
'.checked=true;"';
- $output.='Create New Environment Variable '.
+ $output.=''.&mt('Create New Environment Variable').' '.
''.
' '.
' ';
}
+ my %lt=&Apache::lonlocal::texthash(
+ 'par' => 'Parameter',
+ 'val' => 'Value',
+ 'set' => 'Set',
+ 'sce' => 'Set Course Environment'
+ );
+
+ my $Parameter=&mt('Parameter');
+ my $Value=&mt('Value');
+ my $Set=&mt('Set');
+ my $browse_js=&Apache::loncommon::browser_and_searcher_javascript('parmset');
+ my $html=&Apache::lonxml::xmlbegin();
$r->print(<
+$html
+
-
LON-CAPA Course Environment
-
-Set Course Parameters
+$bodytag
ENDENV
}
+##################################################
+
+my $tableopen;
+
+sub tablestart {
+ if ($tableopen) {
+ return '';
+ } else {
+ $tableopen=1;
+ return ''.&mt('Parameter').' '.
+ &mt('Delete').' '.&mt('Set to ...').' ';
+ }
+}
+
+sub tableend {
+ if ($tableopen) {
+ $tableopen=0;
+ return '
';
+ } else {
+ return'';
+ }
+}
+
+sub overview {
+ my $r=shift;
+ my $bodytag=&Apache::loncommon::bodytag(
+ 'Set/Modify Course Assessment Parameters');
+ my $dom = $ENV{'course.'.$ENV{'request.course.id'}.'.domain'};
+ my $crs = $ENV{'course.'.$ENV{'request.course.id'}.'.num'};
+ my $html=&Apache::lonxml::xmlbegin();
+ $r->print(<
+LON-CAPA Course Environment
+
+$bodytag
+