Changeset 40
- Timestamp:
- 11/27/10 17:38:12 (13 years ago)
- Location:
- server/trunk/web
- Files:
-
- 8 edited
Legend:
- Unmodified
- Added
- Removed
-
server/trunk/web/lib/Sophie/Base/Result/Rpms.pm
r4 r40 6 6 7 7 __PACKAGE__->table('rpms'); 8 __PACKAGE__->add_columns(qw/pkgid summary description issrc /);8 __PACKAGE__->add_columns(qw/pkgid summary description issrc name/); 9 9 __PACKAGE__->set_primary_key(qw/pkgid/); 10 10 __PACKAGE__->has_many(Rpmfile => 'Sophie::Base::Result::RpmFile', 'pkgid'); -
server/trunk/web/lib/Sophie/Controller/Explorer.pm
r38 r40 26 26 27 27 $c->stash->{path} = join('/', grep { $_ } @args); 28 for(my $i=0; $i < @args; $i++) { 29 push(@{$c->stash->{eachpath}}, { dir=>$args[$i], path =>join('/', 30 @args[0 .. $i] ) }); 31 } 28 32 $c->stash->{dirurl} = $c->uri_for('/0explorer/dir', 29 33 $c->stash->{path} ? -
server/trunk/web/lib/Sophie/Controller/Rpms.pm
r28 r40 179 179 180 180 181 sub rpms : Chained : PathPart {181 sub rpms : Chained : PathPart :XMLRPCLocal { 182 182 my ( $self, $c, $pkgid ) = @_; 183 183 $c->stash->{pkgid} = $c->model('Base')->resultset('Rpms')->search(pkgid => $pkgid)->next; -
server/trunk/web/lib/Sophie/Controller/Search.pm
r16 r40 2 2 use Moose; 3 3 use namespace::autoclean; 4 use Sophie; 4 5 5 6 BEGIN {extends 'Catalyst::Controller'; } … … 21 22 22 23 =cut 24 25 my $search_param = { 26 rows => Sophie->config()->{'max_reply'} || 20000, 27 order_by => [ 'name', 'evr using >>', 'issrc' ], 28 select => [ 'pkgid' ], 29 }; 23 30 24 31 sub index :Path :Args(0) { … … 28 35 } 29 36 37 sub distrib_search : Private { 38 my ( $self, $c, $searchspec ) = @_; 39 40 return $c->model('Base')->resultset('Distribution') 41 ->search( 42 { 43 $searchspec->{distribution} 44 ? (name => $searchspec->{distribution}) 45 : () 46 } 47 )->search_related('Release', 48 { 49 $searchspec->{release} 50 ? (release => $searchspec->{release}) 51 : () 52 } 53 )->search_related('Arch', 54 { 55 $searchspec->{arch} 56 ? (arch => $searchspec->{arch}) 57 : () 58 } 59 )->search_related('Medias') 60 ->search_related('MediasPaths') 61 ->search_related('Paths') 62 ->search_related('Rpmfiles'); 63 } 64 30 65 sub bytag : XMLRPCPath('/search/rpm/bytag') { 31 66 my ( $self, $c, $searchspec, $tag, $tagvalue ) = @_; 32 67 33 @{$c->stash->{xmlrpc}} = $c->model('Base')->resultset('Rpms')->search( 34 { 35 pkgid => { IN => $c->model('Base')->resultset('Tags') 36 ->search({ tagname => $tag, value => $tagvalue}) 37 ->get_column('pkgid')->as_query } 38 } 39 )->get_column('pkgid')->all 68 my $tagrs = $c->model('Base')->resultset('Tags') 69 ->search({ tagname => lc($tag), value => $tagvalue}) 70 ->get_column('pkgid'); 71 $c->stash->{xmlrpc} = [ $c->model('Base')->resultset('Rpms')->search( 72 { 73 -and => [ 74 (exists($searchspec->{src}) 75 ? { issrc => $searchspec->{src} ? 1 : 0 } 76 : ()), 77 { pkgid => 78 { IN => $tagrs->as_query, }, 79 }, 80 { pkgid => 81 { IN => $c->forward('distrib_search', [ $searchspec 82 ])->get_column('pkgid')->as_query, }, 83 }, 84 ] 85 }, 86 $search_param, 87 )->get_column('pkgid')->all ] 40 88 41 89 } … … 44 92 my ( $self, $c, $searchspec, $deptype, $depname, $depsense, $depevr ) = @_; 45 93 46 @{$c->stash->{xmlrpc}} = $c->model('Base')->resultset('Rpms')->search( 47 { 48 pkgid => { IN => $c->model('Base')->resultset('Deps') 49 ->search({ 50 deptype => $deptype, 51 depname => $depname, 52 ($depsense 53 ? (-nest => \[ 54 'rpmdepmatch(flags, evr, rpmsenseflag(?), ?)', 55 [ plain_text => $depsense], 56 [ plain_text => $depevr ] 57 ]) 58 : () 59 ), 60 }) 61 ->get_column('pkgid')->as_query } 94 my $deprs = $c->model('Base')->resultset('Deps')->search( 95 { 96 deptype => $deptype, 97 depname => $depname, 98 ($depsense 99 ? (-nest => \[ 100 'rpmdepmatch(flags, evr, rpmsenseflag(?), ?)', 101 [ plain_text => $depsense], 102 [ plain_text => $depevr ] 103 ]) 104 : ()), 62 105 } 63 )->get_column('pkgid')->all 64 106 )->get_column('pkgid'); 107 $c->stash->{xmlrpc} = [ $c->model('Base')->resultset('Rpms')->search( 108 { 109 -and => [ 110 (exists($searchspec->{src}) 111 ? { issrc => $searchspec->{src} ? 1 : 0 } 112 : ()), 113 { pkgid => 114 { IN => $deprs->as_query, }, 115 }, 116 { pkgid => 117 { IN => $c->forward('distrib_search', [ $searchspec 118 ])->get_column('pkgid')->as_query, }, 119 }, 120 ] 121 }, 122 $search_param, 123 )->get_column('pkgid')->all ] 65 124 } 66 125 … … 69 128 my ($dirname, $basename) = $file =~ m:^(.*/)?([^/]+)$:; 70 129 71 @{$c->stash->{xmlrpc}} = $c->model('Base')->resultset('Rpms')->search( 72 { 73 pkgid => { IN => $c->model('Base')->resultset('Files') 74 ->search({ 75 ($dirname 76 ? (dirname => $dirname) 77 : ()), 78 basename => $basename, 79 }) 80 ->get_column('pkgid')->as_query } 81 } 82 )->get_column('pkgid')->all 130 my $filers = $c->model('Base')->resultset('Files') 131 ->search({ 132 ($dirname 133 ? (dirname => $dirname) 134 : ()), 135 basename => $basename, 136 }) 137 ->get_column('pkgid'); 138 $c->stash->{xmlrpc} = [ $c->model('Base')->resultset('Rpms')->search( 139 { 140 -and => [ 141 (exists($searchspec->{src}) 142 ? { issrc => $searchspec->{src} ? 1 : 0 } 143 : ()), 144 { pkgid => 145 { IN => $filers->as_query, }, 146 }, 147 { pkgid => 148 { IN => $c->forward('distrib_search', [ $searchspec 149 ])->get_column('pkgid')->as_query, }, 150 }, 151 ] 152 }, 153 $search_param, 154 )->get_column('pkgid')->all ] 155 } 156 157 sub fuzzy : XMLRPCPath('/search/rpm/fuzzy') { 158 my ($self, $c, $searchspec, $name) = @_; 159 160 my $namers = $c->model('Base')->resultset('Tags')->search( 161 { tagname => 'name', value => { '~*' => $name } } 162 )->get_column('pkgid'); 163 my $deprs = $c->model('Base')->resultset('Deps')->search( 164 { deptype => 'P', depname => { '~*' => $name } } 165 )->get_column('pkgid'); 166 167 $c->stash->{xmlrpc} = [ $c->model('Base')->resultset('Rpms')->search( 168 { 169 -and => [ 170 (exists($searchspec->{src}) 171 ? { issrc => $searchspec->{src} ? 1 : 0 } 172 : ()), 173 { -or => [ 174 { pkgid => 175 { IN => $namers->as_query, }, 176 }, 177 { pkgid => 178 { IN => $deprs->as_query, }, 179 }, ] 180 }, 181 { pkgid => 182 { IN => $c->forward('distrib_search', [ $searchspec 183 ])->get_column('pkgid')->as_query, }, 184 }, 185 ] 186 }, 187 $search_param, 188 )->get_column('pkgid')->all ] 189 } 190 191 sub description : XMLRPCPath('/search/rpm/description') { 192 my ($self, $c, $searchspec, @keywords) = @_; 193 my $tsquery = join(' & ', map { $_ =~ s/ /\\ /g; $_ } @keywords); 194 $c->stash->{xmlrpc} = [ map { $_->get_column('pkgid') } $c->model('Base')->resultset('Rpms')->search( 195 { 196 -nest => \[ 197 "to_tsvector('english', description) @@ to_tsquery(?)", 198 [ plain_text => $tsquery], 199 ], 200 (exists($searchspec->{src}) 201 ? (issrc => $searchspec->{src} ? 1 : 0) 202 : ()), 203 pkgid => 204 { IN => $c->forward('distrib_search', [ $searchspec 205 ])->get_column('pkgid')->as_query, }, 206 207 208 }, 209 { 210 %$search_param, 211 select => [ 212 "ts_rank_cd(to_tsvector('english', description),to_tsquery(?)) as rank", 213 'pkgid' 214 ], 215 bind => [ $tsquery ], 216 order_by => [ 'rank desc', 'name', 'evr using >>', 'issrc' ], 217 }, 218 )->all ] 219 83 220 } 84 221 -
server/trunk/web/root/templates/html/0explorer/file.tt
r38 r40 4 4 5 5 [% FOREACH file = xmlrpc %] 6 [% info = c.forward('/rpms/info', [ file.pkgid ]) %] 6 7 <a href="[% c.uri_for('/rpms', file.pkgid) %]"> 7 [% c.forward('/rpms/info', [ file.pkgid ]).name | html%]8 [% info.name | html %]-[% info.version %]-[% info.release %].[% info.arch %] 8 9 </a><br> 9 10 [% END %] -
server/trunk/web/root/templates/html/explorer/index.html
r38 r40 1 1 2 <p>[% path %]</p> 2 <p> 3 <a href="[% c.uri_for('/explorer') %]">/</a> 4 [% FOREACH p = eachpath %] 5 <a href="[% c.uri_for('/explorer', p.path) %]">[% p.dir | html %]</a> 6 [% END %] 7 </p> 3 8 4 9 <div id="exp_dir" style="float: left; border: outset; width: 30%"> 5 10 Loading... 6 11 </div> 7 <div id="exp_file" style="float: left; border: outset; width: 30%">12 <div id="exp_file" style="float: left; border: outset; width: 60%"> 8 13 Loading... 9 14 </div> -
server/trunk/web/root/templates/includes/header.tt
r38 r40 25 25 <p id="sophie_menu"> 26 26 <span><a href="[% c.uri_for('/distrib') %]">Distribution</a></span> 27 <span><a href="[% c.uri_for('/explorer') %]">Explorer</a></span> 27 28 </p> 28 29 </div> -
server/trunk/web/sophie.conf.in
r25 r40 5 5 dbuser sophie 6 6 dbpassword **** 7 # max_reply 10000
Note: See TracChangeset
for help on using the changeset viewer.