--- loncom/interface/lonnavmaps.pm 2002/09/24 20:01:05 1.54 +++ loncom/interface/lonnavmaps.pm 2002/09/26 16:56:21 1.55 @@ -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 @@ sub new_handle { $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('Coursemap undefined.' . + ''); + 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 @@ sub new_handle { $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 @@ You must obtain resource objects through =over 4 -=item * B(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 if not. You must check for undef; errors will occur when you try to use the other methods otherwise. +=item * B(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 if not. You must check for undef; errors will occur when you try to use the other methods otherwise. =item * B(first, finish, filter, condition): See iterator documentation below. @@ -1108,6 +1116,7 @@ sub new { $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,16 +1194,73 @@ sub new { $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 { my $self = shift; my $iterator = Apache::lonnavmaps::iterator->new($self, shift, shift,