version 1.339, 2005/09/23 22:18:26
|
version 1.349.2.7, 2006/05/11 21:55:37
|
Line 57 my %statusIconMap =
|
Line 57 my %statusIconMap =
|
$resObj->CLOSED => '', |
$resObj->CLOSED => '', |
$resObj->OPEN => 'navmap.open.gif', |
$resObj->OPEN => 'navmap.open.gif', |
$resObj->CORRECT => 'navmap.correct.gif', |
$resObj->CORRECT => 'navmap.correct.gif', |
$resObj->PARTIALLY_CORRECT => 'navmap.ellipsis.gif', |
$resObj->PARTIALLY_CORRECT => 'navmap.partial.gif', |
$resObj->INCORRECT => 'navmap.wrong.gif', |
$resObj->INCORRECT => 'navmap.wrong.gif', |
$resObj->ATTEMPTED => 'navmap.ellipsis.gif', |
$resObj->ATTEMPTED => 'navmap.ellipsis.gif', |
$resObj->ERROR => '' |
$resObj->ERROR => '' |
Line 171 sub real_handler {
|
Line 171 sub real_handler {
|
&Apache::loncommon::content_type($r,'text/html'); |
&Apache::loncommon::content_type($r,'text/html'); |
} |
} |
&Apache::loncommon::no_cache($r); |
&Apache::loncommon::no_cache($r); |
$r->send_http_header; |
|
|
|
my %toplinkitems=(); |
my %toplinkitems=(); |
&add_linkitem(\%toplinkitems,'blank','',"Select Action"); |
&add_linkitem(\%toplinkitems,'blank','',"Select Action"); |
Line 194 MENU
|
Line 193 MENU
|
$navstatus |
$navstatus |
MENU |
MENU |
} |
} |
|
$r->send_http_header; |
my $html=&Apache::lonxml::xmlbegin(); |
my $html=&Apache::lonxml::xmlbegin(); |
$r->print(<<"ENDSUBM"); |
$r->print(<<"ENDSUBM"); |
$html |
$html |
Line 209 MENU
|
Line 209 MENU
|
<body bgcolor="#FFFFFF" onLoad="submitthis()"></body> |
<body bgcolor="#FFFFFF" onLoad="submitthis()"></body> |
</html> |
</html> |
ENDSUBM |
ENDSUBM |
return; |
return OK; |
} |
} |
if ($ENV{QUERY_STRING} =~ /^launchExternal/) { |
if ($ENV{QUERY_STRING} =~ /^launchExternal/) { |
&Apache::lonnet::put('environment',{'remotenavmap' => 'on'}); |
&Apache::lonnet::put('environment',{'remotenavmap' => 'on'}); |
Line 238 MENU
|
Line 238 MENU
|
$env{'user.error.msg'} = "$requrl:bre:0:0:Course not initialized"; |
$env{'user.error.msg'} = "$requrl:bre:0:0:Course not initialized"; |
return HTTP_NOT_ACCEPTABLE; |
return HTTP_NOT_ACCEPTABLE; |
} |
} |
|
$r->send_http_header; |
my $html=&Apache::lonxml::xmlbegin(); |
my $html=&Apache::lonxml::xmlbegin(); |
$r->print("$html<head>\n"); |
$r->print("$html<head>\n"); |
$r->print("<title>".&mt('Navigate Course Contents')."</title>"); |
$r->print("<title>".&mt('Navigate Course Contents')."</title>"); |
Line 514 sub getDescription {
|
Line 515 sub getDescription {
|
return &mt("Not currently assigned."); |
return &mt("Not currently assigned."); |
} |
} |
if ($status == $res->OPEN_LATER) { |
if ($status == $res->OPEN_LATER) { |
return "Open " . timeToHumanString($res->opendate($part)); |
return "Open " . timeToHumanString($res->opendate($part),'start'); |
} |
} |
if ($status == $res->OPEN) { |
if ($status == $res->OPEN) { |
if ($res->duedate($part)) { |
if ($res->duedate($part)) { |
return &mt("Due")." " .timeToHumanString($res->duedate($part)); |
return &mt("Due")." " .timeToHumanString($res->duedate($part),'end'); |
} else { |
} else { |
return &mt("Open, no due date"); |
return &mt("Open, no due date"); |
} |
} |
} |
} |
if ($status == $res->PAST_DUE_ANSWER_LATER) { |
if ($status == $res->PAST_DUE_ANSWER_LATER) { |
return &mt("Answer open")." " . timeToHumanString($res->answerdate($part)); |
return &mt("Answer open")." " . timeToHumanString($res->answerdate($part),'start'); |
} |
} |
if ($status == $res->PAST_DUE_NO_ANSWER) { |
if ($status == $res->PAST_DUE_NO_ANSWER) { |
return &mt("Was due")." " . timeToHumanString($res->duedate($part)); |
return &mt("Was due")." " . timeToHumanString($res->duedate($part),'end'); |
} |
} |
if ($status == $res->ANSWER_OPEN || $status == $res->PARTIALLY_CORRECT) { |
if (($status == $res->ANSWER_OPEN || $status == $res->PARTIALLY_CORRECT) |
|
&& $res->handgrade($part) ne 'yes') { |
return &mt("Answer available"); |
return &mt("Answer available"); |
} |
} |
if ($status == $res->EXCUSED) { |
if ($status == $res->EXCUSED) { |
Line 549 sub getDescription {
|
Line 551 sub getDescription {
|
} |
} |
} |
} |
if ($res->duedate($part)) { |
if ($res->duedate($part)) { |
return &mt("Due")." " . timeToHumanString($res->duedate($part)) . |
return &mt("Due")." " . timeToHumanString($res->duedate($part),'end') . |
" $triesString"; |
" $triesString"; |
} else { |
} else { |
return &mt("No due date")." $triesString"; |
return &mt("No due date")." $triesString"; |
Line 602 sub advancedUser {
|
Line 604 sub advancedUser {
|
# print "Answer available $timestring" |
# print "Answer available $timestring" |
# Very, very, very, VERY English-only... goodness help a localizer on |
# Very, very, very, VERY English-only... goodness help a localizer on |
# this func... |
# this func... |
|
|
|
|
sub timeToHumanString { |
sub timeToHumanString { |
my ($time) = @_; |
my ($time,$type,$format) = @_; |
|
|
# zero, '0' and blank are bad times |
# zero, '0' and blank are bad times |
if (!$time) { |
if (!$time) { |
return &mt('never'); |
return &mt('never'); |
Line 674 sub timeToHumanString {
|
Line 679 sub timeToHumanString {
|
return "$prefix$hourString$minuteString$tense"; |
return "$prefix$hourString$minuteString$tense"; |
} |
} |
|
|
|
# If there's a caller supplied format, use it. |
|
|
|
if($format ne '') { |
|
my $timeStr = strftime($format, localtime($time)); |
|
return $timeStr.&Apache::lonlocal::gettimezone(); |
|
} |
|
|
# Less then 5 days away, display day of the week and |
# Less then 5 days away, display day of the week and |
# HH:MM |
# HH:MM |
|
|
if ( $delta < $day * 5 ) { |
if ( $delta < $day * 5 ) { |
my $timeStr = strftime("%A, %b %e at %I:%M %P", localtime($time)); |
my $timeStr = strftime("%A, %b %e at %I:%M %P", localtime($time)); |
$timeStr =~ s/12:00 am/00:00/; |
$timeStr =~ s/12:00 am/00:00/; |
$timeStr =~ s/12:00 pm/noon/; |
$timeStr =~ s/12:00 pm/noon/; |
return ($inPast ? "last " : "this ") . |
return ($inPast ? "last " : "this ") . |
$timeStr; |
$timeStr.&Apache::lonlocal::gettimezone(); |
} |
} |
|
|
|
my $conjunction='on'; |
|
if ($type eq 'start') { |
|
$conjunction='at'; |
|
} elsif ($type eq 'end') { |
|
$conjunction='by'; |
|
} |
# Is it this year? |
# Is it this year? |
if ( $time[5] == $now[5]) { |
if ( $time[5] == $now[5]) { |
# Return on Month Day, HH:MM meridian |
# Return on Month Day, HH:MM meridian |
my $timeStr = strftime("on %A, %b %e at %I:%M %P", localtime($time)); |
my $timeStr = strftime("$conjunction %A, %b %e at %I:%M %P", localtime($time)); |
$timeStr =~ s/12:00 am/00:00/; |
$timeStr =~ s/12:00 am/00:00/; |
$timeStr =~ s/12:00 pm/noon/; |
$timeStr =~ s/12:00 pm/noon/; |
return $timeStr; |
return $timeStr.&Apache::lonlocal::gettimezone(); |
} |
} |
|
|
# Not this year, so show the year |
# Not this year, so show the year |
my $timeStr = strftime("on %A, %b %e %Y at %I:%M %P", localtime($time)); |
my $timeStr = strftime("$conjunction %A, %b %e %Y at %I:%M %P", localtime($time)); |
$timeStr =~ s/12:00 am/00:00/; |
$timeStr =~ s/12:00 am/00:00/; |
$timeStr =~ s/12:00 pm/noon/; |
$timeStr =~ s/12:00 pm/noon/; |
return $timeStr; |
return $timeStr.&Apache::lonlocal::gettimezone(); |
} |
} |
} |
} |
|
|
Line 1047 sub render_resource {
|
Line 1066 sub render_resource {
|
# it will be quoted with ' in the href. |
# it will be quoted with ' in the href. |
|
|
my ($left,$right) = split(/\?/, $link); |
my ($left,$right) = split(/\?/, $link); |
$left =~ s/'/\\'/g; |
|
$link = $left.'?'.$right; |
$link = $left.'?'.$right; |
|
|
my $src = $resource->src(); |
my $src = $resource->src(); |
Line 1067 sub render_resource {
|
Line 1085 sub render_resource {
|
# links to open and close the folder |
# links to open and close the folder |
|
|
|
|
my $linkopen = "<a href='$link'>"; |
my $linkopen = "<a href=\"$link\">"; |
|
|
|
|
my $linkclose = "</a>"; |
my $linkclose = "</a>"; |
Line 1100 sub render_resource {
|
Line 1118 sub render_resource {
|
$icon = "<img src='$location/$icon' alt='". |
$icon = "<img src='$location/$icon' alt='". |
($nowOpen ? 'Open Folder' : 'Close Folder')."' border='0' />"; |
($nowOpen ? 'Open Folder' : 'Close Folder')."' border='0' />"; |
|
|
$linkopen = "<a href='" . $params->{'url'} . '?' . |
$linkopen = "<a href=\"" . $params->{'url'} . '?' . |
$params->{'queryString'} . '&filter='; |
$params->{'queryString'} . '&filter='; |
$linkopen .= ($nowOpen xor $it->{CONDITION}) ? |
$linkopen .= ($nowOpen xor $it->{CONDITION}) ? |
addToFilter($filter, $mapId) : |
addToFilter($filter, $mapId) : |
Line 1110 sub render_resource {
|
Line 1128 sub render_resource {
|
&Apache::lonnet::escape($params->{'here'}) . |
&Apache::lonnet::escape($params->{'here'}) . |
'&jump=' . |
'&jump=' . |
&Apache::lonnet::escape($resource->symb()) . |
&Apache::lonnet::escape($resource->symb()) . |
"&folderManip=1'>"; |
"&folderManip=1\">"; |
|
|
} else { |
} else { |
# Don't allow users to manipulate folder |
# Don't allow users to manipulate folder |
Line 1127 sub render_resource {
|
Line 1145 sub render_resource {
|
if ($resource->randomout()) { |
if ($resource->randomout()) { |
$nonLinkedText .= ' <i>(hidden)</i> '; |
$nonLinkedText .= ' <i>(hidden)</i> '; |
} |
} |
|
if (!$resource->condval()) { |
|
$nonLinkedText .= ' <i>(conditionally hidden)</i> '; |
|
} |
|
|
# We're done preparing and finally ready to start the rendering |
# We're done preparing and finally ready to start the rendering |
my $result = "<td align='left' valign='center'>"; |
my $result = "<td align='left' valign='center'>"; |
Line 1149 sub render_resource {
|
Line 1170 sub render_resource {
|
# Is this the current resource? |
# Is this the current resource? |
if (!$params->{'displayedHereMarker'} && |
if (!$params->{'displayedHereMarker'} && |
$resource->symb() eq $params->{'here'} ) { |
$resource->symb() eq $params->{'here'} ) { |
$curMarkerBegin = '<font color="red" size="+2">> </font>'; |
$curMarkerBegin = '<font color="red" size="+2">></font>'; |
$curMarkerEnd = '<font color="red" size="+2"><</font>'; |
$curMarkerEnd = '<font color="red" size="+2"><</font>'; |
$params->{'displayedHereMarker'} = 1; |
$params->{'displayedHereMarker'} = 1; |
} |
} |
Line 1171 sub render_resource {
|
Line 1192 sub render_resource {
|
$target=' target="loncapaclient" '; |
$target=' target="loncapaclient" '; |
} |
} |
if (!$params->{'resource_nolink'} && !$resource->is_sequence() && !$resource->is_empty_sequence) { |
if (!$params->{'resource_nolink'} && !$resource->is_sequence() && !$resource->is_empty_sequence) { |
$result .= " $curMarkerBegin<a $target href='$link'>$title$partLabel</a>$curMarkerEnd $nonLinkedText</td>"; |
$result .= " $curMarkerBegin<a $target href=\"$link\">$title$partLabel</a>$curMarkerEnd $nonLinkedText</td>"; |
} else { |
} else { |
$result .= " $curMarkerBegin$title$partLabel$curMarkerEnd $nonLinkedText</td>"; |
$result .= " $curMarkerBegin$title$partLabel$curMarkerEnd $nonLinkedText</td>"; |
} |
} |
Line 1188 sub render_communication_status {
|
Line 1209 sub render_communication_status {
|
if ($env{'environment.remotenavmap'} eq 'on') { |
if ($env{'environment.remotenavmap'} eq 'on') { |
$target=' target="loncapaclient" '; |
$target=' target="loncapaclient" '; |
} |
} |
my $linkopen = "<a $target href='$link'>"; |
my $linkopen = "<a $target href=\"$link\">"; |
my $linkclose = "</a>"; |
my $linkclose = "</a>"; |
my $location=&Apache::loncommon::lonhttpdurl("/adm/lonMisc"); |
my $location=&Apache::loncommon::lonhttpdurl("/adm/lonMisc"); |
if ($resource->hasDiscussion()) { |
if ($resource->hasDiscussion()) { |
Line 1242 sub render_quick_status {
|
Line 1263 sub render_quick_status {
|
if ($env{'environment.remotenavmap'} eq 'on') { |
if ($env{'environment.remotenavmap'} eq 'on') { |
$target=' target="loncapaclient" '; |
$target=' target="loncapaclient" '; |
} |
} |
my $linkopen = "<a $target href='$link'>"; |
my $linkopen = "<a $target href=\"$link\">"; |
my $linkclose = "</a>"; |
my $linkclose = "</a>"; |
|
|
if ($resource->is_problem() && |
if ($resource->is_problem() && |
Line 1449 sub render {
|
Line 1470 sub render {
|
# Step 1: Check to see if we have a navmap |
# Step 1: Check to see if we have a navmap |
if (!defined($navmap)) { |
if (!defined($navmap)) { |
$navmap = Apache::lonnavmaps::navmap->new(); |
$navmap = Apache::lonnavmaps::navmap->new(); |
} |
if (!defined($navmap)) { |
|
# no londer in course |
|
return '<font color="red">No course selected</font><br /> |
|
<a href="/adm/roles">Select a course</a><br />'; |
|
} |
|
} |
|
|
# Step two: Locate what kind of here marker is necessary |
# Step two: Locate what kind of here marker is necessary |
# Determine where the "here" marker is and where the screen jumps to. |
# Determine where the "here" marker is and where the screen jumps to. |
Line 1833 END
|
Line 1859 END
|
$args->{'multipart'} = $curRes->multipart(); |
$args->{'multipart'} = $curRes->multipart(); |
|
|
if ($condenseParts) { # do the condensation |
if ($condenseParts) { # do the condensation |
if (!$curRes->opendate("0")) { |
|
@parts = (); |
|
$args->{'condensed'} = 1; |
|
} |
|
if (!$args->{'condensed'}) { |
if (!$args->{'condensed'}) { |
# Decide whether to condense based on similarity |
# Decide whether to condense based on similarity |
my $status = $curRes->status($parts[0]); |
my $status = $curRes->status($parts[0]); |
Line 2209 sub generate_email_discuss_status {
|
Line 2231 sub generate_email_discuss_status {
|
if ((!$emailstatus{$msgid}) || ($emailstatus{$msgid} eq 'new')) { |
if ((!$emailstatus{$msgid}) || ($emailstatus{$msgid} eq 'new')) { |
my $plain= |
my $plain= |
&Apache::lonnet::unescape(&Apache::lonnet::unescape($msgid)); |
&Apache::lonnet::unescape(&Apache::lonnet::unescape($msgid)); |
if ($plain=~/(Error|Feedback) \[([^\]]+)\]/) { |
if ($plain=~/ \[([^\]]+)\]\:/) { |
my ($what,$url)=($1,$2); |
my $url=$1; |
if ($what eq 'Error') { |
if ($plain=~/\:Error \[/) { |
$error{$url}.=','.$msgid; |
$error{$url}.=','.$msgid; |
} else { |
} else { |
$feedback{$url}.=','.$msgid; |
$feedback{$url}.=','.$msgid; |
Line 2244 sub get_user_data {
|
Line 2266 sub get_user_data {
|
$self->{RETRIEVED_USER_DATA} = 1; |
$self->{RETRIEVED_USER_DATA} = 1; |
} |
} |
|
|
|
sub get_discussion_data { |
|
my $self = shift; |
|
if ($self->{RETRIEVED_DISCUSSION_DATA}) { |
|
return $self->{DISCUSSION_DATA}; |
|
} |
|
|
|
my $cid=$env{'request.course.id'}; |
|
my $cdom=$env{'course.'.$cid.'.domain'}; |
|
my $cnum=$env{'course.'.$cid.'.num'}; |
|
|
|
# Retrieve discussion data for resources in course |
|
my %discussion_data = &Apache::lonnet::dump($cid,$cdom,$cnum); |
|
|
|
$self->{DISCUSSION_DATA} = \%discussion_data; |
|
$self->{RETRIEVED_DISCUSSION_DATA} = 1; |
|
return $self->{DISCUSSION_DATA}; |
|
} |
|
|
|
|
# Internal function: Takes a key to look up in the nav hash and implements internal |
# Internal function: Takes a key to look up in the nav hash and implements internal |
# memory caching of that key. |
# memory caching of that key. |
sub navhash { |
sub navhash { |
Line 2541 sub parmval_real {
|
Line 2582 sub parmval_real {
|
|
|
=pod |
=pod |
|
|
=item * B<getResourceByUrl>(url): |
=item * B<getResourceByUrl>(url,multiple): |
|
|
Retrieves a resource object by URL of the resource. If passed a |
Retrieves a resource object by URL of the resource, unless the optional |
resource object, it will simply return it, so it is safe to use this |
multiple parameter is included in wahich caes an array of resource |
method in code like "$res = $navmap->getResourceByUrl($res)", if |
objects is returned. If passed a resource object, it will simply return |
you're not sure if $res is already an object, or just a URL. If the |
it, so it is safe to use this method in code like |
resource appears multiple times in the course, only the first instance |
"$res = $navmap->getResourceByUrl($res)" |
will be returned. As a result, this is probably useful only for maps. |
if you're not sure if $res is already an object, or just a URL. If the |
|
resource appears multiple times in the course, only the first instance |
|
will be returned (useful for maps), unless the multiple parameter has |
|
been included, in which case all instances are returned in an array. |
|
|
=item * B<retrieveResources>(map, filterFunc, recursive, bailout, showall): |
=item * B<retrieveResources>(map, filterFunc, recursive, bailout, showall): |
|
|
Line 2583 Convience method for
|
Line 2627 Convience method for
|
which will tell whether the map has resources matching the description |
which will tell whether the map has resources matching the description |
in the filter function. |
in the filter function. |
|
|
|
=item * B<usedVersion>(url): |
|
|
|
Retrieves version infomation for a url. Returns the version (a number, or |
|
the string "mostrecent") for resources which have version information in |
|
the big hash. |
|
|
=cut |
=cut |
|
|
|
|
sub getResourceByUrl { |
sub getResourceByUrl { |
my $self = shift; |
my $self = shift; |
my $resUrl = shift; |
my $resUrl = shift; |
|
my $multiple = shift; |
|
|
if (ref($resUrl)) { return $resUrl; } |
if (ref($resUrl)) { return $resUrl; } |
|
|
$resUrl = &Apache::lonnet::clutter($resUrl); |
$resUrl = &Apache::lonnet::clutter($resUrl); |
my $resId = $self->{NAV_HASH}->{'ids_' . $resUrl}; |
my $resId = $self->{NAV_HASH}->{'ids_' . $resUrl}; |
if ($resId =~ /,/) { |
|
$resId = (split (/,/, $resId))[0]; |
|
} |
|
if (!$resId) { return ''; } |
if (!$resId) { return ''; } |
return $self->getById($resId); |
if ($multiple) { |
|
my @resources = (); |
|
my @resIds = split (/,/, $resId); |
|
foreach my $id (@resIds) { |
|
my $resourceId = $self->getById($id); |
|
if ($resourceId) { |
|
push(@resources,$resourceId); |
|
} |
|
} |
|
return @resources; |
|
} else { |
|
if ($resId =~ /,/) { |
|
$resId = (split (/,/, $resId))[0]; |
|
} |
|
return $self->getById($resId); |
|
} |
} |
} |
|
|
sub retrieveResources { |
sub retrieveResources { |
Line 2666 sub hasResource {
|
Line 2729 sub hasResource {
|
return scalar($self->retrieveResources($map, $filterFunc, $recursive, 1, $showall)) > 0; |
return scalar($self->retrieveResources($map, $filterFunc, $recursive, 1, $showall)) > 0; |
} |
} |
|
|
|
sub usedVersion { |
|
my $self = shift; |
|
my $linkurl = shift; |
|
return $self->navhash("version_$linkurl"); |
|
} |
|
|
1; |
1; |
|
|
package Apache::lonnavmaps::iterator; |
package Apache::lonnavmaps::iterator; |
Line 3570 sub condition {
|
Line 3639 sub condition {
|
my $condition=&Apache::lonnet::directcondval($condid); |
my $condition=&Apache::lonnet::directcondval($condid); |
return $condition; |
return $condition; |
} |
} |
|
sub condval { |
|
my $self=shift; |
|
my ($pathname,$filename) = |
|
&Apache::lonnet::split_uri_for_cond($self->src()); |
|
|
|
my $match=($env{'acc.res.'.$env{'request.course.id'}.'.'.$pathname}=~ |
|
/\&\Q$filename\E\:([\d\|]+)\&/); |
|
if ($match) { |
|
return &Apache::lonnet::condval($1); |
|
} |
|
return 0; |
|
} |
sub compTitle { |
sub compTitle { |
my $self = shift; |
my $self = shift; |
my $title = $self->title(); |
my $title = $self->title(); |
Line 3648 sub contains_problem {
|
Line 3728 sub contains_problem {
|
} |
} |
sub is_sequence { |
sub is_sequence { |
my $self=shift; |
my $self=shift; |
my $src = $self->src(); |
|
return $self->navHash("is_map_", 1) && |
return $self->navHash("is_map_", 1) && |
$self->navHash("map_type_" . $self->map_pc()) eq 'sequence'; |
$self->navHash("map_type_" . $self->map_pc()) eq 'sequence'; |
} |
} |
Line 3718 Returns a string with the type of the ma
|
Line 3797 Returns a string with the type of the ma
|
sub map_finish { |
sub map_finish { |
my $self = shift; |
my $self = shift; |
my $src = $self->src(); |
my $src = $self->src(); |
$src = Apache::lonnet::clutter($src); |
$src = &Apache::lonnet::deversion(&Apache::lonnet::clutter($src)); |
my $res = $self->navHash("map_finish_$src", 0); |
my $res = $self->navHash("map_finish_$src", 0); |
$res = $self->{NAV_MAP}->getById($res); |
$res = $self->{NAV_MAP}->getById($res); |
return $res; |
return $res; |
} |
} |
sub map_pc { |
sub map_pc { |
my $self = shift; |
my $self = shift; |
my $src = $self->src(); |
my $src = &Apache::lonnet::deversion($self->src()); |
return $self->navHash("map_pc_$src", 0); |
return $self->navHash("map_pc_$src", 0); |
} |
} |
sub map_start { |
sub map_start { |
my $self = shift; |
my $self = shift; |
my $src = $self->src(); |
my $src = $self->src(); |
$src = Apache::lonnet::clutter($src); |
$src = &Apache::lonnet::deversion(&Apache::lonnet::clutter($src)); |
my $res = $self->navHash("map_start_$src", 0); |
my $res = $self->navHash("map_start_$src", 0); |
$res = $self->{NAV_MAP}->getById($res); |
$res = $self->{NAV_MAP}->getById($res); |
return $res; |
return $res; |
Line 4556 sub status {
|
Line 4635 sub status {
|
return CORRECT; |
return CORRECT; |
} |
} |
|
|
|
# If it's WRONG... and not open |
|
if ( ($completionStatus == INCORRECT || |
|
$completionStatus == INCORRECT_BY_OVERRIDE) |
|
&& (!$self->opendate($part) || $self->opendate($part) > time()) ) { |
|
return INCORRECT; |
|
} |
|
|
if ($completionStatus == ATTEMPTED) { |
if ($completionStatus == ATTEMPTED) { |
return ATTEMPTED; |
return ATTEMPTED; |
} |
} |
Line 4761 sub getNext {
|
Line 4847 sub getNext {
|
my $to = $self->to(); |
my $to = $self->to(); |
foreach my $branch ( split(/,/, $to) ) { |
foreach my $branch ( split(/,/, $to) ) { |
my $choice = $self->{NAV_MAP}->getById($branch); |
my $choice = $self->{NAV_MAP}->getById($branch); |
if (!$choice->condition()) { next; } |
#if (!$choice->condition()) { next; } |
my $next = $choice->goesto(); |
my $next = $choice->goesto(); |
$next = $self->{NAV_MAP}->getById($next); |
$next = $self->{NAV_MAP}->getById($next); |
|
|