--- loncom/interface/lonnavmaps.pm 2005/06/20 19:47:47 1.330
+++ loncom/interface/lonnavmaps.pm 2005/08/02 20:51:18 1.335
@@ -1,7 +1,7 @@
# The LearningOnline Network with CAPA
# Navigate Maps Handler
#
-# $Id: lonnavmaps.pm,v 1.330 2005/06/20 19:47:47 albertel Exp $
+# $Id: lonnavmaps.pm,v 1.335 2005/08/02 20:51:18 albertel Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -57,6 +57,7 @@ my %statusIconMap =
$resObj->CLOSED => '',
$resObj->OPEN => 'navmap.open.gif',
$resObj->CORRECT => 'navmap.correct.gif',
+ $resObj->PARTIALLY_CORRECT => 'navmap.ellipsis.gif',
$resObj->INCORRECT => 'navmap.wrong.gif',
$resObj->ATTEMPTED => 'navmap.ellipsis.gif',
$resObj->ERROR => ''
@@ -81,7 +82,8 @@ my %colormap =
$resObj->OPEN => '',
$resObj->NOTHING_SET => '',
$resObj->ATTEMPTED => '',
- $resObj->ANSWER_SUBMITTED => ''
+ $resObj->ANSWER_SUBMITTED => '',
+ $resObj->PARTIALLY_CORRECT => '#006600'
);
# And a special case in the nav map; what to do when the assignment
# is not yet done and due in less then 24 hours
@@ -206,6 +208,20 @@ ENDSUBM
if ($ENV{QUERY_STRING} eq 'launchExternal') {
&Apache::lonnet::put('environment',{'remotenavmap' => 'on'});
&Apache::lonnet::appenv('environment.remotenavmap' => 'on');
+ my $menu=&Apache::lonmenu::reopenmenu();
+ my $navstatus=&Apache::lonmenu::get_nav_status();
+ if ($menu) {
+ $r->print(<
');
$r->print('
@@ -507,7 +523,7 @@ sub getDescription {
if ($status == $res->PAST_DUE_NO_ANSWER) {
return &mt("Was due")." " . timeToHumanString($res->duedate($part));
}
- if ($status == $res->ANSWER_OPEN) {
+ if ($status == $res->ANSWER_OPEN || $status == $res->PARTIALLY_CORRECT) {
return &mt("Answer available");
}
if ($status == $res->EXCUSED) {
@@ -658,7 +674,7 @@ sub timeToHumanString {
my $timeStr = strftime("%A, %b %e at %I:%M %P", localtime($time));
$timeStr =~ s/12:00 am/00:00/;
$timeStr =~ s/12:00 pm/noon/;
- return ($inPast ? "last " : "next ") .
+ return ($inPast ? "last " : "this ") .
$timeStr;
}
@@ -1162,7 +1178,11 @@ sub render_communication_status {
my $discussionHTML = ""; my $feedbackHTML = ""; my $errorHTML = "";
my $link = $params->{"resourceLink"};
- my $linkopen = "";
+ my $target;
+ if ($env{'environment.remotenavmap'} eq 'on') {
+ $target=' target="loncapaclient" ';
+ }
+ my $linkopen = "";
my $linkclose = "";
my $location=&Apache::loncommon::lonhttpdurl("/adm/lonMisc");
if ($resource->hasDiscussion()) {
@@ -1175,7 +1195,7 @@ sub render_communication_status {
my $feedback = $resource->getFeedback();
foreach (split(/\,/, $feedback)) {
if ($_) {
- $feedbackHTML .= ' '
. '
';
@@ -1190,7 +1210,7 @@ sub render_communication_status {
last if ($errorcount>=10); # Only output 10 bombs maximum
if ($_) {
$errorcount++;
- $errorHTML .= ' '
. '
';
@@ -1212,7 +1232,11 @@ sub render_quick_status {
$params->{'multipart'} && $part eq "0";
my $link = $params->{"resourceLink"};
- my $linkopen = "";
+ my $target;
+ if ($env{'environment.remotenavmap'} eq 'on') {
+ $target=' target="loncapaclient" ';
+ }
+ my $linkopen = "";
my $linkclose = "";
if ($resource->is_problem() &&
@@ -1426,16 +1450,17 @@ sub render {
# Step two: Locate what kind of here marker is necessary
# Determine where the "here" marker is and where the screen jumps to.
- if ($env{'form.postsymb'}) {
+ if ($env{'form.postsymb'} ne '') {
$here = $jump = &Apache::lonnet::symbclean($env{'form.postsymb'});
- } elsif ($env{'form.postdata'}) {
+ } elsif ($env{'form.postdata'} ne '') {
# couldn't find a symb, is there a URL?
my $currenturl = $env{'form.postdata'};
#$currenturl=~s/^http\:\/\///;
#$currenturl=~s/^[^\/]+//;
$here = $jump = &Apache::lonnet::symbread($currenturl);
- } else {
+ }
+ if ($here eq '') {
my $last;
if (tie(my %hash,'GDBM_File',$env{'request.course.fn'}.'_symb.db',
&GDBM_READER(),0640)) {
@@ -3824,6 +3849,10 @@ sub duedate {
}
return $self->parmval("duedate", $part);
}
+sub handgrade {
+ (my $self, my $part) = @_;
+ return $self->parmval("handgrade", $part);
+}
sub maxtries {
(my $self, my $part) = @_;
return $self->parmval("maxtries", $part);
@@ -4373,14 +4402,17 @@ sub ATTEMPTED { return 16; }
sub getCompletionStatus {
my $self = shift;
+ my $part = shift;
return $self->NETWORK_FAILURE if ($self->{NAV_MAP}->{NETWORK_FAILURE});
- my $status = $self->queryRestoreHash('solved', shift);
+ my $status = $self->queryRestoreHash('solved', $part);
# Left as separate if statements in case we ever do more with this
if ($status eq 'correct_by_student') {return $self->CORRECT;}
if ($status eq 'correct_by_scantron') {return $self->CORRECT;}
- if ($status eq 'correct_by_override') {return $self->CORRECT_BY_OVERRIDE; }
+ if ($status eq 'correct_by_override') {
+ return $self->CORRECT_BY_OVERRIDE;
+ }
if ($status eq 'incorrect_attempted') {return $self->INCORRECT; }
if ($status eq 'incorrect_by_override') {return $self->INCORRECT_BY_OVERRIDE; }
if ($status eq 'excused') {return $self->EXCUSED; }
@@ -4484,6 +4516,7 @@ An answer has been submitted, but the st
sub TRIES_LEFT { return 20; }
sub ANSWER_SUBMITTED { return 21; }
+sub PARTIALLY_CORRECT{ return 22; }
sub status {
my $self = shift;
@@ -4510,7 +4543,14 @@ sub status {
# There are a few whole rows we can dispose of:
if ($completionStatus == CORRECT ||
$completionStatus == CORRECT_BY_OVERRIDE ) {
- return $suppressFeedback? ANSWER_SUBMITTED : CORRECT;
+ if ( $suppressFeedback ) { return ANSWER_SUBMITTED }
+ my $awarded=$self->awarded($part);
+ if ($awarded < 1 && $awarded > 0) {
+ return PARTIALLY_CORRECT;
+ } elsif ($awarded<1) {
+ return INCORRECT;
+ }
+ return CORRECT;
}
if ($completionStatus == ATTEMPTED) {
@@ -4597,6 +4637,7 @@ my %compositeToSimple =
NETWORK_FAILURE() => ERROR,
NOTHING_SET() => CLOSED,
CORRECT() => CORRECT,
+ PARTIALLY_CORRECT() => PARTIALLY_CORRECT,
EXCUSED() => CORRECT,
PAST_DUE_NO_ANSWER() => INCORRECT,
PAST_DUE_ANSWER_LATER() => INCORRECT,