version 1.133, 2003/01/31 22:46:50
|
version 1.136, 2003/02/04 16:37:51
|
Line 56 sub NOTHING { return 3; }
|
Line 56 sub NOTHING { return 3; }
|
|
|
# Some data |
# Some data |
|
|
|
# Keep these mappings in sync with lonquickgrades, which uses the colors |
|
# instead of the icons. |
|
my %statusIconMap = |
|
( Apache::lonnavmaps::resource->NETWORK_FAILURE => '', |
|
Apache::lonnavmaps::resource->NOTHING_SET => '', |
|
Apache::lonnavmaps::resource->CORRECT => 'navmap.correct.gif', |
|
Apache::lonnavmaps::resource->EXCUSED => 'navmap.correct.gif', |
|
Apache::lonnavmaps::resource->PAST_DUE_NO_ANSWER => 'navmap.wrong.gif', |
|
Apache::lonnavmaps::resource->PAST_DUE_ANSWER_LATER => 'navmap.wrong.gif', |
|
Apache::lonnavmaps::resource->ANSWER_OPEN => 'navmap.wrong.gif', |
|
Apache::lonnavmaps::resource->OPEN_LATER => '', |
|
Apache::lonnavmaps::resource->TRIES_LEFT => 'navmap.open.gif', |
|
Apache::lonnavmaps::resource->INCORRECT => 'navmap.wrong.gif', |
|
Apache::lonnavmaps::resource->OPEN => 'navmap.open.gif', |
|
Apache::lonnavmaps::resource->ATTEMPTED => 'navmap.open.gif' ); |
|
|
|
my %iconAltTags = |
|
( 'navmap.correct.gif' => 'Correct', |
|
'navmap.wrong.gif' => 'Incorrect', |
|
'navmap.open.gif' => 'Open' ); |
|
|
|
# Defines a status->color mapping, null string means don't color |
|
my %colormap = |
|
( Apache::lonnavmaps::resource->NETWORK_FAILURE => '', |
|
Apache::lonnavmaps::resource->CORRECT => '', |
|
Apache::lonnavmaps::resource->EXCUSED => '#3333FF', |
|
Apache::lonnavmaps::resource->PAST_DUE_ANSWER_LATER => '', |
|
Apache::lonnavmaps::resource->PAST_DUE_NO_ANSWER => '', |
|
Apache::lonnavmaps::resource->ANSWER_OPEN => '#006600', |
|
Apache::lonnavmaps::resource->OPEN_LATER => '', |
|
Apache::lonnavmaps::resource->TRIES_LEFT => '', |
|
Apache::lonnavmaps::resource->INCORRECT => '', |
|
Apache::lonnavmaps::resource->OPEN => '', |
|
Apache::lonnavmaps::resource->NOTHING_SET => '' ); |
|
# 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 |
|
my $hurryUpColor = "#FF0000"; |
|
|
sub cleanup { |
sub cleanup { |
if (tied(%navmaphash)){ |
if (tied(%navmaphash)){ |
Line 222 sub real_handler {
|
Line 259 sub real_handler {
|
# These are some data tables, which make it easy to change some of |
# These are some data tables, which make it easy to change some of |
# of the specific visualization parameters if desired. |
# of the specific visualization parameters if desired. |
|
|
# Defines a status->color mapping, null string means don't color |
|
my %colormap = |
|
( $res->NETWORK_FAILURE => '', |
|
$res->CORRECT => '', |
|
$res->EXCUSED => '#3333FF', |
|
$res->PAST_DUE_ANSWER_LATER => '', |
|
$res->PAST_DUE_NO_ANSWER => '', |
|
$res->ANSWER_OPEN => '#006600', |
|
$res->OPEN_LATER => '', |
|
$res->TRIES_LEFT => '', |
|
$res->INCORRECT => '', |
|
$res->OPEN => '', |
|
$res->NOTHING_SET => '' ); |
|
# 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 |
|
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 => '', |
|
$res->CORRECT => 'navmap.correct.gif', |
|
$res->EXCUSED => 'navmap.correct.gif', |
|
$res->PAST_DUE_NO_ANSWER => 'navmap.wrong.gif', |
|
$res->PAST_DUE_ANSWER_LATER => 'navmap.wrong.gif', |
|
$res->ANSWER_OPEN => 'navmap.wrong.gif', |
|
$res->OPEN_LATER => '', |
|
$res->TRIES_LEFT => 'navmap.open.gif', |
|
$res->INCORRECT => 'navmap.wrong.gif', |
|
$res->OPEN => 'navmap.open.gif', |
|
$res->ATTEMPTED => 'navmap.open.gif' ); |
|
|
|
my %iconAltTags = |
|
( 'navmap.correct.gif' => 'Correct', |
|
'navmap.wrong.gif' => 'Incorrect', |
|
'navmap.open.gif' => 'Open' ); |
|
|
|
my %condenseStatuses = |
my %condenseStatuses = |
( $res->NETWORK_FAILURE => 1, |
( $res->NETWORK_FAILURE => 1, |
$res->NOTHING_SET => 1, |
$res->NOTHING_SET => 1, |
Line 555 sub real_handler {
|
Line 554 sub real_handler {
|
|
|
} |
} |
|
|
my $colorizer = ""; |
|
my $color; |
my $color; |
if ($curRes->is_problem()) { |
if ($curRes->is_problem()) { |
$color = $colormap{$curRes->status}; |
$color = $colormap{$curRes->status}; |
Line 564 sub real_handler {
|
Line 562 sub real_handler {
|
lastTry($curRes, $part)) { |
lastTry($curRes, $part)) { |
$color = $hurryUpColor; |
$color = $hurryUpColor; |
} |
} |
|
|
if ($color ne "") { |
|
$colorizer = "bgcolor=\"$color\""; |
|
} |
|
} |
} |
|
|
if ($curRes->randomout()) { |
if ($curRes->randomout()) { |
Line 717 sub real_handler {
|
Line 711 sub real_handler {
|
$navmap->untieHashes(); |
$navmap->untieHashes(); |
|
|
$r->print("</body></html>"); |
$r->print("</body></html>"); |
|
$r->rflush(); |
|
|
return OK; |
return OK; |
} |
} |
Line 1060 sub long_status { return 3; }
|
Line 1055 sub long_status { return 3; }
|
|
|
# Data for render_resource |
# Data for render_resource |
|
|
my $resObj = 'Apache::lonnavmaps::resource'; |
|
# Defines a status->color mapping, null string means don't color |
|
my %colormap = |
|
( $resObj->NETWORK_FAILURE => '', |
|
$resObj->CORRECT => '', |
|
$resObj->EXCUSED => '#3333FF', |
|
$resObj->PAST_DUE_ANSWER_LATER => '', |
|
$resObj->PAST_DUE_NO_ANSWER => '', |
|
$resObj->ANSWER_OPEN => '#006600', |
|
$resObj->OPEN_LATER => '', |
|
$resObj->TRIES_LEFT => '', |
|
$resObj->INCORRECT => '', |
|
$resObj->OPEN => '', |
|
$resObj->NOTHING_SET => '' ); |
|
# 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 |
|
my $hurryUpColor = "#FF0000"; |
|
|
|
sub render_resource { |
sub render_resource { |
my ($resource, $part, $params) = @_; |
my ($resource, $part, $params) = @_; |
|
|
my $nonLinkedText = ''; # stuff after resource title not in link |
my $nonLinkedText = ''; # stuff after resource title not in link |
|
|
my $it = $params->{'iterator'}; |
my $link = $params->{"resourceLink"}; |
|
my $src = $resource->src(); |
|
my $it = $params->{"iterator"}; |
my $filter = $it->{FILTER}; |
my $filter = $it->{FILTER}; |
my $stack = $it->getStack(); |
|
my $src = getLinkForResource($stack); |
|
|
|
my $srcHasQuestion = $src =~ /\?/; |
|
my $link = $src. |
|
($srcHasQuestion?'&':'?') . |
|
'symb=' . &Apache::lonnet::escape($resource->symb()). |
|
'"'; |
|
|
|
my $title = $resource->compTitle(); |
my $title = $resource->compTitle(); |
if ($src =~ /^\/uploaded\//) { |
if ($src =~ /^\/uploaded\//) { |
Line 1184 sub render_resource {
|
Line 1155 sub render_resource {
|
$nonLinkedText .= ' (' . $resource->countParts() . ' parts)'; |
$nonLinkedText .= ' (' . $resource->countParts() . ' parts)'; |
} |
} |
|
|
$result .= " $curMarkerBegin<a href='$link'>$title$partLabel</a>$curMarkerEnd $nonLinkedText"; |
$result .= " $curMarkerBegin<a href='$link'>$title$partLabel</a>$curMarkerEnd $nonLinkedText</td>"; |
|
|
return $result; |
return $result; |
} |
} |
|
|
sub render_communication_status { |
sub render_communication_status { |
my ($resource, $part, $params) = @_; |
my ($resource, $part, $params) = @_; |
return "<td align='center'>comm_status</td>"; |
my $discussionHTML = ""; my $feedbackHTML = ""; my $errorHTML = ""; |
|
|
|
my $link = $params->{"resourceLink"}; |
|
my $linkopen = "<a href='$link'>"; |
|
my $linkclose = "</a>"; |
|
|
|
if ($resource->hasDiscussion()) { |
|
$discussionHTML = $linkopen . |
|
'<img border="0" src="/adm/lonMisc/chat.gif" />' . |
|
$linkclose; |
|
} |
|
|
|
if ($resource->getFeedback()) { |
|
my $feedback = $resource->getFeedback(); |
|
foreach (split(/\,/, $feedback)) { |
|
if ($_) { |
|
$feedbackHTML .= ' <a href="/adm/email?display=' |
|
. &Apache::lonnet::escape($_) . '">' |
|
. '<img src="/adm/lonMisc/feedback.gif" ' |
|
. 'border="0" /></a>'; |
|
} |
|
} |
|
} |
|
|
|
if ($resource->getErrors()) { |
|
my $errors = $resource->getErrors(); |
|
foreach (split(/,/, $errors)) { |
|
if ($_) { |
|
$errorHTML .= ' <a href="/adm/email?display=' |
|
. &Apache::lonnet::escape($_) . '">' |
|
. '<img src="/adm/lonMisc/bomb.gif" ' |
|
. 'border="0" /></a>'; |
|
} |
|
} |
|
} |
|
|
|
return "<td width=\"75\" align=\"left\" valign=\"center\">$discussionHTML$feedbackHTML$errorHTML </td>"; |
|
|
} |
} |
sub render_quick_status { |
sub render_quick_status { |
my ($resource, $part, $params) = @_; |
my ($resource, $part, $params) = @_; |
return "<td align='center'>quick_status</td>"; |
my $result = ""; |
|
my $firstDisplayed = !$params->{'condensed'} && |
|
$params->{'multipart'} && $part eq "0"; |
|
|
|
my $link = $params->{"resourceLink"}; |
|
my $linkopen = "<a href='$link'>"; |
|
my $linkclose = "</a>"; |
|
|
|
if ($resource->is_problem() && |
|
!$firstDisplayed) { |
|
my $icon = $statusIconMap{$resource->status($part)}; |
|
my $alt = $iconAltTags{$icon}; |
|
if ($icon) { |
|
$result .= "<td width='30' valign='center' width='50' align='right'>$linkopen<img width='25' height='25' src='/adm/lonIcons/$icon' border='0' alt='$alt' />$linkclose</td>\n"; |
|
} else { |
|
$result .= "<td width='30'> </td>\n"; |
|
} |
|
} else { # not problem, no icon |
|
$result .= "<td width='30'> </td>\n"; |
|
} |
|
|
|
return $result; |
} |
} |
sub render_long_status { |
sub render_long_status { |
my ($resource, $part, $params) = @_; |
my ($resource, $part, $params) = @_; |
return "<td align='center'>long_status</td>"; |
my $result = "<td align='right' valign='center'>\n"; |
|
my $firstDisplayed = !$params->{'condensed'} && |
|
$params->{'multipart'} && $part eq "0"; |
|
|
|
my $color; |
|
if ($resource->is_problem()) { |
|
$color = $colormap{$resource->status}; |
|
|
|
if (dueInLessThen24Hours($resource, $part) || |
|
lastTry($resource, $part)) { |
|
$color = $hurryUpColor; |
|
} |
|
} |
|
|
|
if ($resource->kind() eq "res" && |
|
$resource->is_problem() && |
|
!$firstDisplayed) { |
|
if ($color) {$result .= "<font color=\"$color\"><b>"; } |
|
$result .= getDescription($resource, $part); |
|
if ($color) {$result .= "</b></font>"; } |
|
} |
|
if ($resource->is_map() && advancedUser() && $resource->randompick()) { |
|
$result .= '(randomly select ' . $resource->randompick() .')'; |
|
} |
|
|
|
$result .= " </td>\n"; |
|
|
|
return $result; |
} |
} |
|
|
my @preparedColumns = (\&render_resource, \&render_communication_status, |
my @preparedColumns = (\&render_resource, \&render_communication_status, |
Line 1380 sub render {
|
Line 1436 sub render {
|
my $backgroundColor = $backgroundColors[$rownum % scalar(@backgroundColors)]; |
my $backgroundColor = $backgroundColors[$rownum % scalar(@backgroundColors)]; |
|
|
$result .= " <tr bgcolor='$backgroundColor'>\n"; |
$result .= " <tr bgcolor='$backgroundColor'>\n"; |
|
|
|
# Set up some data about the parts that the cols might want |
|
my $filter = $it->{FILTER}; |
|
my $stack = $it->getStack(); |
|
my $src = getLinkForResource($stack); |
|
|
|
my $srcHasQuestion = $src =~ /\?/; |
|
$args->{"resourceLink"} = $src. |
|
($srcHasQuestion?'&':'?') . |
|
'symb=' . &Apache::lonnet::escape($curRes->symb()). |
|
'"'; |
|
|
# Now, display each column. |
# Now, display each column. |
foreach my $col (@$cols) { |
foreach my $col (@$cols) { |
$result .= " <td>"; |
|
|
|
# If this is the first column and it's time to print |
# If this is the first column and it's time to print |
# the anchor, do so |
# the anchor, do so |
Line 1401 sub render {
|
Line 1467 sub render {
|
$result .= &{$preparedColumns[$col]}($curRes, $part, $args); |
$result .= &{$preparedColumns[$col]}($curRes, $part, $args); |
} |
} |
|
|
$result .= "</td>\n"; |
|
} |
} |
|
|
$result .= " </tr>\n"; |
$result .= " </tr>\n"; |
Line 1411 sub render {
|
Line 1476 sub render {
|
$curRes = $it->next(); |
$curRes = $it->next(); |
} |
} |
|
|
|
# Print out the part that jumps to #curloc if it exists |
|
if ($args->{"displayedJumpMarker"}) { |
|
$result .= "<script>location += "#curloc";</script>\n"; |
|
} |
|
|
$result .= "</table>"; |
$result .= "</table>"; |
|
|
return $result; |
return $result; |