--- loncom/lonnet/perl/lonnet.pm 2003/05/08 21:50:54 1.370 +++ loncom/lonnet/perl/lonnet.pm 2003/06/10 18:17:34 1.378 @@ -1,7 +1,7 @@ # The LearningOnline Network # TCP networking package # -# $Id: lonnet.pm,v 1.370 2003/05/08 21:50:54 albertel Exp $ +# $Id: lonnet.pm,v 1.378 2003/06/10 18:17:34 matthew Exp $ # # Copyright Michigan State University Board of Trustees # @@ -243,6 +243,26 @@ sub critical { } return $answer; } + +# ------------------------------------------- Transfer profile into environment + +sub transfer_profile_to_env { + my ($lonidsdir,$handle)=@_; + my @profile; + { + my $idf=Apache::File->new("$lonidsdir/$handle.id"); + flock($idf,LOCK_SH); + @profile=<$idf>; + $idf->close(); + } + my $envi; + for ($envi=0;$envi<=$#profile;$envi++) { + chomp($profile[$envi]); + my ($envname,$envvalue)=split(/=/,$profile[$envi]); + $ENV{$envname} = $envvalue; + } + $ENV{'user.environment'} = "$lonidsdir/$handle.id"; +} # ---------------------------------------------------------- Append Environment @@ -358,15 +378,16 @@ sub userload { while ($filename=readdir(LONIDS)) { if ($filename eq '.' || $filename eq '..') {next;} my ($atime)=(stat($perlvar{'lonIDsDir'}.'/'.$filename))[8]; - if ($curtime-$atime < 3600) { $num_users++; } + if ($curtime-$atime < 3600) { $numusers++; } } closedir(LONIDS); } my $userloadpercent=0; my $maxuserload=$perlvar{'lonUserLoadLim'}; if ($maxuserload) { - $userloadpercent=100*$num_users/$maxuserload; + $userloadpercent=100*$numusers/$maxuserload; } + $userloadpercent=sprintf("%.2f",$userloadpercent); return $userloadpercent; } @@ -1259,8 +1280,8 @@ sub get_course_adv_roles { } else { $returnhash{$key}=$username.':'.$domain; } - } - return sort %returnhash; + } + return %returnhash; } # ---------------------------------------------------------- Course ID routines @@ -2640,7 +2661,7 @@ sub assignrole { } else { my $cwosec=$url; $cwosec=~s/^\/(\w+)\/(\w+)\/.*/$1\/$2/; - unless (&allowed('c'.$role,$cwosec)) { + unless ((&allowed('c'.$role,$cwosec)) || &allowed('c'.$role,$udom)) { &logthis('Refused assignrole: '. $udom.' '.$uname.' '.$url.' '.$role.' '.$end.' '.$start.' by '. $ENV{'user.name'}.' at '.$ENV{'user.domain'}); @@ -2660,10 +2681,11 @@ sub assignrole { } # actually delete if ($deleteflag) { - if (&allowed('dro',$udom)) { + if ((&allowed('dro',$udom)) || (&allowed('dro',$url))) { # modify command to delete the role $command="encrypt:rolesdel:$ENV{'user.domain'}:$ENV{'user.name'}:". "$udom:$uname:$url".'_'."$mrole"; + &logthis("$ENV{'user.name'} at $ENV{'user.domain'} deletes $mrole in $url for $uname at $udom"); # set start and finish to negative values for userrolelog $start=-1; $end=-1; @@ -3062,12 +3084,12 @@ sub GetFileTimestamp { $subdir =~ s/(.)(.)(.).*/$1\/$2\/$3/; my $proname="$studentDomain/$subdir/$studentName"; $proname .= '/'.$filename; - my @dir = &Apache::lonnet::dirlist($proname, $studentDomain, $studentName, - $root); - my $fileStat = $dir[0]; + my ($fileStat) = &Apache::lonnet::dirlist($proname, $studentDomain, + $studentName, $root); my @stats = split('&', $fileStat); if($stats[0] ne 'empty' && $stats[0] ne 'no_such_dir') { - return $stats[9]; + # @stats contains first the filename, then the stat output + return $stats[10]; # so this is 10 instead of 9. } else { return -1; } @@ -3166,7 +3188,7 @@ sub courseresdata { # --------------------------------------------------------- Value of a Variable sub EXT { - my ($varname,$symbparm,$udom,$uname,)=@_; + my ($varname,$symbparm,$udom,$uname,$usection)=@_; unless ($varname) { return ''; } #get real user name/domain, courseid and symb @@ -3174,7 +3196,7 @@ sub EXT { my $publicuser; if (!($uname && $udom)) { (my $cursymb,$courseid,$udom,$uname,$publicuser)= - &Apache::lonxml::whichuser(); + &Apache::lonxml::whichuser($symbparm); if (!$symbparm) { $symbparm=$cursymb; } } else { $courseid=$ENV{'request.course.id'}; @@ -3252,7 +3274,7 @@ sub EXT { } elsif ($realm eq 'query') { # ---------------------------------------------- pull stuff out of query string &Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'},[$space]); - return $ENV{'form.'.$space}; + return $ENV{'form.'.$spacequalifierrest}; } elsif ($realm eq 'request') { # ------------------------------------------------------------- request.browser if ($space eq 'browser') { @@ -3283,7 +3305,11 @@ sub EXT { ($ENV{'user.domain'} eq $udom)) { $section=$ENV{'request.course.sec'}; } else { - $section=&usection($udom,$uname,$courseid); + if (! defined($usection)) { + $section=&usection($udom,$uname,$courseid); + } else { + $section = $usection; + } } my $seclevel=$courseid.'.['.$section.'].'.$spacequalifierrest;