--- loncom/interface/lonparmset.pm 2005/06/18 18:51:50 1.230
+++ loncom/interface/lonparmset.pm 2006/04/10 21:40:08 1.282
@@ -1,7 +1,7 @@
# The LearningOnline Network with CAPA
# Handler to set parameters for assessments
#
-# $Id: lonparmset.pm,v 1.230 2005/06/18 18:51:50 www Exp $
+# $Id: lonparmset.pm,v 1.282 2006/04/10 21:40:08 albertel Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -88,16 +88,19 @@ Inputs: $what - a parameter spec (inclu
$id - a bighash Id number
$def - the resource's default value 'stupid emacs
-Returns: A list, the first item is the index into the remaining list of items of parm valuse that is the active one, the list consists of parm values at the 11 possible levels
+Returns: A list, the first item is the index into the remaining list of items of parm valuse that is the active one, the list consists of parm values at the 14 possible levels
-11 - General Course
-10 - Map or Folder level in course
-9- resource default
-8- map default
-7 - resource level in course
-6 - General for section
-5 - Map or Folder level for section
-4 - resource level in section
+14 - General Course
+13 - Map or Folder level in course
+12- resource default
+11- map default
+10 - resource level in course
+9 - General for section
+8 - Map or Folder level for section
+7 - resource level in section
+6 - General for group
+5 - Map or Folder level for group
+4 - resource level in group
3 - General for specific student
2 - Map or Folder level for specific student
1 - resource level for specific student
@@ -106,21 +109,18 @@ Returns: A list, the first item is the
##################################################
sub parmval {
- my ($what,$id,$def,$uname,$udom,$csec)=@_;
- return &parmval_by_symb($what,&symbcache($id),$def,$uname,$udom,$csec);
+ my ($what,$id,$def,$uname,$udom,$csec,$cgroup,$courseopt)=@_;
+ return &parmval_by_symb($what,&symbcache($id),$def,$uname,$udom,$csec,
+ $cgroup,$courseopt);
}
sub parmval_by_symb {
- my ($what,$symb,$def,$uname,$udom,$csec)=@_;
+ my ($what,$symb,$def,$uname,$udom,$csec,$cgroup,$courseopt)=@_;
# load caches
&cacheparmhash();
- my $cnum = $env{'course.'.$env{'request.course.id'}.'.num'};
- my $cdom = $env{'course.'.$env{'request.course.id'}.'.domain'};
my $useropt=&Apache::lonnet::get_userresdata($uname,$udom);
- my $courseopt=&Apache::lonnet::get_courseresdata($cnum,$cdom);
-
my $result='';
my @outpar=();
@@ -130,6 +130,10 @@ sub parmval_by_symb {
my $symbparm=$symb.'.'.$what;
my $mapparm=$map.'___(all).'.$what;
+ my $grplevel=$env{'request.course.id'}.'.['.$cgroup.'].'.$what;
+ my $grplevelr=$env{'request.course.id'}.'.['.$cgroup.'].'.$symbparm;
+ my $grplevelm=$env{'request.course.id'}.'.['.$cgroup.'].'.$mapparm;
+
my $seclevel=$env{'request.course.id'}.'.['.$csec.'].'.$what;
my $seclevelr=$env{'request.course.id'}.'.['.$csec.'].'.$symbparm;
my $seclevelm=$env{'request.course.id'}.'.['.$csec.'].'.$mapparm;
@@ -139,49 +143,63 @@ sub parmval_by_symb {
my $courselevelm=$env{'request.course.id'}.'.'.$mapparm;
-
# --------------------------------------------------------- first, check course
if (defined($$courseopt{$courselevel})) {
- $outpar[11]=$$courseopt{$courselevel};
- $result=11;
+ $outpar[14]=$$courseopt{$courselevel};
+ $result=14;
}
if (defined($$courseopt{$courselevelm})) {
- $outpar[10]=$$courseopt{$courselevelm};
- $result=10;
+ $outpar[13]=$$courseopt{$courselevelm};
+ $result=13;
}
# ------------------------------------------------------- second, check default
- if (defined($def)) { $outpar[9]=$def; $result=9; }
+ if (defined($def)) { $outpar[12]=$def; $result=12; }
# ------------------------------------------------------ third, check map parms
my $thisparm=$parmhash{$symbparm};
- if (defined($thisparm)) { $outpar[8]=$thisparm; $result=8; }
+ if (defined($thisparm)) { $outpar[11]=$thisparm; $result=11; }
if (defined($$courseopt{$courselevelr})) {
- $outpar[7]=$$courseopt{$courselevelr};
- $result=7;
+ $outpar[10]=$$courseopt{$courselevelr};
+ $result=10;
}
# ------------------------------------------------------ fourth, back to course
if (defined($csec)) {
if (defined($$courseopt{$seclevel})) {
- $outpar[6]=$$courseopt{$seclevel};
- $result=6;
+ $outpar[9]=$$courseopt{$seclevel};
+ $result=9;
}
if (defined($$courseopt{$seclevelm})) {
- $outpar[5]=$$courseopt{$seclevelm};
- $result=5;
+ $outpar[8]=$$courseopt{$seclevelm};
+ $result=8;
}
if (defined($$courseopt{$seclevelr})) {
- $outpar[4]=$$courseopt{$seclevelr};
- $result=4;
+ $outpar[7]=$$courseopt{$seclevelr};
+ $result=7;
}
}
+# ------------------------------------------------------ fifth, check course group
+ if (defined($cgroup)) {
+ if (defined($$courseopt{$grplevel})) {
+ $outpar[6]=$$courseopt{$grplevel};
+ $result=6;
+ }
+ if (defined($$courseopt{$grplevelm})) {
+ $outpar[5]=$$courseopt{$grplevelm};
+ $result=5;
+ }
+ if (defined($$courseopt{$grplevelr})) {
+ $outpar[4]=$$courseopt{$grplevelr};
+ $result=4;
+ }
+ }
# ---------------------------------------------------------- fifth, check user
@@ -275,6 +293,25 @@ sub preset_defaults {
}
##################################################
+
+sub date_sanity_info {
+ my $checkdate=shift;
+ unless ($checkdate) { return ''; }
+ my $result='';
+ my $crsprefix='course.'.$env{'request.course.id'}.'.';
+ if ($env{$crsprefix.'default_enrollment_end_date'}) {
+ if ($checkdate>$env{$crsprefix.'default_enrollment_end_date'}) {
+ $result.=' '.&mt('After course enrollment end!');
+ }
+ }
+ if ($env{$crsprefix.'default_enrollment_start_date'}) {
+ if ($checkdate<$env{$crsprefix.'default_enrollment_start_date'}) {
+ $result.=' '.&mt('Before course enrollment start!');
+ }
+ }
+ return $result;
+}
+##################################################
##################################################
#
# Store a parameter by ID
@@ -289,8 +326,8 @@ sub preset_defaults {
# - userdomain
sub storeparm {
- my ($sresid,$spnam,$snum,$nval,$ntype,$uname,$udom,$csec)=@_;
- &storeparm_by_symb(&symbcache($sresid),$spnam,$snum,$nval,$ntype,$uname,$udom,$csec);
+ my ($sresid,$spnam,$snum,$nval,$ntype,$uname,$udom,$csec,$cgroup)=@_;
+ &storeparm_by_symb(&symbcache($sresid),$spnam,$snum,$nval,$ntype,$uname,$udom,$csec,'',$cgroup);
}
#
@@ -307,7 +344,7 @@ sub storeparm {
my %recstack;
sub storeparm_by_symb {
- my ($symb,$spnam,$snum,$nval,$ntype,$uname,$udom,$csec,$recflag)=@_;
+ my ($symb,$spnam,$snum,$nval,$ntype,$uname,$udom,$csec,$recflag,$cgroup)=@_;
unless ($recflag) {
# first time call
%recstack=();
@@ -315,7 +352,9 @@ sub storeparm_by_symb {
}
# store parameter
&storeparm_by_symb_inner
- ($symb,$spnam,$snum,$nval,$ntype,$uname,$udom,$csec);
+ ($symb,$spnam,$snum,$nval,$ntype,$uname,$udom,$csec,$cgroup);
+# don't do anything if parameter was reset
+ unless ($nval) { return; }
my ($prefix,$parm)=($spnam=~/^(.*[\_\.])([^\_\.]+)$/);
# remember that this was set
$recstack{$parm}=1;
@@ -348,7 +387,7 @@ sub storeparm_by_symb {
}
if ($active) {
&storeparm_by_symb($symb,$newspnam,$snum,$newvalue,&rulescache($triggered.'_type'),
- $uname,$udom,$csec,$recflag);
+ $uname,$udom,$csec,$recflag,$cgroup);
}
}
}
@@ -357,13 +396,17 @@ sub storeparm_by_symb {
sub storeparm_by_symb_inner {
# ---------------------------------------------------------- Get symb, map, etc
- my ($symb,$spnam,$snum,$nval,$ntype,$uname,$udom,$csec)=@_;
+ my ($symb,$spnam,$snum,$nval,$ntype,$uname,$udom,$csec,$cgroup)=@_;
# ---------------------------------------------------------- Construct prefixes
$spnam=~s/\_([^\_]+)$/\.$1/;
my $map=(&Apache::lonnet::decode_symb($symb))[0];
my $symbparm=$symb.'.'.$spnam;
my $mapparm=$map.'___(all).'.$spnam;
+ my $grplevel=$env{'request.course.id'}.'.['.$cgroup.'].'.$spnam;
+ my $grplevelr=$env{'request.course.id'}.'.['.$cgroup.'].'.$symbparm;
+ my $grplevelm=$env{'request.course.id'}.'.['.$cgroup.'].'.$mapparm;
+
my $seclevel=$env{'request.course.id'}.'.['.$csec.'].'.$spnam;
my $seclevelr=$env{'request.course.id'}.'.['.$csec.'].'.$symbparm;
my $seclevelm=$env{'request.course.id'}.'.['.$csec.'].'.$mapparm;
@@ -373,12 +416,16 @@ sub storeparm_by_symb_inner {
my $courselevelm=$env{'request.course.id'}.'.'.$mapparm;
my $storeunder='';
- if (($snum==11) || ($snum==3)) { $storeunder=$courselevel; }
- if (($snum==10) || ($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; }
+ if (($snum==14) || ($snum==3)) { $storeunder=$courselevel; }
+ if (($snum==13) || ($snum==2)) { $storeunder=$courselevelm; }
+ if (($snum==10) || ($snum==1)) { $storeunder=$courselevelr; }
+ if ($snum==9) { $storeunder=$seclevel; }
+ if ($snum==8) { $storeunder=$seclevelm; }
+ if ($snum==7) { $storeunder=$seclevelr; }
+ if ($snum==6) { $storeunder=$grplevel; }
+ if ($snum==5) { $storeunder=$grplevelm; }
+ if ($snum==4) { $storeunder=$grplevelr; }
+
my $delete;
if ($nval eq '') { $delete=1;}
@@ -392,9 +439,9 @@ sub storeparm_by_symb_inner {
my $cdom = $env{'course.'.$env{'request.course.id'}.'.domain'};
# Expire sheets
&Apache::lonnet::expirespread('','','studentcalc');
- if (($snum==7) || ($snum==4)) {
+ if (($snum==10) || ($snum==7) || ($snum==4)) {
&Apache::lonnet::expirespread('','','assesscalc',$symb);
- } elsif (($snum==8) || ($snum==5)) {
+ } elsif (($snum==11) || ($snum==8) || ($snum==5)) {
&Apache::lonnet::expirespread('','','assesscalc',$map);
} else {
&Apache::lonnet::expirespread('','','assesscalc');
@@ -488,7 +535,7 @@ sub valout {
}
$result=~s/\s+$//;
} elsif (&isdateparm($type)) {
- $result = localtime($value);
+ $result = localtime($value).&date_sanity_info($value);
} else {
$result = $value;
}
@@ -527,26 +574,19 @@ sub plink {
my ($parmname)=((split(/\&/,$marker))[1]=~/\_([^\_]+)$/);
my ($hour,$min,$sec,$val)=&preset_defaults($parmname);
unless (defined($winvalue)) { $winvalue=$val; }
- return
+ return '
');
if ($parmlev eq 'full') {
my $sessionval=&Apache::lonnet::EXT('resource.'.$$part{$which}.
'.'.$$name{$which},$$symbp{$rid});
my $sessionvaltype=$typeoutpar[$result];
if (!defined($sessionvaltype)) { $sessionvaltype=$$defaulttype{$which}; }
- $r->print('
'.
+ $r->print('
'.
&valout($sessionval,$sessionvaltype).' '.
'
');
}
@@ -696,7 +788,7 @@ sub print_td {
my ($r,$which,$defbg,$result,$outpar,$mprefix,$value,$typeoutpar,$display)=@_;
$r->print('
');
- if ($which<8 || $which > 9) {
+ if ($which<11 || $which > 12) {
$r->print(&plink($$typeoutpar[$which],
$$display{$value},$$outpar[$which],
$mprefix."$which",'parmform.pres','psub'));
@@ -706,6 +798,61 @@ sub print_td {
$r->print('
'."\n");
}
+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 $mapparm=$map.'___(all).'.$what;
+ my ($coursereply,$resultitem,$resultgroup,$resultlevel,$resulttype) =
+ &parm_control_group($courseid,$usersgroups,$symbparm,$mapparm,$what,
+ $courseopt);
+ my $bgcolor = $defbg;
+ my $grp_parm;
+ if (($coursereply) && ($cgroup ne $resultgroup)) {
+ if ($result > 3) {
+ $bgcolor = '"#AAFFAA"';
+ $grp_parm = &valout($coursereply,$resulttype);
+ }
+ $grp_parm = &valout($coursereply,$resulttype);
+ $output = '