Changeset 92 for server/trunk
- Timestamp:
- 12/07/10 03:42:22 (14 years ago)
- Location:
- server/trunk/web
- Files:
-
- 5 edited
Legend:
- Unmodified
- Added
- Removed
-
server/trunk/web/lib/Sophie/Controller/Distrib.pm
r82 r92 73 73 74 74 sub 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 76 85 return $c->model('Base')->resultset('Distribution') 77 86 ->search( -
server/trunk/web/lib/Sophie/Controller/Root.pm
r77 r92 68 68 my ( $self, $c ) = @_; 69 69 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 ); 71 80 } 72 81 -
server/trunk/web/lib/Sophie/Controller/Search.pm
r90 r92 45 45 46 46 sub 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 } 53 59 } 54 60 55 61 sub format_search : Private { 56 62 my ( $self, $c, $searchspec ) = @_; 57 58 $searchspec ||= {}; 63 $searchspec ||= {}; 64 59 65 my $rs = $c->stash->{rs}->search( 60 66 {}, … … 77 83 @results = $rs->get_column($c->stash->{column})->all; 78 84 } 79 if ( !$searchspec->{page}) {85 if (1 || !$searchspec->{page}) { 80 86 my $pager = $c->stash->{rs}->pager; 81 87 $c->stash->{pager} = $pager; … … 161 167 sub bydate : XMLRPCPath('/search/rpms/bydate') { 162 168 my ( $self, $c, $searchspec, $date ) = @_; 169 $searchspec ||= {}; 163 170 164 171 return $c->stash->{xmlrpc} = [ … … 207 214 sub bypkgid : XMLRPCPath('/search/rpm/bypkgid') { 208 215 my ( $self, $c, $searchspec, $pkgid ) = @_; 216 $searchspec ||= {}; 217 218 my $distrs = $c->forward('distrib_search', [ $searchspec, 1 ]); 209 219 210 220 $c->stash->{rs} = $c->model('Base')->resultset('Rpms')->search( … … 214 224 ? { issrc => $searchspec->{src} ? 1 : 0 } 215 225 : ()), 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 : () 221 230 ] 222 231 }, … … 238 247 sub byname : XMLRPCPath('/search/rpm/byname') { 239 248 my ( $self, $c, $searchspec, $name, $sense, $evr ) = @_; 240 241 $searchspec ||= {}; 249 $searchspec ||= {}; 250 251 my $distrs = $c->forward('distrib_search', [ $searchspec, 1 ]); 252 242 253 $c->stash->{rs} = $c->model('Base')->resultset('Rpms')->search( 243 254 { … … 254 265 ] } 255 266 : ()), 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 : (), 260 270 ] 261 271 }, … … 267 277 sub bytag : XMLRPCPath('/search/rpm/bytag') { 268 278 my ( $self, $c, $searchspec, $tag, $tagvalue ) = @_; 279 $searchspec ||= {}; 269 280 270 281 my $tagrs = $c->model('Base')->resultset('Tags') 271 282 ->search({ tagname => lc($tag), value => $tagvalue}) 272 283 ->get_column('pkgid'); 284 my $distrs = $c->forward('distrib_search', [ $searchspec, 1 ]); 273 285 $c->stash->{rs} = $c->model('Base')->resultset('Rpms')->search( 274 286 { … … 280 292 { IN => $tagrs->as_query, }, 281 293 }, 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 : (), 286 297 ] 287 298 }, … … 293 304 sub bydep : XMLRPCPath('/search/rpm/bydep') { 294 305 my ( $self, $c, $searchspec, $deptype, $depname, $depsense, $depevr ) = @_; 306 $searchspec ||= {}; 307 308 my $distrs = $c->forward('distrib_search', [ $searchspec, 1 ]); 295 309 296 310 my $deprs = $c->model('Base')->resultset('Deps')->search( … … 316 330 { IN => $deprs->as_query, }, 317 331 }, 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 : (), 322 335 ] 323 336 }, … … 329 342 my ( $self, $c, $searchspec, $file) = @_; 330 343 my ($dirname, $basename) = $file =~ m:^(.*/)?([^/]+)$:; 331 344 $searchspec ||= {}; 345 346 my $distrs = $c->forward('distrib_search', [ $searchspec, 1 ]); 332 347 my $filers = $c->model('Base')->resultset('Files') 333 348 ->search({ … … 347 362 { IN => $filers->as_query, }, 348 363 }, 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 : (), 353 367 ] 354 368 }, … … 359 373 sub fuzzy : XMLRPCPath('/search/rpm/fuzzy') { 360 374 my ($self, $c, $searchspec, $name) = @_; 375 $searchspec ||= {}; 361 376 362 377 my $deprs = $c->model('Base')->resultset('Deps')->search( 363 378 { deptype => 'P', depname => { '~*' => $name } } 364 379 )->get_column('pkgid'); 380 my $distrs = $c->forward('distrib_search', [ $searchspec, 1 ]); 365 381 366 382 $c->stash->{rs} = … … 381 397 ] 382 398 }, 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 : (), 387 402 ] 388 403 }, 389 $c->forward('search_param'),390 404 ); 391 405 … … 395 409 sub quick : XMLRPCPath('/search/rpm/quick') { 396 410 my ($self, $c, $searchspec, @keywords) = @_; 411 $searchspec ||= {}; 397 412 my $tsquery = join(' & ', map { $_ =~ s/ /\\ /g; $_ } @keywords); 413 414 my $distrs = $c->forward('distrib_search', [ $searchspec, 1 ]); 415 398 416 $c->stash->{rs} = $c->model('Base')->resultset('Rpms')->search( 399 417 { 400 418 -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 # ], }, 405 423 { 406 name => [ @keywords ],424 name => { '~*' => [ @keywords ] }, 407 425 }, 408 426 ], … … 410 428 ? (issrc => $searchspec->{src} ? 1 : 0) 411 429 : ()), 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 : ()), 417 433 }, 418 434 ); … … 422 438 sub description : XMLRPCPath('/search/rpm/description') { 423 439 my ($self, $c, $searchspec, @keywords) = @_; 440 $searchspec ||= {}; 424 441 my $tsquery = join(' & ', map { $_ =~ s/ /\\ /g; $_ } @keywords); 442 my $distrs = $c->forward('distrib_search', [ $searchspec, 1 ]); 425 443 $c->stash->{rs} = $c->model('Base')->resultset('Rpms')->search( 426 444 { … … 432 450 ? (issrc => $searchspec->{src} ? 1 : 0) 433 451 : ()), 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 { 442 457 select => [ 443 458 "ts_rank_cd(to_tsvector('english', description),to_tsquery(?)) as rank", … … 447 462 order_by => [ 'rank desc', 'name', 'evr using >>', 'issrc' ], 448 463 }, 449 ) ;464 )->as_subselect_rs; 450 465 $c->forward('format_search', $searchspec); 451 466 } -
server/trunk/web/root/templates/html/index.tt
r85 r92 3 3 [% USE 'ObfuscateMail' %] 4 4 5 [% FOREACH package = c.forward('/search/bydate', [ 6 { 7 src => 1, 8 rows => 10, 9 }, 10 1 ]) %] 5 [% FOREACH package = xmlrpc %] 11 6 12 7 <div class="sophie_package_list"> -
server/trunk/web/t/controller_Search.t
r5 r92 3 3 use Test::More; 4 4 5 my $pkgid = '45db73adf5f9ceabc8f9ea1dabccffcc'; 6 5 7 BEGIN { use_ok 'Catalyst::Test', 'Sophie' } 6 8 BEGIN { use_ok 'Sophie::Controller::Search' } 7 9 10 sub 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 21 ok( 22 request( xmlrpcreq('search.rpms.bydate', {}, time - 3600) ), 23 "search.rpms.bydate" 24 ); 25 26 ok( 27 request( xmlrpcreq('search.rpm.bypkgid', {}, $pkgid) ), 28 "search.rpm.bypkgid" 29 ); 30 31 ok( 32 request( xmlrpcreq('search.rpm.byname', {}, 'rpm', '>', '0') ), 33 "search.rpm.byname" 34 ); 35 36 ok( 37 request( xmlrpcreq('search.rpm.bytag', {}, 'name', 'rpm') ), 38 "search.rpm.bytag" 39 ); 40 41 ok( 42 request( xmlrpcreq('search.rpm.bydep', {}, 'P', 'rpm', '>', '0') ), 43 "search.rpm.bydep" 44 ); 45 46 ok( 47 request( xmlrpcreq('search.rpm.byfile', {}, '/bin/rpm') ), 48 "search.rpm.byfile" 49 ); 50 51 ok( 52 request( xmlrpcreq('search.rpm.fuzzy', {}, 'rpm-build') ), 53 "search.rpm.fuzzy" 54 ); 55 ok( 56 request( xmlrpcreq('search.rpm.quick', {}, 'rpm-build') ), 57 "search.rpm.quick" 58 ); 59 60 61 ok( 62 request( xmlrpcreq('search.rpm.description', {}, qw'rpm build') ), 63 "search.rpm.description" 64 ); 65 8 66 ok( request('/search')->is_success, 'Request should succeed' ); 9 67 done_testing();
Note: See TracChangeset
for help on using the changeset viewer.