From 01242f3c405df63642ccd8ae3d426fe67455eea0 Mon Sep 17 00:00:00 2001 From: Jonathan Kolyer Date: Wed, 27 Nov 2013 22:32:13 -0600 Subject: [PATCH] vrfs-775: added comments; minor code tweaks --- ruby/lib/jam_ruby/models/search.rb | 38 +++++++++++++++++------------- 1 file changed, 22 insertions(+), 16 deletions(-) diff --git a/ruby/lib/jam_ruby/models/search.rb b/ruby/lib/jam_ruby/models/search.rb index 1372f495e..ecdf6f234 100644 --- a/ruby/lib/jam_ruby/models/search.rb +++ b/ruby/lib/jam_ruby/models/search.rb @@ -114,49 +114,51 @@ module JamRuby end elsif current_user if current_user.lat.nil? || current_user.lng.nil? - if params[:remote_ip] - if geo = MaxMindGeo.ip_lookup(params[:remote_ip]) - latlng = [geo.lat, geo.lng] if geo.lat && geo.lng - end + if params[:remote_ip] && (geo = MaxMindGeo.ip_lookup(params[:remote_ip])) + latlng = [geo.lat, geo.lng] if geo.lat && geo.lng end else latlng = [current_user.lat, current_user.lng] end - distance = location_distance || M_MILES_DEFAULT + elsif params[:remote_ip] && (geo = MaxMindGeo.ip_lookup(params[:remote_ip])) + latlng = [geo.lat, geo.lng] if geo.lat && geo.lng end - unless latlng.blank? + if latlng.present? + distance ||= location_distance || M_MILES_DEFAULT rel = rel.where(['lat IS NOT NULL AND lng IS NOT NULL']) .within(distance, :origin => latlng) end + sel_str = 'users.*' case ordering = self.musician_order_param(params) when :plays # FIXME: double counting? sel_str = "COUNT(records)+COUNT(sessions) AS play_count, #{sel_str}" rel = rel.joins("LEFT JOIN music_sessions AS sessions ON sessions.user_id = users.id") - rel = rel.joins("LEFT JOIN recordings AS records ON records.owner_id = users.id") - rel = rel.group("users.id") - rel = rel.order("play_count DESC, users.created_at DESC") + .joins("LEFT JOIN recordings AS records ON records.owner_id = users.id") + .group("users.id") + .order("play_count DESC, users.created_at DESC") when :followed sel_str = "COUNT(follows) AS search_follow_count, #{sel_str}" rel = rel.joins("LEFT JOIN users_followers AS follows ON follows.user_id = users.id") - rel = rel.group("users.id") - rel = rel.order("COUNT(follows) DESC, users.created_at DESC") + .group("users.id") + .order("COUNT(follows) DESC, users.created_at DESC") when :playing rel = rel.joins("LEFT JOIN connections ON connections.user_id = users.id") - .where(['connections.aasm_state != ? AND connections.music_session_id IS NOT NULL', + .where(['connections.music_session_id IS NOT NULL AND connections.aasm_state != ?', 'expired']) .order("users.created_at DESC") end rel = rel.select(sel_str) - perpage = [params[:per_page] || M_PER_PAGE, 100].min + perpage = [(params[:per_page] || M_PER_PAGE).to_i, 100].min page = [params[:page].to_i, 1].max rel = rel.paginate(:page => page, :per_page => perpage) - rel.includes([:instruments, :followings, :friends]) + rel = rel.includes([:instruments, :followings, :friends]) + objs = rel.all srch = Search.new - srch.page_num, srch.page_count = page, rel.all.total_pages - srch.musician_results_for_user(rel.all, current_user) + srch.page_num, srch.page_count = page, objs.total_pages + srch.musician_results_for_user(objs, current_user) end RESULT_FOLLOW = :follows @@ -174,6 +176,8 @@ module JamRuby if user @user_counters = results.inject({}) { |hh,val| hh[val.id] = []; hh } mids = "'#{@musicians.map(&:id).join("','")}'" + + # this gets counts for each search result on friends/follows/records/sessions results.each do |uu| counters = { } counters[COUNT_FRIEND] = Friendship.where(:user_id => uu.id).count @@ -183,6 +187,8 @@ module JamRuby @user_counters[uu.id] << counters end + # this section determines follow/like/friend status for each search result + # so that action links can be activated or not rel = User.select("users.id AS uid") rel = rel.joins("LEFT JOIN users_followers AS follows ON follows.follower_id = '#{user.id}'") rel = rel.where(["users.id IN (#{mids}) AND follows.user_id = users.id"])