openSUSE 11.2 is our next release
[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     @current_page = params[:p].to_i
55     @current_page = 1 if @current_page == 0
56
57     if @query =~ / /
58       #sort by length DESC then alphabetically ASC
59       parts = @query.split(" ").sort_by{|a| [-(a.size),a]}
60       return false if parts[0].length < 2
61       @query = parts.join(" ") 
62     else
63       return false if @query.length < 2
64     end
65
66     base = @baseproject=="ALL" ? "" : @baseproject
67     @result = Seeker.prepare_result(CGI.escape(@query), base)
68     return true
69   end 
70 end