Commit 5c18a693f1dd6764cfd3e73a03d4ccc3eb3d1d87

Authored by Francisco Marcelo de Araújo Lima Júnior
2 parents dd066a50 61b5a40b

Merge branch pairwise_search into master

app/controllers/choices_controller.rb
@@ -5,20 +5,22 @@ class ChoicesController < InheritedResources::Base @@ -5,20 +5,22 @@ class ChoicesController < InheritedResources::Base
5 has_scope :active, :type => :boolean, :only => :index 5 has_scope :active, :type => :boolean, :only => :index
6 6
7 before_filter :authenticate 7 before_filter :authenticate
8 - 8 +
9 def index 9 def index
10 if params[:limit] 10 if params[:limit]
11 @question = current_user.questions.find(params[:question_id]) 11 @question = current_user.questions.find(params[:question_id])
12 12
13 find_options = {:conditions => {:question_id => @question.id}, 13 find_options = {:conditions => {:question_id => @question.id},
14 - :limit => params[:limit].to_i, 14 + :limit => params[:limit].to_i,
15 :order => 'score DESC' 15 :order => 'score DESC'
16 } 16 }
17 - 17 +
18 find_options[:conditions].merge!(:active => true) unless params[:include_inactive] 18 find_options[:conditions].merge!(:active => true) unless params[:include_inactive]
19 19
  20 + find_options[:include] = [:creator]
  21 +
20 if(params[:ignore_flagged]) 22 if(params[:ignore_flagged])
21 - find_options.merge({ :include => :flags }) 23 + find_options[:include] << :flags
22 find_options[:conditions].merge!({:flags => {:id => nil}}) 24 find_options[:conditions].merge!({:flags => {:id => nil}})
23 end 25 end
24 26
@@ -27,22 +29,64 @@ class ChoicesController &lt; InheritedResources::Base @@ -27,22 +29,64 @@ class ChoicesController &lt; InheritedResources::Base
27 @choices = Choice.find(:all, find_options) 29 @choices = Choice.find(:all, find_options)
28 30
29 else 31 else
30 - @question = current_user.questions.find(params[:question_id]) #eagerloads ALL choices 32 + @question = current_user.questions.find(params[:question_id])
  33 +
  34 + sort_by = "score"
  35 + sort_order = "DESC"
  36 +
  37 + if !params[:order].blank?
  38 +
  39 + if params[:order][:sort_order].downcase == "asc" or params[:order][:sort_order].downcase == "desc"
  40 + sort_order = params[:order][:sort_order].downcase
  41 + end
  42 +
  43 + case params[:order][:sort_by].downcase
  44 + when "data"
  45 + sort_by = "choices.data"
  46 + when "created_date"
  47 + sort_by = "choices.created_at"
  48 + when "visitor_identifier"
  49 + sort_by = "visitors.identifier"
  50 + else
  51 + sort_by = "score"
  52 + end
  53 +
  54 + end
31 55
32 - if params[:inactive_ignore_flagged]  
33 - @choices = @question.choices(true).inactive_ignore_flagged.find(:all)  
34 - elsif params[:inactive]  
35 - @choices = @question.choices(true).inactive.find(:all) 56 + order = "#{sort_by} #{sort_order}"
  57 +
  58 + find_options = {
  59 + :include => [:creator],
  60 + :conditions => {},
  61 + :order => order
  62 + }
  63 +
  64 + if params[:filter] && !params[:filter][:data].blank?
  65 + conditions = []
  66 + conditions << ['lower(data) like ?', "%#{params[:filter][:data].downcase}%"]
  67 + find_options[:conditions] = [conditions.map{|c| c[0] }.join(" AND "), *conditions.map{|c| c[1..-1] }.flatten]
  68 + end
  69 +
  70 + if (!params[:reproved].blank?)
  71 + @choices = @question.choices(true).reproved.find(:all, find_options)
36 else 72 else
37 - unless params[:include_inactive]  
38 - @choices = @question.choices(true).active.find(:all) 73 + if params[:inactive_ignore_flagged]
  74 + @choices = @question.choices(true).inactive_ignore_flagged.find(:all, find_options)
  75 + elsif params[:inactive]
  76 + @choices = @question.choices(true).inactive.find(:all, find_options)
39 else 77 else
40 - @choices = @question.choices.find(:all) 78 + unless params[:include_inactive]
  79 + @choices = @question.choices(true).active.find(:all, find_options)
  80 + else
  81 + @choices = @question.choices.find(:all, find_options)
  82 + end
41 end 83 end
42 end 84 end
  85 +
43 end 86 end
  87 +
