--- loncom/interface/lonnavmaps.pm 2005/11/16 21:09:33 1.348
+++ loncom/interface/lonnavmaps.pm 2006/02/10 22:35:24 1.349.2.6
@@ -1,7 +1,7 @@
# The LearningOnline Network with CAPA
# Navigate Maps Handler
#
-# $Id: lonnavmaps.pm,v 1.348 2005/11/16 21:09:33 albertel Exp $
+# $Id: lonnavmaps.pm,v 1.349.2.6 2006/02/10 22:35:24 albertel Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -57,7 +57,7 @@ my %statusIconMap =
$resObj->CLOSED => '',
$resObj->OPEN => 'navmap.open.gif',
$resObj->CORRECT => 'navmap.correct.gif',
- $resObj->PARTIALLY_CORRECT => 'navmap.ellipsis.gif',
+ $resObj->PARTIALLY_CORRECT => 'navmap.partial.gif',
$resObj->INCORRECT => 'navmap.wrong.gif',
$resObj->ATTEMPTED => 'navmap.ellipsis.gif',
$resObj->ERROR => ''
@@ -530,7 +530,8 @@ sub getDescription {
if ($status == $res->PAST_DUE_NO_ANSWER) {
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");
}
if ($status == $res->EXCUSED) {
@@ -1065,7 +1066,6 @@ sub render_resource {
# it will be quoted with ' in the href.
my ($left,$right) = split(/\?/, $link);
- $left =~ s/'/\\'/g;
$link = $left.'?'.$right;
my $src = $resource->src();
@@ -1085,7 +1085,7 @@ sub render_resource {
# links to open and close the folder
- my $linkopen = "";
+ my $linkopen = "";
my $linkclose = "";
@@ -1118,7 +1118,7 @@ sub render_resource {
$icon = "
";
- $linkopen = "{'url'} . '?' .
$params->{'queryString'} . '&filter=';
$linkopen .= ($nowOpen xor $it->{CONDITION}) ?
addToFilter($filter, $mapId) :
@@ -1128,7 +1128,7 @@ sub render_resource {
&Apache::lonnet::escape($params->{'here'}) .
'&jump=' .
&Apache::lonnet::escape($resource->symb()) .
- "&folderManip=1'>";
+ "&folderManip=1\">";
} else {
# Don't allow users to manipulate folder
@@ -1192,7 +1192,7 @@ sub render_resource {
$target=' target="loncapaclient" ';
}
if (!$params->{'resource_nolink'} && !$resource->is_sequence() && !$resource->is_empty_sequence) {
- $result .= " $curMarkerBegin$title$partLabel$curMarkerEnd $nonLinkedText";
+ $result .= " $curMarkerBegin$title$partLabel$curMarkerEnd $nonLinkedText";
} else {
$result .= " $curMarkerBegin$title$partLabel$curMarkerEnd $nonLinkedText";
}
@@ -1209,7 +1209,7 @@ sub render_communication_status {
if ($env{'environment.remotenavmap'} eq 'on') {
$target=' target="loncapaclient" ';
}
- my $linkopen = "";
+ my $linkopen = "";
my $linkclose = "";
my $location=&Apache::loncommon::lonhttpdurl("/adm/lonMisc");
if ($resource->hasDiscussion()) {
@@ -1263,7 +1263,7 @@ sub render_quick_status {
if ($env{'environment.remotenavmap'} eq 'on') {
$target=' target="loncapaclient" ';
}
- my $linkopen = "";
+ my $linkopen = "";
my $linkclose = "";
if ($resource->is_problem() &&
@@ -2231,9 +2231,9 @@ sub generate_email_discuss_status {
if ((!$emailstatus{$msgid}) || ($emailstatus{$msgid} eq 'new')) {
my $plain=
&Apache::lonnet::unescape(&Apache::lonnet::unescape($msgid));
- if ($plain=~/(Error|Feedback) \[([^\]]+)\]/) {
- my ($what,$url)=($1,$2);
- if ($what eq 'Error') {
+ if ($plain=~/ \[([^\]]+)\]\:/) {
+ my $url=$1;
+ if ($plain=~/\:Error \[/) {
$error{$url}.=','.$msgid;
} else {
$feedback{$url}.=','.$msgid;
@@ -2266,6 +2266,25 @@ sub get_user_data {
$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
# memory caching of that key.
sub navhash {
@@ -2563,14 +2582,17 @@ sub parmval_real {
=pod
-=item * B(url):
+=item * B(url,multiple):
-Retrieves a resource object by URL of the resource. If passed a
-resource object, it will simply return it, so it is safe to use this
-method in code like "$res = $navmap->getResourceByUrl($res)", 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. As a result, this is probably useful only for maps.
+Retrieves a resource object by URL of the resource, unless the optional
+multiple parameter is included in wahich caes an array of resource
+objects is returned. If passed a resource object, it will simply return
+it, so it is safe to use this method in code like
+"$res = $navmap->getResourceByUrl($res)"
+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(map, filterFunc, recursive, bailout, showall):
@@ -2605,22 +2627,41 @@ Convience method for
which will tell whether the map has resources matching the description
in the filter function.
+=item * B(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
sub getResourceByUrl {
my $self = shift;
my $resUrl = shift;
+ my $multiple = shift;
if (ref($resUrl)) { return $resUrl; }
$resUrl = &Apache::lonnet::clutter($resUrl);
my $resId = $self->{NAV_HASH}->{'ids_' . $resUrl};
- if ($resId =~ /,/) {
- $resId = (split (/,/, $resId))[0];
- }
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 {
@@ -2688,6 +2729,12 @@ sub hasResource {
return scalar($self->retrieveResources($map, $filterFunc, $recursive, 1, $showall)) > 0;
}
+sub usedVersion {
+ my $self = shift;
+ my $linkurl = shift;
+ return $self->navhash("version_$linkurl");
+}
+
1;
package Apache::lonnavmaps::iterator;
@@ -3594,9 +3641,8 @@ sub 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 ($pathname,$filename) =
+ &Apache::lonnet::split_uri_for_cond($self->src());
my $match=($env{'acc.res.'.$env{'request.course.id'}.'.'.$pathname}=~
/\&\Q$filename\E\:([\d\|]+)\&/);