Changeset 92 for server/trunk


Ignore:
Timestamp:
12/07/10 03:42:22 (14 years ago)
Author:
nanardon
Message:
  • use same call to respect ajax/json output
Location:
server/trunk/web
Files:
5 edited

Legend:

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

    r82 r92  
    7373 
    7474sub distrib_rs : Private { 
    75     my ( $self, $c, $distrib ) = @_; 
     75    my ( $self, $c, $distrib, $asfilter ) = @_; 
     76    if ($asfilter && !( 
     77            $distrib->{distribution} || 
     78            $distrib->{release} || 
     79            $distrib->{arch} || 
     80            $distrib->{media} || 
     81            $distrib->{media_group})) { 
     82        return; 
     83    } 
     84 
    7685    return $c->model('Base')->resultset('Distribution') 
    7786        ->search( 
  • server/trunk/web/lib/Sophie/Controller/Root.pm

    r77 r92  
    6868    my ( $self, $c ) = @_; 
    6969 
    70     # Hello World 
     70    $c->stash->{xmlrpc} = $c->forward( 
     71        '/search/bydate', 
     72        [ 
     73            { 
     74                src => 1, 
     75                rows => 20, 
     76            }, 
     77            1 
     78        ] 
     79    );  
    7180} 
    7281 
  • server/trunk/web/lib/Sophie/Controller/Search.pm

    r90 r92  
    4545 
    4646sub distrib_search : Private { 
    47     my ( $self, $c, $searchspec ) = @_; 
    48  
    49     return $c->forward('/distrib/distrib_rs', [ $searchspec ]) 
    50         ->search_related('MediasPaths') 
    51         ->search_related('Paths') 
    52         ->search_related('Rpmfiles'); 
     47    my ( $self, $c, $searchspec, $asfilter ) = @_; 
     48 
     49    # if asfilter is set, return undef if nothing would have been filter 
     50    if (my $rs = $c->forward('/distrib/distrib_rs', [ $searchspec, $asfilter ])) 
     51    { 
     52        return $rs 
     53            ->search_related('MediasPaths') 
     54            ->search_related('Paths') 
     55            ->search_related('Rpmfiles'); 
     56        } else { 
     57            return; 
     58        } 
    5359} 
    5460 
    5561sub format_search : Private { 
    5662    my ( $self, $c, $searchspec ) = @_; 
    57  
    58     $searchspec ||= {}; 
     63    $searchspec ||= {}; 
     64 
    5965    my $rs = $c->stash->{rs}->search( 
    6066        {}, 
     
    7783        @results = $rs->get_column($c->stash->{column})->all; 
    7884    } 
    79     if (!$searchspec->{page}) { 
     85    if (1 || !$searchspec->{page}) { 
    8086        my $pager = $c->stash->{rs}->pager; 
    8187        $c->stash->{pager} = $pager; 
     
    161167sub bydate : XMLRPCPath('/search/rpms/bydate') { 
    162168    my ( $self, $c, $searchspec, $date ) = @_; 
     169    $searchspec ||= {}; 
    163170 
    164171    return $c->stash->{xmlrpc} = [ 
     
    207214sub bypkgid : XMLRPCPath('/search/rpm/bypkgid') { 
    208215    my ( $self, $c, $searchspec, $pkgid ) = @_; 
     216    $searchspec ||= {}; 
     217 
     218    my $distrs = $c->forward('distrib_search', [ $searchspec, 1 ]); 
    209219 
    210220    $c->stash->{rs} = $c->model('Base')->resultset('Rpms')->search( 
     
    214224                    ? { issrc => $searchspec->{src} ? 1 : 0 } 
    215225                    : ()), 
    216                 { pkgid => $pkgid },  
    217                 { pkgid => 
    218                     { IN => $c->forward('distrib_search', [ $searchspec 
    219                         ])->get_column('pkgid')->as_query, },  
    220                 }, 
     226                { pkgid => $pkgid }, 
     227                $distrs 
     228                    ? { pkgid => { IN => $distrs->get_column('pkgid')->as_query, } } 
     229                    : () 
    221230            ]      
    222231        }, 
     
    238247sub byname : XMLRPCPath('/search/rpm/byname') { 
    239248    my ( $self, $c, $searchspec, $name, $sense, $evr ) = @_; 
    240  
    241     $searchspec ||= {}; 
     249    $searchspec ||= {}; 
     250 
     251    my $distrs = $c->forward('distrib_search', [ $searchspec, 1 ]); 
     252 
    242253    $c->stash->{rs} = $c->model('Base')->resultset('Rpms')->search( 
    243254        { 
     
    254265                    ] } 
    255266                    : ()), 
    256                 { pkgid => 
    257                     { IN => $c->forward('distrib_search', [ $searchspec 
    258                         ])->get_column('pkgid')->as_query, },  
    259                 }, 
     267                $distrs 
     268                    ? { pkgid => { IN => $distrs->get_column('pkgid')->as_query, }, } 
     269                    : (), 
    260270            ]      
    261271        }, 
     
    267277sub bytag : XMLRPCPath('/search/rpm/bytag') { 
    268278    my ( $self, $c, $searchspec, $tag, $tagvalue ) = @_; 
     279    $searchspec ||= {}; 
    269280 
    270281    my $tagrs = $c->model('Base')->resultset('Tags') 
    271282        ->search({ tagname => lc($tag), value => $tagvalue}) 
    272283        ->get_column('pkgid'); 
     284    my $distrs = $c->forward('distrib_search', [ $searchspec, 1 ]); 
    273285    $c->stash->{rs} = $c->model('Base')->resultset('Rpms')->search( 
    274286        { 
     
    280292                    { IN => $tagrs->as_query, }, 
    281293                }, 
    282                 { pkgid => 
    283                     { IN => $c->forward('distrib_search', [ $searchspec 
    284                         ])->get_column('pkgid')->as_query, },  
    285                 }, 
     294                $distrs 
     295                    ? { pkgid => { IN => $distrs->get_column('pkgid')->as_query, }, } 
     296                    : (), 
    286297            ]      
    287298        }, 
     
    293304sub bydep : XMLRPCPath('/search/rpm/bydep') { 
    294305    my ( $self, $c, $searchspec, $deptype, $depname, $depsense, $depevr ) = @_; 
     306    $searchspec ||= {}; 
     307 
     308    my $distrs = $c->forward('distrib_search', [ $searchspec, 1 ]); 
    295309 
    296310    my $deprs = $c->model('Base')->resultset('Deps')->search( 
     
    316330                    { IN => $deprs->as_query, }, 
    317331                }, 
    318                 { pkgid => 
    319                     { IN => $c->forward('distrib_search', [ $searchspec 
    320                         ])->get_column('pkgid')->as_query, },  
    321                 }, 
     332                $distrs 
     333                    ? { pkgid => { IN => $distrs->get_column('pkgid')->as_query, }, } 
     334                    : (), 
    322335            ]      
    323336        }, 
     
    329342    my ( $self, $c, $searchspec, $file) = @_; 
    330343    my ($dirname, $basename) = $file =~ m:^(.*/)?([^/]+)$:; 
    331  
     344    $searchspec ||= {}; 
     345 
     346    my $distrs = $c->forward('distrib_search', [ $searchspec, 1 ]); 
    332347    my $filers = $c->model('Base')->resultset('Files') 
    333348    ->search({ 
     
    347362                    { IN => $filers->as_query, }, 
    348363                }, 
    349                 { pkgid => 
    350                     { IN => $c->forward('distrib_search', [ $searchspec 
    351                         ])->get_column('pkgid')->as_query, },  
    352                 }, 
     364                $distrs 
     365                    ? { pkgid => { IN => $distrs->get_column('pkgid')->as_query, }, } 
     366                    : (), 
    353367            ]      
    354368        }, 
     
    359373sub fuzzy : XMLRPCPath('/search/rpm/fuzzy') { 
    360374    my ($self, $c, $searchspec, $name) = @_; 
     375    $searchspec ||= {}; 
    361376 
    362377    my $deprs = $c->model('Base')->resultset('Deps')->search( 
    363378        { deptype => 'P', depname => { '~*' => $name } } 
    364379    )->get_column('pkgid'); 
     380    my $distrs = $c->forward('distrib_search', [ $searchspec, 1 ]); 
    365381 
    366382    $c->stash->{rs} =  
     
    381397                     ] 
    382398                }, 
    383                 { pkgid => 
    384                     { IN => $c->forward('distrib_search', [ $searchspec 
    385                         ])->get_column('pkgid')->as_query, },  
    386                 }, 
     399                $distrs 
     400                    ? { pkgid => { IN => $distrs->get_column('pkgid')->as_query, }, } 
     401                    : (), 
    387402            ]      
    388403        }, 
    389         $c->forward('search_param'), 
    390404    ); 
    391405     
     
    395409sub quick : XMLRPCPath('/search/rpm/quick') { 
    396410    my ($self, $c, $searchspec, @keywords) = @_; 
     411    $searchspec ||= {}; 
    397412    my $tsquery = join(' & ', map { $_ =~ s/ /\\ /g; $_ } @keywords); 
     413     
     414    my $distrs = $c->forward('distrib_search', [ $searchspec, 1 ]); 
     415 
    398416    $c->stash->{rs} = $c->model('Base')->resultset('Rpms')->search( 
    399417            { 
    400418                -or => [ 
    401                     { -nest => \[ 
    402                         "to_tsvector('english', description) @@ to_tsquery(?)", 
    403                         [ plain_text => $tsquery], 
    404                     ], }, 
     419#                    { -nest => \[ 
     420#                        "to_tsvector('english', description) @@ to_tsquery(?)", 
     421#                        [ plain_text => $tsquery], 
     422#                    ], }, 
    405423                    { 
    406                     name => [ @keywords ], 
     424                    name => { '~*' => [ @keywords ] }, 
    407425                    }, 
    408426                ], 
     
    410428                ? (issrc => $searchspec->{src} ? 1 : 0) 
    411429                : ()), 
    412             pkgid => 
    413             { IN => $c->forward('distrib_search', [ $searchspec 
    414                     ])->get_column('pkgid')->as_query, },  
    415  
    416  
     430            ($distrs  
     431                ? (pkgid => { IN => $distrs->get_column('pkgid')->as_query, },) 
     432                : ()), 
    417433        }, 
    418434    ); 
     
    422438sub description : XMLRPCPath('/search/rpm/description') { 
    423439    my ($self, $c, $searchspec, @keywords) = @_; 
     440    $searchspec ||= {}; 
    424441    my $tsquery = join(' & ', map { $_ =~ s/ /\\ /g; $_ } @keywords); 
     442    my $distrs = $c->forward('distrib_search', [ $searchspec, 1 ]); 
    425443    $c->stash->{rs} = $c->model('Base')->resultset('Rpms')->search( 
    426444        { 
     
    432450                    ? (issrc => $searchspec->{src} ? 1 : 0) 
    433451                    : ()), 
    434                 pkgid => 
    435                     { IN => $c->forward('distrib_search', [ $searchspec 
    436                 ])->get_column('pkgid')->as_query, },  
    437                  
    438            
    439         }, 
    440         { 
    441             %{$c->forward('search_param')}, 
     452                ($distrs  
     453                    ? (pkgid => { IN => $distrs->get_column('pkgid')->as_query, },) 
     454                    : ()), 
     455        }, 
     456        { 
    442457            select => [  
    443458                "ts_rank_cd(to_tsvector('english', description),to_tsquery(?)) as rank", 
     
    447462            order_by => [ 'rank desc', 'name', 'evr using >>', 'issrc' ], 
    448463        }, 
    449     ); 
     464    )->as_subselect_rs; 
    450465    $c->forward('format_search', $searchspec); 
    451466} 
  • server/trunk/web/root/templates/html/index.tt

    r85 r92  
    33[% USE 'ObfuscateMail' %] 
    44 
    5 [% FOREACH package = c.forward('/search/bydate', [ 
    6     { 
    7     src => 1, 
    8     rows => 10, 
    9     }, 
    10     1 ]) %] 
     5[% FOREACH package = xmlrpc %] 
    116 
    127<div class="sophie_package_list"> 
  • server/trunk/web/t/controller_Search.t

    r5 r92  
    33use Test::More; 
    44 
     5my $pkgid = '45db73adf5f9ceabc8f9ea1dabccffcc'; 
     6 
    57BEGIN { use_ok 'Catalyst::Test', 'Sophie' } 
    68BEGIN { use_ok 'Sophie::Controller::Search' } 
    79 
     10sub xmlrpcreq { 
     11    my (@xmlargs) = @_; 
     12    my $str = RPC::XML::request->new( @xmlargs )->as_string; 
     13 
     14    my $req = HTTP::Request->new( POST => 'http://localhost/rpc' ); 
     15    $req->header( 'Content-Length'  => length($str) ); 
     16    $req->header( 'Content-Type'    => 'text/xml' ); 
     17    $req->content( $str ); 
     18    return $req; 
     19} 
     20 
     21ok(  
     22    request( xmlrpcreq('search.rpms.bydate', {}, time - 3600) ), 
     23    "search.rpms.bydate" 
     24); 
     25 
     26ok(  
     27    request( xmlrpcreq('search.rpm.bypkgid', {}, $pkgid) ), 
     28    "search.rpm.bypkgid" 
     29); 
     30 
     31ok(  
     32    request( xmlrpcreq('search.rpm.byname', {}, 'rpm', '>', '0') ), 
     33    "search.rpm.byname" 
     34); 
     35 
     36ok(  
     37    request( xmlrpcreq('search.rpm.bytag', {}, 'name', 'rpm') ), 
     38    "search.rpm.bytag" 
     39); 
     40 
     41ok(  
     42    request( xmlrpcreq('search.rpm.bydep', {}, 'P', 'rpm', '>', '0') ), 
     43    "search.rpm.bydep" 
     44); 
     45 
     46ok(  
     47    request( xmlrpcreq('search.rpm.byfile', {}, '/bin/rpm') ), 
     48    "search.rpm.byfile" 
     49); 
     50 
     51ok(  
     52    request( xmlrpcreq('search.rpm.fuzzy', {}, 'rpm-build') ), 
     53    "search.rpm.fuzzy" 
     54); 
     55ok(  
     56    request( xmlrpcreq('search.rpm.quick', {}, 'rpm-build') ), 
     57    "search.rpm.quick" 
     58); 
     59 
     60 
     61ok(  
     62    request( xmlrpcreq('search.rpm.description', {}, qw'rpm build') ), 
     63    "search.rpm.description" 
     64); 
     65 
    866ok( request('/search')->is_success, 'Request should succeed' ); 
    967done_testing(); 
Note: See TracChangeset for help on using the changeset viewer.