do language selection in a before filter
[opensuse:software-o-o.git] / app / controllers / search_controller.rb
1 class SearchController < ApplicationController
2
3   def index
4     if params[:baseproject]
5       @baseproject = params[:baseproject]
6     end
7     if params[:q]
8       perform_search
9     end
10   end
11
12   def download
13     DownloadHistory.create :query => params[:query], :base => params[:base],
14       :file => params[:file]
15     redirect_to "http://download.opensuse.org/repositories/" + params[:file]
16   end
17
18   private
19
20   def perform_search
21     @query = params[:q]
22     @baseproject = params[:baseproject]
23     @current_page = params[:p].to_i
24     @current_page = 1 if @current_page == 0
25
26     if @query.split(" ").select{|e| e.length < 2 }.size > 0
27       flash.now[:error] = 'Please use a search string of at least 2 characters' and return
28     end
29
30     base = @baseproject=="ALL" ? "" : @baseproject
31     begin
32       @result = Seeker.prepare_result(CGI.escape(@query).gsub("+", " "), base)
33       if @current_page == 1 and @result.length > 1 # ignore sub pages
34         SearchHistory.create :query => @query, :base => @baseproject, :patterns => @result.pattern_count,
35           :binaries => @result.binary_count, :count => @result.length
36       end
37     rescue => e
38       search_error, code, api_exception = ActiveXML::Transport.extract_error_message e
39       logger.error _("Could not perform search: ") + search_error
40       flash.now[:error] = _("Could not perform search: ") + search_error and return
41     end
42     
43     flash.now[:warn] = _("Please be more precise in your search, search limit reached.") if @result.length >= 1000
44     return true
45   end
46
47 end