From e8499507622fb172f4398d818142128cb030aa1d Mon Sep 17 00:00:00 2001 From: Dhruv Kapadia Date: Thu, 8 Apr 2010 18:06:38 -0400 Subject: [PATCH] Changes to support new maps, scatter plot on AOI --- app/controllers/questions_controller.rb | 54 ++++++++++++++++++++++++++++++++++++++++++++---------- app/models/question.rb | 1 + config/routes.rb | 2 +- 3 files changed, 46 insertions(+), 11 deletions(-) diff --git a/app/controllers/questions_controller.rb b/app/controllers/questions_controller.rb index 2dc8f7a..553bdcd 100644 --- a/app/controllers/questions_controller.rb +++ b/app/controllers/questions_controller.rb @@ -66,8 +66,9 @@ class QuestionsController < InheritedResources::Base # we sometimes request a question when no prompt is displayed # TODO It would be a good idea to find these places and treat them like barebones - if visitor_identifier != "" + if !visitor_identifier.blank? @a = current_user.record_appearance(visitor_identifier, @p) + logger.info("creating appearance!") else @a = nil end @@ -150,19 +151,52 @@ class QuestionsController < InheritedResources::Base # export_format = params[:export_format] #CSV always now, could expand to xml later end - def num_votes_by_visitor_id + def object_info_by_visitor_id + + object_type = params[:object_type] @question = current_user.questions.find(params[:id]) - votes_by_visitor_id= Vote.all(:select => 'visitors.identifier as thevi, count(*) as the_votes_count', - :joins => :voter, - :conditions => {:question_id => @question.id }, - :group => "voter_id") - visitor_id_hash = {} + if object_type == "votes" + votes_by_visitor_id= Vote.all(:select => 'visitors.identifier as thevi, count(*) as the_votes_count', + :joins => :voter, + :conditions => {:question_id => @question.id }, + :group => "voter_id") - votes_by_visitor_id.each do |visitor| - visitor_id_hash[visitor.thevi] = visitor.the_votes_count - visitor_id_hash[visitor.thevi] = visitor.the_votes_count + + votes_by_visitor_id.each do |visitor| + visitor_id_hash[visitor.thevi] = visitor.the_votes_count + end + elsif object_type == "uploaded_ideas" + + uploaded_ideas_by_visitor_id = @question.choices.find(:all, :select => 'creator_id, count(*) as ideas_count', + :joins => [:item], + :conditions => "items.creator_id != #{@question.creator_id}", + :group => 'creator_id') + + uploaded_ideas_by_visitor_id.each do |visitor| + v = Visitor.find(visitor.creator_id, :select => 'identifier') + + logger.info(v.identifier) + + visitor_id_hash[v.identifier] = visitor.ideas_count + end + + logger.info(visitor_id_hash.inspect) + elsif object_type == "bounces" + + possible_bounces = @question.appearances.count(:group => :voter_id, :having => 'count_all = 1') + possible_bounce_ids = possible_bounces.inject([]){|list, (k,v)| list << k} + + voted_at_least_once = @question.votes.find(:all, :select => :voter_id, :conditions => {:voter_id => possible_bounce_ids}) + voted_at_least_once_ids = voted_at_least_once.inject([]){|list, v| list << v.voter_id} + + bounces = possible_bounce_ids - voted_at_least_once_ids + + bounces.each do |visitor_id| + v = Visitor.find(visitor_id, :select => 'identifier') + visitor_id_hash[v.identifier] = 1 + end end respond_to do |format| format.xml{ render :xml => visitor_id_hash.to_xml and return} diff --git a/app/models/question.rb b/app/models/question.rb index 57869dc..20b8174 100644 --- a/app/models/question.rb +++ b/app/models/question.rb @@ -18,6 +18,7 @@ class Question < ActiveRecord::Base end has_many :votes has_many :densities + has_many :appearances #comment out to run bt import script! after_save :ensure_at_least_two_choices diff --git a/config/routes.rb b/config/routes.rb index 651ba32..d36c998 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -3,7 +3,7 @@ ActionController::Routing::Routes.draw do |map| map.resources :densities map.resources :visitors, :collection => {:votes_by_session_ids => :post} map.resources :questions, :member => { :object_info_totals_by_date => :get, - :num_votes_by_visitor_id => :get, + :object_info_by_visitor_id => :get, :export => :post, :set_autoactivate_ideas_from_abroad => :put, :activate => :put, -- libgit2 0.21.2