version 1.828, 2007/01/18 21:02:06
|
version 1.834, 2007/02/18 01:52:20
|
Line 367 sub transfer_profile_to_env {
|
Line 367 sub transfer_profile_to_env {
|
} |
} |
} |
} |
|
|
|
sub timed_flock { |
|
my ($file,$lock_type) = @_; |
|
my $failed=0; |
|
eval { |
|
local $SIG{__DIE__}='DEFAULT'; |
|
local $SIG{ALRM}=sub { |
|
$failed=1; |
|
die("failed lock"); |
|
}; |
|
alarm(13); |
|
flock($file,$lock_type); |
|
alarm(0); |
|
}; |
|
if ($failed) { |
|
return undef; |
|
} else { |
|
return 1; |
|
} |
|
} |
|
|
# ---------------------------------------------------------- Append Environment |
# ---------------------------------------------------------- Append Environment |
|
|
sub appenv { |
sub appenv { |
Line 381 sub appenv {
|
Line 401 sub appenv {
|
$env{$key}=$newenv{$key}; |
$env{$key}=$newenv{$key}; |
} |
} |
} |
} |
if (tie(my %disk_env,'GDBM_File',$env{'user.environment'},&GDBM_WRITER(), |
open(my $env_file,$env{'user.environment'}); |
0640)) { |
if (&timed_flock($env_file,LOCK_EX) |
|
&& |
|
tie(my %disk_env,'GDBM_File',$env{'user.environment'}, |
|
(&GDBM_WRITER()|&GDBM_NOLOCK()),0640)) { |
while (my ($key,$value) = each(%newenv)) { |
while (my ($key,$value) = each(%newenv)) { |
$disk_env{$key} = $value; |
$disk_env{$key} = $value; |
} |
} |
Line 399 sub delenv {
|
Line 422 sub delenv {
|
"Attempt to delete from environment ".$delthis); |
"Attempt to delete from environment ".$delthis); |
return 'error'; |
return 'error'; |
} |
} |
if (tie(my %disk_env,'GDBM_File',$env{'user.environment'},&GDBM_WRITER(), |
open(my $env_file,$env{'user.environment'}); |
0640)) { |
if (&timed_flock($env_file,LOCK_EX) |
|
&& |
|
tie(my %disk_env,'GDBM_File',$env{'user.environment'}, |
|
(&GDBM_WRITER()|&GDBM_NOLOCK()),0640)) { |
foreach my $key (keys(%disk_env)) { |
foreach my $key (keys(%disk_env)) { |
if ($key=~/^$delthis/) { |
if ($key=~/^$delthis/) { |
delete($env{$key}); |
delete($env{$key}); |
Line 1425 sub store_edited_file {
|
Line 1451 sub store_edited_file {
|
} |
} |
|
|
sub clean_filename { |
sub clean_filename { |
my ($fname)=@_; |
my ($fname,$args)=@_; |
# Replace Windows backslashes by forward slashes |
# Replace Windows backslashes by forward slashes |
$fname=~s/\\/\//g; |
$fname=~s/\\/\//g; |
# Get rid of everything but the actual filename |
if (!$args->{'keep_path'}) { |
$fname=~s/^.*\/([^\/]+)$/$1/; |
# Get rid of everything but the actual filename |
|
$fname=~s/^.*\/([^\/]+)$/$1/; |
|
} |
# Replace spaces by underscores |
# Replace spaces by underscores |
$fname=~s/\s+/\_/g; |
$fname=~s/\s+/\_/g; |
# Replace all other weird characters by nothing |
# Replace all other weird characters by nothing |
$fname=~s/[^\w\.\-]//g; |
$fname=~s{[^/\w\.\-]}{}g; |
# Replace all .\d. sequences with _\d. so they no longer look like version |
# Replace all .\d. sequences with _\d. so they no longer look like version |
# numbers |
# numbers |
$fname=~s/\.(\d+)(?=\.)/_$1/g; |
$fname=~s/\.(\d+)(?=\.)/_$1/g; |
Line 1999 sub get_course_adv_roles {
|
Line 2027 sub get_course_adv_roles {
|
} |
} |
|
|
sub get_my_roles { |
sub get_my_roles { |
my ($uname,$udom)=@_; |
my ($uname,$udom,$types,$roles,$roledoms)=@_; |
unless (defined($uname)) { $uname=$env{'user.name'}; } |
unless (defined($uname)) { $uname=$env{'user.name'}; } |
unless (defined($udom)) { $udom=$env{'user.domain'}; } |
unless (defined($udom)) { $udom=$env{'user.domain'}; } |
my %dumphash= |
my %dumphash= |
Line 2009 sub get_my_roles {
|
Line 2037 sub get_my_roles {
|
foreach my $entry (keys(%dumphash)) { |
foreach my $entry (keys(%dumphash)) { |
my ($tend,$tstart)=split(/\:/,$dumphash{$entry}); |
my ($tend,$tstart)=split(/\:/,$dumphash{$entry}); |
if (($tstart) && ($tstart<0)) { next; } |
if (($tstart) && ($tstart<0)) { next; } |
if (($tend) && ($tend<$now)) { next; } |
my $status = 'active'; |
if (($tstart) && ($now<$tstart)) { next; } |
if (($tend) && ($tend<$now)) { |
|
$status = 'previous'; |
|
} |
|
if (($tstart) && ($now<$tstart)) { |
|
$status = 'future'; |
|
} |
|
if (ref($types) eq 'ARRAY') { |
|
if (!grep(/^\Q$status\E$/,@{$types})) { |
|
next; |
|
} |
|
} else { |
|
if ($status ne 'active') { |
|
next; |
|
} |
|
} |
my ($role,$username,$domain,$section)=split(/\:/,$entry); |
my ($role,$username,$domain,$section)=split(/\:/,$entry); |
|
if (ref($roledoms) eq 'ARRAY') { |
|
if (!grep(/^\Q$domain\E$/,@{$roledoms})) { |
|
next; |
|
} |
|
} |
|
if (ref($roles) eq 'ARRAY') { |
|
if (!grep(/^\Q$role\E$/,@{$roles})) { |
|
next; |
|
} |
|
} |
$returnhash{$username.':'.$domain.':'.$role}=$tstart.':'.$tend; |
$returnhash{$username.':'.$domain.':'.$role}=$tstart.':'.$tend; |
} |
} |
return %returnhash; |
return %returnhash; |
} |
} |
|
|
Line 5082 sub is_locked {
|
Line 5134 sub is_locked {
|
|
|
sub declutter_portfile { |
sub declutter_portfile { |
my ($file) = @_; |
my ($file) = @_; |
&logthis("got $file"); |
$file =~ s{^(/portfolio/|portfolio/)}{/}; |
$file =~ s-^(/portfolio/|portfolio/)-/-; |
|
&logthis("ret $file"); |
|
return $file; |
return $file; |
} |
} |
|
|
Line 7202 sub repcopy_userfile {
|
Line 7252 sub repcopy_userfile {
|
if (-e $transferfile) { return 'ok'; } |
if (-e $transferfile) { return 'ok'; } |
my $request; |
my $request; |
$uri=~s/^\///; |
$uri=~s/^\///; |
if (&homeserver($cnum,$cdom) eq $perlvar{'lonHostID'}) { |
$request=new HTTP::Request('GET','http://'.$hostname{&homeserver($cnum,$cdom)}.'/raw/'.$uri); |
# if this is my own server, get it via tokenwrapper |
|
$request=new HTTP::Request('GET',&tokenwrapper('/'.$uri)); |
|
} else { |
|
# get it from another server, raw request |
|
$request=new HTTP::Request('GET','http://'.$hostname{&homeserver($cnum,$cdom)}.'/raw/'.$uri); |
|
} |
|
my $response=$ua->request($request,$transferfile); |
my $response=$ua->request($request,$transferfile); |
# did it work? |
# did it work? |
if ($response->is_error()) { |
if ($response->is_error()) { |
Line 7925 and course level
|
Line 7969 and course level
|
plaintext($short) : return value in %prp hash (rolesplain.tab); plain text |
plaintext($short) : return value in %prp hash (rolesplain.tab); plain text |
explanation of a user role term |
explanation of a user role term |
|
|
|
=item * |
|
|
|
get_my_roles($uname,$udom,$types,$roles,$roledoms) : All arguments are |
|
optional. Returns a hash of a user's roles, with keys set to |
|
colon-sparated $uname,$udom,and $role, and value set to |
|
colon-separated start and end times for the role. If no username and |
|
domain are specified, will default to current user/domain. Types, |
|
roles, and roledoms are references to arrays, of role statuses |
|
(active, future or previous), roles (e.g., cc,in, st etc.) and domains |
|
of the roles which can be used to restrict the list if roles |
|
reported. If no array ref is provided for types, will default to |
|
return only active roles. |
|
|
=back |
=back |
|
|
=head2 User Modification |
=head2 User Modification |