--- loncom/lonsql 2002/06/17 20:25:51 1.45 +++ loncom/lonsql 2002/06/18 19:39:13 1.47 @@ -3,7 +3,7 @@ # The LearningOnline Network # lonsql - LON TCP-MySQL-Server Daemon for handling database requests. # -# $Id: lonsql,v 1.45 2002/06/17 20:25:51 www Exp $ +# $Id: lonsql,v 1.47 2002/06/18 19:39:13 www Exp $ # # Copyright Michigan State University Board of Trustees # @@ -190,32 +190,72 @@ sub logthis { print $fh "$local ($$): $message\n"; } - - -# -------------------------------------------- Return path to profile directory - -sub propath { - my ($udom,$uname)=@_; - $udom=~s/\W//g; - $uname=~s/\W//g; - my $subdir=$uname.'__'; - $subdir =~ s/(.)(.)(.).*/$1\/$2\/$3/; - my $proname="$perlvar{'lonUsersDir'}/$udom/$subdir/$uname"; - return $proname; -} - # ------------------------------------------------------------------ Course log sub courselog { my ($path,$command)=@_; - return 'not_yet_implemented'; + my %filters=(); + foreach (split(/\:/,&unescape($command))) { + my ($name,$value)=split(/\=/,$_); + $filters{$name}=$value; + } + my @results=(); + open(IN,$path.'/activity.log') or return ('file_error'); + while ($line=) { + chomp($line); + my ($timestamp,$host,$log)=split(/\:/,$line); + foreach (split(/\&/,&unescape($log))) { + my ($time,$res,$uname,$udom,$action,$values)=split(/\:/,$_); + my $include=1; + if (($filters{'username'}) && ($uname ne $filters{'username'})) + { $include=0; } + if (($filters{'domain'}) && ($udom ne $filters{'domain'})) + { $include=0; } + if (($filters{'url'}) && ($res!~/$filters{'url'}/)) + { $include=0; } + if (($filters{'start'}) && ($time<$filters{'start'})) + { $include=0; } + if (($filters{'end'}) && ($time>$filters{'end'})) + { $include=0; } + if (($filters{'action'} eq 'view') && ($action)) + { $include=0; } + if (($filters{'action'} eq 'submit') && ($action ne 'POST')) + { $include=0; } + if (($filters{'action'} eq 'grade') && ($action ne 'CSTORE')) + { $include=0; } + if ($include) { + push(@results,$time.':'.$res.':'.$uname.':'.$udom.':'. + $action.':'.$values); + } + } + } + close IN; + return join('&',sort(@results)); } # -------------------------------------------------------------------- User log sub userlog { my ($path,$command)=@_; - return 'not_yet_implemented'; + my %filters=(); + foreach (split(/\:/,&unescape($command))) { + my ($name,$value)=split(/\=/,$_); + $filters{$name}=$value; + } + my @results=(); + open(IN,$path.'/activity.log') or return ('file_error'); + while ($line=) { + chomp($line); + my ($timestamp,$host,$log)=split(/\:/,$line); + $log=&unescape($log); + my $include=1; + if (($filters{'action'} eq 'log') && ($log!~/^Log/)) { $include=0; } + if ($include) { + push(@results,$timestamp.':'.$log); + } + } + close IN; + return join('&',sort(@results)); } @@ -317,7 +357,7 @@ sub make_new_child { $queryid .= $run; print $client "$queryid\n"; - &logthis("QUERY: $query"); + &logthis("QUERY: $query - $arg1 - $arg2 - $arg3"); sleep 1; my $result=''; @@ -430,7 +470,12 @@ sub make_new_child { $result.=$customresult; } # ------------------------------------------------------------ end of sql query - } + } + + # result does need to be escaped + + $result=&escape($result); + # reply with result, append \n unless already there $result.="\n" unless ($result=~/\n$/);