Diff for /loncom/interface/lonnavmaps.pm between versions 1.478 and 1.485

version 1.478, 2011/12/28 04:11:05 version 1.485, 2012/05/28 10:31:17
Line 225  automatically. Line 225  automatically.
   
 =over 4  =over 4
   
 =item * B<iterator: default: constructs one from %env  =item * B<iterator>: default: constructs one from %env
   
 A reference to a fresh ::iterator to use from the navmaps. The  A reference to a fresh ::iterator to use from the navmaps. The
 rendering will reflect the options passed to the iterator, so you can  rendering will reflect the options passed to the iterator, so you can
Line 487  use DateTime(); Line 487  use DateTime();
   
 # For debugging  # For debugging
   
 # use Data::Dumper;  use Data::Dumper;
   
   
 # symbolic constants  # symbolic constants
Line 1398  sub render { Line 1398  sub render {
         }          }
     }      }
   
   
     # (re-)Locate the jump point, if any      # (re-)Locate the jump point, if any
     # Note this does not take filtering or hidden into account... need      # Note this does not take filtering or hidden into account... need
     # to be fixed?      # to be fixed?
Line 1655  END Line 1654  END
     $curRes = shift(@resources);      $curRes = shift(@resources);
  } else {   } else {
     $curRes = $it->next($closeAllPages);      $curRes = $it->next($closeAllPages);
   
  }   }
  if (!$curRes) { last; }   if (!$curRes) { last; }
   
