Commit 5c18a693f1dd6764cfd3e73a03d4ccc3eb3d1d87
Exists in
master
and in
1 other branch
Merge branch pairwise_search into master
Showing
2 changed files
with
68 additions
and
21 deletions
Show diff stats
app/controllers/choices_controller.rb
... | ... | @@ -5,20 +5,22 @@ class ChoicesController < InheritedResources::Base |
5 | 5 | has_scope :active, :type => :boolean, :only => :index |
6 | 6 | |
7 | 7 | before_filter :authenticate |
8 | - | |
8 | + | |
9 | 9 | def index |
10 | 10 | if params[:limit] |
11 | 11 | @question = current_user.questions.find(params[:question_id]) |
12 | 12 | |
13 | 13 | find_options = {:conditions => {:question_id => @question.id}, |
14 | - :limit => params[:limit].to_i, | |
14 | + :limit => params[:limit].to_i, | |
15 | 15 | :order => 'score DESC' |
16 | 16 | } |
17 | - | |
17 | + | |
18 | 18 | find_options[:conditions].merge!(:active => true) unless params[:include_inactive] |
19 | 19 | |
20 | + find_options[:include] = [:creator] | |
21 | + | |
20 | 22 | if(params[:ignore_flagged]) |
21 | - find_options.merge({ :include => :flags }) | |
23 | + find_options[:include] << :flags | |
22 | 24 | find_options[:conditions].merge!({:flags => {:id => nil}}) |
23 | 25 | end |
24 | 26 | |
... | ... | @@ -27,22 +29,64 @@ class ChoicesController < InheritedResources::Base |
27 | 29 | @choices = Choice.find(:all, find_options) |
28 | 30 | |
29 | 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 | 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 | 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 | 83 | end |
42 | 84 | end |
85 | + | |
43 | 86 | end |
87 | + | |
44 | 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 | 90 | end |
47 | 91 | |
48 | 92 | end |
... | ... | @@ -62,10 +106,10 @@ class ChoicesController < InheritedResources::Base |
62 | 106 | end |
63 | 107 | |
64 | 108 | def create |
65 | - | |
109 | + | |
66 | 110 | visitor_identifier = params[:choice].delete(:visitor_identifier) |
67 | 111 | |
68 | - visitor = current_user.default_visitor | |
112 | + visitor = current_user.default_visitor | |
69 | 113 | if visitor_identifier |
70 | 114 | visitor = current_user.visitors.find_or_create_by_identifier(visitor_identifier) |
71 | 115 | end |
... | ... | @@ -78,16 +122,15 @@ class ChoicesController < InheritedResources::Base |
78 | 122 | @choice = Choice.new(params[:choice]) |
79 | 123 | create! |
80 | 124 | end |
81 | - | |
125 | + | |
82 | 126 | def flag |
83 | 127 | @question = current_user.questions.find(params[:question_id]) |
84 | 128 | @choice = @question.choices.find(params[:id]) |
85 | 129 | |
86 | 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 | 133 | flag_params.merge!({:explanation => explanation}) |
90 | - | |
91 | 134 | end |
92 | 135 | if visitor_identifier = params[:visitor_identifier] |
93 | 136 | visitor = current_user.visitors.find_or_create_by_identifier(visitor_identifier) |
... | ... | @@ -130,6 +173,5 @@ class ChoicesController < InheritedResources::Base |
130 | 173 | end |
131 | 174 | end |
132 | 175 | |
133 | - | |
134 | 176 | end |
135 | - | |
177 | + | ... | ... |
app/models/choice.rb
... | ... | @@ -23,6 +23,7 @@ class Choice < ActiveRecord::Base |
23 | 23 | named_scope :active, :conditions => { :active => true } |
24 | 24 | named_scope :inactive, :conditions => { :active => false} |
25 | 25 | named_scope :inactive_ignore_flagged, :include => :flags, :conditions => {:active => false, :flags => {:id => nil}} |
26 | + named_scope :reproved, :joins => :flags | |
26 | 27 | named_scope :not_created_by, lambda { |creator_id| |
27 | 28 | { :conditions => ["creator_id <> ?", creator_id] } |
28 | 29 | } |
... | ... | @@ -40,6 +41,10 @@ class Choice < ActiveRecord::Base |
40 | 41 | end |
41 | 42 | end |
42 | 43 | |
44 | + def reproved | |
45 | + self.flags.any?{|a| a.choice_id == self.id} | |
46 | + end | |
47 | + | |
43 | 48 | # if changing a choice to active, we want to regenerate prompts |
44 | 49 | def update_prompt_queue |
45 | 50 | unless part_of_batch_create |
... | ... | @@ -83,7 +88,7 @@ class Choice < ActiveRecord::Base |
83 | 88 | end |
84 | 89 | |
85 | 90 | def creator_identifier |
86 | - self.creator.identifier | |
91 | + self.creator.identifier | |
87 | 92 | end |
88 | 93 | |
89 | 94 | def compute_bt_score(btprobs = nil) | ... | ... |