--- loncom/interface/lonnavmaps.pm 2011/05/18 11:26:44 1.459
+++ loncom/interface/lonnavmaps.pm 2012/05/07 13:47:37 1.483
@@ -1,7 +1,7 @@
# The LearningOnline Network with CAPA
# Navigate Maps Handler
#
-# $Id: lonnavmaps.pm,v 1.459 2011/05/18 11:26:44 foxr Exp $
+# $Id: lonnavmaps.pm,v 1.483 2012/05/07 13:47:37 raeburn Exp $
#
# Copyright Michigan State University Board of Trustees
@@ -464,7 +464,7 @@ returns 4
=item add_linkitem()
-=item show_linkitems()
+=item show_linkitems_toolbar()
=back
@@ -478,12 +478,18 @@ use Apache::loncommon();
use Apache::lonenc();
use Apache::lonlocal;
use Apache::lonnet;
+use Apache::lonmap;
use POSIX qw (floor strftime);
use Time::HiRes qw( gettimeofday tv_interval );
use LONCAPA;
use DateTime();
-use Data::Dumper;
+
+# For debugging
+
+# use Data::Dumper;
+
+
# symbolic constants
sub SYMB { return 1; }
sub URL { return 2; }
@@ -509,7 +515,7 @@ my %statusIconMap =
my %iconAltTags = #texthash does not work here
( 'navmap.correct.gif' => 'Correct',
'navmap.wrong.gif' => 'Incorrect',
- 'navmap.open.gif' => 'Open',
+ 'navmap.open.gif' => 'Is Open',
'navmap.partial.gif' => 'Partially Correct',
'navmap.ellipsis.gif' => 'Attempted',
);
@@ -536,9 +542,6 @@ my %colormap =
# is not yet done and due in less than 24 hours
my $hurryUpColor = "#FF0000";
-my $future_slots_checked = 0;
-my $future_slots = 0;
-
sub addToFilter {
my $hashIn = shift;
my $addition = shift;
@@ -612,7 +615,7 @@ sub getDescription {
return &Apache::lonhtmlcommon::direct_parm_link(&mt("Not currently assigned.",$res->symb(),'opendate'),$part);
}
if ($status == $res->OPEN_LATER) {
- return &mt("Open ") .&Apache::lonhtmlcommon::direct_parm_link(&timeToHumanString($open,'start'),$res->symb(),'opendate',$part);
+ return &mt("Open [_1]",&Apache::lonhtmlcommon::direct_parm_link(&timeToHumanString($open,'start'),$res->symb(),'opendate',$part));
}
if ($res->simpleStatus($part) == $res->OPEN) {
unless (&Apache::lonnet::allowed('mgr',$env{'request.course.id'})) {
@@ -629,10 +632,10 @@ sub getDescription {
return &mt('Reserved - next open [_1]',
timeToHumanString($slot_time,'start'));
} elsif ($slot_status == $res->RESERVABLE) {
- return &mt('Reservable ending [_1]',
+ return &mt('Reservable, reservations close [_1]',
timeToHumanString($slot_time,'end'));
} elsif ($slot_status == $res->RESERVABLE_LATER) {
- return &mt('Reservable starting [_1]',
+ return &mt('Reservable, reservations open [_1]',
timeToHumanString($slot_time,'start'));
} elsif ($slot_status == $res->NOT_IN_A_SLOT) {
return &mt('Reserve a time/place to work');
@@ -646,22 +649,22 @@ sub getDescription {
if ($status == $res->OPEN) {
if ($due) {
if ($res->is_practice()) {
- return &mt("Closes ")." " .&Apache::lonhtmlcommon::direct_parm_link(&timeToHumanString($due,'start'),$res->symb(),'duedate',$part);
+ return &mt("Closes [_1]",&Apache::lonhtmlcommon::direct_parm_link(&timeToHumanString($due,'start'),$res->symb(),'duedate',$part));
} else {
- return &mt("Due")." " .&Apache::lonhtmlcommon::direct_parm_link(&timeToHumanString($due,'end'),$res->symb(),'duedate',$part);
+ return &mt("Due [_1]",&Apache::lonhtmlcommon::direct_parm_link(&timeToHumanString($due,'end'),$res->symb(),'duedate',$part));
}
} else {
return &Apache::lonhtmlcommon::direct_parm_link(&mt("Open, no due date"),$res->symb(),'duedate',$part);
}
}
if ($status == $res->PAST_DUE_ANSWER_LATER) {
- return &mt("Answer open")." " .&Apache::lonhtmlcommon::direct_parm_link(&timeToHumanString($answer,'start'),$res->symb(),'answerdate',$part);
+ return &mt("Answer open [_1]",&Apache::lonhtmlcommon::direct_parm_link(&timeToHumanString($answer,'start'),$res->symb(),'answerdate',$part));
}
if ($status == $res->PAST_DUE_NO_ANSWER) {
if ($res->is_practice()) {
- return &mt("Closed")." " . &Apache::lonhtmlcommon::direct_parm_link(&timeToHumanString($due,'start'),$res->symb(),'answerdate,duedate',$part);
+ return &mt("Closed [_1]",&Apache::lonhtmlcommon::direct_parm_link(&timeToHumanString($due,'start'),$res->symb(),'answerdate,duedate',$part));
} else {
- return &mt("Was due")." " .&Apache::lonhtmlcommon::direct_parm_link(&timeToHumanString($due,'end'),$res->symb(),'answerdate,duedate',$part);
+ return &mt("Was due [_1]",&Apache::lonhtmlcommon::direct_parm_link(&timeToHumanString($due,'end'),$res->symb(),'answerdate,duedate',$part));
}
}
if (($status == $res->ANSWER_OPEN || $status == $res->PARTIALLY_CORRECT)
@@ -694,7 +697,7 @@ sub getDescription {
}
}
if ($due) {
- return &mt("Due")." " . &Apache::lonhtmlcommon::direct_parm_link(&timeToHumanString($due,'end'),$res->symb(),'duedate',$part) .
+ return &mt("Due [_1]",&Apache::lonhtmlcommon::direct_parm_link(&timeToHumanString($due,'end'),$res->symb(),'duedate',$part)) .
" $triesString";
} else {
return &Apache::lonhtmlcommon::direct_parm_link(&mt("No due date"),$res->symb(),'duedate',$part)." $triesString";
@@ -779,14 +782,31 @@ sub timeToHumanString {
# Less than an hour
if ( $delta < $hour ) {
- # If so, use minutes
+ # If so, use minutes; or minutes, seconds (if format requires)
my $minutes = floor($delta / 60);
+ if (($format ne '') && ($format =~ /\%(T|S)/)) {
+ my $display;
+ if ($minutes == 1) {
+ $display = "${prefix}1 minute";
+ } else {
+ $display = "$prefix$minutes minutes";
+ }
+ my $seconds = $delta % $minute;
+ if ($seconds == 0) {
+ $display .= $tense;
+ } elsif ($seconds == 1) {
+ $display .= ", 1 second$tense";
+ } else {
+ $display .= ", $seconds seconds$tense";
+ }
+ return $display;
+ }
if ($minutes == 1) { return "${prefix}1 minute$tense"; }
return "$prefix$minutes minutes$tense";
}
# Is it less than 24 hours away? If so,
- # display hours + minutes
+ # display hours + minutes, (and + seconds, if format specified it)
if ( $delta < $hour * 24) {
my $hours = floor($delta / $hour);
my $minutes = floor(($delta % $hour) / $minute);
@@ -801,15 +821,30 @@ sub timeToHumanString {
if ($minutes == 0) {
$minuteString = "";
}
+ if (($format ne '') && ($format =~ /\%(T|S)/)) {
+ my $display = "$prefix$hourString$minuteString";
+ my $seconds = $delta-(($hours * $hour)+($minutes * $minute));
+ if ($seconds == 0) {
+ $display .= $tense;
+ } elsif ($seconds == 1) {
+ $display .= ", 1 second$tense";
+ } else {
+ $display .= ", $seconds seconds$tense";
+ }
+ return $display;
+ }
return "$prefix$hourString$minuteString$tense";
}
+ # Date/time is more than 24 hours away
+
my $dt = DateTime->from_epoch(epoch => $time)
->set_time_zone(&Apache::lonlocal::gettimezone());
- # If there's a caller supplied format, use it.
+ # If there's a caller supplied format, use it, unless it only displays
+ # H:M:S or H:M.
- if ($format ne '') {
+ if (($format ne '') && ($format ne '%T') && ($format ne '%R')) {
my $timeStr = $dt->strftime($format);
return $timeStr.' ('.$dt->time_zone_short_name().')';
}
@@ -861,6 +896,7 @@ sub part_status_summary { return 4; }
sub render_resource {
my ($resource, $part, $params) = @_;
+ my $editmapLink;
my $nonLinkedText = ''; # stuff after resource title not in link
my $link = $params->{"resourceLink"};
@@ -942,6 +978,14 @@ sub render_resource {
$linkopen = "";
$linkclose = "";
}
+ if ((&Apache::lonnet::allowed('mdc',$env{'request.course.id'})) &&
+ ($resource->symb=~/\_\_\_[^\_]+\_\_\_uploaded/)) {
+ my $icon = &Apache::loncommon::lonhttpdurl('/res/adm/pages').'/editmap.png';
+ $editmapLink=' '.
+ ''.
+ ''.
+ '';
+ }
}
if ($resource->randomout()) {
@@ -975,8 +1019,10 @@ sub render_resource {
# Is this the current resource?
if (!$params->{'displayedHereMarker'} &&
$resource->symb() eq $params->{'here'} ) {
- $curMarkerBegin = '';
- $curMarkerEnd = '';
+ unless ($resource->is_map()) {
+ $curMarkerBegin = '';
+ $curMarkerEnd = '';
+ }
$params->{'displayedHereMarker'} = 1;
}
@@ -995,7 +1041,7 @@ sub render_resource {
if (!$params->{'resource_nolink'} && !$resource->is_sequence() && !$resource->is_empty_sequence) {
$result .= "$curMarkerBegin$title$partLabel$curMarkerEnd$nonLinkedText";
} else {
- $result .= "$curMarkerBegin$linkopen$title$partLabel$curMarkerEnd$nonLinkedText";
+ $result .= "$curMarkerBegin$linkopen$title$partLabel$curMarkerEnd$editmapLink$nonLinkedText";
}
return $result;
@@ -1009,6 +1055,7 @@ sub render_communication_status {
my $linkopen = "";
my $linkclose = "";
my $location=&Apache::loncommon::lonhttpdurl("/adm/lonMisc");
+
if ($resource->hasDiscussion()) {
$discussionHTML = $linkopen .
'
' .
@@ -1090,10 +1137,9 @@ sub render_long_status {
}
}
- if (($resource->kind() eq "res" &&
- ($resource->is_problem() || $resource->is_practice()) &&
- !$firstDisplayed) &&
- $resource->is_raw_problem()) {
+ if ($resource->kind() eq "res" &&
+ $resource->is_raw_problem() &&
+ !$firstDisplayed) {
if ($color) {$result .= ""; }
$result .= getDescription($resource, $part);
if ($color) {$result .= ""; }
@@ -1352,6 +1398,7 @@ sub render {
}
}
+
# (re-)Locate the jump point, if any
# Note this does not take filtering or hidden into account... need
# to be fixed?
@@ -1419,8 +1466,10 @@ sub render {
$link .= '®ister='.$env{'form.register'};
}
if ($args->{'caller'} eq 'navmapsdisplay') {
- &add_linkitem($args->{'linkitems'},'changefolder',
- "location.href='$link'",$text);
+ unless ($args->{'notools'}) {
+ &add_linkitem($args->{'linkitems'},'changefolder',
+ "location.href='$link'",$text);
+ }
} else {
$result.= ''.&mt($text).'';
}
@@ -1428,7 +1477,7 @@ sub render {
}
# Check for any unread discussions in all resources.
- if ($args->{'caller'} eq 'navmapsdisplay') {
+ if (($args->{'caller'} eq 'navmapsdisplay') && (!$args->{'notools'})) {
&add_linkitem($args->{'linkitems'},'clearbubbles',
'document.clearbubbles.submit()',
'Mark all posts read');
@@ -1461,18 +1510,20 @@ END
}
$result.='';
}
+ if (($args->{'caller'} eq 'navmapsdisplay') &&
+ (&Apache::lonnet::allowed('mdc',$env{'request.course.id'}))) {
+ my $cdom = $env{'course.'.$env{'request.course.id'}.'.domain'};
+ my $cnum = $env{'course.'.$env{'request.course.id'}.'.num'};
+ if ($env{'course.'.$env{'request.course.id'}.'.url'} eq
+ "uploaded/$cdom/$cnum/default.sequence") {
+ &add_linkitem($args->{'linkitems'},'edittoplevel',
+ "javascript:gocmd('/adm/coursedocs','editdocs');",
+ 'Content Editor');
+ }
+ }
if ($args->{'caller'} eq 'navmapsdisplay') {
- $result .= '
'. - &Apache::loncommon::help_open_menu('Navigation Screen','Navigation_Screen',undef,'RAT').' | '; - $result .= ''; - $result.=' | '.&mt('Tools:').' | '; - $result.=&show_linkitems_toolbar($args->{'linkitems'}); - if ($args->{'sort_html'}) { - $result.=''. - ' | '.$args->{'sort_html'}.' |