Diff for /loncom/interface/lonnavmaps.pm between versions 1.165 and 1.171

version 1.165, 2003/03/21 22:41:12 version 1.171, 2003/04/04 18:13:44
Line 42 Line 42
 # Jeremy Bowers ... lots of days  # Jeremy Bowers ... lots of days
   
 package Apache::lonnavmaps;  package Apache::lonnavmaps;
 use vars qw($test @refsToUntie);  
   
 use strict;  use strict;
 use Apache::Constants qw(:common :http);  use Apache::Constants qw(:common :http);
Line 50  use Apache::loncommon(); Line 49  use Apache::loncommon();
 use Apache::lonmenu();  use Apache::lonmenu();
 use POSIX qw (floor strftime);  use POSIX qw (floor strftime);
   
 my %navmaphash;  
 my %parmhash;  
 @refsToUntie;  
   
 # symbolic constants  # symbolic constants
 sub SYMB { return 1; }  sub SYMB { return 1; }
 sub URL { return 2; }  sub URL { return 2; }
Line 100  my %colormap = Line 95  my %colormap =
 # And a special case in the nav map; what to do when the assignment  # And a special case in the nav map; what to do when the assignment
 # is not yet done and due in less then 24 hours  # is not yet done and due in less then 24 hours
 my $hurryUpColor = "#FF0000";  my $hurryUpColor = "#FF0000";
 $test = 'abc';  
 sub cleanup {  
     &Apache::lonnet::logthis("Cleanup called.");  
     &Apache::lonnet::logthis("refs size".scalar(@refsToUntie));  
     &Apache::lonnet::logthis("test is ".$test);  
     $test = '467';  
     if (tied(%navmaphash)){  
  &Apache::lonnet::logthis('Cleanup navmaps: navmaphash');  
         unless (untie(%navmaphash)) {  
     &Apache::lonnet::logthis('Failed cleanup navmaps: navmaphash');  
         }  
     }  
     if (tied(%parmhash)){  
  &Apache::lonnet::logthis('Cleanup navmaps: parmhash');  
         unless (untie(%parmhash)) {  
     &Apache::lonnet::logthis('Failed cleanup navmaps: parmhash');  
         }  
     }  
     # Apparently, if you take a reference to a tied hash, both the   
     # original hash and the tied hash must be untied. Bleh.  
     for my $ref (@refsToUntie) {  
         &Apache::lonnet::logthis('Cleanup navmaps: reference');  
         unless (untie($ref)) {  
             &Apache::lonnet::logthis('Failed cleanup navmaps: reference');  
         }  
     }  
 }  
   
 sub handler {  sub handler {
     my $r = shift;      my $r = shift;
Line 157  sub real_handler { Line 125  sub real_handler {
     $r->send_http_header;      $r->send_http_header;
   
     # Create the nav map      # Create the nav map
     my $navmap = Apache::lonnavmaps::navmap->new($r,       my $navmap = Apache::lonnavmaps::navmap->new(
                         $ENV{"request.course.fn"}.".db",                          $ENV{"request.course.fn"}.".db",
                         $ENV{"request.course.fn"}."_parms.db", 1, 1);                          $ENV{"request.course.fn"}."_parms.db", 1, 1);
   
Line 231  sub real_handler { Line 199  sub real_handler {
     # renderer call      # renderer call
     my $render = render({ 'cols' => [0,1,2,3],      my $render = render({ 'cols' => [0,1,2,3],
                           'url' => '/adm/navmaps',                            'url' => '/adm/navmaps',
                             'navmap' => $navmap,
                           'suppressNavmap' => 1,                            'suppressNavmap' => 1,
                           'r' => $r});                            'r' => $r});
   
     #$navmap->untieHashes();      $navmap->untieHashes();
   
     if (tied(%navmaphash)) {   
         $r->print("Dang it.");  
     } else {  
         $r->print("It's out.");  
     }  
   
     if (tied(%parmhash)) {   
         $r->print("Dang it.");  
     } else {  
         $r->print("It's out.");  
     }  
   
     $r->print("</body></html>");      $r->print("</body></html>");
     $r->rflush();      $r->rflush();
Line 891  sub render { Line 848  sub render {
     if (!$ENV{'form.folderManip'} && !defined($args->{'iterator'})) {      if (!$ENV{'form.folderManip'} && !defined($args->{'iterator'})) {
         # Step 1: Check to see if we have a navmap          # Step 1: Check to see if we have a navmap
         if (!defined($navmap)) {          if (!defined($navmap)) {
             $navmap = Apache::lonnavmaps::navmap->new($r,               $navmap = Apache::lonnavmaps::navmap->new(
                         $ENV{"request.course.fn"}.".db",                          $ENV{"request.course.fn"}.".db",
                         $ENV{"request.course.fn"}."_parms.db", 1, 1);                          $ENV{"request.course.fn"}."_parms.db", 1, 1);
             $mustCloseNavMap = 1;              $mustCloseNavMap = 1;
Line 1277  You must obtain resource objects through Line 1234  You must obtain resource objects through
   
 =over 4  =over 4
   
 =item * B<new>(responseObject, navHashFile, parmHashFile, genCourseAndUserOptions, genMailDiscussStatus): Binds a new navmap object to the compiled nav map hash and parm hash given as filenames. responseObject is the Apache response object (typically $r). 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<new>(navHashFile, parmHashFile, genCourseAndUserOptions, 
     genMailDiscussStatus): Binds a new navmap object to the compiled nav map 
     hash and parm hash given as filenames. 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.  =item * B<getIterator>(first, finish, filter, condition): See iterator documentation below.
   
Line 1292  sub new { Line 1258  sub new {
     my $class = ref($proto) || $proto;      my $class = ref($proto) || $proto;
     my $self = {};      my $self = {};
   
     $self->{RESPONSE} = shift;  
     $self->{NAV_HASH_FILE} = shift;      $self->{NAV_HASH_FILE} = shift;
     $self->{PARM_HASH_FILE} = shift;      $self->{PARM_HASH_FILE} = shift;
     $self->{GENERATE_COURSE_USER_OPT} = shift;      $self->{GENERATE_COURSE_USER_OPT} = shift;
Line 1308  sub new { Line 1273  sub new {
   
     # tie the nav hash      # tie the nav hash
   
     if (!(tie(%Apache::lonnavmaps::navmaphash, 'GDBM_File', $self->{NAV_HASH_FILE},      my %navmaphash;
       my %parmhash;
       if (!(tie(%navmaphash, 'GDBM_File', $self->{NAV_HASH_FILE},
               &GDBM_READER(), 0640))) {                &GDBM_READER(), 0640))) {
         return undef;          return undef;
     }      }
           
     if (!(tie(%Apache::lonnavmaps::parmhash, 'GDBM_File', $self->{PARM_HASH_FILE},      if (!(tie(%parmhash, 'GDBM_File', $self->{PARM_HASH_FILE},
               &GDBM_READER(), 0640)))                &GDBM_READER(), 0640)))
     {      {
         untie $self->{PARM_HASH};          untie %{$self->{PARM_HASH}};
         return undef;          return undef;
     }      }
   
     $self->{NAV_HASH} = \%Apache::lonnavmaps::navmaphash;      $self->{NAV_HASH} = \%navmaphash;
     $self->{PARM_HASH} = \%Apache::lonnavmaps::parmhash;      $self->{PARM_HASH} = \%parmhash;
     push @Apache::lonnavmaps::refsToUntie, $self->{NAV_HASH};  
     push @Apache::lonnavmaps::refsToUntie, $self->{PARM_HASH};  
     &Apache::lonnet::logthis("refstountie ".scalar(@Apache::lonnavmaps::refsToUntie));  
     &Apache::lonnet::logthis("navmaps test".$Apache::lonnavmaps::test);  
     $Apache::lonnavmaps::test = '123';  
     &Apache::lonnet::logthis("navmaps test".$Apache::lonnavmaps::test);  
     $self->{INITED} = 0;      $self->{INITED} = 0;
   
     $self->{RESPONSE}->register_cleanup(\&Apache::lonnavmaps::cleanup);  
     Apache::lonnet::logthis("Pushed cleanup.");  
   
     bless($self);      bless($self);
                   
     return $self;      return $self;
Line 1475  sub getIterator { Line 1433  sub getIterator {
   
 # unties the hash when done  # unties the hash when done
 sub untieHashes {  sub untieHashes {
 #    my $self = shift;      my $self = shift;
 #    untie $self->{NAV_HASH};      untie %{$self->{NAV_HASH}};
 #    untie $self->{PARM_HASH};      untie %{$self->{PARM_HASH}};
 #    &Apache::lonnavmaps::cleanup();  
 }  }
   
 # when the object is destroyed, be sure to untie all the hashes we tied.  
 #sub DESTROY {  
 #    my $self = shift;  
 #    $self->untieHashes();  
 #}  
   
 # Private method: Does the given resource (as a symb string) have  # Private method: Does the given resource (as a symb string) have
 # current discussion? Returns 0 if chat/mail data not extracted.  # current discussion? Returns 0 if chat/mail data not extracted.
 sub hasDiscussion {  sub hasDiscussion {

Removed from v.1.165  
changed lines
  Added in v.1.171


FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>