--- loncom/interface/lonnavmaps.pm 2001/01/30 20:04:54 1.11 +++ loncom/interface/lonnavmaps.pm 2001/10/26 17:09:04 1.18 @@ -9,13 +9,14 @@ # 08/30,08/31,09/06,09/14,09/15,09/16,09/19,09/20,09/21,09/23, # 10/02,10/10,10/14,10/16,10/18,10/19,10/31,11/6,11/14,11/16 Gerd Kortemeyer) # -# 3/1/1,6/1,17/1,29/1,30/1 Gerd Kortemeyer +# 3/1/1,6/1,17/1,29/1,30/1,2/8,9/21,9/24,9/25 Gerd Kortemeyer package Apache::lonnavmaps; use strict; use Apache::Constants qw(:common :http); use Apache::lonnet(); +use Apache::loncommon(); use HTML::TokeParser; use GDBM_File; @@ -153,74 +154,77 @@ sub astatus { $rid=~/(\d+)\.(\d+)/; my $symb=&Apache::lonnet::declutter($hash{'map_id_'.$1}).'___'.$2.'___'. &Apache::lonnet::declutter($hash{'src_'.$rid}); - my $duedate=&parmval('0.duedate',$symb); - my $opendate=&parmval('0.opendate',$symb); - my $answerdate=&parmval('0.answerdate',$symb); + + my %duedate=(); + my %opendate=(); + my %answerdate=(); + map { + 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 { + + my $duedate=$duedate{$_}; + my $opendate=$opendate{$_}; + my $answerdate=$answerdate{$_}; + my $preface=''; + unless ($_ eq '0') { $preface=' Part: '.$_.' '; } + if ($opendate) { if ($now<$duedate) { - $tcode=2; - $ctext='Due: '.localtime($duedate); + unless ($tcode==4) { $tcode=2; } + $ctext.=$preface.'Due: '.localtime($duedate); if ($now<$opendate) { - $tcode=1; - $ctext='Open: '.localtime($opendate); + unless ($tcode) { $tcode=1; } + $ctext.=$preface.'Open: '.localtime($opendate); } if ($duedate-$now<86400) { $tcode=4; - $ctext='Due: '.localtime($duedate); + $ctext.=$preface.'Due: '.localtime($duedate); } } else { - $tcode=3; + unless (($tcode==4) || ($tcode eq 2)) { $tcode=3; } if ($now<$answerdate) { - $ctext='Answer: '.localtime($duedate); + $ctext.='Answer: '.localtime($duedate); } } - my $answer=&Apache::lonnet::reply( - "restore:$ENV{'user.domain'}:$ENV{'user.name'}:". - $ENV{'request.course.id'}.':'. - &Apache::lonnet::escape($symb), - "$ENV{'user.home'}"); - my %returnhash=(); - map { - my ($name,$value)=split(/\=/,$_); - $returnhash{&Apache::lonnet::unescape($name)}= - &Apache::lonnet::unescape($value); - } split(/\&/,$answer); - if ($returnhash{'version'}) { - my $version; - for ($version=1;$version<=$returnhash{'version'};$version++) { - map { - $returnhash{$_}=$returnhash{$version.':'.$_}; - } split(/\:/,$returnhash{$version.':keys'}); - } - map { - if (($_=~/\.(\w+)\.solved$/) && ($_!~/^\d+\:/)) { - my $part=$1; - if ($ctext) { $ctext.=', '; } - if ($part) { - $ctext.='Part '.$part.': '; - } - if ($returnhash{$_} eq 'correct_by_student') { + } else { + unless (($tcode==2) || ($tcode==4)) { $tcode=1; } + } + + my $status=$returnhash{'resource.'.$_.'.solved'}; + + if ($status eq 'correct_by_student') { unless ($code==2) { $code=3; } - $ctext.='solved'; - } elsif ($returnhash{$_} eq 'correct_by_override') { + $ctext.=' solved'; + } elsif ($status eq 'correct_by_override') { unless ($code==2) { $code=3; } - $ctext.='override'; - } elsif ($returnhash{$_} eq 'incorrect_attempted') { + $ctext.=' override'; + } elsif ($status eq 'incorrect_attempted') { $code=2; - $ctext.= - $returnhash{'resource.'.$part.'.tries'}.'/'. - &parmval($part.'.maxtries',$symb).' tries'; - } elsif ($returnhash{$_} eq 'incorrect_by_override') { + $ctext.=' ('. + ($returnhash{'resource.'.$_.'.tries'}? + $returnhash{'resource.'.$_.'.tries'}:'0').'/'. + &parmval($_.'.maxtries',$symb).' tries)'; + } elsif ($status eq 'incorrect_by_override') { $code=2; - $ctext.='override'; - } elsif ($returnhash{$_} eq 'excused') { + $ctext.=' override'; + } elsif ($status eq 'excused') { unless ($code==2) { $code=3; } - $ctext.='excused'; + $ctext.=' excused'; } - } - } keys %returnhash; - } + + } sort keys %opendate; + return 'p'.$code.$tcode.'"'.$ctext.'"'; } @@ -433,20 +437,49 @@ sub handler { # ------------------------------------------------------------------ Build page + my $currenturl=$ENV{'form.postdata'}; + $currenturl=~s/^http\:\/\///; + $currenturl=~s/^[^\/]+//; + # ---------------------------------------------------------------- Send headers $r->content_type('text/html'); $r->send_http_header; + my $date=localtime; $r->print( - 'Navigate LON-CAPA Maps'); - - $r->print(''. - ''. + ''.&Apache::loncommon::cacheheader(). + 'Navigate LON-CAPA Maps'); + $r->print('print(' onLoad="window.location.hash='. + "'curloc'".'"'); + } + $r->print('>'. ''. '

Navigate Course Map

'); - $r->rflush(); + $r->rflush(); + if (($currenturl=~/^\/res/) && + ($currenturl!~/^\/res\/adm/)) { + $r->print('Current Location

'); + } +# ----------------------------------------------------- The little content list + for ($i=0;$i<=$#rows;$i++) { + if ($rows[$i]) { + my @colcont=split(/\&/,$rows[$i]); + my $avespan=$lcm/($#colcont+1); + for ($j=0;$j<=$#colcont;$j++) { + my $rid=$colcont[$j]; + if ($rid=~/^h(.+)/) { + $rid=$1; + $r->print( + '   '.$hash{'title_'.$rid}.'
'); + } + } + } + } # ----------------------------------------------------------------- Start table - $r->print(''); + $r->print('
'); for ($i=0;$i<=$#rows;$i++) { if ($rows[$i]) { $r->print("\n"); @@ -460,7 +493,8 @@ sub handler { my $hwke=''; if ($rid=~/^h(.+)/) { $rid=$1; - $add=''; } if ($rid=~/^p(\d)(\d)\"([\w\: \(\)\/\,]*)\"(.+)/) { @@ -497,6 +531,12 @@ sub handler { $hwke=' ('.$ctext.')'; } } + if ($hash{'src_'.$rid} eq $currenturl) { + $add=$add.''. + '-> '; + $adde= + ' <-'.$adde; + } $r->print($add.''.$hwk. $hash{'title_'.$rid}.$hwke.''.$adde); @@ -505,7 +545,6 @@ sub handler { } } $r->print("\n
'; + $add= + ''; $adde='
"); - $r->print(''); # -------------------------------------------------------------------- End page }