version 1.921, 2007/10/06 04:32:40
|
version 1.928, 2007/11/20 17:54:40
|
Line 513 sub get_env_multiple {
|
Line 513 sub get_env_multiple {
|
} |
} |
|
|
# ------------------------------------------ Find out current server userload |
# ------------------------------------------ Find out current server userload |
# there is a copy in lond |
|
sub userload { |
sub userload { |
my $numusers=0; |
my $numusers=0; |
{ |
{ |
Line 521 sub userload {
|
Line 520 sub userload {
|
my $filename; |
my $filename; |
my $curtime=time; |
my $curtime=time; |
while ($filename=readdir(LONIDS)) { |
while ($filename=readdir(LONIDS)) { |
if ($filename eq '.' || $filename eq '..') {next;} |
next if ($filename eq '.' || $filename eq '..'); |
|
next if ($filename =~ /publicuser_\d+\.id/); |
my ($mtime)=(stat($perlvar{'lonIDsDir'}.'/'.$filename))[9]; |
my ($mtime)=(stat($perlvar{'lonIDsDir'}.'/'.$filename))[9]; |
if ($curtime-$mtime < 1800) { $numusers++; } |
if ($curtime-$mtime < 1800) { $numusers++; } |
} |
} |
Line 1047 sub get_instuser {
|
Line 1047 sub get_instuser {
|
} |
} |
|
|
sub inst_rulecheck { |
sub inst_rulecheck { |
my ($udom,$uname,$rules) = @_; |
my ($udom,$uname,$id,$item,$rules) = @_; |
my %returnhash; |
my %returnhash; |
if ($udom ne '') { |
if ($udom ne '') { |
if (ref($rules) eq 'ARRAY') { |
if (ref($rules) eq 'ARRAY') { |
Line 1055 sub inst_rulecheck {
|
Line 1055 sub inst_rulecheck {
|
my $rulestr = join(':',@{$rules}); |
my $rulestr = join(':',@{$rules}); |
my $homeserver=&domain($udom,'primary'); |
my $homeserver=&domain($udom,'primary'); |
if (($homeserver ne '') && ($homeserver ne 'no_host')) { |
if (($homeserver ne '') && ($homeserver ne 'no_host')) { |
my $response=&unescape(&reply('instrulecheck:'.&escape($udom).':'. |
my $response; |
&escape($uname).':'.$rulestr, |
if ($item eq 'username') { |
|
$response=&unescape(&reply('instrulecheck:'.&escape($udom). |
|
':'.&escape($uname).':'.$rulestr, |
$homeserver)); |
$homeserver)); |
|
} elsif ($item eq 'id') { |
|
$response=&unescape(&reply('instidrulecheck:'.&escape($udom). |
|
':'.&escape($id).':'.$rulestr, |
|
$homeserver)); |
|
} |
if ($response ne 'refused') { |
if ($response ne 'refused') { |
my @pairs=split(/\&/,$response); |
my @pairs=split(/\&/,$response); |
foreach my $item (@pairs) { |
foreach my $item (@pairs) { |
Line 1074 sub inst_rulecheck {
|
Line 1081 sub inst_rulecheck {
|
} |
} |
|
|
sub inst_userrules { |
sub inst_userrules { |
my ($udom) = @_; |
my ($udom,$check) = @_; |
my (%ruleshash,@ruleorder); |
my (%ruleshash,@ruleorder); |
if ($udom ne '') { |
if ($udom ne '') { |
my $homeserver=&domain($udom,'primary'); |
my $homeserver=&domain($udom,'primary'); |
if (($homeserver ne '') && ($homeserver ne 'no_host')) { |
if (($homeserver ne '') && ($homeserver ne 'no_host')) { |
my $response=&reply('instuserrules:'.&escape($udom), |
my $response; |
|
if ($check eq 'id') { |
|
$response=&reply('instidrules:'.&escape($udom), |
$homeserver); |
$homeserver); |
|
} else { |
|
$response=&reply('instuserrules:'.&escape($udom), |
|
$homeserver); |
|
} |
if (($response ne 'refused') && ($response ne 'error') && |
if (($response ne 'refused') && ($response ne 'error') && |
|
($response ne 'unknown_cmd') && |
($response ne 'no_such_host')) { |
($response ne 'no_such_host')) { |
my ($hashitems,$orderitems) = split(/:/,$response); |
my ($hashitems,$orderitems) = split(/:/,$response); |
my @pairs=split(/\&/,$hashitems); |
my @pairs=split(/\&/,$hashitems); |
Line 2463 sub get_my_roles {
|
Line 2477 sub get_my_roles {
|
} |
} |
if (ref($roles) eq 'ARRAY') { |
if (ref($roles) eq 'ARRAY') { |
if (!grep(/^\Q$role\E$/,@{$roles})) { |
if (!grep(/^\Q$role\E$/,@{$roles})) { |
next; |
if ($role =~ /^cr\//) { |
|
if (!grep(/^cr$/,@{$roles})) { |
|
next; |
|
} |
|
} else { |
|
next; |
|
} |
} |
} |
} |
} |
$returnhash{$username.':'.$domain.':'.$role}=$tstart.':'.$tend; |
$returnhash{$username.':'.$domain.':'.$role}=$tstart.':'.$tend; |
Line 2621 sub get_domain_roles {
|
Line 2641 sub get_domain_roles {
|
if (undef($enddate) || $enddate eq '') { |
if (undef($enddate) || $enddate eq '') { |
$enddate = '.'; |
$enddate = '.'; |
} |
} |
my $rolelist = join(':',@{$roles}); |
my $rolelist; |
|
if (ref($roles) eq 'ARRAY') { |
|
$rolelist = join(':',@{$roles}); |
|
} |
my %personnel = (); |
my %personnel = (); |
|
|
my %servers = &get_servers($dom,'library'); |
my %servers = &get_servers($dom,'library'); |
Line 2647 sub get_first_access {
|
Line 2670 sub get_first_access {
|
my ($symb,$courseid,$udom,$uname)=&whichuser(); |
my ($symb,$courseid,$udom,$uname)=&whichuser(); |
if ($argsymb) { $symb=$argsymb; } |
if ($argsymb) { $symb=$argsymb; } |
my ($map,$id,$res)=&decode_symb($symb); |
my ($map,$id,$res)=&decode_symb($symb); |
if ($type eq 'map') { |
if ($type eq 'course') { |
|
$res='course'; |
|
} elsif ($type eq 'map') { |
$res=&symbread($map); |
$res=&symbread($map); |
} else { |
} else { |
$res=$symb; |
$res=$symb; |
Line 2660 sub set_first_access {
|
Line 2685 sub set_first_access {
|
my ($type)=@_; |
my ($type)=@_; |
my ($symb,$courseid,$udom,$uname)=&whichuser(); |
my ($symb,$courseid,$udom,$uname)=&whichuser(); |
my ($map,$id,$res)=&decode_symb($symb); |
my ($map,$id,$res)=&decode_symb($symb); |
if ($type eq 'map') { |
if ($type eq 'course') { |
|
$res='course'; |
|
} elsif ($type eq 'map') { |
$res=&symbread($map); |
$res=&symbread($map); |
} else { |
} else { |
$res=$symb; |
$res=$symb; |
Line 6369 sub resdata {
|
Line 6396 sub resdata {
|
} |
} |
if (!ref($result)) { return $result; } |
if (!ref($result)) { return $result; } |
foreach my $item (@which) { |
foreach my $item (@which) { |
if (defined($result->{$item})) { |
if (defined($result->{$item->[0]})) { |
return $result->{$item}; |
return [$result->{$item->[0]},$item->[1]]; |
} |
} |
} |
} |
return undef; |
return undef; |
Line 6582 sub EXT {
|
Line 6609 sub EXT {
|
# ----------------------------------------------------------- first, check user |
# ----------------------------------------------------------- first, check user |
|
|
my $userreply=&resdata($uname,$udom,'user', |
my $userreply=&resdata($uname,$udom,'user', |
($courselevelr,$courselevelm, |
([$courselevelr,'resource'], |
$courselevel)); |
[$courselevelm,'map' ], |
|
[$courselevel, 'course' ])); |
if (defined($userreply)) { return $userreply; } |
if (defined($userreply)) { return $userreply; } |
|
|
# ------------------------------------------------ second, check some of course |
# ------------------------------------------------ second, check some of course |
Line 6591 sub EXT {
|
Line 6619 sub EXT {
|
if (@groups > 0) { |
if (@groups > 0) { |
$coursereply = &check_group_parms($courseid,\@groups,$symbparm, |
$coursereply = &check_group_parms($courseid,\@groups,$symbparm, |
$mapparm,$spacequalifierrest); |
$mapparm,$spacequalifierrest); |
if (defined($coursereply)) { return $coursereply; } |
if (defined($coursereply)) { return &get_reply($coursereply); } |
} |
} |
|
|
$coursereply=&resdata($env{'course.'.$courseid.'.num'}, |
$coursereply=&resdata($env{'course.'.$courseid.'.num'}, |
$env{'course.'.$courseid.'.domain'}, |
$env{'course.'.$courseid.'.domain'}, |
'course', |
'course', |
($seclevelr,$seclevelm,$seclevel, |
([$seclevelr, 'resource'], |
$courselevelr)); |
[$seclevelm, 'map' ], |
if (defined($coursereply)) { return $coursereply; } |
[$seclevel, 'course' ], |
|
[$courselevelr,'resource'])); |
|
if (defined($coursereply)) { return &get_reply($coursereply); } |
|
|
# ------------------------------------------------------ third, check map parms |
# ------------------------------------------------------ third, check map parms |
my %parmhash=(); |
my %parmhash=(); |
Line 6610 sub EXT {
|
Line 6640 sub EXT {
|
$thisparm=$parmhash{$symbparm}; |
$thisparm=$parmhash{$symbparm}; |
untie(%parmhash); |
untie(%parmhash); |
} |
} |
if ($thisparm) { return $thisparm; } |
if ($thisparm) { return &get_reply([$thisparm,'resource']); } |
} |
} |
# ------------------------------------------ fourth, look in resource metadata |
# ------------------------------------------ fourth, look in resource metadata |
|
|
Line 6623 sub EXT {
|
Line 6653 sub EXT {
|
$filename=$env{'request.filename'}; |
$filename=$env{'request.filename'}; |
} |
} |
my $metadata=&metadata($filename,$spacequalifierrest); |
my $metadata=&metadata($filename,$spacequalifierrest); |
if (defined($metadata)) { return $metadata; } |
if (defined($metadata)) { return &get_reply([$metadata,'resource']); } |
$metadata=&metadata($filename,'parameter_'.$spacequalifierrest); |
$metadata=&metadata($filename,'parameter_'.$spacequalifierrest); |
if (defined($metadata)) { return $metadata; } |
if (defined($metadata)) { return &get_reply([$metadata,'resource']); } |
|
|
# ---------------------------------------------- fourth, look in rest pf course |
# ---------------------------------------------- fourth, look in rest of course |
if ($symbparm && defined($courseid) && |
if ($symbparm && defined($courseid) && |
$courseid eq $env{'request.course.id'}) { |
$courseid eq $env{'request.course.id'}) { |
my $coursereply=&resdata($env{'course.'.$courseid.'.num'}, |
my $coursereply=&resdata($env{'course.'.$courseid.'.num'}, |
$env{'course.'.$courseid.'.domain'}, |
$env{'course.'.$courseid.'.domain'}, |
'course', |
'course', |
($courselevelm,$courselevel)); |
([$courselevelm,'map' ], |
if (defined($coursereply)) { return $coursereply; } |
[$courselevel, 'course'])); |
|
if (defined($coursereply)) { return &get_reply($coursereply); } |
} |
} |
# ------------------------------------------------------------------ Cascade up |
# ------------------------------------------------------------------ Cascade up |
unless ($space eq '0') { |
unless ($space eq '0') { |
Line 6642 sub EXT {
|
Line 6673 sub EXT {
|
my $id=pop(@parts); |
my $id=pop(@parts); |
my $part=join('_',@parts); |
my $part=join('_',@parts); |
if ($part eq '') { $part='0'; } |
if ($part eq '') { $part='0'; } |
my $partgeneral=&EXT('resource.'.$part.'.'.$qualifierrest, |
my @partgeneral=&EXT('resource.'.$part.'.'.$qualifierrest, |
$symbparm,$udom,$uname,$section,1); |
$symbparm,$udom,$uname,$section,1); |
if (defined($partgeneral)) { return $partgeneral; } |
if (@partgeneral) { return &get_reply(\@partgeneral); } |
} |
} |
if ($recurse) { return undef; } |
if ($recurse) { return undef; } |
my $pack_def=&packages_tab_default($filename,$varname); |
my $pack_def=&packages_tab_default($filename,$varname); |
if (defined($pack_def)) { return $pack_def; } |
if (defined($pack_def)) { return &get_reply([$pack_def,'resource']); } |
|
|
# ---------------------------------------------------- Any other user namespace |
# ---------------------------------------------------- Any other user namespace |
} elsif ($realm eq 'environment') { |
} elsif ($realm eq 'environment') { |
# ----------------------------------------------------------------- environment |
# ----------------------------------------------------------------- environment |
Line 6677 sub EXT {
|
Line 6707 sub EXT {
|
return ''; |
return ''; |
} |
} |
|
|
|
sub get_reply { |
|
my ($reply_value) = @_; |
|
if (wantarray) { |
|
return @$reply_value; |
|
} |
|
return $reply_value->[0]; |
|
} |
|
|
sub check_group_parms { |
sub check_group_parms { |
my ($courseid,$groups,$symbparm,$mapparm,$what) = @_; |
my ($courseid,$groups,$symbparm,$mapparm,$what) = @_; |
my @groupitems = (); |
my @groupitems = (); |
my $resultitem; |
my $resultitem; |
my @levels = ($symbparm,$mapparm,$what); |
my @levels = ([$symbparm,'resource'],[$mapparm,'map'],[$what,'course']); |
foreach my $group (@{$groups}) { |
foreach my $group (@{$groups}) { |
foreach my $level (@levels) { |
foreach my $level (@levels) { |
my $item = $courseid.'.['.$group.'].'.$level; |
my $item = $courseid.'.['.$group.'].'.$level->[0]; |
push(@groupitems,$item); |
push(@groupitems,[$item,$level->[1]]); |
} |
} |
} |
} |
my $coursereply = &resdata($env{'course.'.$courseid.'.num'}, |
my $coursereply = &resdata($env{'course.'.$courseid.'.num'}, |
Line 6778 sub metadata {
|
Line 6816 sub metadata {
|
if (($uri eq '') || |
if (($uri eq '') || |
(($uri =~ m|^/*adm/|) && |
(($uri =~ m|^/*adm/|) && |
($uri !~ m|^adm/includes|) && ($uri !~ m|/bulletinboard$|)) || |
($uri !~ m|^adm/includes|) && ($uri !~ m|/bulletinboard$|)) || |
($uri =~ m|/$|) || ($uri =~ m|/.meta$|) || ($uri =~ /^~/) || |
($uri =~ m|/$|) || ($uri =~ m|/.meta$|) ) { |
($uri =~ m|home/$match_username/public_html/|)) { |
return undef; |
|
} |
|
if (($uri =~ /^~/ || $uri =~ m{home/$match_username/public_html/}) |
|
&& &Apache::lonxml::get_state('target') =~ /^(|meta)$/) { |
return undef; |
return undef; |
} |
} |
my $filename=$uri; |
my $filename=$uri; |
Line 6800 sub metadata {
|
Line 6841 sub metadata {
|
# if (! exists($metacache{$uri})) { |
# if (! exists($metacache{$uri})) { |
# $metacache{$uri}={}; |
# $metacache{$uri}={}; |
# } |
# } |
|
my $cachetime = 60*60; |
if ($liburi) { |
if ($liburi) { |
$liburi=&declutter($liburi); |
$liburi=&declutter($liburi); |
$filename=$liburi; |
$filename=$liburi; |
Line 6810 sub metadata {
|
Line 6852 sub metadata {
|
my %metathesekeys=(); |
my %metathesekeys=(); |
unless ($filename=~/\.meta$/) { $filename.='.meta'; } |
unless ($filename=~/\.meta$/) { $filename.='.meta'; } |
my $metastring; |
my $metastring; |
if ($uri !~ m -^(editupload)/-) { |
if ($uri =~ /^~/ || $uri =~ m{home/$match_username/public_html/}) { |
|
$metastring = |
|
&Apache::lonnet::ssi_body(&hreflocation('','/'.$uri), |
|
('grade_target' => 'meta')); |
|
$cachetime = 1; # only want this cached in the child not long term |
|
} elsif ($uri !~ m -^(editupload)/-) { |
my $file=&filelocation('',&clutter($filename)); |
my $file=&filelocation('',&clutter($filename)); |
#push(@{$metaentry{$uri.'.file'}},$file); |
#push(@{$metaentry{$uri.'.file'}},$file); |
$metastring=&getfile($file); |
$metastring=&getfile($file); |
Line 6977 sub metadata {
|
Line 7024 sub metadata {
|
$metaentry{':keys'} = join(',',keys(%metathesekeys)); |
$metaentry{':keys'} = join(',',keys(%metathesekeys)); |
&metadata_generate_part0(\%metathesekeys,\%metaentry,$uri); |
&metadata_generate_part0(\%metathesekeys,\%metaentry,$uri); |
$metaentry{':allpossiblekeys'}=join(',',keys %metathesekeys); |
$metaentry{':allpossiblekeys'}=join(',',keys %metathesekeys); |
&do_cache_new('meta',$uri,\%metaentry,60*60); |
&do_cache_new('meta',$uri,\%metaentry,$cachetime); |
# this is the end of "was not already recently cached |
# this is the end of "was not already recently cached |
} |
} |
return $metaentry{':'.$what}; |
return $metaentry{':'.$what}; |