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