version 1.906, 2007/08/10 23:02:36
|
version 1.923, 2007/11/10 03:51:10
|
Line 320 sub convert_and_load_session_env {
|
Line 320 sub convert_and_load_session_env {
|
my ($lonidsdir,$handle)=@_; |
my ($lonidsdir,$handle)=@_; |
my @profile; |
my @profile; |
{ |
{ |
open(my $idf,"$lonidsdir/$handle.id"); |
my $opened = open(my $idf,'+<',"$lonidsdir/$handle.id"); |
|
if (!$opened) { |
|
return 0; |
|
} |
flock($idf,LOCK_SH); |
flock($idf,LOCK_SH); |
@profile=<$idf>; |
@profile=<$idf>; |
close($idf); |
close($idf); |
Line 359 sub transfer_profile_to_env {
|
Line 362 sub transfer_profile_to_env {
|
|
|
my $convert; |
my $convert; |
{ |
{ |
open(my $idf,"$lonidsdir/$handle.id"); |
my $opened = open(my $idf,'+<',"$lonidsdir/$handle.id"); |
|
if (!$opened) { |
|
return; |
|
} |
flock($idf,LOCK_SH); |
flock($idf,LOCK_SH); |
if (tie(my %disk_env,'GDBM_File',"$lonidsdir/$handle.id", |
if (tie(my %disk_env,'GDBM_File',"$lonidsdir/$handle.id", |
&GDBM_READER(),0640)) { |
&GDBM_READER(),0640)) { |
Line 391 sub transfer_profile_to_env {
|
Line 397 sub transfer_profile_to_env {
|
} |
} |
} |
} |
|
|
|
# ---------------------------------------------------- Check for valid session |
|
sub check_for_valid_session { |
|
my ($r) = @_; |
|
my %cookies=CGI::Cookie->parse($r->header_in('Cookie')); |
|
my $lonid=$cookies{'lonID'}; |
|
return undef if (!$lonid); |
|
|
|
my $handle=&LONCAPA::clean_handle($lonid->value); |
|
my $lonidsdir=$r->dir_config('lonIDsDir'); |
|
return undef if (!-e "$lonidsdir/$handle.id"); |
|
|
|
my $opened = open(my $idf,'+<',"$lonidsdir/$handle.id"); |
|
return undef if (!$opened); |
|
|
|
flock($idf,LOCK_SH); |
|
my %disk_env; |
|
if (!tie(%disk_env,'GDBM_File',"$lonidsdir/$handle.id", |
|
&GDBM_READER(),0640)) { |
|
return undef; |
|
} |
|
|
|
if (!defined($disk_env{'user.name'}) |
|
|| !defined($disk_env{'user.domain'})) { |
|
return undef; |
|
} |
|
return $handle; |
|
} |
|
|
sub timed_flock { |
sub timed_flock { |
my ($file,$lock_type) = @_; |
my ($file,$lock_type) = @_; |
my $failed=0; |
my $failed=0; |
Line 425 sub appenv {
|
Line 459 sub appenv {
|
$env{$key}=$newenv{$key}; |
$env{$key}=$newenv{$key}; |
} |
} |
} |
} |
open(my $env_file,$env{'user.environment'}); |
my $opened = open(my $env_file,'+<',$env{'user.environment'}); |
if (&timed_flock($env_file,LOCK_EX) |
if ($opened |
|
&& &timed_flock($env_file,LOCK_EX) |
&& |
&& |
tie(my %disk_env,'GDBM_File',$env{'user.environment'}, |
tie(my %disk_env,'GDBM_File',$env{'user.environment'}, |
(&GDBM_WRITER()|&GDBM_NOLOCK()),0640)) { |
(&GDBM_WRITER()|&GDBM_NOLOCK()),0640)) { |
Line 446 sub delenv {
|
Line 481 sub delenv {
|
"Attempt to delete from environment ".$delthis); |
"Attempt to delete from environment ".$delthis); |
return 'error'; |
return 'error'; |
} |
} |
open(my $env_file,$env{'user.environment'}); |
my $opened = open(my $env_file,'+<',$env{'user.environment'}); |
if (&timed_flock($env_file,LOCK_EX) |
if ($opened |
|
&& &timed_flock($env_file,LOCK_EX) |
&& |
&& |
tie(my %disk_env,'GDBM_File',$env{'user.environment'}, |
tie(my %disk_env,'GDBM_File',$env{'user.environment'}, |
(&GDBM_WRITER()|&GDBM_NOLOCK()),0640)) { |
(&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}); |
delete($disk_env{$key}); |
delete($disk_env{$key}); |
} |
} |
} |
} |
untie(%disk_env); |
untie(%disk_env); |
} |
} |
Line 582 sub compare_server_load {
|
Line 618 sub compare_server_load {
|
} |
} |
return ($spare_server,$lowest_load); |
return ($spare_server,$lowest_load); |
} |
} |
|
|
|
# --------------------------- ask offload servers if user already has a session |
|
sub find_existing_session { |
|
my ($udom,$uname) = @_; |
|
foreach my $try_server (@{ $spareid{'primary'} }, |
|
@{ $spareid{'default'} }) { |
|
return $try_server if (&has_user_session($try_server, $udom, $uname)); |
|
} |
|
return; |
|
} |
|
|
|
# -------------------------------- ask if server already has a session for user |
|
sub has_user_session { |
|
my ($lonid,$udom,$uname) = @_; |
|
my $result = &reply(join(':','userhassession', |
|
map {&escape($_)} ($udom,$uname)),$lonid); |
|
return 1 if ($result eq 'ok'); |
|
|
|
return 0; |
|
} |
|
|
# --------------------------------------------- Try to change a user's password |
# --------------------------------------------- Try to change a user's password |
|
|
sub changepass { |
sub changepass { |
Line 861 sub inst_directory_query {
|
Line 918 sub inst_directory_query {
|
my $udom = $srch->{'srchdomain'}; |
my $udom = $srch->{'srchdomain'}; |
my %results; |
my %results; |
my $homeserver = &domain($udom,'primary'); |
my $homeserver = &domain($udom,'primary'); |
|
my $outcome; |
if ($homeserver ne '') { |
if ($homeserver ne '') { |
my $queryid=&reply("querysend:instdirsearch:". |
my $queryid=&reply("querysend:instdirsearch:". |
&escape($srch->{'srchby'}).':'. |
&escape($srch->{'srchby'}).':'. |
Line 880 sub inst_directory_query {
|
Line 938 sub inst_directory_query {
|
} |
} |
|
|
if (!&error($response) && $response ne 'refused') { |
if (!&error($response) && $response ne 'refused') { |
my @matches = split(/\n/,$response); |
if ($response eq 'unavailable') { |
foreach my $match (@matches) { |
$outcome = $response; |
my ($key,$value) = split(/=/,$match); |
} else { |
$results{&unescape($key).':'.$udom} = &thaw_unescape($value); |
$outcome = 'ok'; |
|
my @matches = split(/\n/,$response); |
|
foreach my $match (@matches) { |
|
my ($key,$value) = split(/=/,$match); |
|
$results{&unescape($key).':'.$udom} = &thaw_unescape($value); |
|
} |
} |
} |
} |
} |
} |
} |
return %results; |
return ($outcome,%results); |
} |
} |
|
|
sub usersearch { |
sub usersearch { |
Line 900 sub usersearch {
|
Line 963 sub usersearch {
|
if (&host_domain($tryserver) eq $dom) { |
if (&host_domain($tryserver) eq $dom) { |
my $host=&hostname($tryserver); |
my $host=&hostname($tryserver); |
my $queryid= |
my $queryid= |
&reply("querysend:".&escape($query).':'.&escape($dom).':'. |
&reply("querysend:".&escape($query).':'. |
&escape($srch->{'srchby'}).'%%'. |
&escape($srch->{'srchby'}).':'. |
&escape($srch->{'srchtype'}).':'. |
&escape($srch->{'srchtype'}).':'. |
&escape($srch->{'srchterm'}),$tryserver); |
&escape($srch->{'srchterm'}),$tryserver); |
if ($queryid !~/^\Q$host\E\_/) { |
if ($queryid !~/^\Q$host\E\_/) { |
Line 918 sub usersearch {
|
Line 981 sub usersearch {
|
if ( ($reply =~/^timeout/) || ($reply =~/^error/) ) { |
if ( ($reply =~/^timeout/) || ($reply =~/^error/) ) { |
&logthis('usersrch error: '.$reply.' for '.$dom.' - searching for : '.$srch->{'srchterm'}.' by '.$srch->{'srchby'}.' ('.$srch->{'srchtype'}.') - maxtries: '.$maxtries.' tries: '.$tries); |
&logthis('usersrch error: '.$reply.' for '.$dom.' - searching for : '.$srch->{'srchterm'}.' by '.$srch->{'srchby'}.' ('.$srch->{'srchtype'}.') - maxtries: '.$maxtries.' tries: '.$tries); |
} else { |
} else { |
my @matches = split(/&/,$reply); |
my @matches; |
|
if ($reply =~ /\n/) { |
|
@matches = split(/\n/,$reply); |
|
} else { |
|
@matches = split(/\&/,$reply); |
|
} |
foreach my $match (@matches) { |
foreach my $match (@matches) { |
my @items = split(/:/,$match); |
|
my ($uname,$udom,%userhash); |
my ($uname,$udom,%userhash); |
foreach my $entry (@items) { |
foreach my $entry (split(/:/,$match)) { |
my ($key,$value) = split(/=/,$entry); |
my ($key,$value) = |
$key = &unescape($key); |
map {&unescape($_);} split(/=/,$entry); |
$value = &unescape($value); |
|
$userhash{$key} = $value; |
$userhash{$key} = $value; |
if ($key eq 'username') { |
if ($key eq 'username') { |
$uname = $value; |
$uname = $value; |
} elsif ($key eq 'domain') { |
} elsif ($key eq 'domain') { |
$udom = $value; |
$udom = $value; |
} |
} |
} |
} |
$results{$uname.':'.$udom} = \%userhash; |
$results{$uname.':'.$udom} = \%userhash; |
} |
} |
Line 941 sub usersearch {
|
Line 1007 sub usersearch {
|
return %results; |
return %results; |
} |
} |
|
|
|
sub get_instuser { |
|
my ($udom,$uname,$id) = @_; |
|
my $homeserver = &domain($udom,'primary'); |
|
my ($outcome,%results); |
|
if ($homeserver ne '') { |
|
my $queryid=&reply("querysend:getinstuser:".&escape($uname).':'. |
|
&escape($id).':'.&escape($udom),$homeserver); |
|
my $host=&hostname($homeserver); |
|
if ($queryid !~/^\Q$host\E\_/) { |
|
&logthis('get_instuser invalid queryid: '.$queryid.' for host: '.$homeserver.'in domain '.$udom); |
|
return; |
|
} |
|
my $response = &get_query_reply($queryid); |
|
my $maxtries = 5; |
|
my $tries = 1; |
|
while (($response=~/^timeout/) && ($tries < $maxtries)) { |
|
$response = &get_query_reply($queryid); |
|
$tries ++; |
|
} |
|
if (!&error($response) && $response ne 'refused') { |
|
if ($response eq 'unavailable') { |
|
$outcome = $response; |
|
} else { |
|
$outcome = 'ok'; |
|
my @matches = split(/\n/,$response); |
|
foreach my $match (@matches) { |
|
my ($key,$value) = split(/=/,$match); |
|
$results{&unescape($key)} = &thaw_unescape($value); |
|
} |
|
} |
|
} |
|
} |
|
my %userinfo; |
|
if (ref($results{$uname}) eq 'HASH') { |
|
%userinfo = %{$results{$uname}}; |
|
} |
|
return ($outcome,%userinfo); |
|
} |
|
|
|
sub inst_rulecheck { |
|
my ($udom,$uname,$id,$item,$rules) = @_; |
|
my %returnhash; |
|
if ($udom ne '') { |
|
if (ref($rules) eq 'ARRAY') { |
|
@{$rules} = map {&escape($_);} (@{$rules}); |
|
my $rulestr = join(':',@{$rules}); |
|
my $homeserver=&domain($udom,'primary'); |
|
if (($homeserver ne '') && ($homeserver ne 'no_host')) { |
|
my $response; |
|
if ($item eq 'username') { |
|
$response=&unescape(&reply('instrulecheck:'.&escape($udom). |
|
':'.&escape($uname).':'.$rulestr, |
|
$homeserver)); |
|
} elsif ($item eq 'id') { |
|
$response=&unescape(&reply('instidrulecheck:'.&escape($udom). |
|
':'.&escape($id).':'.$rulestr, |
|
$homeserver)); |
|
} |
|
if ($response ne 'refused') { |
|
my @pairs=split(/\&/,$response); |
|
foreach my $item (@pairs) { |
|
my ($key,$value)=split(/=/,$item,2); |
|
$key = &unescape($key); |
|
next if ($key =~ /^error: 2 /); |
|
$returnhash{$key}=&thaw_unescape($value); |
|
} |
|
} |
|
} |
|
} |
|
} |
|
return %returnhash; |
|
} |
|
|
|
sub inst_userrules { |
|
my ($udom,$check) = @_; |
|
my (%ruleshash,@ruleorder); |
|
if ($udom ne '') { |
|
my $homeserver=&domain($udom,'primary'); |
|
if (($homeserver ne '') && ($homeserver ne 'no_host')) { |
|
my $response; |
|
if ($check eq 'id') { |
|
$response=&reply('instidrules:'.&escape($udom), |
|
$homeserver); |
|
} else { |
|
$response=&reply('instuserrules:'.&escape($udom), |
|
$homeserver); |
|
} |
|
if (($response ne 'refused') && ($response ne 'error') && |
|
($response ne 'unknown_cmd') && |
|
($response ne 'no_such_host')) { |
|
my ($hashitems,$orderitems) = split(/:/,$response); |
|
my @pairs=split(/\&/,$hashitems); |
|
foreach my $item (@pairs) { |
|
my ($key,$value)=split(/=/,$item,2); |
|
$key = &unescape($key); |
|
next if ($key =~ /^error: 2 /); |
|
$ruleshash{$key}=&thaw_unescape($value); |
|
} |
|
my @esc_order = split(/\&/,$orderitems); |
|
foreach my $item (@esc_order) { |
|
push(@ruleorder,&unescape($item)); |
|
} |
|
} |
|
} |
|
} |
|
return (\%ruleshash,\@ruleorder); |
|
} |
|
|
# --------------------------------------------------- Assign a key to a student |
# --------------------------------------------------- Assign a key to a student |
|
|
sub assign_access_key { |
sub assign_access_key { |
Line 1217 sub do_cache_new {
|
Line 1391 sub do_cache_new {
|
$time=600; |
$time=600; |
} |
} |
if ($debug) { &Apache::lonnet::logthis("Setting $id to $value"); } |
if ($debug) { &Apache::lonnet::logthis("Setting $id to $value"); } |
if (!($memcache->set($id,$setvalue,$time))) { |
my $result = $memcache->set($id,$setvalue,$time); |
|
if (! $result) { |
&logthis("caching of id -> $id failed"); |
&logthis("caching of id -> $id failed"); |
|
$memcache->disconnect_all(); |
} |
} |
# need to make a copy of $value |
# need to make a copy of $value |
#&make_room($id,$value,$debug); |
&make_room($id,$value,$debug); |
return $value; |
return $value; |
} |
} |
|
|
sub make_room { |
sub make_room { |
my ($id,$value,$debug)=@_; |
my ($id,$value,$debug)=@_; |
$remembered{$id}=$value; |
|
|
$remembered{$id}= (ref($value)) ? &Storable::dclone($value) |
|
: $value; |
if ($to_remember<0) { return; } |
if ($to_remember<0) { return; } |
$accessed{$id}=[&gettimeofday()]; |
$accessed{$id}=[&gettimeofday()]; |
if (scalar(keys(%remembered)) <= $to_remember) { return; } |
if (scalar(keys(%remembered)) <= $to_remember) { return; } |
Line 2008 sub flushcourselogs {
|
Line 2186 sub flushcourselogs {
|
# times and course titles for all courseids |
# times and course titles for all courseids |
# |
# |
my %courseidbuffer=(); |
my %courseidbuffer=(); |
foreach my $crsid (keys %courselogs) { |
foreach my $crsid (keys(%courselogs)) { |
if (&reply('log:'.$coursedombuf{$crsid}.':'.$coursenumbuf{$crsid}.':'. |
if (&reply('log:'.$coursedombuf{$crsid}.':'.$coursenumbuf{$crsid}.':'. |
&escape($courselogs{$crsid}), |
&escape($courselogs{$crsid}), |
$coursehombuf{$crsid}) eq 'ok') { |
$coursehombuf{$crsid}) eq 'ok') { |
Line 2021 sub flushcourselogs {
|
Line 2199 sub flushcourselogs {
|
delete $courselogs{$crsid}; |
delete $courselogs{$crsid}; |
} |
} |
} |
} |
if ($courseidbuffer{$coursehombuf{$crsid}}) { |
$courseidbuffer{$coursehombuf{$crsid}}{$crsid} = { |
$courseidbuffer{$coursehombuf{$crsid}}.='&'. |
'description' => &escape($coursedescrbuf{$crsid}), |
&escape($crsid).'='.&escape($coursedescrbuf{$crsid}). |
'inst_code' => &escape($courseinstcodebuf{$crsid}), |
':'.&escape($courseinstcodebuf{$crsid}).':'.&escape($courseownerbuf{$crsid}).':'.&escape($coursetypebuf{$crsid}); |
'type' => &escape($coursetypebuf{$crsid}), |
} else { |
'owner' => &escape($courseownerbuf{$crsid}), |
$courseidbuffer{$coursehombuf{$crsid}}= |
}; |
&escape($crsid).'='.&escape($coursedescrbuf{$crsid}). |
|
':'.&escape($courseinstcodebuf{$crsid}).':'.&escape($courseownerbuf{$crsid}).':'.&escape($coursetypebuf{$crsid}); |
|
} |
|
} |
} |
# |
# |
# Write course id database (reverse lookup) to homeserver of courses |
# Write course id database (reverse lookup) to homeserver of courses |
# Is used in pickcourse |
# Is used in pickcourse |
# |
# |
foreach my $crs_home (keys(%courseidbuffer)) { |
foreach my $crs_home (keys(%courseidbuffer)) { |
&courseidput(&host_domain($crs_home),$courseidbuffer{$crs_home}, |
my $response = &courseidput(&host_domain($crs_home), |
$crs_home); |
$courseidbuffer{$crs_home}, |
|
$crs_home,'timeonly'); |
} |
} |
# |
# |
# File accesses |
# File accesses |
Line 2301 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 2343 sub getannounce {
|
Line 2525 sub getannounce {
|
# |
# |
|
|
sub courseidput { |
sub courseidput { |
my ($domain,$what,$coursehome)=@_; |
my ($domain,$storehash,$coursehome,$caller) = @_; |
return &reply('courseidput:'.$domain.':'.$what,$coursehome); |
my $outcome; |
|
if ($caller eq 'timeonly') { |
|
my $cids = ''; |
|
foreach my $item (keys(%$storehash)) { |
|
$cids.=&escape($item).'&'; |
|
} |
|
$cids=~s/\&$//; |
|
$outcome = &reply('courseidputhash:'.$domain.':'.$caller.':'.$cids, |
|
$coursehome); |
|
} else { |
|
my $items = ''; |
|
foreach my $item (keys(%$storehash)) { |
|
$items.= &escape($item).'='. |
|
&freeze_escape($$storehash{$item}).'&'; |
|
} |
|
$items=~s/\&$//; |
|
$outcome = &reply('courseidputhash:'.$domain.':'.$caller.':'.$items, |
|
$coursehome); |
|
} |
|
if ($outcome eq 'unknown_cmd') { |
|
my $what; |
|
foreach my $cid (keys(%$storehash)) { |
|
$what .= &escape($cid).'='; |
|
foreach my $item ('description','inst_code','owner','type') { |
|
$what .= &escape($storehash->{$item}).':'; |
|
} |
|
$what =~ s/\:$/&/; |
|
} |
|
$what =~ s/\&$//; |
|
return &reply('courseidput:'.$domain.':'.$what,$coursehome); |
|
} else { |
|
return $outcome; |
|
} |
} |
} |
|
|
sub courseiddump { |
sub courseiddump { |
my ($domfilter,$descfilter,$sincefilter,$instcodefilter,$ownerfilter,$coursefilter,$hostidflag,$hostidref,$typefilter,$regexp_ok)=@_; |
my ($domfilter,$descfilter,$sincefilter,$instcodefilter,$ownerfilter, |
my %returnhash=(); |
$coursefilter,$hostidflag,$hostidref,$typefilter,$regexp_ok)=@_; |
unless ($domfilter) { $domfilter=''; } |
my $as_hash = 1; |
|
my %returnhash; |
|
if (!$domfilter) { $domfilter=''; } |
my %libserv = &all_library(); |
my %libserv = &all_library(); |
foreach my $tryserver (keys(%libserv)) { |
foreach my $tryserver (keys(%libserv)) { |
if ( ( $hostidflag == 1 |
if ( ( $hostidflag == 1 |
&& grep(/^\Q$tryserver\E$/,@{$hostidref}) ) |
&& grep(/^\Q$tryserver\E$/,@{$hostidref}) ) |
|| (!defined($hostidflag)) ) { |
|| (!defined($hostidflag)) ) { |
|
|
if ($domfilter eq '' |
if (($domfilter eq '') || |
|| (&host_domain($tryserver) eq $domfilter)) { |
(&host_domain($tryserver) eq $domfilter)) { |
foreach my $line ( |
my $rep = |
split(/\&/,&reply('courseiddump:'.&host_domain($tryserver).':'. |
&reply('courseiddump:'.&host_domain($tryserver).':'. |
$sincefilter.':'.&escape($descfilter).':'. |
$sincefilter.':'.&escape($descfilter).':'. |
&escape($instcodefilter).':'.&escape($ownerfilter).':'.&escape($coursefilter).':'.&escape($typefilter).':'.&escape($regexp_ok), |
&escape($instcodefilter).':'.&escape($ownerfilter). |
$tryserver))) { |
':'.&escape($coursefilter).':'.&escape($typefilter). |
my ($key,$value)=split(/\=/,$line,2); |
':'.&escape($regexp_ok).':'.$as_hash,$tryserver); |
if (($key) && ($value)) { |
my @pairs=split(/\&/,$rep); |
$returnhash{&unescape($key)}=$value; |
foreach my $item (@pairs) { |
} |
my ($key,$value)=split(/\=/,$item,2); |
|
$key = &unescape($key); |
|
next if ($key =~ /^error: 2 /); |
|
my $result = &thaw_unescape($value); |
|
if (ref($result) eq 'HASH') { |
|
$returnhash{$key}=$result; |
|
} else { |
|
my @responses = split(/:/,$value); |
|
my @items = ('description','inst_code','owner','type'); |
|
for (my $i=0; $i<@responses; $i++) { |
|
$returnhash{$key}{$items[$i]} = &unescape($responses[$i]); |
|
} |
|
} |
} |
} |
} |
} |
} |
} |
Line 2413 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 4813 sub auto_instcode_defaults {
|
Line 5044 sub auto_instcode_defaults {
|
} |
} |
|
|
sub auto_validate_class_sec { |
sub auto_validate_class_sec { |
my ($cdom,$cnum,$owner,$inst_class) = @_; |
my ($cdom,$cnum,$owners,$inst_class) = @_; |
my $homeserver = &homeserver($cnum,$cdom); |
my $homeserver = &homeserver($cnum,$cdom); |
|
my $ownerlist; |
|
if (ref($owners) eq 'ARRAY') { |
|
$ownerlist = join(',',@{$owners}); |
|
} else { |
|
$ownerlist = $owners; |
|
} |
my $response=&reply('autovalidateclass_sec:'.$inst_class.':'. |
my $response=&reply('autovalidateclass_sec:'.$inst_class.':'. |
&escape($owner).':'.$cdom,$homeserver); |
&escape($ownerlist).':'.$cdom,$homeserver); |
return $response; |
return $response; |
} |
} |
|
|
Line 5345 sub createcourse {
|
Line 5582 sub createcourse {
|
} |
} |
# ----------------------------------------------------------------- Course made |
# ----------------------------------------------------------------- Course made |
# log existence |
# log existence |
&courseidput($udom,&escape($udom.'_'.$uname).'='.&escape($description). |
my $newcourse = { |
':'.&escape($inst_code).':'.&escape($course_owner).':'. |
$udom.'_'.$uname => { |
&escape($crstype),$uhome); |
description => $description, |
&flushcourselogs(); |
inst_code => $inst_code, |
|
owner => $course_owner, |
|
type => $crstype, |
|
}, |
|
}; |
|
&courseidput($udom,$newcourse,$uhome,'notime'); |
# set toplevel url |
# set toplevel url |
my $topurl=$url; |
my $topurl=$url; |
unless ($nonstandard) { |
unless ($nonstandard) { |
Line 5378 ENDINITMAP
|
Line 5620 ENDINITMAP
|
sub is_course { |
sub is_course { |
my ($cdom,$cnum) = @_; |
my ($cdom,$cnum) = @_; |
my %courses = &courseiddump($cdom,'.',1,'.','.',$cnum,undef, |
my %courses = &courseiddump($cdom,'.',1,'.','.',$cnum,undef, |
undef,'.'); |
undef,'.',undef,1); |
if (exists($courses{$cdom.'_'.$cnum})) { |
if (exists($courses{$cdom.'_'.$cnum})) { |
return 1; |
return 1; |
} |
} |
Line 6696 sub metadata {
|
Line 6938 sub metadata {
|
# only ws inside the tag, and not in default, so use default |
# only ws inside the tag, and not in default, so use default |
# as value |
# as value |
$metaentry{':'.$unikey}=$default; |
$metaentry{':'.$unikey}=$default; |
} else { |
} elsif ( $internaltext =~ /\S/ ) { |
# either something interesting inside the tag or default |
# something interesting inside the tag |
# uninteresting |
|
$metaentry{':'.$unikey}=$internaltext; |
$metaentry{':'.$unikey}=$internaltext; |
|
} else { |
|
# no interesting values, don't set a default |
} |
} |
# end of not-a-package not-a-library import |
# end of not-a-package not-a-library import |
} |
} |
Line 6839 sub gettitle {
|
Line 7082 sub gettitle {
|
} |
} |
my ($map,$resid,$url)=&decode_symb($symb); |
my ($map,$resid,$url)=&decode_symb($symb); |
my $title=''; |
my $title=''; |
my %bighash; |
if (!$map && $resid == 0 && $url =~/default\.sequence$/) { |
if (tie(%bighash,'GDBM_File',$env{'request.course.fn'}.'.db', |
$title = $env{'course.'.$env{'request.course.id'}.'.description'}; |
&GDBM_READER(),0640)) { |
} else { |
my $mapid=$bighash{'map_pc_'.&clutter($map)}; |
if (tie(my %bighash,'GDBM_File',$env{'request.course.fn'}.'.db', |
$title=$bighash{'title_'.$mapid.'.'.$resid}; |
&GDBM_READER(),0640)) { |
untie %bighash; |
my $mapid=$bighash{'map_pc_'.&clutter($map)}; |
|
$title=$bighash{'title_'.$mapid.'.'.$resid}; |
|
untie(%bighash); |
|
} |
} |
} |
$title=~s/\&colon\;/\:/gs; |
$title=~s/\&colon\;/\:/gs; |
if ($title) { |
if ($title) { |
Line 7723 sub hreflocation {
|
Line 7969 sub hreflocation {
|
$file=~s-^/home/httpd/lonUsers/($match_domain)/./././($match_name)/userfiles/ |
$file=~s-^/home/httpd/lonUsers/($match_domain)/./././($match_name)/userfiles/ |
-/uploaded/$1/$2/-x; |
-/uploaded/$1/$2/-x; |
} |
} |
|
if ($file=~ m{^/userfiles/}) { |
|
$file =~ s{^/userfiles/}{/uploaded/}; |
|
} |
return $file; |
return $file; |
} |
} |
|
|