Changeset 147


Ignore:
Timestamp:
12/20/10 00:21:14 (13 years ago)
Author:
nanardon
Message:
  • split search function (will probably break something...)
Location:
server/trunk/web
Files:
7 added
2 edited

Legend:

Unmodified
Added
Removed
  • server/trunk/web/lib/Sophie/Controller/Search.pm

    r144 r147  
    3737 
    3838    my $searchspec = { 
    39         page => $c->req->param('page') || undef, 
    4039    }; 
    4140 
     
    6160        }; 
    6261    } 
    63  
    6462} 
    6563 
     
    7371    if ($c->req->param('search')) { 
    7472        $c->session->{search} = $c->req->param('search'); 
    75         $c->forward('quick', [ 
     73        $c->forward('/search/rpm/quick', [ 
    7674                { 
    77                     page => $c->req->param('page') || undef, 
    7875                    src => 0, 
    7976                } , grep { $_ } split(/\s/, $c->req->param('search')) ]); 
     
    104101    my ( $self, $c, $searchspec ) = @_; 
    105102    $searchspec ||= {}; 
     103    $c->stash->{rs} or return; 
    106104 
    107105    my $rs = $c->stash->{rs}->search( 
    108106        {}, 
    109107        { 
    110             page => $searchspec->{page} || 1, 
    111             rows => $searchspec->{rows} || 10, 
     108            page => $searchspec->{page} ||  
     109                 $c->req->param('page') || 1, 
     110            rows => $searchspec->{rows} ||  
     111                 $c->req->param('rows') || 10, 
    112112        }, 
    113113    ); 
     
    255255} 
    256256 
    257 sub bypkgid : XMLRPCPath('/search/rpm/bypkgid') { 
     257sub bypkgid : Private { 
    258258    my ( $self, $c, $searchspec, $pkgid ) = @_; 
    259     $searchspec ||= {}; 
    260  
    261     my $distrs = $c->forward('distrib_search', [ $searchspec, 1 ]); 
    262  
    263     $c->stash->{rs} = $c->model('Base')->resultset('Rpms')->search( 
    264         { 
    265             -and => [  
    266                 (exists($searchspec->{src}) 
    267                     ? { issrc => $searchspec->{src} ? 1 : 0 } 
    268                     : ()), 
    269                 { pkgid => $pkgid }, 
    270                 $distrs 
    271                     ? { pkgid => { IN => $distrs->get_column('pkgid')->as_query, } } 
    272                     : () 
    273             ]      
    274         }, 
    275     ); 
    276  
    277     $c->forward('format_search', $searchspec); 
    278 } 
    279  
    280 =head2 search.rpm.byname (SEARCHSPEC, NAME, [SENSE, EVR]) 
    281  
    282 Search package by its NAME. SENSE and EVR are optional version filter where 
    283 SENSE is dependency sign (C<E<gt>>, C<=>, ...) and EVR the search version as 
    284 either C<VERSION>, C<VERSION-RELEASE> or C<EPOCH:VERSION-RELEASE>. 
    285  
    286 SEARCHSPEC is a struct with search options. 
    287  
    288 =cut 
    289  
    290 sub byname : XMLRPCPath('/search/rpm/byname') { 
     259    $c->log->debug(sprintf("Call to obsolete %s %s", __PACKAGE__, "bypkgid")); 
     260    $c->stash->{rs} = $c->forward('/search/rpm/bypkgid_rpc', [ $searchspec, $pkgid ]); 
     261    $c->forward('format_search', [ $searchspec ]); 
     262} 
     263 
     264sub byname_rs : Private { 
    291265    my ( $self, $c, $searchspec, $name, $sense, $evr ) = @_; 
    292266    $searchspec ||= {}; 
     
    294268    my $distrs = $c->forward('distrib_search', [ $searchspec, 1 ]); 
    295269 
    296     $c->stash->{rs} = $c->model('Base')->resultset('Rpms')->search( 
     270    return $c->model('Base::Rpms')->search( 
    297271        { 
    298272            -and => [  
     
    317291        } 
    318292    ); 
    319     $c->forward('format_search', $searchspec); 
    320  
    321 } 
    322  
    323 sub bytag : XMLRPCPath('/search/rpm/bytag') { 
     293} 
     294 
     295sub byname : Private { 
     296    my ( $self, $c, $searchspec, $name, $sense, $evr ) = @_; 
     297    $c->log->debug(sprintf("Call to obsolete %s %s", __PACKAGE__, "byname")); 
     298    $c->stash->{rs} = $c->forward('/search/rpm/byname_rpc', [ $searchspec, $name, $sense, $evr ]); 
     299    $c->forward('format_search', [ $searchspec ]); 
     300} 
     301 
     302sub bytag_rs : Private { 
    324303    my ( $self, $c, $searchspec, $tag, $tagvalue ) = @_; 
    325304    $searchspec ||= {}; 
     
    329308        ->get_column('pkgid'); 
    330309    my $distrs = $c->forward('distrib_search', [ $searchspec, 1 ]); 
    331     $c->stash->{rs} = $c->model('Base')->resultset('Rpms')->search( 
     310    return $c->model('Base')->resultset('Rpms')->search( 
    332311        { 
    333312            -and => [  
     
    344323        }, 
    345324    ); 
    346     $c->forward('format_search', $searchspec); 
    347  
     325} 
     326 
     327sub bytag : Private { 
     328    my ( $self, $c, $searchspec, $tag, $tagvalue ) = @_; 
     329 
     330    $c->log->debug(sprintf("Call to obsolete %s %s", __PACKAGE__, "bytag")); 
     331    $c->stash->{rs} = $c->forward('/search/rpm/bytag_rpc', [ $searchspec, $tag, $tagvalue ]); 
     332    $c->forward('format_search', [ $searchspec ]); 
     333} 
     334 
     335sub bypkgid_rs : Private { 
     336    my ( $self, $c, $searchspec, $pkgid ) = @_; 
     337    $searchspec ||= {}; 
     338 
     339    my $distrs = $c->forward('distrib_search', [ $searchspec, 1 ]); 
     340 
     341    return $c->model('Base::Rpms')->search( 
     342        { 
     343            -and => [  
     344                (exists($searchspec->{src}) 
     345                    ? { issrc => $searchspec->{src} ? 1 : 0 } 
     346                    : ()), 
     347                { pkgid => $pkgid }, 
     348                $distrs 
     349                    ? { pkgid => { IN => $distrs->get_column('pkgid')->as_query, } } 
     350                    : () 
     351            ]      
     352        }, 
     353    ); 
    348354} 
    349355 
     
    431437sub bydep : XMLRPCPath('/search/rpm/bydep') { 
    432438    my ( $self, $c, $searchspec, $deptype, $depname, $depsense, $depevr ) = @_; 
    433     $searchspec ||= {}; 
    434  
    435     my $distrs = $c->forward('distrib_search', [ $searchspec, 1 ]); 
    436  
    437     my $deprs = $c->forward( 
    438         'deps_rs', [  
    439             $searchspec, $deptype, $depname, 
    440             $depsense, $depevr  
    441         ], 
    442     )->get_column('pkgid'); 
    443     $c->stash->{rs} = $c->model('Base')->resultset('Rpms')->search( 
    444         { 
    445             pkgid =>  
    446                 { IN => $deprs->as_query, }, 
    447         }, 
    448         { 
    449             order_by => [ 'name', 'evr using >>', 'issrc', 'arch' ], 
    450         } 
    451     ); 
    452     $c->forward('format_search', $searchspec); 
    453 } 
    454  
    455 sub byfile : XMLRPCPath('/search/rpm/byfile') { 
     439    $c->forward('/search/rpm/bydep', [ $searchspec, $deptype, $depname, $depsense, $depevr ]); 
     440    $c->forward('format_search', [ $searchspec ]); 
     441} 
     442 
     443sub byfile : Private { 
    456444    my ( $self, $c, $searchspec, $file) = @_; 
    457     $searchspec ||= {}; 
    458     my $distrs = $c->forward('distrib_search', [ $searchspec, 1 ]); 
    459  
    460     my $filers = $c->forward('file_rs', [ $searchspec, $file ]) 
    461         ->get_column('pkgid'); 
    462     $c->stash->{rs} = $c->model('Base')->resultset('Rpms')->search( 
    463         { 
    464             pkgid => { IN => $filers->as_query, }, 
    465         }, 
    466         { 
    467             order_by => [ 'name', 'evr using >>', 'issrc', 'arch' ], 
    468         } 
    469     ); 
    470     $c->forward('format_search', $searchspec); 
    471 } 
    472  
    473 sub fuzzy : XMLRPCPath('/search/rpm/fuzzy') { 
    474     my ($self, $c, $searchspec, $name) = @_; 
    475     $searchspec ||= {}; 
    476  
    477     my $deprs = $c->model('Base')->resultset('Deps')->search( 
    478         { deptype => 'P', depname => { '~*' => $name } } 
    479     )->get_column('pkgid'); 
    480     my $distrs = $c->forward('distrib_search', [ $searchspec, 1 ]); 
    481  
    482     $c->stash->{rs} =  
    483  
    484         $c->model('Base')->resultset('Rpms')->search( 
    485         { 
    486             -and => [ 
    487                 (exists($searchspec->{src}) 
    488                     ? { issrc => $searchspec->{src} ? 1 : 0 } 
    489                     : ()), 
    490                 { -or => [ 
    491                     { name =>  
    492                         { '~*' => $name, }, 
    493                     }, 
    494 #                    { pkgid => 
    495 #                        { IN => $deprs->as_query, }, 
    496 #                    }, 
    497                      ] 
    498                 }, 
    499                 $distrs 
    500                     ? { pkgid => { IN => $distrs->get_column('pkgid')->as_query, }, } 
    501                     : (), 
    502             ]      
    503         }, 
    504     ); 
    505      
    506     $c->forward('format_search', $searchspec); 
    507 } 
    508  
    509 sub quick : XMLRPCPath('/search/rpm/quick') { 
    510     my ($self, $c, $searchspec, @keywords) = @_; 
    511     $searchspec ||= {}; 
    512     my $tsquery = join(' & ', map { $_ =~ s/ /\\ /g; $_ } @keywords); 
    513      
    514     my $distrs = $c->forward('distrib_search', [ $searchspec, 1 ]); 
    515  
    516     $c->stash->{rs} = $c->model('Base')->resultset('Rpms')->search( 
    517             { 
    518                 -or => [ 
    519 #                    { -nest => \[ 
    520 #                        "to_tsvector('english', description) @@ to_tsquery(?)", 
    521 #                        [ plain_text => $tsquery], 
    522 #                    ], }, 
    523                     { 
    524                     name => { '~*' => [ @keywords ] }, 
    525                     }, 
    526                 ], 
    527             (exists($searchspec->{src}) 
    528                 ? (issrc => $searchspec->{src} ? 1 : 0) 
    529                 : ()), 
    530             ($distrs  
    531                 ? (pkgid => { IN => $distrs->get_column('pkgid')->as_query, },) 
    532                 : ()), 
    533         }, 
    534     ); 
    535     $c->forward('format_search', $searchspec); 
    536 } 
    537  
    538 sub description : XMLRPCPath('/search/rpm/description') { 
    539     my ($self, $c, $searchspec, @keywords) = @_; 
    540     $searchspec ||= {}; 
    541     my $tsquery = join(' & ', map { $_ =~ s/ /\\ /g; $_ } @keywords); 
    542     my $distrs = $c->forward('distrib_search', [ $searchspec, 1 ]); 
    543     $c->stash->{rs} = $c->model('Base')->resultset('Rpms')->search( 
    544         { 
    545             -nest => \[ 
    546                     "to_tsvector('english', description) @@ to_tsquery(?)", 
    547                     [ plain_text => $tsquery], 
    548                 ], 
    549                 (exists($searchspec->{src}) 
    550                     ? (issrc => $searchspec->{src} ? 1 : 0) 
    551                     : ()), 
    552                 ($distrs  
    553                     ? (pkgid => { IN => $distrs->get_column('pkgid')->as_query, },) 
    554                     : ()), 
    555         }, 
    556         { 
    557             select => [  
    558                 "ts_rank_cd(to_tsvector('english', description),to_tsquery(?)) as rank", 
    559                 'pkgid' 
    560             ], 
    561             bind => [ $tsquery ],  
    562             order_by => [ 'rank desc', 'name', 'evr using >>', 'issrc' ], 
    563         }, 
    564     )->as_subselect_rs; 
    565     $c->forward('format_search', $searchspec); 
    566 } 
    567  
    568 sub sources : XMLRPCPath('/search/rpm/sources') { 
    569     my ( $self, $c, $searchspec, $pkgid ) = @_; 
    570  
    571     my $distrs = $c->forward('distrib_search', [ $searchspec, 1 ]); 
    572     my $sourcerpm = $c->forward('/rpms/queryformat', [ $pkgid, '%{SOURCERPM}' ]); 
    573     my $nosourcerpm = $sourcerpm; 
    574     $nosourcerpm =~ s/\.src.rpm$/\.nosrc.rpm/; 
    575  
    576     $c->stash->{rs} = $c->model('Base::Rpms')->search( 
    577         { 
    578             -and => [ 
    579                 { pkgid => { 
    580                     IN => $c->model('Base::RpmFile')->search( 
    581                         { filename => [ $sourcerpm, $nosourcerpm ] } 
    582                     )->get_column('pkgid')->as_query 
    583                 }, }, 
    584                 ($distrs  
    585                     ? ({ pkgid => { IN => $distrs->get_column('pkgid')->as_query, }, },) 
    586                     : ()), 
    587             ], 
    588         } 
    589     ); 
    590  
    591     $c->forward('format_search', $searchspec); 
    592 } 
    593  
    594 sub binaries : XMLRPCPath('/search/rpm/binaries') { 
    595     my ( $self, $c, $searchspec, $pkgid ) = @_; 
    596  
    597     my $distrs = $c->forward('distrib_search', [ $searchspec, 1 ]); 
    598     my $sourcerpm = $c->forward('/rpms/queryformat', [ $pkgid, 
    599             '%{NAME}-%{VERSION}-%{RELEASE}.src.rpm' ]); 
    600     my $nosourcerpm = $sourcerpm; 
    601     $nosourcerpm =~ s/\.src.rpm$/\.nosrc.rpm/; 
    602  
    603     my $tagrs = $c->model('Base')->resultset('Tags') 
    604         ->search({ tagname => 'sourcerpm', value => [ $sourcerpm, $nosourcerpm ] }) 
    605         ->get_column('pkgid'); 
    606     $c->stash->{rs} = $c->model('Base::Rpms')->search( 
    607         { 
    608             -and => [ 
    609                 { issrc => 0 }, 
    610                 { pkgid => 
    611                     { IN => $tagrs->as_query, }, 
    612                 }, 
    613                 ($distrs  
    614                     ? ({ pkgid => { IN => $distrs->get_column('pkgid')->as_query, }, }) 
    615                     : ()), 
    616             ] 
    617         }, 
    618         { 
    619             order_by => [ qw(arch name), 'evr using >>' ], 
    620         }, 
    621     ); 
    622  
    623     $c->forward('format_search', $searchspec); 
     445    $c->forward('/search/rpm/byfile', [ $searchspec, $file ]); 
     446    $c->forward('format_search', [ $searchspec ]); 
    624447} 
    625448 
     
    633456    $c->stash->{column} = [ @col, qw(has_content perm user group) ]; 
    634457     
    635     $c->forward('format_search', $searchspec); 
     458    $c->forward('format_search', [ $searchspec ]); 
    636459} 
    637460 
     
    648471 
    649472    $c->stash->{column} = [ qw(name sense evr flags pkgid) ]; 
    650     $c->forward('format_search', $searchspec); 
     473    $c->forward('format_search', [ $searchspec ]); 
     474} 
     475 
     476sub end : Private { 
     477    my ($self, $c, $searchspec) = @_; 
     478    warn join(' ', keys %{ $searchspec }); 
     479 
     480    $c->forward('/search/format_search', [ $searchspec ]); 
     481    $c->forward('/end'); 
    651482} 
    652483 
  • server/trunk/web/root/templates/html/search/results.tt

    r142 r147  
    3636[% sargs.0.pkgid = pkgid %] 
    3737<ul> 
    38 [% FOREACH dep = c.forward('/search/dep_search', sargs).results %] 
     38[% FOREACH dep = c.forward('/search/dep/match', sargs) %] 
    3939<li>[% dep.name | html %] [% dep.sense | html %] [% dep.evr | html %]</li> 
    4040[% END %] 
     
    4545[% sargs.0.pkgid = pkgid %] 
    4646<ul class="filename"> 
    47 [% FOREACH file = c.forward('/search/file_search', sargs).results %] 
     47[% FOREACH file = c.forward('/search/file/byname', sargs) %] 
    4848<li>[% file.dirname | html -%][%- file.basename | html %]</li> 
    4949[% END %] 
Note: See TracChangeset for help on using the changeset viewer.