--- loncom/interface/lonnavmaps.pm 2002/02/11 18:32:22 1.24 +++ loncom/interface/lonnavmaps.pm 2002/02/28 19:45:14 1.27 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # Navigate Maps Handler # -# $Id: lonnavmaps.pm,v 1.24 2002/02/11 18:32:22 albertel Exp $ +# $Id: lonnavmaps.pm,v 1.27 2002/02/28 19:45:14 albertel Exp $ # # Copyright Michigan State University Board of Trustees # @@ -129,7 +129,7 @@ sub parmval { # ------------------------------------------------------- second, check course if ($csec) { if ($courseopt{$seclevelr}) { return $courseopt{$seclevelr}; } - if ($courseopt{$seclevelm}) { return $courseopt{$seclevelm}; } + if ($courseopt{$seclevelm}) { return $courseopt{$seclevelm}; } if ($courseopt{$seclevel}) { return $courseopt{$seclevel}; } } @@ -144,13 +144,41 @@ sub parmval { # ----------------------------------------------------- fourth , check default - return &Apache::lonnet::metadata($fn,$rwhat.'.default'); + my $default=&Apache::lonnet::metadata($fn,$rwhat.'.default'); + if ($default) { return $default} + +# --------------------------------------------------- fifth , cascade up parts + + my ($space,@qualifier)=split(/\./,$rwhat); + my $qualifier=join('.',@qualifier); + unless ($space eq '0') { + my ($part,$id)=split(/\_/,$space); + if ($id) { + my $partgeneral=&parmval($part.".$qualifier",$symb); + if ($partgeneral) { return $partgeneral; } + } else { + my $resourcegeneral=&parmval("0.$qualifier",$symb); + if ($resourcegeneral) { return $resourcegeneral; } + } + } + return ''; } # ------------------------------------------------------------- Find out status - +# return codes +# tcode (timecode) +# 1: will open later +# 2: is open and not past due yet +# 3: is past due date +# 4: due in the next 24 hours +# +# code (curent solved status) +# 1: not attempted +# 2: attempted but wrong, or incorrect by instructor +# 3: solved or correct by instructor +# "excused" needs to be supported, but is not yet. Could be code=4. sub astatus { my $rid=shift; my $code=1; @@ -158,45 +186,48 @@ sub astatus { $rid=~/(\d+)\.(\d+)/; my $symb=&Apache::lonnet::declutter($hash{'map_id_'.$1}).'___'.$2.'___'. &Apache::lonnet::declutter($hash{'src_'.$rid}); - my %duedate=(); my %opendate=(); my %answerdate=(); - map { + # need to always check part 0's open/due/answer status + foreach (sort(split(/\,/,&Apache::lonnet::metadata($hash{'src_'.$rid},'keys')))) { if ($_=~/^parameter\_(.*)\_opendate$/) { my $part=$1; $duedate{$part}=&parmval($part.'.duedate',$symb); $opendate{$part}=&parmval($part.'.opendate',$symb); $answerdate{$part}=&parmval($part.'.answerdate',$symb); } - } sort split(/\,/,&Apache::lonnet::metadata($hash{'src_'.$rid},'keys')); - + } my $now=time; my $tcode=0; my %returnhash=&Apache::lonnet::restore($symb); - map { + foreach (sort(keys(%opendate))) { my $duedate=$duedate{$_}; my $opendate=$opendate{$_}; my $answerdate=$answerdate{$_}; my $preface=''; unless ($_ eq '0') { $preface=' Part: '.$_.' '; } if ($opendate) { - if ($now<$duedate) { - unless ($tcode==4) { $tcode=2; } - $ctext.=$preface.'Due: '.localtime($duedate); - if ($now<$opendate) { - unless ($tcode) { $tcode=1; } + if ($now<$duedate || (!$duedate)) { + unless ($tcode==4) { $tcode=2; } + if ($duedate) { + $ctext.=$preface.'Due: '.localtime($duedate); + } else { + $ctext.=$preface.'No Due Date'; + } + if ($now<$opendate) { + unless ($tcode) { $tcode=1; } $ctext.=$preface.'Open: '.localtime($opendate); } - if ($duedate-$now<86400) { + if ($duedate && $duedate-$now<86400) { $tcode=4; $ctext.=$preface.'Due: '.localtime($duedate); } } else { unless (($tcode==4) || ($tcode eq 2)) { $tcode=3; } - if ($now<$answerdate) { + if ($now<$answerdate) { $ctext.='Answer: '.localtime($duedate); } } @@ -205,7 +236,7 @@ sub astatus { } my $status=$returnhash{'resource.'.$_.'.solved'}; - + if ($status eq 'correct_by_student') { unless ($code==2) { $code=3; } $ctext.=' solved'; @@ -216,8 +247,10 @@ sub astatus { $code=2; $ctext.=' ('. ($returnhash{'resource.'.$_.'.tries'}? - $returnhash{'resource.'.$_.'.tries'}:'0').'/'. - &parmval($_.'.maxtries',$symb).' tries)'; + $returnhash{'resource.'.$_.'.tries'}:'0'); + my $numtries = &parmval($_.'.maxtries',$symb); + if ($numtries) { $ctext.='/'.$numtries.' tries'; } + $ctext.=')'; } elsif ($status eq 'incorrect_by_override') { $code=2; $ctext.=' override'; @@ -225,8 +258,7 @@ sub astatus { unless ($code==2) { $code=3; } $ctext.=' excused'; } - - } sort keys %opendate; + } return 'p'.$code.$tcode.'"'.$ctext.'"'; } @@ -298,7 +330,7 @@ sub tracetable { if (defined($hash{'to_'.$rid})) { my $mincond=1; my $next=''; - map { + foreach (split(/\,/,$hash{'to_'.$rid})) { my $thiscond= &Apache::lonnet::directcondval($hash{'condid_'.$hash{'undercond_'.$_}}); if ($thiscond>=$mincond) { @@ -309,14 +341,14 @@ sub tracetable { } if ($thiscond>$mincond) { $mincond=$thiscond; } } - } split(/\,/,$hash{'to_'.$rid}); - map { + } + foreach (split(/\,/,$next)) { my ($linkid,$condval)=split(/\:/,$_); if ($condval>=$mincond) { my $now=&tracetable($sofar,$hash{'goesto_'.$linkid},$beenhere); if ($now>$further) { $further=$now; } } - } split(/\,/,$next); + } } } @@ -340,7 +372,6 @@ sub handler { $r->send_http_header; return OK; } - my $requrl=$r->uri; # ----------------------------------------------------------------- Tie db file if ($ENV{'request.course.fn'}) { @@ -381,11 +412,11 @@ sub handler { $courserdatas{$cid.'.last_cache'}=time; } } - map { + foreach (split(/\&/,$courserdatas{$cid})) { my ($name,$value)=split(/\=/,$_); $courseopt{$userprefix.&Apache::lonnet::unescape($name)}= &Apache::lonnet::unescape($value); - } split(/\&/,$courserdatas{$cid}); + } # --------------------------------------------------- Get userdata (if present) unless ((time-$userrdatas{$uname.'___'.$udom.'.last_cache'})<240) { @@ -396,11 +427,11 @@ sub handler { $userrdatas{$uname.'___'.$udom.'.last_cache'}=time; } } - map { + foreach (split(/\&/,$userrdatas{$uname.'___'.$udom})) { my ($name,$value)=split(/\=/,$_); $useropt{$userprefix.&Apache::lonnet::unescape($name)}= &Apache::lonnet::unescape($value); - } split(/\&/,$userrdatas{$uname.'___'.$udom}); + } } @rows=(); @@ -551,6 +582,7 @@ sub handler { $adde=''; } if ($rid=~/^p(\d)(\d)\"([\w\: \(\)\/\,]*)\"(.+)/) { + # sub astatus describes what code/tcode mean my $code=$1; my $tcode=$2; my $ctext=$3; @@ -566,8 +598,8 @@ sub handler { $add=''; } if ($tcode eq '4') { - $add=''; - $adde=''; + $add=''; + $adde=''; } } $hwk='';