--- loncom/interface/lonnavmaps.pm 2002/02/11 18:32:22 1.24 +++ loncom/interface/lonnavmaps.pm 2002/02/11 18:59:36 1.25 @@ -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.25 2002/02/11 18:59:36 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,49 @@ sub astatus { $rid=~/(\d+)\.(\d+)/; my $symb=&Apache::lonnet::declutter($hash{'map_id_'.$1}).'___'.$2.'___'. &Apache::lonnet::declutter($hash{'src_'.$rid}); - + $Apache::lonxml::debug=1; 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 +237,7 @@ sub astatus { } my $status=$returnhash{'resource.'.$_.'.solved'}; - + if ($status eq 'correct_by_student') { unless ($code==2) { $code=3; } $ctext.=' solved'; @@ -216,8 +248,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 +259,7 @@ sub astatus { unless ($code==2) { $code=3; } $ctext.=' excused'; } - - } sort keys %opendate; + } return 'p'.$code.$tcode.'"'.$ctext.'"'; } @@ -340,7 +373,6 @@ sub handler { $r->send_http_header; return OK; } - my $requrl=$r->uri; # ----------------------------------------------------------------- Tie db file if ($ENV{'request.course.fn'}) { @@ -551,6 +583,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 +599,8 @@ sub handler { $add=''; } if ($tcode eq '4') { - $add=''; - $adde=''; + $add=''; + $adde=''; } } $hwk='';