version 1.63, 2000/11/14 18:41:40
|
version 1.69, 2000/11/24 19:59:31
|
Line 67
|
Line 67
|
# 10/04 Gerd Kortemeyer |
# 10/04 Gerd Kortemeyer |
# 10/04 Guy Albertelli |
# 10/04 Guy Albertelli |
# 10/06,10/09,10/10,10/11,10/14,10/20,10/23,10/25,10/26,10/27,10/28,10/29, |
# 10/06,10/09,10/10,10/11,10/14,10/20,10/23,10/25,10/26,10/27,10/28,10/29, |
# 10/30,10/31,11/2,11/14 Gerd Kortemeyer |
# 10/30,10/31,11/2,11/14,11/15,11/16,11/20,11/21,11/22,11/25 Gerd Kortemeyer |
|
|
package Apache::lonnet; |
package Apache::lonnet; |
|
|
Line 122 sub reply {
|
Line 122 sub reply {
|
my ($cmd,$server)=@_; |
my ($cmd,$server)=@_; |
my $answer=subreply($cmd,$server); |
my $answer=subreply($cmd,$server); |
if ($answer eq 'con_lost') { $answer=subreply($cmd,$server); } |
if ($answer eq 'con_lost') { $answer=subreply($cmd,$server); } |
if (($answer=~/^error:/) || ($answer=~/^refused/) || |
if (($answer=~/^refused/) || ($answer=~/^rejected/)) { |
($answer=~/^rejected/)) { |
|
&logthis("<font color=blue>WARNING:". |
&logthis("<font color=blue>WARNING:". |
" $cmd to $server returned $answer</font>"); |
" $cmd to $server returned $answer</font>"); |
} |
} |
Line 369 sub subscribe {
|
Line 368 sub subscribe {
|
return 'not_found'; |
return 'not_found'; |
} |
} |
my $answer=reply("sub:$fname",$home); |
my $answer=reply("sub:$fname",$home); |
|
if (($answer eq 'con_lost') || ($answer eq 'rejected')) { |
|
$answer.=' by '.$home; |
|
} |
return $answer; |
return $answer; |
} |
} |
|
|
Line 380 sub repcopy {
|
Line 382 sub repcopy {
|
my $transname="$filename.in.transfer"; |
my $transname="$filename.in.transfer"; |
if ((-e $filename) || (-e $transname)) { return OK; } |
if ((-e $filename) || (-e $transname)) { return OK; } |
my $remoteurl=subscribe($filename); |
my $remoteurl=subscribe($filename); |
if ($remoteurl eq 'con_lost') { |
if ($remoteurl =~ /^con_lost by/) { |
&logthis("Subscribe returned con_lost: $filename"); |
&logthis("Subscribe returned $remoteurl: $filename"); |
return HTTP_SERVICE_UNAVAILABLE; |
return HTTP_SERVICE_UNAVAILABLE; |
} elsif ($remoteurl eq 'not_found') { |
} elsif ($remoteurl eq 'not_found') { |
&logthis("Subscribe returned not_found: $filename"); |
&logthis("Subscribe returned not_found: $filename"); |
return HTTP_NOT_FOUND; |
return HTTP_NOT_FOUND; |
} elsif ($remoteurl eq 'rejected') { |
} elsif ($remoteurl =~ /^rejected by/) { |
&logthis("Subscribe returned rejected: $filename"); |
&logthis("Subscribe returned $remoteurl: $filename"); |
return FORBIDDEN; |
return FORBIDDEN; |
} elsif ($remoteurl eq 'directory') { |
} elsif ($remoteurl eq 'directory') { |
return OK; |
return OK; |
Line 774 sub allowed {
|
Line 776 sub allowed {
|
} |
} |
|
|
# Course: uri itself is a course |
# Course: uri itself is a course |
|
my $courseuri=$uri; |
if ($ENV{'user.priv.'.$ENV{'request.role'}.'./'.$uri} |
$courseuri=~s/\_(\d)/\/$1/; |
|
if ($ENV{'user.priv.'.$ENV{'request.role'}.'./'.$courseuri} |
=~/$priv\&([^\:]*)/) { |
=~/$priv\&([^\:]*)/) { |
$thisallowed.=$1; |
$thisallowed.=$1; |
} |
} |
Line 1191 sub condval {
|
Line 1194 sub condval {
|
|
|
sub EXT { |
sub EXT { |
my $varname=shift; |
my $varname=shift; |
|
unless ($varname) { return ''; } |
my ($realm,$space,$qualifier,@therest)=split(/\./,$varname); |
my ($realm,$space,$qualifier,@therest)=split(/\./,$varname); |
my $rest; |
my $rest; |
if ($therest[0]) { |
if ($therest[0]) { |
Line 1255 sub EXT {
|
Line 1259 sub EXT {
|
} elsif ($realm eq 'resource') { |
} elsif ($realm eq 'resource') { |
if ($ENV{'request.course.id'}) { |
if ($ENV{'request.course.id'}) { |
# ----------------------------------------------------- Cascading lookup scheme |
# ----------------------------------------------------- Cascading lookup scheme |
my $reslevel= |
my $symbp=&symbread(); |
$ENV{'request.course.id'}.'.'.&symbread().'.'.$spacequalifierrest; |
my $mapp=(split(/\_\_\_/,$symbp))[0]; |
|
|
|
my $symbparm=$symbp.'.'.$spacequalifierrest; |
|
my $mapparm=$mapp.'___(all).'.$spacequalifierrest; |
|
|
my $seclevel= |
my $seclevel= |
$ENV{'request.course.id'}.'.'. |
$ENV{'request.course.id'}.'.['. |
$ENV{'request.course.sec'}.'.'.$spacequalifierrest; |
$ENV{'request.course.sec'}.'].'.$spacequalifierrest; |
|
my $seclevelr= |
|
$ENV{'request.course.id'}.'.['. |
|
$ENV{'request.course.sec'}.'].'.$symbparm; |
|
my $seclevelm= |
|
$ENV{'request.course.id'}.'.['. |
|
$ENV{'request.course.sec'}.'].'.$mapparm; |
|
|
my $courselevel= |
my $courselevel= |
$ENV{'request.course.id'}.'.'.$spacequalifierrest; |
$ENV{'request.course.id'}.'.'.$spacequalifierrest; |
|
my $courselevelr= |
|
$ENV{'request.course.id'}.'.'.$symbparm; |
|
my $courselevelm= |
|
$ENV{'request.course.id'}.'.'.$mapparm; |
|
|
|
|
# ----------------------------------------------------------- first, check user |
# ----------------------------------------------------------- first, check user |
my %resourcedata=get('resourcedata',($reslevel,$seclevel,$courselevel)); |
my %resourcedata=get('resourcedata', |
if ($resourcedata{$reslevel}!~/^error\:/) { |
($courselevelr,$courselevelm,$courselevel)); |
if ($resourcedata{$reslevel}) { return $resourcedata{$reslevel}; } |
if ($resourcedata{$courselevelr}!~/^error\:/) { |
if ($resourcedata{$seclevel}) { return $resourcedata{$seclevel}; } |
|
|
if ($resourcedata{$courselevelr}) { |
|
return $resourcedata{$courselevelr}; } |
|
if ($resourcedata{$courselevelm}) { |
|
return $resourcedata{$courselevelm}; } |
if ($resourcedata{$courselevel}) { return $resourcedata{$courselevel}; } |
if ($resourcedata{$courselevel}) { return $resourcedata{$courselevel}; } |
|
|
} |
} |
# -------------------------------------------------------- second, check course |
# -------------------------------------------------------- second, check course |
my $section=''; |
my $section=''; |
Line 1279 sub EXT {
|
Line 1304 sub EXT {
|
$ENV{'course.'.$ENV{'request.course.id'}.$section.'.domain'}.':'. |
$ENV{'course.'.$ENV{'request.course.id'}.$section.'.domain'}.':'. |
$ENV{'course.'.$ENV{'request.course.id'}.$section.'.num'}. |
$ENV{'course.'.$ENV{'request.course.id'}.$section.'.num'}. |
':resourcedata:'. |
':resourcedata:'. |
escape($reslevel).':'.escape($seclevel).':'.escape($courselevel), |
escape($seclevelr).':'.escape($seclevelm).':'.escape($seclevel).':'. |
|
escape($courselevelr).':'.escape($courselevelm).':'.escape($courselevel), |
$ENV{'course.'.$ENV{'request.course.id'}.$section.'.home'}); |
$ENV{'course.'.$ENV{'request.course.id'}.$section.'.home'}); |
if ($reply!~/^error\:/) { |
if ($reply!~/^error\:/) { |
map { |
map { |
my ($name,$value)=split(/\=/,$_); |
my ($name,$value)=split(/\=/,$_); |
$resourcedata{unescape($name)}=unescape($value); |
$resourcedata{unescape($name)}=unescape($value); |
} split(/\&/,$reply); |
} split(/\&/,$reply); |
if ($resourcedata{$reslevel}) { return $resourcedata{$reslevel}; } |
|
if ($resourcedata{$seclevel}) { return $resourcedata{$seclevel}; } |
if ($resourcedata{$seclevelr}) { return $resourcedata{$seclevelr}; } |
|
if ($resourcedata{$seclevelm}) { return $resourcedata{$seclevelm}; } |
|
if ($resourcedata{$seclevel}) { return $resourcedata{$seclevel}; } |
|
|
|
if ($resourcedata{$courselevelr}) { |
|
return $resourcedata{$courselevelr}; } |
|
if ($resourcedata{$courselevelm}) { |
|
return $resourcedata{$courselevelm}; } |
if ($resourcedata{$courselevel}) { return $resourcedata{$courselevel}; } |
if ($resourcedata{$courselevel}) { return $resourcedata{$courselevel}; } |
|
|
} |
} |
|
|
# ------------------------------------------------------ third, check map parms |
# ------------------------------------------------------ third, check map parms |
|
my %parmhash=(); |
if ($ENV{'resource.parms.'.$reslevel}) { |
my $thisparm=''; |
return $ENV{'resource.parms.'.$reslevel}; |
if (tie(%parmhash,'GDBM_File', |
|
$ENV{'request.course.fn'}.'_parms.db',&GDBM_READER,0640)) { |
|
$thisparm=$parmhash{$symbparm}; |
|
untie(%parmhash); |
} |
} |
|
if ($thisparm) { return $thisparm; } |
} |
} |
|
|
# --------------------------------------------- last, look in resource metadata |
# --------------------------------------------- last, look in resource metadata |
my $uri=&declutter($ENV{'request.filename'}); |
my $uri=&declutter($ENV{'request.filename'}); |
my $filename=$perlvar{'lonDocRoot'}.'/res/'.$ENV.'.meta'; |
my $filename=$perlvar{'lonDocRoot'}.'/res/'.$uri.'.meta'; |
if (-e $filename) { |
if (-e $filename) { |
my @content; |
my @content; |
{ |
{ |
Line 1325 sub EXT {
|
Line 1363 sub EXT {
|
return ''; |
return ''; |
} |
} |
|
|
# ---------------------------------------- Append resource parms to environment |
|
|
|
sub appendparms { |
|
my ($symb,$parms)=@_; |
|
my %storehash=(); |
|
my $prefix='resource.parms.'.$ENV{'request.course.id'}.'.'.$symb; |
|
map { |
|
my ($typename,$value)=split(/\=/,$_); |
|
my ($type,$name)=split(/\:/,$typename); |
|
$storehash{$prefix.'.'.unescape($name)}=unescape($value); |
|
$storehash{$prefix.'.'.unescape($name).'.type'}=unescape($type); |
|
} split(/\&/,$parms); |
|
&appenv(%storehash); |
|
} |
|
|
|
# ------------------------------------------------- Update symbolic store links |
# ------------------------------------------------- Update symbolic store links |
|
|
sub symblist { |
sub symblist { |
Line 1371 sub symbread {
|
Line 1394 sub symbread {
|
my %hash; |
my %hash; |
my %bighash; |
my %bighash; |
my $syval=''; |
my $syval=''; |
my $parms=''; |
|
if (($ENV{'request.course.fn'}) && ($thisfn)) { |
if (($ENV{'request.course.fn'}) && ($thisfn)) { |
if (tie(%hash,'GDBM_File',$ENV{'request.course.fn'}.'_symb.db', |
if (tie(%hash,'GDBM_File',$ENV{'request.course.fn'}.'_symb.db', |
&GDBM_READER,0640)) { |
&GDBM_READER,0640)) { |
Line 1393 sub symbread {
|
Line 1415 sub symbread {
|
&GDBM_READER,0640)) { |
&GDBM_READER,0640)) { |
# ---------------------------------------------- Get ID(s) for current resource |
# ---------------------------------------------- Get ID(s) for current resource |
my $ids=$bighash{'ids_/res/'.$thisfn}; |
my $ids=$bighash{'ids_/res/'.$thisfn}; |
|
unless ($ids) { |
|
$ids=$bighash{'ids_/'.$thisfn}; |
|
} |
if ($ids) { |
if ($ids) { |
# ------------------------------------------------------------------- Has ID(s) |
# ------------------------------------------------------------------- Has ID(s) |
my @possibilities=split(/\,/,$ids); |
my @possibilities=split(/\,/,$ids); |
if ($#possibilities==0) { |
if ($#possibilities==0) { |
# ----------------------------------------------- There is only one possibility |
# ----------------------------------------------- There is only one possibility |
my ($mapid,$resid)=split(/\./,$ids); |
my ($mapid,$resid)=split(/\./,$ids); |
$parms=$bighash{'param_'.$ids}; |
|
$syval=declutter($bighash{'map_id_'.$mapid}).'___'.$resid; |
$syval=declutter($bighash{'map_id_'.$mapid}).'___'.$resid; |
} else { |
} else { |
# ------------------------------------------ There is more than one possibility |
# ------------------------------------------ There is more than one possibility |
Line 1410 sub symbread {
|
Line 1434 sub symbread {
|
my ($mapid,$resid)=split(/\./,$_); |
my ($mapid,$resid)=split(/\./,$_); |
if ($bighash{'map_type_'.$mapid} ne 'page') { |
if ($bighash{'map_type_'.$mapid} ne 'page') { |
$realpossible++; |
$realpossible++; |
$parms=$bighash{'param_'.$_}; |
|
$syval=declutter($bighash{'map_id_'.$mapid}). |
$syval=declutter($bighash{'map_id_'.$mapid}). |
'___'.$resid; |
'___'.$resid; |
} |
} |
Line 1423 sub symbread {
|
Line 1446 sub symbread {
|
} |
} |
} |
} |
if ($syval) { |
if ($syval) { |
if ($parms) { |
|
&appendparms($syval.'___'.$thisfn,$parms); |
|
} |
|
return $syval.'___'.$thisfn; |
return $syval.'___'.$thisfn; |
} |
} |
} |
} |