--- loncom/interface/lonnavmaps.pm 2006/02/24 22:54:50 1.363
+++ loncom/interface/lonnavmaps.pm 2006/03/04 05:55:43 1.366
@@ -1,7 +1,7 @@
# The LearningOnline Network with CAPA
# Navigate Maps Handler
#
-# $Id: lonnavmaps.pm,v 1.363 2006/02/24 22:54:50 albertel Exp $
+# $Id: lonnavmaps.pm,v 1.366 2006/03/04 05:55:43 albertel Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -1135,8 +1135,8 @@ sub render_resource {
# Don't allow users to manipulate folder
$icon = "navmap.$folderType." . ($nowOpen ? 'closed' : 'open') .
'.nomanip.gif';
- $icon = "
";
+ $icon = "
";
$linkopen = "";
$linkclose = "";
@@ -2271,16 +2271,18 @@ sub get_user_data {
sub get_discussion_data {
my $self = shift;
if ($self->{RETRIEVED_DISCUSSION_DATA}) {
- return $self->{DISCUSSION_DATA};
+ return $self->{DISCUSSION_DATA};
}
-
+
+ $self->generate_email_discuss_status();
+
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};
@@ -2342,6 +2344,61 @@ sub hasDiscussion {
}
}
+sub last_post_time {
+ my $self = shift;
+ my $symb = shift;
+ my $ressymb = $self->wrap_symb($symb);
+ return $self->{DISCUSSION_TIME}->{$ressymb};
+}
+
+sub unread_discussion {
+ my $self = shift;
+ my $symb = shift;
+
+ $self->get_discussion_data();
+
+ my $ressymb = $self->wrap_symb($symb);
+
+ my $version = $self->{DISCUSSION_DATA}{'version:'.$ressymb};
+ if (!$version) { return; }
+
+ my $prevread = $self->{LAST_READ}{$ressymb};
+
+ my $unreadcount = 0;
+ my $hiddenflag = 0;
+ my $deletedflag = 0;
+ my ($hidden,$deleted);
+
+ my %subjects;
+
+ for (my $id=$version; $id>0; $id--) {
+ my $vkeys=$self->{DISCUSSION_DATA}{$id.':keys:'.$ressymb};
+ my @keys=split(/:/,$vkeys);
+ if (grep(/^hidden$/ ,@keys)) {
+ if (!$hiddenflag) {
+ $hidden = $self->{DISCUSSION_DATA}{$id.':'.$ressymb.':hidden'};
+ $hiddenflag = 1;
+ }
+ } elsif (grep(/^deleted$/,@keys)) {
+ if (!$deletedflag) {
+ $deleted = $self->{DISCUSSION_DATA}{$id.':'.$ressymb.':deleted'};
+ $deletedflag = 1;
+ }
+ } else {
+ if (($hidden !~/\.$id\./) && ($deleted !~/\.$id\./)
+ && $prevread < $self->{DISCUSSION_DATA}{$id.':'.$ressymb.':timestamp'}) {
+ $unreadcount++;
+ $subjects{$unreadcount}=
+ $id.': '.$self->{DISCUSSION_DATA}{$id.':'.$ressymb.':subject'};
+ }
+ }
+ }
+ if (wantarray) {
+ return ($unreadcount,\%subjects);
+ }
+ return $unreadcount
+}
+
sub wrap_symb {
my $self = shift;
my $symb = shift;
@@ -2756,7 +2813,7 @@ sub usedVersion {
1;
package Apache::lonnavmaps::iterator;
-use WeakRef;
+use Scalar::Util qw(weaken);
use Apache::lonnet;
=pod
@@ -3237,7 +3294,7 @@ sub populateStack {
1;
package Apache::lonnavmaps::DFSiterator;
-use WeakRef;
+use Scalar::Util qw(weaken);
use Apache::lonnet;
# Not documented in the perldoc: This is a simple iterator that just walks
@@ -3421,7 +3478,7 @@ sub populateStack {
1;
package Apache::lonnavmaps::resource;
-use WeakRef;
+use Scalar::Util qw(weaken);
use Apache::lonnet;
=pod
@@ -4061,6 +4118,19 @@ Returns a false value if there has been
logged in, true if there has. Always returns false if the discussion
data was not extracted when the nav map was constructed.
+=item * B:
+
+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:
+
+returns in scalar context the count of the number of unread discussion
+postings
+
+returns in list context both the count of postings and a hash ref
+containing the subjects of all unread postings
+
=item * B:
Gets the feedback for the resource and returns the raw feedback string
@@ -4081,6 +4151,16 @@ sub hasDiscussion {
return $self->{NAV_MAP}->hasDiscussion($self->symb());
}
+sub last_post_time {
+ my $self = shift;
+ return $self->{NAV_MAP}->last_post_time($self->symb());
+}
+
+sub unread_discussion {
+ my $self = shift;
+ return $self->{NAV_MAP}->unread_discussion($self->symb());
+}
+
sub getFeedback {
my $self = shift;
my $source = $self->src();