Commit fff49b4783dcf618384260c1648e3f9bc7582864
1 parent
2bebac97
Exists in
master
and in
1 other branch
Changes to support viewing site wide data
Showing
2 changed files
with
56 additions
and
8 deletions
Show diff stats
app/controllers/questions_controller.rb
| @@ -102,25 +102,42 @@ class QuestionsController < InheritedResources::Base | @@ -102,25 +102,42 @@ class QuestionsController < InheritedResources::Base | ||
| 102 | 102 | ||
| 103 | def num_votes_by_visitor_id | 103 | def num_votes_by_visitor_id |
| 104 | @question = current_user.questions.find(params[:id]) | 104 | @question = current_user.questions.find(params[:id]) |
| 105 | - hash = Vote.count(:conditions => "question_id = #{@question.id}", :group => "voter_id") | 105 | + |
| 106 | + votes_by_visitor_id= Vote.all(:select => 'visitors.identifier as thevi, count(*) as the_votes_count', | ||
| 107 | + :joins => :voter, | ||
| 108 | + :conditions => {:question_id => @question.id }, | ||
| 109 | + :group => "voter_id") | ||
| 110 | + | ||
| 106 | visitor_id_hash = {} | 111 | visitor_id_hash = {} |
| 107 | - hash.each do |visitor_id, num_votes| | ||
| 108 | - visitor = Visitor.find(visitor_id) | ||
| 109 | - visitor_id_hash[visitor.identifier] = num_votes | 112 | + |
| 113 | + votes_by_visitor_id.each do |visitor| | ||
| 114 | + visitor_id_hash[visitor.thevi] = visitor.the_votes_count | ||
| 115 | + visitor_id_hash[visitor.thevi] = visitor.the_votes_count | ||
| 110 | end | 116 | end |
| 111 | respond_to do |format| | 117 | respond_to do |format| |
| 112 | format.xml{ render :xml => visitor_id_hash.to_xml and return} | 118 | format.xml{ render :xml => visitor_id_hash.to_xml and return} |
| 113 | end | 119 | end |
| 114 | end | 120 | end |
| 115 | 121 | ||
| 116 | - def object_info_totals_by_date | ||
| 117 | - authenticate | 122 | + def all_num_votes_by_visitor_id |
| 123 | + votes_by_visitor_id= Vote.all(:select => 'visitors.identifier as thevi, count(*) as the_votes_count', | ||
| 124 | + :joins => :voter, | ||
| 125 | + :group => "voter_id") | ||
| 126 | + visitor_id_hash = {} | ||
| 127 | + votes_by_visitor_id.each do |visitor| | ||
| 128 | + visitor_id_hash[visitor.thevi] = visitor.the_votes_count | ||
| 129 | + visitor_id_hash[visitor.thevi] = visitor.the_votes_count | ||
| 130 | + end | ||
| 131 | + respond_to do |format| | ||
| 132 | + format.xml{ render :xml => visitor_id_hash.to_xml and return} | ||
| 133 | + end | ||
| 134 | + end | ||
| 118 | 135 | ||
| 136 | + def object_info_totals_by_date | ||
| 119 | object_type = params[:object_type] | 137 | object_type = params[:object_type] |
| 120 | 138 | ||
| 121 | @question = current_user.questions.find(params[:id]) | 139 | @question = current_user.questions.find(params[:id]) |
| 122 | if object_type == 'votes' | 140 | if object_type == 'votes' |
| 123 | - # eventually allow for users to specify type of export through params[:type] | ||
| 124 | hash = Vote.count(:conditions => "question_id = #{@question.id}", :group => "date(created_at)") | 141 | hash = Vote.count(:conditions => "question_id = #{@question.id}", :group => "date(created_at)") |
| 125 | elsif object_type == 'user_submitted_ideas' | 142 | elsif object_type == 'user_submitted_ideas' |
| 126 | hash = Choice.count(:include => 'item', | 143 | hash = Choice.count(:include => 'item', |
| @@ -140,6 +157,29 @@ class QuestionsController < InheritedResources::Base | @@ -140,6 +157,29 @@ class QuestionsController < InheritedResources::Base | ||
| 140 | format.xml { render :xml => hash.to_xml and return} | 157 | format.xml { render :xml => hash.to_xml and return} |
| 141 | end | 158 | end |
| 142 | end | 159 | end |
| 160 | + | ||
| 161 | + def all_object_info_totals_by_date | ||
| 162 | + object_type = params[:object_type] | ||
| 163 | + | ||
| 164 | + if object_type == 'votes' | ||
| 165 | + hash = Vote.count(:group => "date(created_at)") | ||
| 166 | + elsif object_type == 'user_submitted_ideas' | ||
| 167 | + hash = Choice.count(:include => ['item', 'question'], | ||
| 168 | + :conditions => "items.creator_id <> questions.creator_id", | ||
| 169 | + :group => "date(choices.created_at)") | ||
| 170 | + elsif object_type == 'user_sessions' | ||
| 171 | + result = Vote.find(:all, :select => 'date(created_at) as date, voter_id, count(*) as vote_count', | ||
| 172 | + :group => 'date(created_at), voter_id') | ||
| 173 | + hash = Hash.new(0) | ||
| 174 | + result.each do |r| | ||
| 175 | + hash[r.date]+=1 | ||
| 176 | + end | ||
| 177 | + end | ||
| 178 | + | ||
| 179 | + respond_to do |format| | ||
| 180 | + format.xml { render :xml => hash.to_xml and return} | ||
| 181 | + end | ||
| 182 | + end | ||
| 143 | 183 | ||
| 144 | protected | 184 | protected |
| 145 | def export_votes | 185 | def export_votes |
config/routes.rb
| 1 | ActionController::Routing::Routes.draw do |map| | 1 | ActionController::Routing::Routes.draw do |map| |
| 2 | #map.resources :clicks | 2 | #map.resources :clicks |
| 3 | map.resources :visitors, :collection => {:votes_by_session_ids => :post} | 3 | map.resources :visitors, :collection => {:votes_by_session_ids => :post} |
| 4 | - map.resources :questions, :member => { :object_info_totals_by_date => :get, :num_votes_by_visitor_id => :get, :export => :post, :set_autoactivate_ideas_from_abroad => :put, :activate => :put, :suspend => :put}, :collection => {:recent_votes_by_question_id => :get} do |question| | 4 | + map.resources :questions, :member => { :object_info_totals_by_date => :get, |
| 5 | + :num_votes_by_visitor_id => :get, | ||
| 6 | + :export => :post, | ||
| 7 | + :set_autoactivate_ideas_from_abroad => :put, | ||
| 8 | + :activate => :put, | ||
| 9 | + :suspend => :put}, | ||
| 10 | + :collection => {:all_num_votes_by_visitor_id => :get, | ||
| 11 | + :all_object_info_totals_by_date => :get, | ||
| 12 | + :recent_votes_by_question_id => :get} do |question| | ||
| 5 | question.resources :items | 13 | question.resources :items |
| 6 | question.resources :prompts, :member => {:vote_left => :post, :vote_right => :post, :skip => :post, :vote => :post}, | 14 | question.resources :prompts, :member => {:vote_left => :post, :vote_right => :post, :skip => :post, :vote => :post}, |
| 7 | :collection => {:single => :get, :index => :get} | 15 | :collection => {:single => :get, :index => :get} |