version 1.28, 2002/03/15 16:31:10
|
version 1.31, 2002/03/15 23:39:41
|
Line 178 sub parmval {
|
Line 178 sub parmval {
|
# 1: not attempted |
# 1: not attempted |
# 2: attempted but wrong, or incorrect by instructor |
# 2: attempted but wrong, or incorrect by instructor |
# 3: solved or correct by instructor |
# 3: solved or correct by instructor |
# "excused" needs to be supported, but is not yet. Could be code=4. |
# 4: partially correct (one or more parts correct) |
|
# "excused" needs to be supported, but is not yet. |
sub astatus { |
sub astatus { |
my $rid=shift; |
my $rid=shift; |
my $code=1; |
my $code=0; |
my $ctext=''; |
my $ctext=''; |
$rid=~/(\d+)\.(\d+)/; |
$rid=~/(\d+)\.(\d+)/; |
my $symb=&Apache::lonnet::declutter($hash{'map_id_'.$1}).'___'.$2.'___'. |
my $symb=&Apache::lonnet::declutter($hash{'map_id_'.$1}).'___'.$2.'___'. |
Line 238 sub astatus {
|
Line 239 sub astatus {
|
my $status=$returnhash{'resource.'.$_.'.solved'}; |
my $status=$returnhash{'resource.'.$_.'.solved'}; |
|
|
if ($status eq 'correct_by_student') { |
if ($status eq 'correct_by_student') { |
unless ($code==2) { $code=3; } |
if ($code==0||$code==3) { $code=3; } else { $code=4; } |
$ctext.=' solved'; |
$ctext.=' solved'; |
} elsif ($status eq 'correct_by_override') { |
} elsif ($status eq 'correct_by_override') { |
unless ($code==2) { $code=3; } |
if ($code==0||$code==3) { $code=3; } else { $code=4; } |
$ctext.=' override'; |
$ctext.=' override'; |
} elsif ($status eq 'incorrect_attempted') { |
} elsif ($status eq 'incorrect_attempted') { |
$code=2; |
if ($code!=4 && $code!=3) { $code=2; } |
|
if ($code==3) { $code=4; } |
$ctext.=' ('. |
$ctext.=' ('. |
($returnhash{'resource.'.$_.'.tries'}? |
($returnhash{'resource.'.$_.'.tries'}? |
$returnhash{'resource.'.$_.'.tries'}:'0'); |
$returnhash{'resource.'.$_.'.tries'}:'0'); |
Line 252 sub astatus {
|
Line 254 sub astatus {
|
if ($numtries) { $ctext.='/'.$numtries.' tries'; } |
if ($numtries) { $ctext.='/'.$numtries.' tries'; } |
$ctext.=')'; |
$ctext.=')'; |
} elsif ($status eq 'incorrect_by_override') { |
} elsif ($status eq 'incorrect_by_override') { |
$code=2; |
if ($code!=4 && $code!=3) { $code=2; } |
|
if ($code==3) { $code=4; } |
$ctext.=' override'; |
$ctext.=' override'; |
} elsif ($status eq 'excused') { |
} elsif ($status eq 'excused') { |
unless ($code==2) { $code=3; } |
if ($code==0||$code==3) { $code=3; } else { $code=4; } |
$ctext.=' excused'; |
$ctext.=' excused'; |
|
} else { |
|
if ($code==0) { $code=1; } |
} |
} |
} |
} |
|
|
return 'p'.$code.$tcode.'"'.$ctext.'"'; |
return 'p'.$code.$tcode.'"'.$ctext.'"'; |
} |
} |
|
|
# ------------------------------------------------------------ Build page table |
|
|
|
sub tracetable { |
sub addresource { |
my ($sofar,$rid,$beenhere)=@_; |
my ($resource,$sofar,$rid,$showtypes)=@_; |
my $further=$sofar; |
&Apache::lonxml::debug("Adding $resource allowing $showtypes"); |
unless ($beenhere=~/\&$rid\&/) { |
if ($showtypes eq 'problems') { |
$beenhere.=$rid.'&'; |
if ($resource!~/\.(problem|exam|quiz|assess|survey|form)$/) { |
|
&Apache::lonxml::debug("Returning early"); |
if (defined($hash{'is_map_'.$rid})) { |
return; |
$sofar++; |
} |
my $tprefix=''; |
} |
if ($hash{'map_type_'.$hash{'map_pc_'.$hash{'src_'.$rid}}} |
my $brepriv=&Apache::lonnet::allowed('bre',$resource); |
eq 'sequence') { |
if ($hash{'src_'.$rid}) { |
$tprefix='h'; |
if (($brepriv eq '2') || ($brepriv eq 'F')) { |
|
my $pprefix=''; |
|
if ($resource=~/\.(problem|exam|quiz|assess|survey|form)$/) { |
|
$pprefix=&astatus($rid); |
} |
} |
if (defined($rows[$sofar])) { |
if (defined($rows[$sofar])) { |
$rows[$sofar].='&'.$tprefix.$rid; |
$rows[$sofar].='&'.$pprefix.$rid; |
} else { |
} else { |
$rows[$sofar]=$tprefix.$rid; |
$rows[$sofar]=$pprefix.$rid; |
} |
} |
if ((defined($hash{'map_start_'.$hash{'src_'.$rid}})) && |
} |
(defined($hash{'map_finish_'.$hash{'src_'.$rid}})) && |
} |
($tprefix eq 'h')) { |
} |
my $frid=$hash{'map_finish_'.$hash{'src_'.$rid}}; |
|
$sofar= |
sub followlinks () { |
&tracetable($sofar,$hash{'map_start_'.$hash{'src_'.$rid}}, |
my ($rid,$sofar,$beenhere,$further,$showtypes)=@_; |
'&'.$frid.'&'); |
my $mincond=1; |
$sofar++; |
my $next=''; |
if ($hash{'src_'.$frid}) { |
foreach (split(/\,/,$hash{'to_'.$rid})) { |
my $brepriv=&Apache::lonnet::allowed('bre',$hash{'src_'.$frid}); |
my $thiscond= |
if (($brepriv eq '2') || ($brepriv eq 'F')) { |
&Apache::lonnet::directcondval($hash{'condid_'.$hash{'undercond_'.$_}}); |
my $pprefix=''; |
if ($thiscond>=$mincond) { |
if ($hash{'src_'.$frid}=~ |
if ($next) { |
/\.(problem|exam|quiz|assess|survey|form)$/) { |
$next.=','.$_.':'.$thiscond; |
$pprefix=&astatus($frid); |
} else { |
|
$next=$_.':'.$thiscond; |
} |
|
if (defined($rows[$sofar])) { |
|
$rows[$sofar].='&'.$pprefix.$frid; |
|
} else { |
|
$rows[$sofar]=$pprefix.$frid; |
|
} |
|
} |
|
} |
|
} |
} |
|
if ($thiscond>$mincond) { $mincond=$thiscond; } |
|
} |
|
} |
|
foreach (split(/\,/,$next)) { |
|
my ($linkid,$condval)=split(/\:/,$_); |
|
if ($condval>=$mincond) { |
|
&Apache::lonxml::debug("following link $linkid"); |
|
my $now=&tracetable($sofar,$hash{'goesto_'.$linkid}, |
|
$beenhere,$showtypes); |
|
if ($now>$further) { $further=$now; } |
|
} |
|
} |
|
return $further; |
|
} |
|
# ------------------------------------------------------------ Build page table |
|
|
|
sub tracetable { |
|
my ($sofar,$rid,$beenhere,$showtypes)=@_; |
|
my $further=$sofar; |
|
#$Apache::lonxml::debug=1; |
|
&Apache::lonxml::debug("$rid ; $sofar ; $beenhere"); |
|
if ($beenhere=~/\&$rid\&/) { |
|
return $further; |
|
} |
|
$beenhere.=$rid.'&'; |
|
|
|
if (defined($hash{'is_map_'.$rid})) { |
|
$sofar++; |
|
my $tprefix=''; |
|
if ($hash{'map_type_'.$hash{'map_pc_'.$hash{'src_'.$rid}}} |
|
eq 'sequence') { |
|
$tprefix='h'; |
|
} elsif ($hash{'map_type_'.$hash{'map_pc_'.$hash{'src_'.$rid}}} |
|
eq 'page') { |
|
$tprefix='i'; |
|
$showtypes='problems'; |
|
} |
|
if (defined($rows[$sofar])) { |
|
$rows[$sofar].='&'.$tprefix.$rid; |
} else { |
} else { |
$sofar++; |
$rows[$sofar]=$tprefix.$rid; |
if ($hash{'src_'.$rid}) { |
|
my $brepriv=&Apache::lonnet::allowed('bre',$hash{'src_'.$rid}); |
|
if (($brepriv eq '2') || ($brepriv eq 'F')) { |
|
my $pprefix=''; |
|
if ($hash{'src_'.$rid}=~ |
|
/\.(problem|exam|quiz|assess|survey|form)$/) { |
|
$pprefix=&astatus($rid); |
|
} |
|
if (defined($rows[$sofar])) { |
|
$rows[$sofar].='&'.$pprefix.$rid; |
|
} else { |
|
$rows[$sofar]=$pprefix.$rid; |
|
} |
|
} |
|
} |
|
} |
} |
|
if ((defined($hash{'map_start_'.$hash{'src_'.$rid}})) && |
if (defined($hash{'to_'.$rid})) { |
(defined($hash{'map_finish_'.$hash{'src_'.$rid}}))) { |
my $mincond=1; |
my $frid=$hash{'map_finish_'.$hash{'src_'.$rid}}; |
my $next=''; |
$sofar=&tracetable($sofar, |
foreach (split(/\,/,$hash{'to_'.$rid})) { |
$hash{'map_start_'.$hash{'src_'.$rid}}, |
my $thiscond= |
'&'.$frid.'&',$showtypes); |
&Apache::lonnet::directcondval($hash{'condid_'.$hash{'undercond_'.$_}}); |
$sofar++; |
if ($thiscond>=$mincond) { |
&addresource($hash{'src_'.$frid},$sofar,$frid,$showtypes); |
if ($next) { |
if ($tprefix eq 'i') { $showtypes=''; } |
$next.=','.$_.':'.$thiscond; |
|
} else { |
|
$next=$_.':'.$thiscond; |
|
} |
|
if ($thiscond>$mincond) { $mincond=$thiscond; } |
|
} |
|
} |
|
foreach (split(/\,/,$next)) { |
|
my ($linkid,$condval)=split(/\:/,$_); |
|
if ($condval>=$mincond) { |
|
my $now=&tracetable($sofar,$hash{'goesto_'.$linkid},$beenhere); |
|
if ($now>$further) { $further=$now; } |
|
} |
|
} |
|
} |
} |
|
} else { |
|
$sofar++; |
|
&addresource($hash{'src_'.$rid},$sofar,$rid,$showtypes); |
} |
} |
|
|
|
if (defined($hash{'to_'.$rid})) { |
|
$further=&followlinks($rid,$sofar,$beenhere,$further,$showtypes); |
|
} |
|
|
return $further; |
return $further; |
} |
} |
|
|
Line 475 sub handler {
|
Line 492 sub handler {
|
|
|
for ($i=0;$i<=$#rows;$i++) { |
for ($i=0;$i<=$#rows;$i++) { |
if ($rows[$i]) { |
if ($rows[$i]) { |
|
&Apache::lonxml::debug($rows[$i]); |
$contents++; |
$contents++; |
my @colcont=split(/\&/,$rows[$i]); |
my @colcont=split(/\&/,$rows[$i]); |
$lcm*=($#colcont+1)/euclid($lcm,($#colcont+1)); |
$lcm*=($#colcont+1)/euclid($lcm,($#colcont+1)); |
Line 585 sub handler {
|
Line 603 sub handler {
|
$add='<th bgcolor="#AAFF55"><a name="'.$rid.'">'; |
$add='<th bgcolor="#AAFF55"><a name="'.$rid.'">'; |
$adde='</th>'; |
$adde='</th>'; |
} |
} |
|
if ($rid=~/^i(.+)/) { $rid=$1; } |
if ($rid=~/^p(\d)(\d)\"([\w\: \(\)\/\,]*)\"(.+)/) { |
if ($rid=~/^p(\d)(\d)\"([\w\: \(\)\/\,]*)\"(.+)/) { |
# sub astatus describes what code/tcode mean |
# sub astatus describes what code/tcode mean |
my $code=$1; |
my $code=$1; |
Line 596 sub handler {
|
Line 615 sub handler {
|
} |
} |
if ($code eq '3') { |
if ($code eq '3') { |
$add='<td bgcolor="#AAFFAA">'; |
$add='<td bgcolor="#AAFFAA">'; |
|
} elsif ($code eq '4') { |
|
$add='<td bgcolor="#E0FFAA">'; |
} else { |
} else { |
$add='<td bgcolor="#FFAAAA">'; |
$add='<td bgcolor="#FFAAAA">'; |
if ($tcode eq '2') { |
if ($tcode eq '2') { |
Line 611 sub handler {
|
Line 632 sub handler {
|
if ($code eq '1') { |
if ($code eq '1') { |
$hwke='</b> ('.$ctext.')</font>'; |
$hwke='</b> ('.$ctext.')</font>'; |
} |
} |
if ($code eq '2') { |
if ($code eq '2' || $code eq '4') { |
$hwk='<font color="#992222"><b>'; |
$hwk='<font color="#992222"><b>'; |
$hwke='</b> ('.$ctext.')</font>'; |
$hwke='</b> ('.$ctext.')</font>'; |
} |
} |