version 1.60, 2002/10/01 19:39:11
|
version 1.62, 2002/10/03 19:10:28
|
Line 878 sub new_handle {
|
Line 878 sub new_handle {
|
my %condenseStatuses = |
my %condenseStatuses = |
( $res->NETWORK_FAILURE => 1, |
( $res->NETWORK_FAILURE => 1, |
$res->NOTHING_SET => 1, |
$res->NOTHING_SET => 1, |
$res->CORRECT => 1, |
$res->CORRECT => 1 ); |
$res->OPEN => 1 ); |
|
|
|
my %filterHash; |
my %filterHash; |
# Figure out what we're not displaying |
# Figure out what we're not displaying |
Line 897 sub new_handle {
|
Line 896 sub new_handle {
|
my $curRes = $mapIterator->next(); |
my $curRes = $mapIterator->next(); |
undef $res; # so we don't accidentally use it later |
undef $res; # so we don't accidentally use it later |
my $indentLevel = -1; |
my $indentLevel = -1; |
my $indentString = "<img src=\"/adm/lonIcons/whitespace1.gif\" width=\"25\" height=\"1\"/>"; |
my $indentString = "<img src=\"/adm/lonIcons/whitespace1.gif\" width=\"25\" height=\"1\" alt=\"\" border=\"0\" />"; |
|
|
my $isNewBranch = 0; |
my $isNewBranch = 0; |
my $now = time(); |
my $now = time(); |
Line 919 sub new_handle {
|
Line 918 sub new_handle {
|
if (ref($curRes) && $curRes->src()) { |
if (ref($curRes) && $curRes->src()) { |
|
|
# Step one: Decide which parts to show |
# Step one: Decide which parts to show |
my @parts; |
my @parts = @{$curRes->parts()}; |
|
my $multipart = scalar(@parts) > 1; |
|
my $condensed = 0; |
|
|
if ($curRes->is_problem()) { |
if ($curRes->is_problem()) { |
# Is it multipart? |
# Is it multipart? |
@parts = @{$curRes->parts()}; |
|
|
|
my $multipart = scalar(@parts) > 1; |
|
|
|
if ($multipart) { |
if ($multipart) { |
# If it's multipart, see if part 0 is "open" |
# If it's multipart, see if part 0 is "open" |
# if it is, display all parts, if it isn't, |
# if it is, display all parts, if it isn't, |
Line 935 sub new_handle {
|
Line 934 sub new_handle {
|
} else { |
} else { |
# Otherwise, only display part 0 if we want to |
# Otherwise, only display part 0 if we want to |
# attach feedback or email information to it |
# attach feedback or email information to it |
if (!$curRes->hasDiscussion() && !$curRes->getFeedback()) { |
if ($curRes->hasDiscussion() || $curRes->getFeedback()) { |
shift @parts; |
shift @parts; |
} else { |
} else { |
# If there's discussion or feedback, that counts |
# If there's discussion or feedback, that counts |
Line 943 sub new_handle {
|
Line 942 sub new_handle {
|
|
|
# Now, we decide whether to condense the |
# Now, we decide whether to condense the |
# parts due to similarity |
# parts due to similarity |
my $status = $curRes->status($parts[0]); |
my $status = $curRes->status($parts[1]); |
my $allSame = 1; |
my $due = $curRes->duedate($parts[1]); |
for (my $i = 1; $i < scalar(@parts); $i++) { |
my $open = $curRes->opendate($parts[1]); |
|
my $statusAllSame = 1; |
|
my $dueAllSame = 1; |
|
my $openAllSame = 1; |
|
for (my $i = 2; $i < scalar(@parts); $i++) { |
if ($curRes->status($parts[$i]) != $status){ |
if ($curRes->status($parts[$i]) != $status){ |
$allSame = 0; |
$statusAllSame = 0; |
|
} |
|
if ($curRes->duedate($parts[$i]) != $due ) { |
|
$dueAllSame = 0; |
|
} |
|
if ($curRes->opendate($parts[$i]) != $open) { |
|
$openAllSame = 0; |
} |
} |
} |
} |
|
|
# $allSame is true if all the statuses were |
# $allSame is true if all the statuses were |
# the same. Now, if they are all the same and |
# the same. Now, if they are all the same and |
# match one of the statuses to condense, then |
# match one of the statuses to condense, or they |
# only display part 0. |
# are all open with the same due date, or they are |
if ($allSame && defined($condenseStatuses{$status})){ |
# all OPEN_LATER with the same open date, display the |
@parts = ("0"); |
# status of the first non-zero part (to get the 'correct' |
|
# status right, since 0 is never 'correct' or 'open'). |
|
if (($statusAllSame && defined($condenseStatuses{$status})) || |
|
($dueAllSame && $status == $curRes->OPEN && $statusAllSame)|| |
|
($openAllSame && $status == $curRes->OPEN_LATER && $statusAllSame) ){ |
|
@parts = ($parts[1]); |
|
$condensed = 1; |
} |
} |
} |
} |
} |
} |
Line 999 sub new_handle {
|
Line 1014 sub new_handle {
|
my $linkopen = "<a href=\"$link\">"; |
my $linkopen = "<a href=\"$link\">"; |
my $linkclose = "</a>"; |
my $linkclose = "</a>"; |
|
|
my $icon = "html.gif"; |
my $icon = "<img src=\"/adm/lonIcons/html.gif\" alt=\"\" border=\"0\" />"; |
if ($curRes->is_problem()) { |
if ($curRes->is_problem()) { |
$icon = "problem.gif"; |
if ($part eq "0" || $condensed) { |
|
$icon = '<img src="/adm/lonIcons/problem.gif" alt="" border=\"0\" />'; |
|
} else { |
|
$icon = $indentString; |
|
} |
} |
} |
|
|
# Display the correct icon, link to open or shut map |
# Display the correct icon, link to open or shut map |
Line 1010 sub new_handle {
|
Line 1029 sub new_handle {
|
my $nowOpen = !defined($filterHash{$mapId}); |
my $nowOpen = !defined($filterHash{$mapId}); |
$icon = $nowOpen ? |
$icon = $nowOpen ? |
"folder_opened.gif" : "folder_closed.gif"; |
"folder_opened.gif" : "folder_closed.gif"; |
|
$icon = "<img src=\"/adm/lonIcons/$icon\" alt=\"\" border=\"0\" />"; |
$linkopen = "<a href=\"/adm/navmaps?filter="; |
$linkopen = "<a href=\"/adm/navmaps?filter="; |
$linkopen .= $nowOpen ? |
$linkopen .= $nowOpen ? |
addToFilter(\%filterHash, $mapId) : |
addToFilter(\%filterHash, $mapId) : |
Line 1036 sub new_handle {
|
Line 1056 sub new_handle {
|
$r->print($indentString); |
$r->print($indentString); |
} |
} |
|
|
$r->print(" ${newBranchText}${linkopen}<img border=\"0\" src=\"" . |
$r->print(" ${newBranchText}${linkopen}$icon${linkclose}\n"); |
"/adm/lonIcons/$icon\" alt=\"\">${linkclose}\n"); |
|
|
|
if ($curRes->is_problem() && $part != "0") { $partLabel = " (Part $part)"; } |
if ($curRes->is_problem() && $part != "0" && !$condensed) { |
|
$partLabel = " (Part $part)"; |
|
$title = ""; |
|
} |
|
|
$r->print(" <a href=\"$link\">$title$partLabel</a></td>"); |
$r->print(" <a href=\"$link\">$title$partLabel</a></td>"); |
|
|
Line 1066 sub new_handle {
|
Line 1088 sub new_handle {
|
|
|
$r->print("<td align=\"left\">$discussionHTML$feedbackHTML</td>"); |
$r->print("<td align=\"left\">$discussionHTML$feedbackHTML</td>"); |
|
|
|
# Is this the first displayed part of a multi-part problem |
|
# that has not been condensed, so we should suppress these two |
|
# columns? |
|
my $firstDisplayed = !$condensed && $multipart && $part eq "0"; |
|
|
# THIRD ROW: Problem status icon |
# THIRD ROW: Problem status icon |
if ($curRes->is_problem()) { |
if ($curRes->is_problem() && |
my $icon = $statusIconMap{$curRes->status()}; |
!$firstDisplayed) { |
|
my $icon = $statusIconMap{$curRes->status($part)}; |
if ($icon) { |
if ($icon) { |
$r->print("<td width=\"50\" align=\"right\">$linkopen<img src=\"/adm/lonIcons/$icon\" border=\"0\" />$linkclose</td>\n"); |
$r->print("<td width=\"50\" align=\"right\">$linkopen<img src=\"/adm/lonIcons/$icon\" border=\"0\" />$linkclose</td>\n"); |
} else { |
} else { |
Line 1081 sub new_handle {
|
Line 1109 sub new_handle {
|
# FOURTH ROW: Text description |
# FOURTH ROW: Text description |
$r->print("<td $colorizer align=\"right\">\n"); |
$r->print("<td $colorizer align=\"right\">\n"); |
|
|
if ($curRes->kind() eq "res" and |
if ($curRes->kind() eq "res" && |
$curRes->is_problem() ) { |
$curRes->is_problem() && |
|
!$firstDisplayed) { |
$r->print (getDescription($curRes, $part)); |
$r->print (getDescription($curRes, $part)); |
} |
} |
|
|
Line 2509 sub getNext {
|
Line 2538 sub getNext {
|
my $next = $choice->goesto(); |
my $next = $choice->goesto(); |
$next = $self->{NAV_MAP}->getById($next); |
$next = $self->{NAV_MAP}->getById($next); |
|
|
# Don't remember it if we've already seen it |
# Don't remember it if we've already seen it or if |
|
# the student doesn't have browse priviledges |
|
my $browsePriv = &Apache::lonnet::allowed('bre', $self->src); |
if (!defined($alreadySeenHash) || |
if (!defined($alreadySeenHash) || |
!defined($alreadySeenHash->{$next->{ID}})) { |
!defined($alreadySeenHash->{$next->{ID}}) || |
|
($browsePriv ne '2' && $browsePriv ne 'F')) { |
push @branches, $next; |
push @branches, $next; |
} |
} |
} |
} |