version 1.54, 2002/09/24 20:01:05
|
version 1.58, 2002/10/01 07:20:31
|
Line 124 sub parmval {
|
Line 124 sub parmval {
|
my $courselevelm=$usercourseprefix.'.'.$mapparm; |
my $courselevelm=$usercourseprefix.'.'.$mapparm; |
|
|
# ---------------------------------------------------------- first, check user |
# ---------------------------------------------------------- first, check user |
if ($uname) { |
if (defined($uname)) { |
if ($useropt{$courselevelr}) { return $useropt{$courselevelr}; } |
if (defined($useropt{$courselevelr})) { return $useropt{$courselevelr}; } |
if ($useropt{$courselevelm}) { return $useropt{$courselevelm}; } |
if (defined($useropt{$courselevelm})) { return $useropt{$courselevelm}; } |
if ($useropt{$courselevel}) { return $useropt{$courselevel}; } |
if (defined($useropt{$courselevel})) { return $useropt{$courselevel}; } |
} |
} |
|
|
# ------------------------------------------------------- second, check course |
# ------------------------------------------------------- second, check course |
if ($csec) { |
if (defined($csec)) { |
if ($courseopt{$seclevelr}) { return $courseopt{$seclevelr}; } |
if (defined($courseopt{$seclevelr})) { return $courseopt{$seclevelr}; } |
if ($courseopt{$seclevelm}) { return $courseopt{$seclevelm}; } |
if (defined($courseopt{$seclevelm})) { return $courseopt{$seclevelm}; } |
if ($courseopt{$seclevel}) { return $courseopt{$seclevel}; } |
if (defined($courseopt{$seclevel})) { return $courseopt{$seclevel}; } |
} |
} |
|
|
if ($courseopt{$courselevelr}) { return $courseopt{$courselevelr}; } |
if (defined($courseopt{$courselevelr})) { return $courseopt{$courselevelr}; } |
if ($courseopt{$courselevelm}) { return $courseopt{$courselevelm}; } |
if (defined($courseopt{$courselevelm})) { return $courseopt{$courselevelm}; } |
if ($courseopt{$courselevel}) { return $courseopt{$courselevel}; } |
if (defined($courseopt{$courselevel})) { return $courseopt{$courselevel}; } |
|
|
# ----------------------------------------------------- third, check map parms |
# ----------------------------------------------------- third, check map parms |
|
|
my $thisparm=$parmhash{$symbparm}; |
my $thisparm=$parmhash{$symbparm}; |
if ($thisparm) { return $thisparm; } |
if (defined($thisparm)) { return $thisparm; } |
|
|
# ----------------------------------------------------- fourth , check default |
# ----------------------------------------------------- fourth , check default |
|
|
my $default=&Apache::lonnet::metadata($fn,$rwhat.'.default'); |
my $default=&Apache::lonnet::metadata($fn,$rwhat.'.default'); |
if ($default) { return $default} |
if (defined($default)) { return $default} |
|
|
# --------------------------------------------------- fifth , cascade up parts |
# --------------------------------------------------- fifth , cascade up parts |
|
|
Line 159 sub parmval {
|
Line 159 sub parmval {
|
my ($part,$id)=split(/\_/,$space); |
my ($part,$id)=split(/\_/,$space); |
if ($id) { |
if ($id) { |
my $partgeneral=&parmval($part.".$qualifier",$symb); |
my $partgeneral=&parmval($part.".$qualifier",$symb); |
if ($partgeneral) { return $partgeneral; } |
if (defined($partgeneral)) { return $partgeneral; } |
} else { |
} else { |
my $resourcegeneral=&parmval("0.$qualifier",$symb); |
my $resourcegeneral=&parmval("0.$qualifier",$symb); |
if ($resourcegeneral) { return $resourcegeneral; } |
if (defined($resourcegeneral)) { return $resourcegeneral; } |
} |
} |
} |
} |
return ''; |
return ''; |
Line 827 sub new_handle {
|
Line 827 sub new_handle {
|
$ENV{"request.course.fn"}.".db", |
$ENV{"request.course.fn"}.".db", |
$ENV{"request.course.fn"}."_parms.db", 1); |
$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 |
# Grab a resource object so we have access to the constants; this |
# is technically not proper, but should be harmless |
# is technically not proper, but should be harmless |
my $res = $navmap->firstResource(); |
my $res = $navmap->firstResource(); |
Line 845 sub new_handle {
|
Line 859 sub new_handle {
|
$res->OPEN => '#FFFF88', |
$res->OPEN => '#FFFF88', |
$res->NOTHING_SET => '' ); |
$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; |
my %filterHash; |
# Figure out what we're not displaying |
# Figure out what we're not displaying |
foreach (split(/\,/, $ENV{"form.filter"})) { |
foreach (split(/\,/, $ENV{"form.filter"})) { |
Line 1063 sub getDescription {
|
Line 1071 sub getDescription {
|
# now, this is a simple call to localtime. The final function |
# now, this is a simple call to localtime. The final function |
# probably belongs in loncommon. |
# probably belongs in loncommon. |
sub timeToHumanString { |
sub timeToHumanString { |
return localtime(shift); |
my ($time) = @_; |
|
# zero, '0' and blank are bad times |
|
if ($time) { |
|
return localtime($time); |
|
} else { |
|
return 'Never'; |
|
} |
} |
} |
|
|
1; |
1; |
Line 1090 You must obtain resource objects through
|
Line 1104 You must obtain resource objects through
|
|
|
=over 4 |
=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. |
=item * B<getIterator>(first, finish, filter, condition): See iterator documentation below. |
|
|
Line 1108 sub new {
|
Line 1122 sub new {
|
$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; |
|
$self->{GENERATE_EMAIL_DISCUSS_STATUS} = shift; |
|
|
# Resource cache stores navmapresource's as we reference them. We generate |
# 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. |
# them on-demand so we don't pay for creating resources unless we use them. |
Line 1185 sub new {
|
Line 1200 sub new {
|
$useropt{$userprefix.&Apache::lonnet::unescape($name)}= |
$useropt{$userprefix.&Apache::lonnet::unescape($name)}= |
&Apache::lonnet::unescape($value); |
&Apache::lonnet::unescape($value); |
} |
} |
$self->{COURSE_OPT} = \%courseopt; |
$self->{COURSE_OPT} = \%courseopt; |
$self->{USER_OPT} = \%useropt; |
$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); |
bless($self); |
|
|
return $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 { |
sub getIterator { |
my $self = shift; |
my $self = shift; |
my $iterator = Apache::lonnavmaps::iterator->new($self, shift, shift, |
my $iterator = Apache::lonnavmaps::iterator->new($self, shift, shift, |
Line 1310 sub parmval {
|
Line 1382 sub parmval {
|
|
|
# ---------------------------------------------------------- first, check user |
# ---------------------------------------------------------- first, check user |
if ($uname and defined($useropt)) { |
if ($uname and defined($useropt)) { |
if ($$useropt{$courselevelr}) { return $$useropt{$courselevelr}; } |
if (defined($$useropt{$courselevelr})) { return $$useropt{$courselevelr}; } |
if ($$useropt{$courselevelm}) { return $$useropt{$courselevelm}; } |
if (defined($$useropt{$courselevelm})) { return $$useropt{$courselevelm}; } |
if ($$useropt{$courselevel}) { return $$useropt{$courselevel}; } |
if (defined($$useropt{$courselevel})) { return $$useropt{$courselevel}; } |
} |
} |
|
|
# ------------------------------------------------------- second, check course |
# ------------------------------------------------------- second, check course |
if ($csec and defined($courseopt)) { |
if ($csec and defined($courseopt)) { |
if ($$courseopt{$seclevelr}) { return $$courseopt{$seclevelr}; } |
if (defined($$courseopt{$seclevelr})) { return $$courseopt{$seclevelr}; } |
if ($$courseopt{$seclevelm}) { return $$courseopt{$seclevelm}; } |
if (defined($$courseopt{$seclevelm})) { return $$courseopt{$seclevelm}; } |
if ($$courseopt{$seclevel}) { return $$courseopt{$seclevel}; } |
if (defined($$courseopt{$seclevel})) { return $$courseopt{$seclevel}; } |
} |
} |
|
|
if (defined($courseopt)) { |
if (defined($courseopt)) { |
if ($$courseopt{$courselevelr}) { return $$courseopt{$courselevelr}; } |
if (defined($$courseopt{$courselevelr})) { return $$courseopt{$courselevelr}; } |
if ($$courseopt{$courselevelm}) { return $$courseopt{$courselevelm}; } |
if (defined($$courseopt{$courselevelm})) { return $$courseopt{$courselevelm}; } |
if ($$courseopt{$courselevel}) { return $$courseopt{$courselevel}; } |
if (defined($$courseopt{$courselevel})) { return $$courseopt{$courselevel}; } |
} |
} |
|
|
# ----------------------------------------------------- third, check map parms |
# ----------------------------------------------------- third, check map parms |
|
|
my $thisparm=$$parmhash{$symbparm}; |
my $thisparm=$$parmhash{$symbparm}; |
if ($thisparm) { return $thisparm; } |
if (defined($thisparm)) { return $thisparm; } |
|
|
# ----------------------------------------------------- fourth , check default |
# ----------------------------------------------------- fourth , check default |
|
|
my $default=&Apache::lonnet::metadata($fn,$rwhat.'.default'); |
my $default=&Apache::lonnet::metadata($fn,$rwhat.'.default'); |
if ($default) { return $default} |
if (defined($default)) { return $default} |
|
|
# --------------------------------------------------- fifth , cascade up parts |
# --------------------------------------------------- fifth , cascade up parts |
|
|
Line 1346 sub parmval {
|
Line 1418 sub parmval {
|
my ($part,$id)=split(/\_/,$space); |
my ($part,$id)=split(/\_/,$space); |
if ($id) { |
if ($id) { |
my $partgeneral=$self->parmval($part.".$qualifier",$symb); |
my $partgeneral=$self->parmval($part.".$qualifier",$symb); |
if ($partgeneral) { return $partgeneral; } |
if (defined($partgeneral)) { return $partgeneral; } |
} else { |
} else { |
my $resourcegeneral=$self->parmval("0.$qualifier",$symb); |
my $resourcegeneral=$self->parmval("0.$qualifier",$symb); |
if ($resourcegeneral) { return $resourcegeneral; } |
if (defined($resourcegeneral)) { return $resourcegeneral; } |
} |
} |
} |
} |
return ''; |
return ''; |