diff --git a/trunk/search.pl b/trunk/search.pl index 7087943..4ba35a1 100644 --- a/trunk/search.pl +++ b/trunk/search.pl @@ -18,9 +18,9 @@ if($query->param('query')) $strquery = $query->param('query'); $strquery =~ s/%([0-9A-F]{2})/chr(hex($1))/eg; - (@tags) = $strquery =~ /tag:(\w+)/gi; - ($orderby) = $strquery =~ /orderby:(\w+)/i; - ($sort) = $strquery =~ /sort:(\w+)/i; + (@tags) = $strquery =~ / tag:(\w+)/gi; + ($orderby) = $strquery =~ / orderby:(\w+)/i; + ($sort) = $strquery =~ / sort:(\w+)/i; #($title) = $strquery =~ /title:(\w+)/i; #($description) = $strquery =~ /description:(\w+)/i; #($creator) = $strquery =~ /creator:(\w+)/i; @@ -31,7 +31,7 @@ if($query->param('query')) #($filesize) = $strquery =~ /filesize:([<>]?\w+)/i; #($duration) = $strquery =~ /duration:([<>]?\w+)/i; #($timestamp) = $strquery =~ /timestamp:([<>]?\w+)/i; - $strquery =~ s/(tag|orderby|sort):\w+//gi; + $strquery =~ s/ (tag|orderby|sort):\w+//gi; $strquery =~ s/^\s*(.*?)\s*$/$1/; #build mysql query @@ -42,82 +42,89 @@ if($query->param('query')) if($strquery) { - $dbquery .= ", match(v.title, v.description, v.subject) against( ? in boolean mode) as relevance"; - $dbquery .= " from videos as v, users as u where u.id = v.userid"; - $dbquery .= " and match(v.title, v.description, v.subject) against( ? in boolean mode)"; - push @args, $strquery, $strquery; - } - else - { - $dbquery .= " from videos as v, users as u where u.id = v.userid"; - } - - if(@tags) - { - $dbquery .= " and match(v.subject) against (? in boolean mode)"; - push @args, "@tags"; - } - - if($publisher) - { - $dbquery .= " and match(u.username) against (? in boolean mode)"; - push @args, "$publisher"; - } - - if($orderby) - { - if($orderby eq 'filesize') + if($strquery eq "*") { - $dbquery .= " order by v.filesize"; - } - elsif($orderby eq 'duration') - { - $dbquery .= " order by v.duration"; - } - elsif($orderby eq 'viewcount') - { - $dbquery .= " order by v.viewcount"; - } - elsif($orderby eq 'downloadcount') - { - $dbquery .= " order by v.downloadcount"; - } - elsif($orderby eq 'timestamp') - { - $dbquery .= " order by v.timestamp"; - } - elsif($orderby eq 'relevance' and $strquery) - { - $dbquery .= " order by relevance"; + $dbquery .= " from videos as v, users as u where u.id = v.userid"; } else { - $dbquery .= " order by v.id"; + $dbquery .= ", match(v.title, v.description, v.subject) against( ? in boolean mode) as relevance"; + $dbquery .= " from videos as v, users as u where u.id = v.userid"; + $dbquery .= " and match(v.title, v.description, v.subject) against( ? in boolean mode)"; + push @args, $strquery, $strquery; } - if($sort eq "ascending") + if(@tags) { - $dbquery .= " asc"; + $dbquery .= " and match(v.subject) against (? in boolean mode)"; + push @args, "@tags"; } - elsif($sort eq "descending") + + if($publisher) { - $dbquery .= " desc"; + $dbquery .= " and match(u.username) against (? in boolean mode)"; + push @args, "$publisher"; + } + + if($orderby) + { + if($orderby eq 'filesize') + { + $dbquery .= " order by v.filesize"; + } + elsif($orderby eq 'duration') + { + $dbquery .= " order by v.duration"; + } + elsif($orderby eq 'viewcount') + { + $dbquery .= " order by v.viewcount"; + } + elsif($orderby eq 'downloadcount') + { + $dbquery .= " order by v.downloadcount"; + } + elsif($orderby eq 'timestamp') + { + $dbquery .= " order by v.timestamp"; + } + elsif($orderby eq 'relevance' and $strquery) + { + $dbquery .= " order by relevance"; + } + else + { + $dbquery .= " order by v.id"; + } + + if($sort eq "ascending") + { + $dbquery .= " asc"; + } + elsif($sort eq "descending") + { + $dbquery .= " desc"; + } + } + + fill_results(@args); + + if(@{$page->{'results'}->{'result'}} == 0) + { + print $query->redirect("index.pl?warning=warning_no_results"); + } + elsif((@{$page->{'results'}->{'result'}} == 1) and (not $query->param('page') or $query->param('page') == 1)) + { + print $query->redirect($page->{'results'}->{'result'}[0]->{'rdf:RDF'}->{'cc:Work'}->{'dc:identifier'}[0]); + } + else + { + print output_page(); } - } - - fill_results(@args); - - if(@{$page->{'results'}->{'result'}} == 0) - { - print $query->redirect("index.pl?warning=warning_no_results"); - } - elsif((@{$page->{'results'}->{'result'}} == 1) and (not $query->param('page') or $query->param('page') == 1)) - { - print $query->redirect($page->{'results'}->{'result'}[0]->{'rdf:RDF'}->{'cc:Work'}->{'dc:identifier'}[0]); } else { - print output_page(); + print $query->redirect("index.pl?error=error_no_query"); } } elsif($query->param('advanced')) diff --git a/trunk/site/main.xml b/trunk/site/main.xml index 596e320..aeee2a2 100755 --- a/trunk/site/main.xml +++ b/trunk/site/main.xml @@ -22,9 +22,9 @@ http://localhost/ /upload.pl /uploader.pl - /search.pl?query=orderby:timestamp%20sort:descending - /search.pl?query=orderby:downloadcount%20sort:descending - /search.pl?query=orderby:viewcount%20sort:descending + /search.pl?query=*%20orderby:timestamp%20sort:descending + /search.pl?query=*%20orderby:downloadcount%20sort:descending + /search.pl?query=*%20orderby:viewcount%20sort:descending