finish adapting results page
[opensuse:software-o-o.git] / app / controllers / search_controller.rb
1 class SearchController < ApplicationController
2   layout "application"
3
4   def index
5     if params[:lang].nil?
6       lang = request.compatible_language_from(LANGUAGES) || "en"
7     else
8       lang = params[:lang][0]
9     end
10     GetText.locale = lang
11
12     if params[:baseproject]
13       @baseproject = params[:baseproject]
14     end
15     if params[:q]
16       perform_search
17     end
18   end
19
20   def search
21     if perform_search
22       render :partial => "search_result" if request.xhr?
23       render "_search_result" if !request.xhr?
24     else
25       render :text => '<p id="search_short">Search strings must have at least 2 characters.</p>'
26     end
27   end
28
29
30   def download
31      DownloadHistory.create :query => params[:query], :base => params[:base], 
32                             :file => params[:file]              
33      redirect_to "http://download.opensuse.org/repositories/" + params[:file]
34   end
35
36   private
37   
38   def perform_search
39     @query = params[:q]
40     @baseproject = params[:baseproject]
41     cookies[:search_baseproject] = { :value => @baseproject, :expires => 1.month.from_now }
42     @current_page = params[:p].to_i
43     @current_page = 1 if @current_page == 0
44
45     return false if @query.length < 2
46     return false if @query =~ / / and @query.split(" ").select{|e| e.length < 2 }.size > 0
47     
48     base = @baseproject=="ALL" ? "" : @baseproject
49     @result = Seeker.prepare_result(CGI.escape(@query).gsub("+", " "), base)
50     if @current_page == 1 and @result.length > 1 # ignore sub pages
51       SearchHistory.create :query => @query, :base => @baseproject, :patterns => @result.pattern_count, 
52                            :binaries => @result.binary_count, :count => @result.length
53     end
54     return true
55   end 
56 end