44 index! do |format| 88 index! do |format|
45 - format.xml { render :xml => @choices.to_xml(:only => [ :data, :score, :id, :active, :created_at, :wins, :losses], :methods => [:user_created, :creator_identifier])} 89 + format.xml { render :xml => @choices.to_xml(:only => [ :data, :score, :id, :active, :created_at, :wins, :losses], :methods => [:user_created, :creator_identifier, :reproved])}
46 end 90 end
47 91
48 end 92 end
@@ -62,10 +106,10 @@ class ChoicesController &lt; InheritedResources::Base @@ -62,10 +106,10 @@ class ChoicesController &lt; InheritedResources::Base
62 end 106 end
63 107
64 def create 108 def create
65 - 109 +
66 visitor_identifier = params[:choice].delete(:visitor_identifier) 110 visitor_identifier = params[:choice].delete(:visitor_identifier)
67 111
68 - visitor = current_user.default_visitor 112 + visitor = current_user.default_visitor
69 if visitor_identifier 113 if visitor_identifier
70 visitor = current_user.visitors.find_or_create_by_identifier(visitor_identifier) 114 visitor = current_user.visitors.find_or_create_by_identifier(visitor_identifier)
71 end 115 end
@@ -78,16 +122,15 @@ class ChoicesController &lt; InheritedResources::Base @@ -78,16 +122,15 @@ class ChoicesController &lt; InheritedResources::Base
78 @choice = Choice.new(params[:choice]) 122 @choice = Choice.new(params[:choice])
79 create! 123 create!
80 end 124 end
81 - 125 +
82 def flag 126 def flag
83 @question = current_user.questions.find(params[:question_id]) 127 @question = current_user.questions.find(params[:question_id])
84 @choice = @question.choices.find(params[:id]) 128 @choice = @question.choices.find(params[:id])
85 129
86 flag_params = {:choice_id => params[:id].to_i, :question_id => params[:question_id].to_i, :site_id => current_user.id} 130 flag_params = {:choice_id => params[:id].to_i, :question_id => params[:question_id].to_i, :site_id => current_user.id}
87 131
88 - if explanation = params[:explanation] 132 + if explanation = params[:explanation]
89 flag_params.merge!({:explanation => explanation}) 133 flag_params.merge!({:explanation => explanation})
90 -  
91 end 134 end
92 if visitor_identifier = params[:visitor_identifier] 135 if visitor_identifier = params[:visitor_identifier]
93 visitor = current_user.visitors.find_or_create_by_identifier(visitor_identifier) 136 visitor = current_user.visitors.find_or_create_by_identifier(visitor_identifier)
@@ -130,6 +173,5 @@ class ChoicesController &lt; InheritedResources::Base @@ -130,6 +173,5 @@ class ChoicesController &lt; InheritedResources::Base
130 end 173 end
131 end 174 end
132 175
133 -  
134 end 176 end
135 - 177 +
app/models/choice.rb
@@ -23,6 +23,7 @@ class Choice &lt; ActiveRecord::Base @@ -23,6 +23,7 @@ class Choice &lt; ActiveRecord::Base
23 named_scope :active, :conditions => { :active => true } 23 named_scope :active, :conditions => { :active => true }
24 named_scope :inactive, :conditions => { :active => false} 24 named_scope :inactive, :conditions => { :active => false}
25 named_scope :inactive_ignore_flagged, :include => :flags, :conditions => {:active => false, :flags => {:id => nil}} 25 named_scope :inactive_ignore_flagged, :include => :flags, :conditions => {:active => false, :flags => {:id => nil}}
  26 + named_scope :reproved, :joins => :flags
26 named_scope :not_created_by, lambda { |creator_id| 27 named_scope :not_created_by, lambda { |creator_id|
27 { :conditions => ["creator_id <> ?", creator_id] } 28 { :conditions => ["creator_id <> ?", creator_id] }
28 } 29 }
@@ -40,6 +41,10 @@ class Choice &lt; ActiveRecord::Base @@ -40,6 +41,10 @@ class Choice &lt; ActiveRecord::Base
40 end 41 end
41 end 42 end
42 43
  44 + def reproved
  45 + self.flags.any?{|a| a.choice_id == self.id}
  46 + end
  47 +
43 # if changing a choice to active, we want to regenerate prompts 48 # if changing a choice to active, we want to regenerate prompts
44 def update_prompt_queue 49 def update_prompt_queue
45 unless part_of_batch_create 50 unless part_of_batch_create
@@ -83,7 +88,7 @@ class Choice &lt; ActiveRecord::Base @@ -83,7 +88,7 @@ class Choice &lt; ActiveRecord::Base
83 end 88 end
84 89
85 def creator_identifier 90 def creator_identifier
86 - self.creator.identifier 91 + self.creator.identifier
87 end 92 end
88 93
89 def compute_bt_score(btprobs = nil) 94 def compute_bt_score(btprobs = nil)