version 1.335, 2005/08/02 20:51:18
|
version 1.347, 2005/11/10 19:19:26
|
Line 90 my %colormap =
|
Line 90 my %colormap =
|
my $hurryUpColor = "#FF0000"; |
my $hurryUpColor = "#FF0000"; |
|
|
sub launch_win { |
sub launch_win { |
my ($mode,$script,$toplinkitems)=@_; |
my ($mode,$script,$toplinkitems,$firsttime)=@_; |
my $result; |
my $result; |
if ($script ne 'no') { |
if ($script ne 'no') { |
$result.='<script type="text/javascript">'; |
$result.='<script type="text/javascript">'; |
} |
} |
$result.='function launch_navmapwin() { |
if ($firsttime) { |
|
$result.='function launch_navmapwin() { |
|
newWindow=open(\'/adm/navmaps?launchExternalRoles\',\'loncapanav\',\'width=400,height=600,scrollbars=1\'); |
|
}'; |
|
} else { |
|
$result.='function launch_navmapwin() { |
newWindow=open(\'/adm/navmaps?launchExternal\',\'loncapanav\',\'width=400,height=600,scrollbars=1\'); |
newWindow=open(\'/adm/navmaps?launchExternal\',\'loncapanav\',\'width=400,height=600,scrollbars=1\'); |
}'; |
}'; |
|
} |
if ($mode eq 'now') { |
if ($mode eq 'now') { |
$result.="\nlaunch_navmapwin();\n"; |
$result.="\nlaunch_navmapwin();\n"; |
} |
} |
Line 205 MENU
|
Line 211 MENU
|
ENDSUBM |
ENDSUBM |
return; |
return; |
} |
} |
if ($ENV{QUERY_STRING} eq 'launchExternal') { |
if ($ENV{QUERY_STRING} =~ /^launchExternal/) { |
&Apache::lonnet::put('environment',{'remotenavmap' => 'on'}); |
&Apache::lonnet::put('environment',{'remotenavmap' => 'on'}); |
&Apache::lonnet::appenv('environment.remotenavmap' => 'on'); |
&Apache::lonnet::appenv('environment.remotenavmap' => 'on'); |
my $menu=&Apache::lonmenu::reopenmenu(); |
my $menu=&Apache::lonmenu::reopenmenu(); |
Line 508 sub getDescription {
|
Line 514 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) { |
return &mt("Answer available"); |
return &mt("Answer available"); |
Line 543 sub getDescription {
|
Line 549 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 596 sub advancedUser {
|
Line 602 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 668 sub timeToHumanString {
|
Line 677 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 1121 sub render_resource {
|
Line 1144 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 1143 sub render_resource {
|
Line 1169 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 1395 sub render {
|
Line 1421 sub render {
|
# no columns, no nav maps. |
# no columns, no nav maps. |
return ''; |
return ''; |
} |
} |
my $mustCloseNavMap = 0; |
|
my $navmap; |
my $navmap; |
if (defined($args->{'navmap'})) { |
if (defined($args->{'navmap'})) { |
$navmap = $args->{'navmap'}; |
$navmap = $args->{'navmap'}; |
Line 1444 sub render {
|
Line 1469 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(); |
$mustCloseNavMap = 1; |
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 1509 sub render {
|
Line 1538 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(); |
$mustCloseNavMap = 1; |
|
} |
} |
|
|
# See if we're being passed a specific map |
# See if we're being passed a specific map |
Line 1830 END
|
Line 1858 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 3567 sub condition {
|
Line 3591 sub condition {
|
my $condition=&Apache::lonnet::directcondval($condid); |
my $condition=&Apache::lonnet::directcondval($condid); |
return $condition; |
return $condition; |
} |
} |
|
sub condval { |
|
my $self=shift; |
|
my $uri=&Apache::lonnet::deversion(&Apache::lonnet::declutter($self->src())); |
|
my ($pathname,$filename)=($uri=~m|(.*)/([^/]*)|); |
|
$pathname=~s/^adm\/wrapper\///; |
|
|
|
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 3633 sub is_page {
|
Line 3669 sub is_page {
|
sub is_problem { |
sub is_problem { |
my $self=shift; |
my $self=shift; |
my $src = $self->src(); |
my $src = $self->src(); |
return ($src =~ /\.(problem|exam|quiz|assess|survey|form|library)$/) |
return ($src =~ /\.(problem|exam|quiz|assess|survey|form|library|task)$/) |
} |
} |
sub contains_problem { |
sub contains_problem { |
my $self=shift; |
my $self=shift; |
Line 4137 sub extractParts {
|
Line 4173 sub extractParts {
|
return; |
return; |
} |
} |
foreach (split(/\,/,$metadata)) { |
foreach (split(/\,/,$metadata)) { |
if ($_ =~ /^part_(.*)$/) { |
if ($_ =~ /^(?:part|Task)_(.*)$/) { |
my $part = $1; |
my $part = $1; |
# This floods the logs if it blows up |
# This floods the logs if it blows up |
if (defined($parts{$part})) { |
if (defined($parts{$part})) { |
Line 4553 sub status {
|
Line 4589 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 4758 sub getNext {
|
Line 4801 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); |
|
|