Commit fff49b4783dcf618384260c1648e3f9bc7582864

Authored by Dhruv Kapadia
1 parent 2bebac97

Changes to support viewing site wide data

app/controllers/questions_controller.rb
... ... @@ -102,25 +102,42 @@ class QuestionsController < InheritedResources::Base
102 102  
103 103 def num_votes_by_visitor_id
104 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 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 116 end
111 117 respond_to do |format|
112 118 format.xml{ render :xml => visitor_id_hash.to_xml and return}
113 119 end
114 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 137 object_type = params[:object_type]
120 138  
121 139 @question = current_user.questions.find(params[:id])
122 140 if object_type == 'votes'
123   - # eventually allow for users to specify type of export through params[:type]
124 141 hash = Vote.count(:conditions => "question_id = #{@question.id}", :group => "date(created_at)")
125 142 elsif object_type == 'user_submitted_ideas'
126 143 hash = Choice.count(:include => 'item',
... ... @@ -140,6 +157,29 @@ class QuestionsController < InheritedResources::Base
140 157 format.xml { render :xml => hash.to_xml and return}
141 158 end
142 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 184 protected
145 185 def export_votes
... ...
config/routes.rb
1 1 ActionController::Routing::Routes.draw do |map|
2 2 #map.resources :clicks
3 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 13 question.resources :items
6 14 question.resources :prompts, :member => {:vote_left => :post, :vote_right => :post, :skip => :post, :vote => :post},
7 15 :collection => {:single => :get, :index => :get}
... ...