--- loncom/interface/lonnavmaps.pm 2006/10/10 20:16:26 1.391 +++ loncom/interface/lonnavmaps.pm 2006/12/20 23:02:33 1.393 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # Navigate Maps Handler # -# $Id: lonnavmaps.pm,v 1.391 2006/10/10 20:16:26 albertel Exp $ +# $Id: lonnavmaps.pm,v 1.393 2006/12/20 23:02:33 raeburn Exp $ # # Copyright Michigan State University Board of Trustees # @@ -803,16 +803,16 @@ sub render_resource { ($nowOpen ? &mt('Open Folder') : &mt('Close Folder')).' '.$title."\" border='0' />"; $linkopen = "{'url'} . '?' . - $params->{'queryString'} . '&filter='; + $params->{'queryString'} . '&filter='; $linkopen .= ($nowOpen xor $it->{CONDITION}) ? addToFilter($filter, $mapId) : removeFromFilter($filter, $mapId); - $linkopen .= "&condition=" . $it->{CONDITION} . '&hereType=' - . $params->{'hereType'} . '&here=' . + $linkopen .= "&condition=" . $it->{CONDITION} . '&hereType=' + . $params->{'hereType'} . '&here=' . &escape($params->{'here'}) . - '&jump=' . + '&jump=' . &escape($resource->symb()) . - "&folderManip=1\">"; + "&folderManip=1\">"; } else { # Don't allow users to manipulate folder @@ -834,7 +834,7 @@ sub render_resource { } # We're done preparing and finally ready to start the rendering - my $result = ""; + my $result = ""; my $indentLevel = $params->{'indentLevel'}; if ($newBranchText) { $indentLevel--; } @@ -898,7 +898,7 @@ sub render_communication_status { my $location=&Apache::loncommon::lonhttpdurl("/adm/lonMisc"); if ($resource->hasDiscussion()) { $discussionHTML = $linkopen . - '' . + ''.&mt('New Discussion').'' . $linkclose; } @@ -908,7 +908,7 @@ sub render_communication_status { if ($_) { $feedbackHTML .= ' ' - . ''.&mt('New Email').''; } } @@ -923,7 +923,7 @@ sub render_communication_status { $errorcount++; $errorHTML .= ' ' - . ''.&mt('New Error').''; } } @@ -933,7 +933,7 @@ sub render_communication_status { $discussionHTML = $feedbackHTML = $errorHTML = ''; } - return "$discussionHTML$feedbackHTML$errorHTML "; + return "$discussionHTML$feedbackHTML$errorHTML "; } sub render_quick_status { @@ -958,7 +958,7 @@ sub render_quick_status { if ($icon) { my $location= &Apache::loncommon::lonhttpdurl("/adm/lonIcons/$icon"); - $result .= "$linkopen$alt$linkclose\n"; + $result .= "$linkopen$alt$linkclose\n"; } else { $result .= " \n"; } @@ -970,7 +970,7 @@ sub render_quick_status { } sub render_long_status { my ($resource, $part, $params) = @_; - my $result = "\n"; + my $result = "\n"; my $firstDisplayed = !$params->{'condensed'} && $params->{'multipart'} && $part eq "0"; @@ -1294,11 +1294,11 @@ sub render { if ($printCloseAll && !$args->{'resource_no_folder_link'}) { my ($link,$text); if ($condition) { - $link='"navmaps?condition=0&filter=&'.$queryString. + $link='"navmaps?condition=0&filter=&'.$queryString. '&here='.&escape($here).'"'; $text='Close all folders'; } else { - $link='"navmaps?condition=1&filter=&'.$queryString. + $link='"navmaps?condition=1&filter=&'.$queryString. '&here='.&escape($here).'"'; $text='Open all folders'; } @@ -2034,9 +2034,10 @@ sub last_post_time { return $self->{DISCUSSION_TIME}->{$ressymb}; } -sub unread_discussion { +sub discussion_info { my $self = shift; my $symb = shift; + my $filter = shift; $self->get_discussion_data(); @@ -2048,12 +2049,10 @@ sub unread_discussion { my $prevread = $self->{LAST_READ}{$ressymb}; - my $unreadcount = 0; + my $count = 0; my $hiddenflag = 0; my $deletedflag = 0; - my ($hidden,$deleted); - - my %subjects; + my ($hidden,$deleted,%info); for (my $id=$version; $id>0; $id--) { my $vkeys=$self->{DISCUSSION_DATA}{$id.':keys:'.$discsymb}; @@ -2069,18 +2068,24 @@ sub unread_discussion { $deletedflag = 1; } } else { - if (($hidden !~/\.$id\./) && ($deleted !~/\.$id\./) - && $prevread < $self->{DISCUSSION_DATA}{$id.':'.$discsymb.':timestamp'}) { - $unreadcount++; - $subjects{$unreadcount}= - $id.': '.$self->{DISCUSSION_DATA}{$id.':'.$discsymb.':subject'}; - } + if (($hidden !~/\.$id\./) && ($deleted !~/\.$id\./)) { + if ($filter eq 'unread') { + if ($prevread >= $self->{DISCUSSION_DATA}{$id.':'.$discsymb.':timestamp'}) { + next; + } + } + $count++; + $info{$count}{'subject'} = + $self->{DISCUSSION_DATA}{$id.':'.$discsymb.':subject'}; + $info{$count}{'id'} = $id; + $info{$count}{'timestamp'} = $self->{DISCUSSION_DATA}{$id.':'.$discsymb.':timestamp'}; + } } } if (wantarray) { - return ($unreadcount,\%subjects); + return ($count,%info); } - return $unreadcount + return $count; } sub wrap_symb { @@ -3835,13 +3840,15 @@ data was not extracted when the nav map Returns a false value if there hasn't been discussion otherwise returns unix timestamp of last time a discussion posting (or edit) was made. -=item * B: +=item * B: -returns in scalar context the count of the number of unread discussion -postings +optional argument is a filter (currently can be 'unread'); +returns in scalar context the count of the number of discussion postings. returns in list context both the count of postings and a hash ref -containing the subjects of all unread postings +containing information about the postings (subject, id, timestamp) in a hash. + +Default is to return counts for all postings. However if called with a second argument set to 'unread', will return information about only unread postings. =item * B: @@ -3868,9 +3875,9 @@ sub last_post_time { return $self->{NAV_MAP}->last_post_time($self->symb()); } -sub unread_discussion { - my $self = shift; - return $self->{NAV_MAP}->unread_discussion($self->symb()); +sub discussion_info { + my ($self,$filter) = @_; + return $self->{NAV_MAP}->discussion_info($self->symb(),$filter); } sub getFeedback {