--- loncom/interface/lonnavmaps.pm 2006/05/15 23:51:34 1.349.2.9 +++ loncom/interface/lonnavmaps.pm 2005/11/22 02:24:50 1.350 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # Navigate Maps Handler # -# $Id: lonnavmaps.pm,v 1.349.2.9 2006/05/15 23:51:34 albertel Exp $ +# $Id: lonnavmaps.pm,v 1.350 2005/11/22 02:24:50 raeburn 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.partial.gif', + $resObj->PARTIALLY_CORRECT => 'navmap.ellipsis.gif', $resObj->INCORRECT => 'navmap.wrong.gif', $resObj->ATTEMPTED => 'navmap.ellipsis.gif', $resObj->ERROR => '' @@ -530,8 +530,7 @@ 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) - && $res->handgrade($part) ne 'yes') { + if ($status == $res->ANSWER_OPEN || $status == $res->PARTIALLY_CORRECT) { return &mt("Answer available"); } if ($status == $res->EXCUSED) { @@ -2231,9 +2230,9 @@ sub generate_email_discuss_status { if ((!$emailstatus{$msgid}) || ($emailstatus{$msgid} eq 'new')) { my $plain= &Apache::lonnet::unescape(&Apache::lonnet::unescape($msgid)); - if ($plain=~/ \[([^\]]+)\]\:/) { - my $url=$1; - if ($plain=~/\:Error \[/) { + if ($plain=~/(Error|Feedback) \[([^\]]+)\]/) { + my ($what,$url)=($1,$2); + if ($what eq 'Error') { $error{$url}.=','.$msgid; } else { $feedback{$url}.=','.$msgid; @@ -2266,25 +2265,6 @@ 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 { @@ -2495,6 +2475,12 @@ sub parmval_real { my $cid=$env{'request.course.id'}; my $csec=$env{'request.course.sec'}; + my $cgroup=''; + my @cgrps=split(/:/,$env{'request.course.groups'}); + if (@cgrps > 0) { + @cgrps = sort(@cgrps); + $cgroup = $cgrps[0]; + } my $uname=$env{'user.name'}; my $udom=$env{'user.domain'}; @@ -2502,7 +2488,7 @@ sub parmval_real { my $result=''; my ($mapname,$id,$fn)=&Apache::lonnet::decode_symb($symb); - $mapname = &Apache::lonnet::deversion($mapname); + # ----------------------------------------------------- Cascading lookup scheme my $rwhat=$what; $what=~s/^parameter\_//; @@ -2512,6 +2498,10 @@ sub parmval_real { my $mapparm=$mapname.'___(all).'.$what; my $usercourseprefix=$cid; + my $grplevel=$usercourseprefix.'.['.$cgroup.'].'.$what; + my $grplevelr=$usercourseprefix.'.['.$cgroup.'].'.$symbparm; + my $grplevelm=$usercourseprefix.'.['.$cgroup.'].'.$mapparm; + my $seclevel= $usercourseprefix.'.['.$csec.'].'.$what; my $seclevelr=$usercourseprefix.'.['.$csec.'].'.$symbparm; my $seclevelm=$usercourseprefix.'.['.$csec.'].'.$mapparm; @@ -2532,6 +2522,12 @@ sub parmval_real { } # ------------------------------------------------------- second, check course + if ($cgroup ne '' and defined($courseopt)) { + if (defined($$courseopt{$grplevelr})) { return $$courseopt{$grplevelr}; } + if (defined($$courseopt{$grplevelm})) { return $$courseopt{$grplevelm}; } + if (defined($$courseopt{$grplevel})) { return $$courseopt{$grplevel}; } + } + if ($csec and defined($courseopt)) { if (defined($$courseopt{$seclevelr})) { return $$courseopt{$seclevelr}; } if (defined($$courseopt{$seclevelm})) { return $$courseopt{$seclevelm}; } @@ -2582,17 +2578,14 @@ sub parmval_real { =pod -=item * B(url,multiple): +=item * B(url): -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. +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. =item * B(map, filterFunc, recursive, bailout, showall): @@ -2627,41 +2620,22 @@ 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) { return ''; } - 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); + if ($resId =~ /,/) { + $resId = (split (/,/, $resId))[0]; } + if (!$resId) { return ''; } + return $self->getById($resId); } sub retrieveResources { @@ -2729,12 +2703,6 @@ 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; @@ -3641,8 +3609,9 @@ sub condition { } sub condval { my $self=shift; - my ($pathname,$filename) = - &Apache::lonnet::split_uri_for_cond($self->src()); + 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\|]+)\&/); @@ -3728,6 +3697,7 @@ sub contains_problem { } sub is_sequence { my $self=shift; + my $src = $self->src(); return $self->navHash("is_map_", 1) && $self->navHash("map_type_" . $self->map_pc()) eq 'sequence'; } @@ -3797,7 +3767,7 @@ Returns a string with the type of the ma sub map_finish { my $self = shift; my $src = $self->src(); - $src = &Apache::lonnet::clutter($src); + $src = Apache::lonnet::clutter($src); my $res = $self->navHash("map_finish_$src", 0); $res = $self->{NAV_MAP}->getById($res); return $res; @@ -3810,7 +3780,7 @@ sub map_pc { sub map_start { my $self = shift; my $src = $self->src(); - $src = &Apache::lonnet::clutter($src); + $src = Apache::lonnet::clutter($src); my $res = $self->navHash("map_start_$src", 0); $res = $self->{NAV_MAP}->getById($res); return $res;