version 1.707, 2006/02/07 16:21:05
|
version 1.714, 2006/03/03 23:22:18
|
Line 948 sub studentphoto {
|
Line 948 sub studentphoto {
|
my ($udom,$unam,$ext) = @_; |
my ($udom,$unam,$ext) = @_; |
my $home=&Apache::lonnet::homeserver($unam,$udom); |
my $home=&Apache::lonnet::homeserver($unam,$udom); |
if (defined($env{'request.course.id'})) { |
if (defined($env{'request.course.id'})) { |
if ($env{'course.'.$env{'request.course.id'}.'.internal.showphotos'}) { |
if ($env{'course.'.$env{'request.course.id'}.'.internal.showphoto'}) { |
if ($udom eq $env{'course.'.$env{'request.course.id'}.'.domain'}) { |
if ($udom eq $env{'course.'.$env{'request.course.id'}.'.domain'}) { |
return(&retrievestudentphoto($udom,$unam,$ext)); |
return(&retrievestudentphoto($udom,$unam,$ext)); |
} else { |
} else { |
Line 1145 sub ssi {
|
Line 1145 sub ssi {
|
my $ua=new LWP::UserAgent; |
my $ua=new LWP::UserAgent; |
|
|
my $request; |
my $request; |
|
|
|
$form{'no_update_last_known'}=1; |
|
|
if (%form) { |
if (%form) { |
$request=new HTTP::Request('POST',"http://".$ENV{'HTTP_HOST'}.$fn); |
$request=new HTTP::Request('POST',"http://".$ENV{'HTTP_HOST'}.$fn); |
$request->content(join('&',map { &escape($_).'='.&escape($form{$_}) } keys %form)); |
$request->content(join('&',map { &escape($_).'='.&escape($form{$_}) } keys %form)); |
Line 1370 sub userfileupload {
|
Line 1372 sub userfileupload {
|
} else { |
} else { |
my $docuname=$env{'user.name'}; |
my $docuname=$env{'user.name'}; |
my $docudom=$env{'user.domain'}; |
my $docudom=$env{'user.domain'}; |
|
if (exists($env{'form.group'})) { |
|
$docuname=$env{'course.'.$env{'request.course.id'}.'.num'}; |
|
$docudom=$env{'course.'.$env{'request.course.id'}.'.domain'}; |
|
} |
return &finishuserfileupload($docuname,$docudom,$formname, |
return &finishuserfileupload($docuname,$docudom,$formname, |
$fname,$parser,$allfiles,$codebase); |
$fname,$parser,$allfiles,$codebase); |
} |
} |
Line 3131 sub allowed {
|
Line 3137 sub allowed {
|
} |
} |
|
|
# Free bre access to user's own portfolio contents |
# Free bre access to user's own portfolio contents |
my ($space,$domain,$name,$dir)=split('/',$uri); |
my ($space,$domain,$name,@dir)=split('/',$uri); |
if (($space=~/^(uploaded|editupload)$/) && ($env{'user.name'} eq $name) && |
if (($space=~/^(uploaded|editupload)$/) && ($env{'user.name'} eq $name) && |
($env{'user.domain'} eq $domain) && ('portfolio' eq $dir)) { |
($env{'user.domain'} eq $domain) && ('portfolio' eq $dir[0])) { |
return 'F'; |
return 'F'; |
} |
} |
|
|
|
# bre access to group if user has rgf priv for this group and course. |
|
if (($space=~/^(uploaded|editupload)$/) && ($dir[0] eq 'groups') |
|
&& ($dir[2] eq 'portfolio') && ($priv eq 'bre')) { |
|
if (exists($env{'request.course.id'})) { |
|
my $cdom = $env{'course.'.$env{'request.course.id'}.'.domain'}; |
|
my $cnum = $env{'course.'.$env{'request.course.id'}.'.num'}; |
|
if (($domain eq $cdom) && ($name eq $cnum)) { |
|
my $courseprivid=$env{'request.course.id'}; |
|
$courseprivid=~s/\_/\//; |
|
if ($env{'user.priv.'.$env{'request.role'}.'./'.$courseprivid |
|
.'/'.$dir[1]} =~/rgf\&([^\:]*)/) { |
|
return $1; |
|
} |
|
} |
|
} |
|
} |
|
|
# Free bre to public access |
# Free bre to public access |
|
|
if ($priv eq 'bre') { |
if ($priv eq 'bre') { |
Line 3450 sub allowed {
|
Line 3473 sub allowed {
|
return 'F'; |
return 'F'; |
} |
} |
|
|
|
sub split_uri_for_cond { |
|
my $uri=&deversion(&declutter(shift)); |
|
my @uriparts=split(/\//,$uri); |
|
my $filename=pop(@uriparts); |
|
my $pathname=join('/',@uriparts); |
|
return ($pathname,$filename); |
|
} |
# --------------------------------------------------- Is a resource on the map? |
# --------------------------------------------------- Is a resource on the map? |
|
|
sub is_on_map { |
sub is_on_map { |
my $uri=&deversion(&declutter(shift)); |
my ($pathname,$filename) = &split_uri_for_cond(shift); |
my @uriparts=split(/\//,$uri); |
|
my $filename=$uriparts[$#uriparts]; |
|
my $pathname=$uri; |
|
$pathname=~s|/\Q$filename\E$||; |
|
$pathname=~s/^adm\/wrapper\///; |
|
$pathname=~s/^adm\/coursedocs\/showdoc\///; |
|
#Trying to find the conditional for the file |
#Trying to find the conditional for the file |
my $match=($env{'acc.res.'.$env{'request.course.id'}.'.'.$pathname}=~ |
my $match=($env{'acc.res.'.$env{'request.course.id'}.'.'.$pathname}=~ |
/\&\Q$filename\E\:([\d\|]+)\&/); |
/\&\Q$filename\E\:([\d\|]+)\&/); |
Line 3737 sub auto_photo_permission {
|
Line 3761 sub auto_photo_permission {
|
my $homeserver = &homeserver($cnum,$cdom); |
my $homeserver = &homeserver($cnum,$cdom); |
my ($outcome,$perm_reqd,$conditions) = |
my ($outcome,$perm_reqd,$conditions) = |
split(/:/,&unescape(&reply('autophotopermission:'.$cdom,$homeserver)),3); |
split(/:/,&unescape(&reply('autophotopermission:'.$cdom,$homeserver)),3); |
|
if ($outcome =~ /^(con_lost|unknown_cmd|no_such_host)$/) { |
|
return (undef,undef); |
|
} |
return ($outcome,$perm_reqd,$conditions); |
return ($outcome,$perm_reqd,$conditions); |
} |
} |
|
|
Line 3747 sub auto_checkphotos {
|
Line 3774 sub auto_checkphotos {
|
my $outcome = &unescape(&reply('autophotocheck:'.&escape($udom).':'. |
my $outcome = &unescape(&reply('autophotocheck:'.&escape($udom).':'. |
&escape($uname).':'.&escape($pid), |
&escape($uname).':'.&escape($pid), |
$homeserver)); |
$homeserver)); |
|
if ($outcome =~ /^(con_lost|unknown_cmd|no_such_host)$/) { |
|
return (undef,undef); |
|
} |
if ($outcome) { |
if ($outcome) { |
($result,$resulttype) = split(/:/,$outcome); |
($result,$resulttype) = split(/:/,$outcome); |
} |
} |
Line 3759 sub auto_photochoice {
|
Line 3789 sub auto_photochoice {
|
my ($update,$comment) = split(/:/,&unescape(&reply('autophotochoice:'. |
my ($update,$comment) = split(/:/,&unescape(&reply('autophotochoice:'. |
&escape($cdom), |
&escape($cdom), |
$homeserver))); |
$homeserver))); |
|
if ($update =~ /^(con_lost|unknown_cmd|no_such_host)$/) { |
|
return (undef,undef); |
|
} |
return ($update,$comment); |
return ($update,$comment); |
} |
} |
|
|
Line 4655 sub GetFileTimestamp {
|
Line 4688 sub GetFileTimestamp {
|
} |
} |
} |
} |
|
|
|
sub stat_file { |
|
my ($uri) = @_; |
|
$uri = &clutter($uri); |
|
my ($udom,$uname,$file,$dir); |
|
if ($uri =~ m-^/(uploaded|editupload)/-) { |
|
($udom,$uname,$file) = |
|
($uri =~ m-/(?:uploaded|editupload)/?([^/]*)/?([^/]*)/?(.*)-); |
|
$file = 'userfiles/'.$file; |
|
$dir = &Apache::loncommon::propath($udom,$uname); |
|
} |
|
if ($uri =~ m-^/res/-) { |
|
($udom,$uname) = |
|
($uri =~ m-/(?:res)/?([^/]*)/?([^/]*)/-); |
|
$file = $uri; |
|
} |
|
|
|
if (!$udom || !$uname || !$file) { |
|
# unable to handle the uri |
|
return (); |
|
} |
|
|
|
my ($result) = &dirlist($file,$udom,$uname,$dir); |
|
my @stats = split('&', $result); |
|
if($stats[0] ne 'empty' && $stats[0] ne 'no_such_dir') { |
|
shift(@stats); #filename is first |
|
return @stats; |
|
} |
|
return (); |
|
} |
|
|
# -------------------------------------------------------- Value of a Condition |
# -------------------------------------------------------- Value of a Condition |
|
|
|
# gets the value of a specific preevaluated condition |
|
# stored in the string $env{user.state.<cid>} |
|
# or looks up a condition reference in the bighash and if if hasn't |
|
# already been evaluated recurses into docondval to get the value of |
|
# the condition, then memoizing it to |
|
# $env{user.state.<cid>.<condition>} |
sub directcondval { |
sub directcondval { |
my $number=shift; |
my $number=shift; |
if (!defined($env{'user.state.'.$env{'request.course.id'}})) { |
if (!defined($env{'user.state.'.$env{'request.course.id'}})) { |
&Apache::lonuserstate::evalstate(); |
&Apache::lonuserstate::evalstate(); |
} |
} |
|
if (exists($env{'user.state.'.$env{'request.course.id'}.".$number"})) { |
|
return $env{'user.state.'.$env{'request.course.id'}.".$number"}; |
|
} elsif ($number =~ /^_/) { |
|
my $sub_condition; |
|
if (tie(my %bighash,'GDBM_File',$env{'request.course.fn'}.'.db', |
|
&GDBM_READER(),0640)) { |
|
$sub_condition=$bighash{'conditions'.$number}; |
|
untie(%bighash); |
|
} |
|
my $value = &docondval($sub_condition); |
|
&appenv('user.state.'.$env{'request.course.id'}.".$number" => $value); |
|
return $value; |
|
} |
if ($env{'user.state.'.$env{'request.course.id'}}) { |
if ($env{'user.state.'.$env{'request.course.id'}}) { |
return substr($env{'user.state.'.$env{'request.course.id'}},$number,1); |
return substr($env{'user.state.'.$env{'request.course.id'}},$number,1); |
} else { |
} else { |
Line 4669 sub directcondval {
|
Line 4751 sub directcondval {
|
} |
} |
} |
} |
|
|
|
# get the collection of conditions for this resource |
sub condval { |
sub condval { |
my $condidx=shift; |
my $condidx=shift; |
my $result=0; |
|
my $allpathcond=''; |
my $allpathcond=''; |
foreach (split(/\|/,$condidx)) { |
foreach my $cond (split(/\|/,$condidx)) { |
if (defined($env{'acc.cond.'.$env{'request.course.id'}.'.'.$_})) { |
if (defined($env{'acc.cond.'.$env{'request.course.id'}.'.'.$cond})) { |
$allpathcond.= |
$allpathcond.= |
'('.$env{'acc.cond.'.$env{'request.course.id'}.'.'.$_}.')|'; |
'('.$env{'acc.cond.'.$env{'request.course.id'}.'.'.$cond}.')|'; |
} |
} |
} |
} |
$allpathcond=~s/\|$//; |
$allpathcond=~s/\|$//; |
if ($env{'request.course.id'}) { |
return &docondval($allpathcond); |
if ($allpathcond) { |
} |
my $operand='|'; |
|
my @stack; |
#evaluates an expression of conditions |
foreach ($allpathcond=~/(\d+|\(|\)|\&|\|)/g) { |
sub docondval { |
if ($_ eq '(') { |
my ($allpathcond) = @_; |
push @stack,($operand,$result) |
my $result=0; |
} elsif ($_ eq ')') { |
if ($env{'request.course.id'} |
my $before=pop @stack; |
&& defined($allpathcond)) { |
if (pop @stack eq '&') { |
my $operand='|'; |
$result=$result>$before?$before:$result; |
my @stack; |
} else { |
foreach my $chunk ($allpathcond=~/(\d+|_\d+\.\d+|\(|\)|\&|\|)/g) { |
$result=$result>$before?$result:$before; |
if ($chunk eq '(') { |
} |
push @stack,($operand,$result); |
} elsif (($_ eq '&') || ($_ eq '|')) { |
} elsif ($chunk eq ')') { |
$operand=$_; |
my $before=pop @stack; |
} else { |
if (pop @stack eq '&') { |
my $new=directcondval($_); |
$result=$result>$before?$before:$result; |
if ($operand eq '&') { |
} else { |
$result=$result>$new?$new:$result; |
$result=$result>$before?$result:$before; |
} else { |
} |
$result=$result>$new?$result:$new; |
} elsif (($chunk eq '&') || ($chunk eq '|')) { |
} |
$operand=$chunk; |
} |
} else { |
} |
my $new=directcondval($chunk); |
} |
if ($operand eq '&') { |
|
$result=$result>$new?$new:$result; |
|
} else { |
|
$result=$result>$new?$result:$new; |
|
} |
|
} |
|
} |
} |
} |
return $result; |
return $result; |
} |
} |
Line 5461 sub symblist {
|
Line 5549 sub symblist {
|
if (($env{'request.course.fn'}) && (%newhash)) { |
if (($env{'request.course.fn'}) && (%newhash)) { |
if (tie(%hash,'GDBM_File',$env{'request.course.fn'}.'_symb.db', |
if (tie(%hash,'GDBM_File',$env{'request.course.fn'}.'_symb.db', |
&GDBM_WRCREAT(),0640)) { |
&GDBM_WRCREAT(),0640)) { |
foreach (keys %newhash) { |
foreach my $url (keys %newhash) { |
$hash{declutter($_)}=&encode_symb($mapname,$newhash{$_}->[1], |
next if ($url eq 'last_known' |
$newhash{$_}->[0]); |
&& $env{'form.no_update_last_known'}); |
|
$hash{declutter($url)}=&encode_symb($mapname, |
|
$newhash{$url}->[1], |
|
$newhash{$url}->[0]); |
} |
} |
if (untie(%hash)) { |
if (untie(%hash)) { |
return 'ok'; |
return 'ok'; |
Line 7324 getfile($file,$caller) : two cases - req
|
Line 7415 getfile($file,$caller) : two cases - req
|
- returns the entire contents of a file or -1; |
- returns the entire contents of a file or -1; |
it properly subscribes to and replicates the file if neccessary. |
it properly subscribes to and replicates the file if neccessary. |
|
|
|
|
|
=item * |
|
|
|
stat_file($url) : $url is expected to be a /res/ or /uploaded/ style file |
|
reference |
|
|
|
returns either a stat() list of data about the file or an empty list |
|
if the file doesn't exist or couldn't find out about it (connection |
|
problems or user unknown) |
|
|
=item * |
=item * |
|
|
filelocation($dir,$file) : returns file system location of a file |
filelocation($dir,$file) : returns file system location of a file |