--- loncom/lonsql	2000/07/25 16:06:57	1.4
+++ loncom/lonsql	2001/03/27 19:01:05	1.24
@@ -1,7 +1,8 @@
 #!/usr/bin/perl
 # lonsql-based on the preforker:harsha jagasia:date:5/10/00
 # 7/25 Gerd Kortemeyer
-
+# many different dates Scott Harrison
+# 03/22/2001 Scott Harrison
 use IO::Socket;
 use Symbol;
 use POSIX;
@@ -12,6 +13,16 @@ use Fcntl;
 use Tie::RefHash;
 use DBI;
 
+my @metalist;
+# ----------------- Code to enable 'find' subroutine listing of the .meta files
+require "find.pl";
+sub wanted {
+    (($dev,$ino,$mode,$nlink,$uid,$gid) = lstat($_)) &&
+    -f _ &&
+    /^.*\.meta$/ &&
+    push(@metalist,"$dir/$_");
+}
+
 
 $childmaxattempts=10;
 $run =0;#running counter to generate the query-id
@@ -180,7 +191,7 @@ sub make_new_child {
         #open database handle
 	# making dbh global to avoid garbage collector
 	unless (
-		$dbh = DBI->connect("DBI:mysql:loncapa","www","newmysql",{ RaiseError =>0,PrintError=>0})
+		$dbh = DBI->connect("DBI:mysql:loncapa","www","123",{ RaiseError =>0,PrintError=>0})
 		) { 
 	            my $st=120+int(rand(240));
 		    &logthis("<font color=blue>WARNING: Couldn't connect to database  ($st secs): $@</font>");
@@ -201,8 +212,11 @@ sub make_new_child {
 	    my $userinput = <$client>;
 	    chomp($userinput);
 	    	    
-	    my ($conserver,$querytmp)=split(/&/,$userinput);
+	    my ($conserver,$querytmp,
+		$customtmp,$customshowtmp)=split(/&/,$userinput);
 	    my $query=unescape($querytmp);
+	    my $custom=unescape($customtmp);
+	    my $customshow=unescape($customshowtmp);
 
             #send query id which is pid_unixdatetime_runningcounter
 	    $queryid = $thisserver;
@@ -211,9 +225,12 @@ sub make_new_child {
 	    $queryid .= $run;
 	    print $client "$queryid\n";
 	    
+	    &logthis("QUERY: $query\n");
             #prepare and execute the query
 	    my $sth = $dbh->prepare($query);
 	    my $result;
+	    my @files;
+	    my $subsetflag=0;
 	    unless ($sth->execute())
 	    {
 		&logthis("<font color=blue>WARNING: Could not retrieve from database: $@</font>");
@@ -221,9 +238,53 @@ sub make_new_child {
 	    }
 	    else {
 		my $r1=$sth->fetchall_arrayref;
-		my @r2; map {my $a=$_; my @b=map {escape($_)} @$a; push @r2,join(",", @b)} (@$r1);
-		$result=join("&",@r2) . "\n";
+		my @r2;
+		map {my $a=$_; 
+		     my @b=map {escape($_)} @$a;
+		     push @files,@{$a}[3];
+		     push @r2,join(",", @b)
+		     } (@$r1);
+		$result=join("&",@r2);
+	    }
+
+	    # do custom metadata searching here and build into result
+	    if ($custom) {
+		&logthis("am going to do custom query for $custom");
+		if (@files) {
+		    @metalist=map {$perlvar{'lonDocRoot'}.$_.'.meta'} @files;
+		}
+		else {
+		    @metalist=(); pop @metalist;
+		    &find("$perlvar{'lonDocRoot'}/res");
+		}
+#		&logthis("FILELIST:" . join(":::",@metalist));
+		# if file is indicated in sql database and
+		# not part of sql-relevant query, do not pattern match.
+		# if file is not in sql database, output error.
+		# if file is indicated in sql database and is
+		# part of query result list, then do the pattern match.
+		my $customresult='';
+		foreach my $m (@metalist) {
+		    my $fh=IO::File->new($m);
+		    my @lines=<$fh>;
+		    my $stuff=join('',@lines);
+		    if ($stuff=~/$custom/s) {
+			foreach my $f ('abstract','author','copyright',
+				       'creationdate','keywords','language',
+				       'lastrevisiondate','mime','notes',
+				       'owner','subject','title') {
+			    $stuff=~s/\n?\<$f[^\>]*\>.*?<\/$f[^\>]*\>\n?//;
+			}
+			my $m2=$m; my $docroot=$perlvar{'lonDocRoot'};
+			$m2=~s/^$docroot//; $m2=~s/\.meta$//;
+#			&logthis("found: $stuff");
+			$customresult.='&custom='.escape($m2).','.escape($stuff);
+		    }
+		}
+		$result.=$customresult;
 	    }
+	    # reply with result
+	    $result.="\n" if $result;
             &reply("queryreply:$queryid:$result",$conserver);
 
         }