version 1.168, 2003/03/08 03:24:58
|
version 1.179, 2003/06/16 19:42:02
|
Line 142 my %persistent_db;
|
Line 142 my %persistent_db;
|
my $hidden_fields; |
my $hidden_fields; |
my $bodytag; |
my $bodytag; |
|
|
|
# |
|
# For course search |
|
# |
my %alreadyseen; |
my %alreadyseen; |
my $hashtied; |
my $hashtied; |
my %hash; |
my %hash; |
|
my $totalfound; |
|
|
###################################################################### |
###################################################################### |
###################################################################### |
###################################################################### |
Line 210 sub handler {
|
Line 214 sub handler {
|
## Initialize global variables |
## Initialize global variables |
## |
## |
my $domain = $r->dir_config('lonDefDomain'); |
my $domain = $r->dir_config('lonDefDomain'); |
$diropendb= "/home/httpd/perl/tmp/".&Apache::lonnet::escape($domain). |
$diropendb= "/home/httpd/perl/tmp/$ENV{'user.domain'}_$ENV{'user.name'}_searchcat.db"; |
"\_".&Apache::lonnet::escape($ENV{'user.name'})."_searchcat.db"; |
|
# |
# |
# set the name of the persistent database |
# set the name of the persistent database |
# $ENV{'form.persistent_db_id'} can only have digits in it. |
# $ENV{'form.persistent_db_id'} can only have digits in it. |
Line 418 sub course_search {
|
Line 421 sub course_search {
|
} |
} |
my $fulltext=$ENV{'form.crsfulltext'}; |
my $fulltext=$ENV{'form.crsfulltext'}; |
my @allwords=($search_string,@New_Words); |
my @allwords=($search_string,@New_Words); |
|
$totalfound=0; |
$r->print('<html><head><title>LON-CAPA Course Search</title></head>'. |
$r->print('<html><head><title>LON-CAPA Course Search</title></head>'. |
$bodytag.$pretty_search_string); |
$bodytag.$pretty_search_string); |
$r->rflush(); |
$r->rflush(); |
Line 425 sub course_search {
|
Line 429 sub course_search {
|
$hashtied=0; |
$hashtied=0; |
undef %alreadyseen; |
undef %alreadyseen; |
%alreadyseen=(); |
%alreadyseen=(); |
|
my $c=$r->connection; |
&tiehash(); |
&tiehash(); |
foreach (keys %hash) { |
foreach (keys %hash) { |
|
if ($c->aborted()) { last; } |
if (($_=~/^src\_(.+)$/) && (!$alreadyseen{$hash{$_}})) { |
if (($_=~/^src\_(.+)$/) && (!$alreadyseen{$hash{$_}})) { |
&checkonthis($r,$hash{$_},0,$hash{'title_'.$1},$fulltext,@allwords); |
&checkonthis($r,$hash{$_},0,$hash{'title_'.$1},$fulltext,@allwords); |
} |
} |
} |
} |
&untiehash(); |
&untiehash(); |
|
unless ($totalfound) { |
|
$r->print('<p>No resources found.</p>'); |
|
} |
# =================================================== Done going through course |
# =================================================== Done going through course |
$r->print('</body></html>'); |
$r->print('</body></html>'); |
} |
} |
Line 482 sub checkonthis {
|
Line 491 sub checkonthis {
|
$r->print(' '); |
$r->print(' '); |
} |
} |
$r->print('<a href="'.$url.'" target="cat">'. |
$r->print('<a href="'.$url.'" target="cat">'. |
($title?$title:$url).'</a>'); |
($title?$title:$url).'</a><br />'); |
$r->rflush(); |
$totalfound++; |
|
} elsif ($fulltext) { |
|
$r->print(' .'); |
} |
} |
|
$r->rflush(); |
# Check also the dependencies of this one |
# Check also the dependencies of this one |
my $dependencies= |
my $dependencies= |
&Apache::lonnet::metadata($url,'dependencies'); |
&Apache::lonnet::metadata($url,'dependencies'); |
Line 707 ENDHEADER
|
Line 719 ENDHEADER
|
my $size = 4; |
my $size = 4; |
$size = (scalar @domains < ($size - 1) ? scalar @domains + 1 : $size); |
$size = (scalar @domains < ($size - 1) ? scalar @domains + 1 : $size); |
$scrout.="\n".'<font color="#800000" face="helvetica"><b>'. |
$scrout.="\n".'<font color="#800000" face="helvetica"><b>'. |
'DOMAINS</b></font><br />'. |
'DOMAINS TO BE SEARCHED</b></font><br />'. |
'<select name="domains" size="'.$size.'" multiple>'."\n". |
'<select name="domains" size="'.$size.'" multiple>'."\n". |
'<option name="any" value="any" '. |
'<option name="any" value="any" '. |
($domain_hash{'any'}? 'selected ' :''). |
($domain_hash{'any'}? 'selected ' :''). |
Line 1486 sub parse_basic_search {
|
Line 1498 sub parse_basic_search {
|
} |
} |
# Build SQL query string based on form page |
# Build SQL query string based on form page |
my $query=''; |
my $query=''; |
my $concatarg=join('," ",', |
my $concatarg=join(',', |
('title', 'author', 'subject', 'notes', 'abstract', |
('title', 'author', 'subject', 'notes', 'abstract', |
'keywords')); |
'keywords')); |
$concatarg='title' if $ENV{'form.titleonly'}; |
$concatarg='title' if $ENV{'form.titleonly'}; |
$query=&build_SQL_query('concat('.$concatarg.')',$search_string); |
$query=&build_SQL_query('concat_ws(" ",'.$concatarg.')',$search_string); |
$pretty_search_string .= "<br />\n"; |
$pretty_search_string .= "<br />\n"; |
return 'select * from metadata where '.$query,$pretty_search_string; |
return 'SELECT * FROM metadata WHERE '.$query,$pretty_search_string; |
} |
} |
|
|
|
|
Line 1605 sub recursive_SQL_query_build {
|
Line 1617 sub recursive_SQL_query_build {
|
my @matches=($pattern=~/(\[[^\]|\[]*\])/g); |
my @matches=($pattern=~/(\[[^\]|\[]*\])/g); |
return $pattern unless @matches; |
return $pattern unless @matches; |
foreach my $match (@matches) { |
foreach my $match (@matches) { |
$match=~/\[ (\w+)\s(.*) \]/; |
$match=~/\[ (\w+)\s(.*) \]/; |
my ($key,$value)=($1,$2); |
my ($key,$value)=($1,$2); |
my $replacement=''; |
my $replacement=''; |
if ($key eq 'literal') { |
if ($key eq 'literal') { |
$replacement="($dkey like \"\%$value\%\")"; |
$replacement="($dkey LIKE \"\%$value\%\")"; |
} |
} elsif (lc($key) eq 'not') { |
elsif ($key eq 'not') { |
$value=~s/LIKE/NOT LIKE/; |
$value=~s/like/not like/; |
# $replacement="($dkey not like $value)"; |
# $replacement="($dkey not like $value)"; |
$replacement="$value"; |
$replacement="$value"; |
} elsif ($key eq 'and') { |
} |
$value=~/(.*[\"|\)]) ([|\(|\^].*)/; |
elsif ($key eq 'and') { |
$replacement="($1 AND $2)"; |
$value=~/(.*[\"|\)]) ([|\(|\^].*)/; |
} elsif ($key eq 'or') { |
$replacement="($1 AND $2)"; |
$value=~/(.*[\"|\)]) ([|\(|\^].*)/; |
} |
$replacement="($1 OR $2)"; |
elsif ($key eq 'or') { |
|
$value=~/(.*[\"|\)]) ([|\(|\^].*)/; |
|
$replacement="($1 OR $2)"; |
|
} |
} |
substr($pattern, |
substr($pattern, |
index($pattern,$match), |
index($pattern,$match), |
length($match), |
length($match), |
$replacement |
$replacement); |
); |
|
} |
} |
&recursive_SQL_query_build($dkey,$pattern); |
&recursive_SQL_query_build($dkey,$pattern); |
} |
} |
Line 1885 the following format:
|
Line 1893 the following format:
|
|
|
=cut |
=cut |
|
|
## |
##################################################################### |
## Restrictions: |
##################################################################### |
## columns of type 'text' and 'blob' cannot have defaults. |
|
## columns of type 'enum' cannot be used for FULLTEXT. |
my @Datatypes = |
## |
( { name => 'id', |
my @DataOrder = qw/id title author subject url keywords version notes |
type => 'MEDIUMINT', |
abstract mime lang owner copyright creationdate lastrevisiondate hostname/; |
restrictions => 'UNSIGNED NOT NULL', |
|
primary_key => 'yes', |
my %Datatypes = |
auto_inc => 'yes' }, |
( id =>{ type => 'MEDIUMINT', |
{ name => 'title', type=>'TEXT'}, |
restrictions => 'UNSIGNED NOT NULL', |
{ name => 'author', type=>'TEXT'}, |
primary_key => 'yes', |
{ name => 'subject', type=>'TEXT'}, |
auto_inc => 'yes' |
{ name => 'url', type=>'TEXT', restrictions => 'NOT NULL' }, |
}, |
{ name => 'keywords', type=>'TEXT'}, |
title =>{ type=>'TEXT'}, |
{ name => 'version', type=>'TEXT'}, |
author =>{ type=>'TEXT'}, |
{ name => 'notes', type=>'TEXT'}, |
subject =>{ type=>'TEXT'}, |
{ name => 'abstract', type=>'TEXT'}, |
url =>{ type=>'TEXT', |
{ name => 'mime', type=>'TEXT'}, |
restrictions => 'NOT NULL' }, |
{ name => 'lang', type=>'TEXT'}, |
keywords =>{ type=>'TEXT'}, |
{ name => 'owner', type=>'TEXT'}, |
version =>{ type=>'TEXT'}, |
{ name => 'copyright', type=>'TEXT'}, |
notes =>{ type=>'TEXT'}, |
{ name => 'hostname', type=>'TEXT'}, |
abstract =>{ type=>'TEXT'}, |
|
mime =>{ type=>'TEXT'}, |
|
lang =>{ type=>'TEXT'}, |
|
owner =>{ type=>'TEXT'}, |
|
copyright =>{ type=>'TEXT'}, |
|
hostname =>{ type=>'TEXT'}, |
|
#-------------------------------------------------- |
#-------------------------------------------------- |
creationdate =>{ type=>'DATETIME'}, |
{ name => 'creationdate', type=>'DATETIME'}, |
lastrevisiondate =>{ type=>'DATETIME'}, |
{ name => 'lastrevisiondate', type=>'DATETIME'}, |
#-------------------------------------------------- |
#-------------------------------------------------- |
); |
); |
|
|
Line 1943 Returns: the identifier of the table on
|
Line 1945 Returns: the identifier of the table on
|
###################################################################### |
###################################################################### |
sub create_results_table { |
sub create_results_table { |
my $table = &Apache::lonmysql::create_table |
my $table = &Apache::lonmysql::create_table |
( { columns => \%Datatypes, |
( { columns => \@Datatypes, |
column_order => \@DataOrder, |
FULLTEXT => [{'columns' => \@Fullindicies},], |
fullindex => \@Fullindicies, |
|
} ); |
} ); |
if (defined($table)) { |
if (defined($table)) { |
$ENV{'form.table'} = $table; |
$ENV{'form.table'} = $table; |
Line 2129 END
|
Line 2130 END
|
my $time_remaining = $max_time - (time - $starttime) ; |
my $time_remaining = $max_time - (time - $starttime) ; |
my $last_time = $time_remaining; |
my $last_time = $time_remaining; |
&update_seconds($r,$time_remaining); |
&update_seconds($r,$time_remaining); |
|
&update_status($r,'contacting '.$Servers_to_contact[0]); |
while (($time_remaining > 0) && |
while (($time_remaining > 0) && |
((@Servers_to_contact) || keys(%Server_status))) { |
((@Servers_to_contact) || keys(%Server_status))) { |
# Send out a search request if it needs to be done. |
# Send out a search request if it needs to be done. |
Line 2367 sub display_results {
|
Line 2369 sub display_results {
|
."</center>\n" |
."</center>\n" |
); |
); |
if ($total_results == 0) { |
if ($total_results == 0) { |
$r->print("There are currently no results.\n". |
$r->print("<h3>There are currently no results.</h3>Please try to reload this page, which will update the display.\n". |
"</form></body></html>"); |
"</form></body></html>"); |
return; |
return; |
} else { |
} else { |
Line 2471 sub parse_row {
|
Line 2473 sub parse_row {
|
my @Row = @_; |
my @Row = @_; |
my %Fields; |
my %Fields; |
for (my $i=0;$i<=$#Row;$i++) { |
for (my $i=0;$i<=$#Row;$i++) { |
$Fields{$DataOrder[$i]}=&Apache::lonnet::unescape($Row[$i]); |
$Fields{$Datatypes[$i]->{'name'}}=&Apache::lonnet::unescape($Row[$i]); |
} |
} |
$Fields{'language'} = |
$Fields{'language'} = |
&Apache::loncommon::languagedescription($Fields{'lang'}); |
&Apache::loncommon::languagedescription($Fields{'lang'}); |