pending.user, pending.reason, history.time, history.location',
'dropnotifsxmpp' => 'DELETE FROM pending WHERE notification = 1 AND EXISTS ( SELECT 1 FROM users WHERE users.id = pending.user AND nextxmpp <= ? )',
'dropnotifsmail' => 'DELETE FROM pending WHERE notification = 0 AND EXISTS ( SELECT 1 FROM users WHERE users.id = pending.user AND nextmail <= ? )',
- 'time' => 'SELECT NOW()'
-
+ 'time' => 'SELECT NOW()',
+ 'searchname' => 'SELECT l.id, l.name, p.name FROM locations AS l JOIN locations AS p ON l.parent = p.id WHERE l.name LIKE ? ORDER BY l.id',
+ 'searchlocalname' => 'SELECT l.id, l.name, p.name FROM locations AS l JOIN locations AS p ON l.parent = p.id WHERE l.name LIKE ? AND l.id LIKE ? ORDER BY l.id'
} );
}
$self->command( 'dropnotifsxmpp', [ $time ] );
}
+sub searchName( $$$ ) {
+ my( $self, $search, $prefix ) = @_;
+ return $self->query( 'searchlocalname', [ "%$search%", "$prefix/%" ] ) if defined $prefix;
+ return $self->query( 'searchname', [ "%$search%" ] );
+}
+
1;
use PciIds::Html::Forms;
use PciIds::Html::Users;
use PciIds::Html::Util;
+use PciIds::Html::Format;
use PciIds::Address;
use Apache2::Const qw(:common :http);
sub tryDirect( $$$$ ) {
my( $req, $args, $tables, $search ) = @_;
my $address = PciIds::Address::new( $req->uri() );
- #Is it absolute address?
$search =~ s/:/\//g;
$search =~ s/ //g;
my( $top ) = $address->get() =~ /^([^\/]+)/;
$search =~ s/^\//$top\//;
+ #Is it absolute address?
my $saddr = PciIds::Address::new( $search );
return redirect( $req, $args, $saddr->get() ) if( defined $saddr && itemExists( $tables, $saddr->get() ) );
while( defined $address ) {
my $idOnly = $search =~ s/^#//;
my $direct = tryDirect( $req, $args, $tables, $search );
return $direct if defined $direct;
- unless( $idOnly ) {#Try extended search
-
+ my $address = PciIds::Address::new( $req->uri() );
+ unless( $idOnly || length $search < 3 ) {#Try extended search
+ my( $prefix ) = $address->get() =~ /^([^\/]+)/;
+ $prefix = undef if $search =~ s/^\*//;
+ my $result = $tables->searchName( $search, $prefix );
+ if( @{$result} ) {
+ genHtmlHead( $req, 'Search results', undef );
+ print "<div class='top'>\n";
+ print "<h1>Search results</h1>\n";
+ genMenu( $req, $address, $args, $auth, [ [ 'Help', 'help', 'jump' ], [ '', 'jump' ] ] );
+ print "<div class='clear'></div>\n";
+ print "</div>\n";
+ genPath( $req, $address, 1 );
+ print "<h2>Found items</h2>\n";
+ genTableHead( 'found', [ 'ID', 'Name', 'Parent' ], [] );
+ my $prefix = 'http://'.$req->hostname().'/'.( ( !defined $args->{'action'} || $args->{'action'} eq '' || $args->{'action'} eq 'list' ) ? 'read/' : 'mods/' );
+ my $suffix = buildArgs( $args );
+ htmlFormatTable( $result, 3, [], [ sub {
+ my $addr = shift;
+ my $address = PciIds::Address::new( $addr );
+ return "<a href='$prefix".$address->get()."$suffix'>".encode( $address->fullPretty() )."</a>";
+ } ], sub { 1; }, sub { ' class="item"'; } );
+ genTableTail();
+ genHtmlTail();
+ return OK;
+ }
}
genHtmlHead( $req, 'No matches', undef );
print "<div class='top'>\n";
print '<h1>No matches</h1>';
- my $address = PciIds::Address::new( $req->uri() );
genMenu( $req, $address, $args, $auth, [ [ 'Help', 'help', 'jump' ] ] );
print "<div class='clear'></div>\n";
print "</div\n>";