[LON-CAPA-cvs] cvs: loncom /interface lonnavmaps.pm lonquickgrades.pm
bowersj2
lon-capa-cvs@mail.lon-capa.org
Tue, 26 Nov 2002 14:45:25 -0000
bowersj2 Tue Nov 26 09:45:25 2002 EDT
Modified files:
/loncom/interface lonnavmaps.pm lonquickgrades.pm
Log:
* Slight color change; yellow now more pastel. Less unpleasent to look
at and I think the shading is more clear now, since more of the color
is changing.
* Now correctly doesn't count randomout-hidden parts. (Oops.)
* Added a message on top pointing the student to the spreadsheet, fixing
half of 995 (I think that's the bug num...).
Index: loncom/interface/lonnavmaps.pm
diff -u loncom/interface/lonnavmaps.pm:1.114 loncom/interface/lonnavmaps.pm:1.115
--- loncom/interface/lonnavmaps.pm:1.114 Mon Nov 18 16:12:39 2002
+++ loncom/interface/lonnavmaps.pm Tue Nov 26 09:45:24 2002
@@ -2,7 +2,7 @@
# The LearningOnline Network with CAPA
# Navigate Maps Handler
#
-# $Id: lonnavmaps.pm,v 1.114 2002/11/18 21:12:39 bowersj2 Exp $
+# $Id: lonnavmaps.pm,v 1.115 2002/11/26 14:45:24 bowersj2 Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -171,6 +171,8 @@
# is not yet done and due in less then 24 hours
my $hurryUpColor = "#FF0000";
+ # Keep these mappings in sync with lonquickgrades, which uses the colors
+ # instead of the icons.
my %statusIconMap =
( $res->NETWORK_FAILURE => '',
$res->NOTHING_SET => '',
@@ -478,27 +480,13 @@
my $colorizer = "";
my $color;
if ($curRes->is_problem()) {
- my $status = $curRes->status($part);
- $color = $colormap{$status};
+ $color = $colormap{$curRes->status};
- # Special case in the navmaps: If in less then
- # 24 hours, give it a bit of urgency
- if (($status == $curRes->OPEN() || $status == $curRes->ATTEMPTED() ||
- $status == $curRes->TRIES_LEFT())
- && $curRes->duedate() &&
- $curRes->duedate() < time()+(24*60*60) &&
- $curRes->duedate() > time()) {
- $color = $hurryUpColor;
- }
- # Special case: If this is the last try, and there is
- # more then one available, and it's not due yet, give a bit of urgency
- my $tries = $curRes->tries($part);
- my $maxtries = $curRes->maxtries($part);
- if ($tries && $maxtries && $maxtries > 1 &&
- $maxtries - $tries == 1 && $curRes->duedate() &&
- $curRes->duedate() > time()) {
+ if (dueInLessThen24Hours($curRes, $part) ||
+ lastTry($curRes, $part)) {
$color = $hurryUpColor;
}
+
if ($color ne "") {
$colorizer = "bgcolor=\"$color\"";
}
@@ -731,6 +719,33 @@
}
}
+# Convenience function, so others can use it: Is the problem due in less then
+# 24 hours, and still can be done?
+
+sub dueInLessThen24Hours {
+ my $res = shift;
+ my $part = shift;
+ my $status = $res->status($part);
+
+ return ($status == $res->OPEN() || $status == $res->ATTEMPTED() ||
+ $status == $res->TRIES_LEFT()) &&
+ $res->duedate() && $res->duedate() < time()+(24*60*60) &&
+ $res->duedate() > time();
+}
+
+# Convenience function, so others can use it: Is there only one try remaining for the
+# part, with more then one try to begin with, not due yet and still can be done?
+sub lastTry {
+ my $res = shift;
+ my $part = shift;
+
+ my $tries = $res->tries($part);
+ my $maxtries = $res->maxtries($part);
+ return $tries && $maxtries && $maxtries > 1 &&
+ $maxtries - $tries == 1 && $res->duedate() &&
+ $res->duedate() > time();
+}
+
# This puts a human-readable name on the ENV variable.
sub advancedUser {
return $ENV{'user.adv'};
@@ -896,7 +911,6 @@
&GDBM_READER(), 0640))) {
return undef;
}
- $self->{NAV_HASH} = \%navmaphash;
my %parmhash;
if (!(tie(%parmhash, 'GDBM_File', $self->{PARM_HASH_FILE},
@@ -905,10 +919,16 @@
untie $self->{PARM_HASH};
return undef;
}
- $self->{PARM_HASH} = \%parmhash;
- $self->{HASH_TIED} = 1;
+
+ # Now copy the hashes for speed (?)
+ my %realnav; my %realparm;
+ foreach (%navmaphash) { $realnav{$_} = $navmaphash{$_}; }
+ foreach (%parmhash) { $realparm{$_} = $navmaphash{$_}; }
+ $self->{NAV_HASH} = \%realnav;
+ $self->{PARM_HASH} = \%realparm;
bless($self);
+ $self->untieHashes();
return $self;
}
@@ -1022,13 +1042,20 @@
$self->{PARM_CACHE} = {};
}
+# Internal function: Takes a key to look up in the nav hash and implements internal
+# memory caching of that key.
+sub navhash {
+ my $self = shift; my $key = shift;
+ return $self->{NAV_HASH}->{$key};
+}
+
# Checks to see if coursemap is defined, matching test in old lonnavmaps
sub courseMapDefined {
my $self = shift;
my $uri = &Apache::lonnet::clutter($ENV{'request.course.uri'});
- my $firstres = $self->{NAV_HASH}->{"map_start_$uri"};
- my $lastres = $self->{NAV_HASH}->{"map_finish_$uri"};
+ my $firstres = $self->navhash("map_start_$uri");
+ my $lastres = $self->navhash("map_finish_$uri");
return $firstres && $lastres;
}
@@ -1108,8 +1135,8 @@
sub firstResource {
my $self = shift;
- my $firstResource = $self->{NAV_HASH}->{'map_start_' .
- &Apache::lonnet::clutter($ENV{'request.course.uri'})};
+ my $firstResource = $self->navhash('map_start_' .
+ &Apache::lonnet::clutter($ENV{'request.course.uri'}));
return $self->getById($firstResource);
}
@@ -1121,8 +1148,8 @@
sub finishResource {
my $self = shift;
- my $firstResource = $self->{NAV_HASH}->{'map_finish_' .
- &Apache::lonnet::clutter($ENV{'request.course.uri'})};
+ my $firstResource = $self->navhash('map_finish_' .
+ &Apache::lonnet::clutter($ENV{'request.course.uri'}));
return $self->getById($firstResource);
}
@@ -1781,7 +1808,7 @@
my $self = shift;
my $param = shift;
my $id = shift;
- return $self->{NAV_MAP}->{NAV_HASH}->{$param . ($id?$self->{ID}:"")};
+ return $self->{NAV_MAP}->navhash($param . ($id?$self->{ID}:""));
}
=pod
Index: loncom/interface/lonquickgrades.pm
diff -u loncom/interface/lonquickgrades.pm:1.6 loncom/interface/lonquickgrades.pm:1.7
--- loncom/interface/lonquickgrades.pm:1.6 Fri Nov 22 15:39:14 2002
+++ loncom/interface/lonquickgrades.pm Tue Nov 26 09:45:25 2002
@@ -68,6 +68,12 @@
$ENV{"request.course.fn"}.".db",
$ENV{"request.course.fn"}."_parms.db", 1, 0);
+ if (!defined($navmap)) {
+ my $requrl = $r->uri;
+ $ENV{'user.error.msg'} = "$requrl:bre:0:0:Navamp initialization failed.";
+ return HTTP_NOT_ACCEPTABLE;
+ }
+
# Keep this hash in sync with %statusIconMap in lonnavmaps; they
# should match color/icon
my $res = $navmap->firstResource(); # temp resource to access constants
@@ -82,6 +88,12 @@
$r->print(&Apache::loncommon::bodytag('Quick Score Display','',
''));
+ $r->print(<<HEADER);
+<p>This screen shows how many problems (or problem parts) you have completed, and
+how many you have not yet done. You can also look at <a href="/adm/classcalc">a detailed
+score sheet</a>.</p>
+HEADER
+
$navmap->init();
# End navmap using boilerplate
@@ -107,7 +119,7 @@
if ($curRes == $iterator->BEGIN_MAP()) {$depth++;}
if ($curRes == $iterator->END_MAP()) { $depth--; }
- if (ref($curRes) && $curRes->is_problem())
+ if (ref($curRes) && $curRes->is_problem() && !$curRes->randomout)
{
# Get number of correct, incorrect parts
my $parts = $curRes->parts();
@@ -151,7 +163,7 @@
$iterator->next(); # ignore first BEGIN_MAP
my $curRes = $iterator->next();
- my @start = (255, 255, 0);
+ my @start = (255, 255, 192);
my @end = (0, 192, 0);
my $indentString = ' ';