]> mj.ucw.cz Git - pciids.git/commitdiff
Direct jump works
authorMichal Vaner <vorner@ucw.cz>
Mon, 1 Sep 2008 11:54:44 +0000 (13:54 +0200)
committerMichal Vaner <vorner@ucw.cz>
Mon, 1 Sep 2008 11:54:44 +0000 (13:54 +0200)
Jump to a given ID works, needs to implement search in names

PciIds/Html/Handler.pm
PciIds/Html/Jump.pm
PciIds/Html/Util.pm

index 879086a26c4632175eb5127fc8eab119edbff926..dfb518a3a2090dd5478375aac1a1f0a130c14931 100644 (file)
@@ -11,6 +11,7 @@ use PciIds::Html::Changes;
 use PciIds::Html::Admin;
 use PciIds::Html::Notifications;
 use PciIds::Html::Help;
+use PciIds::Html::Jump;
 use Apache2::Const qw(:common :http);
 
 $ENV{'PATH'} = '';
@@ -52,7 +53,8 @@ my %handlers = (
                'respass-confirm' => \&PciIds::Html::Users::resetPasswdConfirmFormSubmit,
                'profile' => \&PciIds::Html::Users::profileFormSubmit,
                'admin' => \&PciIds::Html::Admin::submitAdminForm,
-               'notifications' => \&PciIds::Html::Notifications::notifFormSubmit
+               'notifications' => \&PciIds::Html::Notifications::notifFormSubmit,
+               'jump' => \&PciIds::Html::Jump::jump
        }
 );
 
index 58f7f2adbc9e33136b4a8bf78e6da2c0d6c2772c..7655c711205f5ad50e74763566c6291a07098346 100644 (file)
@@ -1,6 +1,12 @@
+package PciIds::Html::Jump;
 use strict;
 use warnings;
 use base 'Exporter';
+use PciIds::Html::Forms;
+use PciIds::Html::Users;
+use PciIds::Html::Util;
+use PciIds::Address;
+use Apache2::Const qw(:common :http);
 
 our @EXPORT = qw(&jumpWindow);
 
@@ -11,3 +17,59 @@ sub jumpWindow( $$ ) {
        print "<input type='text' class='jump' name='where'><input type='submit' value='Jump'>\n";
        print "</form>\n";
 }
+
+sub redirect( $$$ ) {
+       my( $req, $args, $addr ) = @_;
+       my $prefix = ( !defined $args->{'action'} || $args->{'action'} eq '' || $args->{'action'} eq 'list' ) ? 'read' : 'mods';
+       my $url = "http://".$req->hostname()."/$prefix/$addr".buildArgs( $args );
+       return HTTPRedirect( $req, $url );
+}
+
+sub itemExists( $$ ) {
+       my( $tables, $addr ) = @_;
+       return defined $tables->item( $addr );
+}
+
+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\//;
+       my $saddr = PciIds::Address::new( $search );
+       return redirect( $req, $args, $saddr->get() ) if( defined $saddr && itemExists( $tables, $saddr->get() ) );
+       while( defined $address ) {
+               $saddr = PciIds::Address::new( $address->get()."/$search" );
+               return redirect( $req, $args, $saddr->get() ) if( defined $saddr && itemExists( $tables, $saddr->get() ) );
+               $address = $address->parent();
+       }
+       return undef;
+}
+
+sub jump( $$$$ ) {
+       my( $req, $args, $tables, $auth ) = @_;
+       $args->{'action'} = delete $args->{'origin'};
+       my $search = getFormValue( 'where', '' );
+       my $idOnly = $search =~ s/^#//;
+       my $direct = tryDirect( $req, $args, $tables, $search );
+       return $direct if defined $direct;
+       unless( $idOnly ) {#Try extended search
+
+       }
+       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>";
+       genPath( $req, $address, 1 );
+       print "<p>Your search request matches no item. Would you like to try again?\n<p>\n";
+       jumpWindow( $req, $args );
+       genHtmlTail();
+       return OK;
+}
+
+1;
index e912ef72724bce88e5ff6bfdafa65087a7df08df..060dff188f5256dfa25adcebf59983d30eb989af 100644 (file)
@@ -4,7 +4,6 @@ use warnings;
 use HTML::Entities;
 use base 'Exporter';
 use PciIds::Users;
-use PciIds::Html::Jump;
 use Apache2::Const qw(:common :http);
 use APR::Table;
 
@@ -53,7 +52,8 @@ sub genCustomMenu( $$$$ ) {
                my( $label, $action, $param ) = @{$_};
                if( $action eq 'jump' ) {
                        print "<li>\n";
-                       jumpWindow( $req, $args );
+                       require PciIds::Html::Jump;
+                       PciIds::Html::Jump::jumpWindow( $req, $args );
                } else {
                        my $prefix = '/mods';
                        $prefix = '/read' if( !defined( $action ) or ( $action eq 'list' ) or ( $action eq '' ) or ( $action eq 'help' ) );
@@ -125,7 +125,9 @@ sub parseArgs( $ ) {
 sub buildArgs( $ ) {
        my( $args ) = @_;
        my $result = '';
-       $result .= "?$_=".$args->{$_} foreach( keys %{$args} );
+       foreach( keys %{$args} ) {
+               $result .= "?$_=".$args->{$_} if( defined $args->{$_} );
+       }
        return $result;
 }