Line 2026  sub new { Line 2024  sub new {
     # assume there are course hashes for the specific requested user@domamin:      # assume there are course hashes for the specific requested user@domamin:
     #      #
   
     if ( ($self->{USERNAME} eq $env{'user.name'}) && ($self->{DOMAIN} eq $env{'user.domain'})) {      if (($self->{USERNAME} eq $env{'user.name'}) && ($self->{DOMAIN} eq $env{'user.domain'})) {
   
  # tie the nav hash   # tie the nav hash
   
Line 2052  sub new { Line 2050  sub new {
  $self->change_user($self->{USERNAME}, $self->{DOMAIN});   $self->change_user($self->{USERNAME}, $self->{DOMAIN});
     }      }
   
     my $d = Data::Dumper->new([$self]);  
   
     return $self;      return $self;
 }  }
   
Line 2105  sub change_user { Line 2101  sub change_user {
     }      }
   
     $self->{PARM_HASH} = \%parm_hash;      $self->{PARM_HASH} = \%parm_hash;
      
   
   
           
Line 2151  sub generate_course_user_opt { Line 2146  sub generate_course_user_opt {
     return;      return;
 }  }
   
   
   
 sub generate_email_discuss_status {  sub generate_email_discuss_status {
     my $self = shift;      my $self = shift;
     my $symb = shift;      my $symb = shift;
Line 2564  sub parmval { Line 2561  sub parmval {
     return $result->[0];      return $result->[0];
 }  }
   
   
 sub parmval_real {  sub parmval_real {
     my $self = shift;      my $self = shift;
     my ($what,$symb,$recurse) = @_;      my ($what,$symb,$recurse) = @_;
   
   
     # Make sure the {USER_OPT} and {COURSE_OPT} hashes are populated      # Make sure the {USER_OPT} and {COURSE_OPT} hashes are populated
     $self->generate_course_user_opt();      $self->generate_course_user_opt();
   
Line 2596  sub parmval_real { Line 2595  sub parmval_real {
     my $mapparm=$mapname.'___(all).'.$what;      my $mapparm=$mapname.'___(all).'.$what;
     my $usercourseprefix=$cid;      my $usercourseprefix=$cid;
   
   
   
     my $grplevel=$usercourseprefix.'.['.$cgroup.'].'.$what;      my $grplevel=$usercourseprefix.'.['.$cgroup.'].'.$what;
     my $grplevelr=$usercourseprefix.'.['.$cgroup.'].'.$symbparm;      my $grplevelr=$usercourseprefix.'.['.$cgroup.'].'.$symbparm;
     my $grplevelm=$usercourseprefix.'.['.$cgroup.'].'.$mapparm;      my $grplevelm=$usercourseprefix.'.['.$cgroup.'].'.$mapparm;
   
   
     my $seclevel= $usercourseprefix.'.['.$csec.'].'.$what;      my $seclevel= $usercourseprefix.'.['.$csec.'].'.$what;
     my $seclevelr=$usercourseprefix.'.['.$csec.'].'.$symbparm;      my $seclevelr=$usercourseprefix.'.['.$csec.'].'.$symbparm;
     my $seclevelm=$usercourseprefix.'.['.$csec.'].'.$mapparm;      my $seclevelm=$usercourseprefix.'.['.$csec.'].'.$mapparm;
   
   
     my $courselevel= $usercourseprefix.'.'.$what;      my $courselevel= $usercourseprefix.'.'.$what;
     my $courselevelr=$usercourseprefix.'.'.$symbparm;      my $courselevelr=$usercourseprefix.'.'.$symbparm;
     my $courselevelm=$usercourseprefix.'.'.$mapparm;      my $courselevelm=$usercourseprefix.'.'.$mapparm;
   
   
     my $useropt = $self->{USER_OPT};      my $useropt = $self->{USER_OPT};
     my $courseopt = $self->{COURSE_OPT};      my $courseopt = $self->{COURSE_OPT};
     my $parmhash = $self->{PARM_HASH};      my $parmhash = $self->{PARM_HASH};
Line 2674  sub parmval_real { Line 2678  sub parmval_real {
     if (defined($pack_def)) { return [$pack_def,'resource']; }      if (defined($pack_def)) { return [$pack_def,'resource']; }
     return [''];      return [''];
 }  }
   #
   #  Determines the open/close dates for printing a map that
   #  encloses a resource.
   #
   sub map_printdates {
       my ($self, $res, $part) = @_;
   
   
   
   
   
       my $opendate = $self->get_mapparam($res->symb(), "$part.printstartdate");
       my $closedate= $self->get_mapparam($res->symb(), "$part.printenddate");
   
   
       return ($opendate, $closedate);
   }
   
   sub get_mapparam {
       my ($self, $symb, $what) = @_;
   
       # Ensure the course option hash is populated:
   
       $self->generate_course_user_opt();
   
       # Get the course id and section if there is one.
   
       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=$self->{USERNAME};
       my $udom=$self->{DOMAIN};
   
       unless ($symb) { return ['']; }
       my $result='';
   
   
       # Figure out which map we are in.
   
       my ($mapname,$id,$fn)=&Apache::lonnet::decode_symb($symb);
       $mapname = &Apache::lonnet::deversion($mapname);
   
   
       my $rwhat=$what;
       $what=~s/^parameter\_//;
       $what=~s/\_/\./;
   
       # Build the hash keys for the lookup:
   
       my $symbparm=$symb.'.'.$what;
       my $mapparm=$mapname.'___(all).'.$what;
       my $usercourseprefix=$cid;
   
   
       my $grplevel    = "$usercourseprefix.[$cgroup].$mapparm";
       my $seclevel    = "$usercourseprefix.[$csec].$mapparm";
       my $courselevel = "$usercourseprefix.$mapparm";
   
   
       # Get handy references to the hashes we need in $self:
   
       my $useropt = $self->{USER_OPT};
       my $courseopt = $self->{COURSE_OPT};
       my $parmhash = $self->{PARM_HASH};
   
       # Check per user 
   
   
   
       if ($uname and defined($useropt)) {
    if (defined($$useropt{$courselevel})) {
       return $$useropt{$courselevel};
    }
       }
   
       # Check course -- group
   
   
   
       if ($cgroup ne '' and defined ($courseopt)) {
    if (defined($$courseopt{$grplevel})) {
       return $$courseopt{$grplevel};
    }
       }
   
       # Check course -- section
   
   
   
   
   
       if ($csec and defined($courseopt)) {
    if (defined($$courseopt{$seclevel})) {
       return $$courseopt{$seclevel};
    }
       }
       # Check the map parameters themselves:
   
       my $thisparm = $$parmhash{$symbparm};
       if (defined($thisparm)) {
    return $thisparm;
       }
   
   
       # Additional course parameters:
   
       if (defined($courseopt)) {
    if (defined($$courseopt{$courselevel})) {
       return $$courseopt{$courselevel};
    }
       }
       return undef; # Unefined if we got here.
   }
   
   sub course_printdates {
       my ($self, $symb,  $part) = @_;
   
   
       my $opendate  = $self->getcourseparam($symb, $part . '.printstartdate');
       my $closedate = $self->getcourseparam($symb, $part . '.printenddate');
       return ($opendate, $closedate);
   
   }
   
   sub getcourseparam {
       my ($self, $symb, $what) = @_;
   
       $self->generate_course_user_opt(); # If necessary populate the hashes.
   
       my $uname = $self->{USERNAME};
       my $udom  = $self->{DOMAIN};
       
       # Course, section, group ids come from the env:
   
       my $cid   = $env{'request.course.id'};
       my $csec  = $env{'request.course.sec'};
       my $cgroup = ''; # Assume no group
   
       my @cgroups = split(/:/, $env{'request.course.groups'});
       if(@cgroups > 0) {
    @cgroups = sort(@cgroups);
    $cgroup  = $cgroups[0]; # There is a course group. 
      }
       my ($mapname,$id,$fn)=&Apache::lonnet::decode_symb($symb);
       $mapname = &Apache::lonnet::deversion($mapname);
   
       #
       # Make the various lookup keys:
       #
   
       $what=~s/^parameter\_//;
       $what=~s/\_/\./;
   
   
       my $symbparm = $symb . '.' . $what;
       my $mapparm=$mapname.'___(all).'.$what;
   
       # Local refs to the hashes we're going to look at:
   
       my $useropt   = $self->{USER_OPT};
       my $courseopt = $self->{COURSE_OPT};
   
       # 
       # We want the course level stuff from the way
       # parmval_real operates 
       # TODO: Fator some of this stuff out of
       # both parmval_real and here
       #
       my $courselevel = $cid . '.' .  $what;
       my $grplevel    = $cid . '.[' . $cgroup   . ']' . $what;
       my $seclevel    = $cid . '.[' . $csec     . ']' . $what;
   
   
       # Try for the user's course level option:
   
       if ($uname and defined($useropt)) {
    if (defined($$useropt{$courselevel})) {
       return $$useropt{$courselevel};
    }
       }
       # Try for the group's course level option:
   
       if ($uname ne '' and defined($courseopt)) {
    if (defined($$courseopt{$grplevel})) {
       return $$courseopt{$grplevel};
    }
       }
   
       #  Try for section level parameters:
   
       if ($csec and defined($courseopt)) {
    if (defined($$courseopt{$seclevel})) {
       return $$courseopt{$seclevel};
    }
       }
       # Try for 'additional' course parameterse:
   
       if (defined($courseopt)) {
    if (defined($$courseopt{$courselevel})) {
       return $$courseopt{$courselevel};
    }
       }
       return undef;
   
   }
   
   
 =pod  =pod
   
Line 3099  sub new { Line 3314  sub new {
         my $firstResource = $resource->map_start();          my $firstResource = $resource->map_start();
         my $finishResource = $resource->map_finish();          my $finishResource = $resource->map_finish();
  my $result;   my $result;
  my $rdump  = Data::Dumper->new([$result]);  
  $result =  Apache::lonnavmaps::iterator->new($self->{NAV_MAP}, $firstResource,   $result =  Apache::lonnavmaps::iterator->new($self->{NAV_MAP}, $firstResource,
      $finishResource, $self->{FILTER},       $finishResource, $self->{FILTER},
      $self->{ALREADY_SEEN},        $self->{ALREADY_SEEN}, 
Line 3126  sub new { Line 3340  sub new {
     $self->{ALREADY_SEEN}->{$self->{FIRST_RESOURCE}->{ID}} = 1;      $self->{ALREADY_SEEN}->{$self->{FIRST_RESOURCE}->{ID}} = 1;
   
     bless ($self);      bless ($self);
     my $selfDump = Data::Dumper->new([$self]);  
   
     return $self;      return $self;
 }  }
   
Line 3143  sub next { Line 3355  sub next {
     if ($self->{RETURN_0} && !$self->{HAVE_RETURNED_0}) {      if ($self->{RETURN_0} && !$self->{HAVE_RETURNED_0}) {
         $self->{HAVE_RETURNED_0} = 1;          $self->{HAVE_RETURNED_0} = 1;
  my $nextTopLevel = $self->{NAV_MAP}->getById('0.0');   my $nextTopLevel = $self->{NAV_MAP}->getById('0.0');
   
         return $self->{NAV_MAP}->getById('0.0');          return $self->{NAV_MAP}->getById('0.0');
     }      }
     if ($self->{RETURN_0} && !$self->{HAVE_RETURNED_0_BEGIN_MAP}) {      if ($self->{RETURN_0} && !$self->{HAVE_RETURNED_0_BEGIN_MAP}) {
Line 3169  sub next { Line 3380  sub next {
     if (defined($self->{FORCE_NEXT})) {      if (defined($self->{FORCE_NEXT})) {
         my $tmp = $self->{FORCE_NEXT};          my $tmp = $self->{FORCE_NEXT};
         $self->{FORCE_NEXT} = undef;          $self->{FORCE_NEXT} = undef;
   
         return $tmp;          return $tmp;
     }      }
   
Line 3291  sub next { Line 3501  sub next {
         return $self->next($closeAllPages);          return $self->next($closeAllPages);
     }      }
   
     my $hereResource = $self->{HERE};  
   
     return $self->{HERE};      return $self->{HERE};
   
 }  }
Line 3459  sub next { Line 3667  sub next {
     my $nextUnfiltered;      my $nextUnfiltered;
     if ($self->{DIRECTION} == FORWARD()) {      if ($self->{DIRECTION} == FORWARD()) {
         $nextUnfiltered = $self->{HERE}->getNext();          $nextUnfiltered = $self->{HERE}->getNext();
   
     } else {      } else {
         $nextUnfiltered = $self->{HERE}->getPrevious();          $nextUnfiltered = $self->{HERE}->getPrevious();
     }      }
Line 3614  sub new { Line 3821  sub new {
     $self->{NAV_MAP}->{RESOURCE_CACHE}->{$self->{ID}} = $self;      $self->{NAV_MAP}->{RESOURCE_CACHE}->{$self->{ID}} = $self;
     $self->{RESOURCE_ERROR} = 0;      $self->{RESOURCE_ERROR} = 0;
   
       $self->{DUEDATE_CACHE} = undef;
   
     # A hash that can be used by two-pass algorithms to store data      # A hash that can be used by two-pass algorithms to store data
     # about this resource in. Not used by the resource object      # about this resource in. Not used by the resource object
     # directly.      # directly.
Line 4081  their code.) Line 4290  their code.)
   
 =over 4  =over 4
   
   
 =item * B<printable>  =item * B<printable>
   
 returns true if the current date is such that the   returns true if the current date is such that the 
 specified resource part is printable.  specified resource part is printable.
   
   
 =item * B<resprintable>  =item * B<resprintable>
   
 Returns true if all parts in the resource are printable making the  Returns true if all parts in the resource are printable making the
Line 4144  Get the weight for the problem. Line 4355  Get the weight for the problem.
   
 =cut  =cut
   
   
   
   
 sub printable {  sub printable {
   
     my ($self, $part) = @_;      my ($self, $part) = @_;
   
     # Get the print open/close dates for the resource.      # Get the print open/close dates for the resource.
   
     my $start = $self->parmval("prinstartdate", $part);      my $start = $self->parmval("printstartdate", $part);
     my $end   = $self->parmval("printenddate", $part);      my $end   = $self->parmval("printenddate", $part);
   
     #  The following cases apply:      #  The following cases apply:
Line 4252  sub checkedin { Line 4466  sub checkedin {
   
 sub duedate {  sub duedate {
     (my $self, my $part) = @_;      (my $self, my $part) = @_;
       if (defined ($self->{DUEDATE_CACHE}->{$part})) {
           return $self->{DUEDATE_CACHE}->{$part};
       }
     my $date;      my $date;
     my @interval=$self->parmval("interval", $part);      my @interval=$self->parmval("interval", $part);
     my $due_date=$self->parmval("duedate", $part);      my $due_date=$self->parmval("duedate", $part);
Line 4268  sub duedate { Line 4485  sub duedate {
     } else {      } else {
  $date = $due_date;   $date = $due_date;
     }      }
       $self->{DUEDATE_CACHE}->{$part} = $date;
     return $date;      return $date;
 }  }
 sub handgrade {  sub handgrade {

Removed from v.1.478  
changed lines
  Added in v.1.485


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