remember selected search distribution
[opensuse:software-o-o.git] / app / controllers / search_controller.rb
1 class SearchController < ApplicationController
2   layout "application"
3
4   def index
5     if params[:baseproject]
6       @baseproject = params[:baseproject]
7
8       # this can get removed, when 11.2 is released and available in OBS
9       if @baseproject == "openSUSE:11.2"
10          @baseproject = "openSUSE:Factory"
11       end
12
13     end
14     if params[:q]
15       perform_search
16     end
17   end
18
19   def search
20     if perform_search
21       render :partial => "search_result"
22     else
23       render :text => "Search string must have at least 2 characters."
24     end
25   end
26
27   def update_description
28     @item_key = params[:item_key]
29     if params[:type] == :pattern
30       render :update do |page|
31         page.replace_html "description-#@item_key", "blub"
32       end
33       return
34     end
35     @fname = params[:fname]
36     @item_description = "pre"
37     tmp, @project, @repository = @item_key.split(/\//)
38     begin
39       info = ::Published.find @fname, :view => "fileinfo", :project => @project,
40         :repository => @repository, :arch => params[:arch]
41       @item_description = info.description.to_s
42     rescue ActiveXML::Transport::NotFoundError
43     rescue RuntimeError
44     end
45     render :update do |page|
46       page.replace_html "description-#@item_key", :partial => 'description'
47     end
48   end
49
50   private
51   def perform_search
52     @query = params[:q]
53     @baseproject = params[:baseproject]
54     cookies[:search_baseproject] = { :value => @baseproject, :expires => 1.month.from_now }
55     @current_page = params[:p].to_i
56     @current_page = 1 if @current_page == 0
57
58     if @query =~ / /
59       #sort by length DESC then alphabetically ASC
60       parts = @query.split(" ").sort_by{|a| [-(a.size),a]}
61       return false if parts[0].length < 2
62       @query = parts.join(" ") 
63     else
64       return false if @query.length < 2
65     end
66
67     base = @baseproject=="ALL" ? "" : @baseproject
68     @result = Seeker.prepare_result(CGI.escape(@query), base)
69     return true
70   end 
71 end