version 1.233, 2003/09/24 15:02:34
|
version 1.242, 2003/12/01 14:38:25
|
Line 127 sub real_handler {
|
Line 127 sub real_handler {
|
# Create the nav map |
# Create the nav map |
my $navmap = Apache::lonnavmaps::navmap->new(); |
my $navmap = Apache::lonnavmaps::navmap->new(); |
|
|
|
|
if (!defined($navmap)) { |
if (!defined($navmap)) { |
my $requrl = $r->uri; |
my $requrl = $r->uri; |
$ENV{'user.error.msg'} = "$requrl:bre:0:0:Course not initialized"; |
$ENV{'user.error.msg'} = "$requrl:bre:0:0:Course not initialized"; |
Line 433 sub timeToHumanString {
|
Line 432 sub timeToHumanString {
|
return &mt('never'); |
return &mt('never'); |
} |
} |
unless (&Apache::lonlocal::current_language()=~/^en/) { |
unless (&Apache::lonlocal::current_language()=~/^en/) { |
return localtime($time); |
return &Apache::lonlocal::locallocaltime($time); |
} |
} |
my $now = time(); |
my $now = time(); |
|
|
Line 502 sub timeToHumanString {
|
Line 501 sub timeToHumanString {
|
# 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/midnight/; |
$timeStr =~ s/12:00 am/00:00/; |
$timeStr =~ s/12:00 pm/noon/; |
$timeStr =~ s/12:00 pm/noon/; |
return ($inPast ? "last " : "next ") . |
return ($inPast ? "last " : "next ") . |
$timeStr; |
$timeStr; |
Line 512 sub timeToHumanString {
|
Line 511 sub timeToHumanString {
|
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("on %A, %b %e at %I:%M %P", localtime($time)); |
$timeStr =~ s/12:00 am/midnight/; |
$timeStr =~ s/12:00 am/00:00/; |
$timeStr =~ s/12:00 pm/noon/; |
$timeStr =~ s/12:00 pm/noon/; |
return $timeStr; |
return $timeStr; |
} |
} |
|
|
# Not this year, so show the year |
# Not this year, so show the year |
my $timeStr = strftime("on %A, %b %e %G at %I:%M %P", localtime($time)); |
my $timeStr = strftime("on %A, %b %e %G at %I:%M %P", localtime($time)); |
$timeStr =~ s/12:00 am/midnight/; |
$timeStr =~ s/12:00 am/00:00/; |
$timeStr =~ s/12:00 pm/noon/; |
$timeStr =~ s/12:00 pm/noon/; |
return $timeStr; |
return $timeStr; |
} |
} |
Line 1587 sub render {
|
Line 1586 sub render {
|
# If we have the connection, make sure the user is still connected |
# If we have the connection, make sure the user is still connected |
my $c = $r->connection; |
my $c = $r->connection; |
if ($c->aborted()) { |
if ($c->aborted()) { |
Apache::lonnet::logthis("navmaps aborted"); |
|
# Who cares what we do, nobody will see it anyhow. |
# Who cares what we do, nobody will see it anyhow. |
return ''; |
return ''; |
} |
} |
Line 2347 consisting entirely of empty resources e
|
Line 2345 consisting entirely of empty resources e
|
ending resource, will cause a lot of BRANCH_STARTs and BRANCH_ENDs, |
ending resource, will cause a lot of BRANCH_STARTs and BRANCH_ENDs, |
but only one resource will be returned. |
but only one resource will be returned. |
|
|
|
=back |
|
|
=head2 Normal Usage |
=head2 Normal Usage |
|
|
Normal usage of the iterator object is to do the following: |
Normal usage of the iterator object is to do the following: |
Line 2367 the depth of the iterator to see when it
|
Line 2367 the depth of the iterator to see when it
|
code. It is difficult to get right and harder to understand then |
code. It is difficult to get right and harder to understand then |
this. They should be migrated to this new style. |
this. They should be migrated to this new style. |
|
|
=back |
|
|
|
=cut |
=cut |
|
|
# Here are the tokens for the iterator: |
# Here are the tokens for the iterator: |
Line 3369 sub opendate {
|
Line 3367 sub opendate {
|
} |
} |
sub problemstatus { |
sub problemstatus { |
(my $self, my $part) = @_; |
(my $self, my $part) = @_; |
return $self->parmval("problemstatus", $part); |
return lc $self->parmval("problemstatus", $part); |
} |
} |
sub sig { |
sub sig { |
(my $self, my $part) = @_; |
(my $self, my $part) = @_; |
Line 3547 sub responseType {
|
Line 3545 sub responseType {
|
my $part = shift; |
my $part = shift; |
|
|
$self->extractParts(); |
$self->extractParts(); |
return $self->{RESPONSE_TYPES}->{$part}; |
if (defined($self->{RESPONSE_TYPES}->{$part})) { |
|
return @{$self->{RESPONSE_TYPES}->{$part}}; |
|
} else { |
|
return undef; |
|
} |
} |
} |
|
|
sub responseIds { |
sub responseIds { |
Line 3555 sub responseIds {
|
Line 3557 sub responseIds {
|
my $part = shift; |
my $part = shift; |
|
|
$self->extractParts(); |
$self->extractParts(); |
return $self->{RESPONSE_IDS}->{$part}; |
if (defined($self->{RESPONSE_IDS}->{$part})) { |
|
return @{$self->{RESPONSE_IDS}->{$part}}; |
|
} else { |
|
return undef; |
|
} |
} |
} |
|
|
# Private function: Extracts the parts information, both part names and |
# Private function: Extracts the parts information, both part names and |
Line 3572 sub extractParts {
|
Line 3578 sub extractParts {
|
|
|
# Retrieve part count, if this is a problem |
# Retrieve part count, if this is a problem |
if ($self->is_problem()) { |
if ($self->is_problem()) { |
|
my $partorder = &Apache::lonnet::metadata($self->src(), 'partorder'); |
my $metadata = &Apache::lonnet::metadata($self->src(), 'packages'); |
my $metadata = &Apache::lonnet::metadata($self->src(), 'packages'); |
if (!$metadata) { |
|
$self->{RESOURCE_ERROR} = 1; |
|
$self->{PARTS} = []; |
|
$self->{PART_TYPE} = {}; |
|
return; |
|
} |
|
foreach (split(/\,/,$metadata)) { |
|
if ($_ =~ /^part_(.*)$/) { |
|
my $part = $1; |
|
# This floods the logs if it blows up |
|
if (defined($parts{$part})) { |
|
Apache::lonnet::logthis("$part multiply defined in metadata for " . $self->symb()); |
|
} |
|
|
|
# check to see if part is turned off. |
if ($partorder) { |
|
my @parts; |
if (!Apache::loncommon::check_if_partid_hidden($part, $self->symb())) { |
for my $part (split (/,/,$partorder)) { |
$parts{$part} = 1; |
if (!Apache::loncommon::check_if_partid_hidden($part, $self->symb())) { |
} |
push @parts, $part; |
} |
$parts{$part} = 1; |
|
} |
|
} |
|
$self->{PARTS} = \@parts; |
|
} else { |
|
if (!$metadata) { |
|
$self->{RESOURCE_ERROR} = 1; |
|
$self->{PARTS} = []; |
|
$self->{PART_TYPE} = {}; |
|
return; |
|
} |
|
foreach (split(/\,/,$metadata)) { |
|
if ($_ =~ /^part_(.*)$/) { |
|
my $part = $1; |
|
# This floods the logs if it blows up |
|
if (defined($parts{$part})) { |
|
&Apache::lonnet::logthis("$part multiply defined in metadata for " . $self->symb()); |
|
} |
|
|
|
# check to see if part is turned off. |
|
|
|
if (!Apache::loncommon::check_if_partid_hidden($part, $self->symb())) { |
|
$parts{$part} = 1; |
|
} |
|
} |
|
} |
|
my @sortedParts = sort keys %parts; |
|
$self->{PARTS} = \@sortedParts; |
} |
} |
|
|
|
|
my @sortedParts = sort keys %parts; |
|
$self->{PARTS} = \@sortedParts; |
|
|
|
my %responseIdHash; |
my %responseIdHash; |
my %responseTypeHash; |
my %responseTypeHash; |
Line 3609 sub extractParts {
|
Line 3627 sub extractParts {
|
} |
} |
|
|
# Now, the unfortunate thing about this is that parts, part name, and |
# Now, the unfortunate thing about this is that parts, part name, and |
# response if are delimited by underscores, but both the part |
# response id are delimited by underscores, but both the part |
# name and response id can themselves have underscores in them. |
# name and response id can themselves have underscores in them. |
# So we have to use our knowlege of part names to figure out |
# So we have to use our knowlege of part names to figure out |
# where the part names begin and end, and even then, it is possible |
# where the part names begin and end, and even then, it is possible |
Line 3621 sub extractParts {
|
Line 3639 sub extractParts {
|
my $partIdSoFar = ''; |
my $partIdSoFar = ''; |
my @partChunks = split /_/, $partStuff; |
my @partChunks = split /_/, $partStuff; |
my $i = 0; |
my $i = 0; |
|
|
for ($i = 0; $i < scalar(@partChunks); $i++) { |
for ($i = 0; $i < scalar(@partChunks); $i++) { |
if ($partIdSoFar) { $partIdSoFar .= '_'; } |
if ($partIdSoFar) { $partIdSoFar .= '_'; } |
$partIdSoFar .= $partChunks[$i]; |
$partIdSoFar .= $partChunks[$i]; |
Line 3634 sub extractParts {
|
Line 3651 sub extractParts {
|
} |
} |
} |
} |
} |
} |
|
|
$self->{RESPONSE_IDS} = \%responseIdHash; |
$self->{RESPONSE_IDS} = \%responseIdHash; |
$self->{RESPONSE_TYPES} = \%responseTypeHash; |
$self->{RESPONSE_TYPES} = \%responseTypeHash; |
} |
} |
Line 3947 sub status {
|
Line 3963 sub status {
|
#if ($self->{RESOURCE_ERROR}) { return NETWORK_FAILURE; } |
#if ($self->{RESOURCE_ERROR}) { return NETWORK_FAILURE; } |
if ($completionStatus == NETWORK_FAILURE) { return NETWORK_FAILURE; } |
if ($completionStatus == NETWORK_FAILURE) { return NETWORK_FAILURE; } |
|
|
my $suppressFeedback = lc($self->parmval("problemstatus", $part)) eq 'no'; |
my $suppressFeedback = $self->problemstatus($part) eq 'no'; |
|
# If there's an answer date and we're past it, don't |
|
# suppress the feedback; student should know |
|
if ($self->answerdate($part) && $self->answerdate($part) < time()) { |
|
$suppressFeedback = 0; |
|
} |
|
|
# There are a few whole rows we can dispose of: |
# There are a few whole rows we can dispose of: |
if ($completionStatus == CORRECT || |
if ($completionStatus == CORRECT || |