[LON-CAPA-cvs] cvs: loncom /interface lonnavmaps.pm

bowersj2 lon-capa-cvs@mail.lon-capa.org
Thu, 26 Sep 2002 16:56:21 -0000


bowersj2		Thu Sep 26 12:56:21 2002 EDT

  Modified files:              
    /loncom/interface	lonnavmaps.pm 
  Log:
  A commit because I'm blowing this machine away. I do not guarentee this
  actually works.
  
  Added check for whether course map is defined. Starting to add the code for checking for messages or discussion on a resource. (If you want to do that differently, now's the time to let me know what you want and how to get the data I'd need to do it right.)
  
  
Index: loncom/interface/lonnavmaps.pm
diff -u loncom/interface/lonnavmaps.pm:1.54 loncom/interface/lonnavmaps.pm:1.55
--- loncom/interface/lonnavmaps.pm:1.54	Tue Sep 24 16:01:05 2002
+++ loncom/interface/lonnavmaps.pm	Thu Sep 26 12:56:21 2002
@@ -1,7 +1,7 @@
 # The LearningOnline Network with CAPA
 # Navigate Maps Handler
 #
-# $Id: lonnavmaps.pm,v 1.54 2002/09/24 20:01:05 bowersj2 Exp $
+# $Id: lonnavmaps.pm,v 1.55 2002/09/26 16:56:21 bowersj2 Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -827,6 +827,20 @@
                         $ENV{"request.course.fn"}.".db",
                         $ENV{"request.course.fn"}."_parms.db", 1);
 
+
+    if (!defined($navmap)) {
+        my $requrl = $r->uri;
+        $ENV{'user.error.msg'} = "$requrl:bre:0:0:Course not initialized";
+        return HTTP_NOT_ACCEPTABLE;
+    }
+
+    # Check that it's defined
+    if (!($navmap->courseMapDefined())) {
+        $r->print('<font size="+2" color="red">Coursemap undefined.</font>' .
+                  '</body></html>');
+        return OK;
+    }
+
     # Grab a resource object so we have access to the constants; this
     # is technically not proper, but should be harmless
     my $res = $navmap->firstResource();
@@ -845,12 +859,6 @@
       $res->OPEN                   => '#FFFF88',
       $res->NOTHING_SET            => ''        );
 
-    if (!defined($navmap)) {
-        my $requrl = $r->uri;
-        $ENV{'user.error.msg'} = "$requrl:bre:0:0:Course not initialized";
-        return HTTP_NOT_ACCEPTABLE;
-    }
-
     my %filterHash;
     # Figure out what we're not displaying
     foreach (split(/\,/, $ENV{"form.filter"})) {
@@ -1090,7 +1098,7 @@
 
 =over 4
 
-=item * B<new>(filename, parmHashFile, genCourseAndUserOptions): Binds a new navmap object to the compiled course representation and parmHashFile. genCourseAndUserOptions is a flag saying whether the course options and user options hash should be generated. This is for when you are using the parameters of the resources that require them; see documentation in resource object documentation. Returns the navmap object if this is successful, or B<undef> if not. You must check for undef; errors will occur when you try to use the other methods otherwise.
+=item * B<new>(filename, parmHashFile, genCourseAndUserOptions, genMailDiscussStatus): Binds a new navmap object to the compiled course representation and parmHashFile. genCourseAndUserOptions is a flag saying whether the course options and user options hash should be generated. This is for when you are using the parameters of the resources that require them; see documentation in resource object documentation. genMailDiscussStatus causes the nav map to retreive information about the email and discussion status of resources. Returns the navmap object if this is successful, or B<undef> if not. You must check for undef; errors will occur when you try to use the other methods otherwise.
 
 =item * B<getIterator>(first, finish, filter, condition): See iterator documentation below.
 
@@ -1108,6 +1116,7 @@
     $self->{NAV_HASH_FILE} = shift;
     $self->{PARM_HASH_FILE} = shift;
     $self->{GENERATE_COURSE_USER_OPT} = shift;
+    $self->{GENERATE_EMAIL_DISCUSS_STATUS} = shift;
 
     # Resource cache stores navmapresource's as we reference them. We generate
     # them on-demand so we don't pay for creating resources unless we use them.
@@ -1185,14 +1194,71 @@
                 $useropt{$userprefix.&Apache::lonnet::unescape($name)}=
                     &Apache::lonnet::unescape($value);
             }
-        $self->{COURSE_OPT} = \%courseopt;
-        $self->{USER_OPT} = \%useropt;
+            $self->{COURSE_OPT} = \%courseopt;
+            $self->{USER_OPT} = \%useropt;
         }
     }   
 
+    if ($self->{GENERATE_EMAIL_DISCUSS_STATUS}) {
+        my $cid=$ENV{'request.course.id'};
+        my ($cdom,$cnum)=split(/\_/,$cid);
+        
+        my %emailstatus = &Apache::lonnet::dump('email_status');
+        my logoutTime = $emailstatus{'logout'};
+        my courseLeaveTime = $emailstatus{'logout_'.$ENV{'request.course.id'}};
+        $self->{LAST_CHECK} = ($courseLeaveTime > $logoutTime ?
+                               $courseLeaveTime : $logoutTime);
+        my %discussiontime = &Apache::lonnet::dump{'discussiontimes', 
+                                                   $cdom, $cnum);
+        my %feedback=();
+        my %error=();
+        my $keys = &Apache::lonnet::reply('keys:'.
+                                          $ENV{'user.domain'}.':'.
+                                          $ENV{'user.name'}.':nohist_email',
+                                          $ENV{'user.home'});
+
+        foreach my $msgid (split(/\&/, $keys)) {
+            $msgid=&Apache::lonnet::unescape($msgid);
+            my $plain=&Apache::lonnet::unescape(&Apache::lonnet::unescape($msgid));
+            if ($plain=~/(Error|Feedback) \[([^\]]+)\]/) {
+                my ($what,$url)=($1,$2);
+                my %status=
+                    &Apache::lonnet::get('email_status',[$msgid]);
+                if ($status{$msgid}=~/^error\:/) { 
+                    $status{$msgid}=''; 
+                }
+                
+                if (($status{$msgid} eq 'new') || 
+                    (!$status{$msgid})) { 
+                    if ($what eq 'Error') {
+                        $error{$url}.=','.$msgid; 
+                    } else {
+                        $feedback{$url}.=','.$msgid;
+                    }
+                }
+            }
+        }
+        
+        $self->{FEEDBACK} = \%feedback;
+        $self->{ERROR_MSG} = \%error; # what is this? JB
+        $self->{DISCUSSION_TIME} = \%discussiontime;
+        $self->{EMAIL_STATUS} = \%emailstatus;
+        
+    }    
+    
     bless($self);
-
+        
     return $self;
+}
+
+# Checks to see if coursemap is defined, matching test in old lonnavmaps
+sub courseMapDefined {
+    my $self = shift;
+    my $uri = &Apache::lonnet::clutter($ENV{'request.course.uri'});
+
+    my $firstres = $self->{NAV_HASH}->{'map_start_$uri'};
+    my $lastres = $self->{NAV_HASH}->{'map_finish_$uri'};
+    return $firstres && $lastres;
 }
 
 sub getIterator {