From 5691e6092f8bc6db2a58d8d0e0d3f531ef39e8e2 Mon Sep 17 00:00:00 2001 From: Brian Smith Date: Thu, 14 Aug 2014 01:45:37 -0400 Subject: [PATCH] VRFS-2022 show private sessions/recordings in the feed --- ruby/lib/jam_ruby/models/feed.rb | 28 ++++----------- ruby/lib/jam_ruby/models/notification.rb | 4 +-- ruby/lib/jam_ruby/models/rsvp_request.rb | 2 +- ruby/spec/jam_ruby/models/feed_spec.rb | 20 +++++------ web/app/controllers/api_feeds_controller.rb | 16 ++++----- web/app/helpers/feeds_helper.rb | 36 +++++++++++++++---- web/app/views/api_feeds/show.rabl | 11 +++--- .../views/users/_feed_music_session.html.haml | 4 ++- .../users/_feed_music_session_ajax.html.haml | 2 ++ web/app/views/users/_feed_recording.html.haml | 4 +-- 10 files changed, 71 insertions(+), 56 deletions(-) diff --git a/ruby/lib/jam_ruby/models/feed.rb b/ruby/lib/jam_ruby/models/feed.rb index 6ac48f792..cd68b8bd4 100644 --- a/ruby/lib/jam_ruby/models/feed.rb +++ b/ruby/lib/jam_ruby/models/feed.rb @@ -1,4 +1,3 @@ - module JamRuby class Feed < ActiveRecord::Base @@ -73,15 +72,10 @@ module JamRuby end - if target_user + if target_user - if target_user != user.id - require_public_recordings = "claimed_recordings.is_public = TRUE AND" - require_public_sessions = "music_sessions.fan_access = TRUE AND" - end - - query = query.joins("LEFT OUTER JOIN claimed_recordings ON recordings.id = claimed_recordings.recording_id AND claimed_recordings.discarded = FALSE AND #{require_public_recordings} (claimed_recordings.user_id = '#{target_user}' OR (recordings.band_id IN (SELECT band_id FROM bands_musicians where user_id='#{target_user}')))") - query = query.joins("LEFT OUTER JOIN music_sessions_user_history ON music_sessions.id = music_sessions_user_history.music_session_id AND #{require_public_sessions} music_sessions_user_history.user_id = '#{target_user}'") + query = query.joins("LEFT OUTER JOIN claimed_recordings ON recordings.id = claimed_recordings.recording_id AND claimed_recordings.discarded = FALSE AND (claimed_recordings.user_id = '#{target_user}' OR (recordings.band_id IN (SELECT band_id FROM bands_musicians where user_id='#{target_user}')))") + query = query.joins("LEFT OUTER JOIN music_sessions_user_history ON music_sessions.id = music_sessions_user_history.music_session_id AND music_sessions_user_history.user_id = '#{target_user}'") query = query.group("feeds.id, feeds.recording_id, feeds.music_session_id, feeds.created_at, feeds.updated_at, recordings.id, music_sessions.id") if sort == 'plays' query = query.group("COALESCE(recordings.play_count, music_sessions.play_count)") @@ -93,13 +87,8 @@ module JamRuby elsif target_band - unless Band.find(target_band).users.include?(user) - require_public_recordings = "claimed_recordings.is_public = TRUE AND" - require_public_sessions = "music_sessions.fan_access = TRUE AND" - end - - query = query.joins("LEFT OUTER JOIN claimed_recordings ON recordings.id = claimed_recordings.recording_id AND claimed_recordings.discarded = FALSE AND #{require_public_recordings} recordings.band_id = '#{target_band}'") - query = query.where("music_sessions IS NULL OR #{require_public_sessions} music_sessions.band_id = '#{target_band}'") + query = query.joins("LEFT OUTER JOIN claimed_recordings ON recordings.id = claimed_recordings.recording_id AND claimed_recordings.discarded = FALSE AND recordings.band_id = '#{target_band}'") + query = query.where("music_sessions IS NULL OR music_sessions.band_id = '#{target_band}'") query = query.group("feeds.id, feeds.recording_id, feeds.music_session_id, feeds.created_at, feeds.updated_at, recordings.id, music_sessions.id") if sort == 'plays' query = query.group("COALESCE(recordings.play_count, music_sessions.play_count)") @@ -109,8 +98,8 @@ module JamRuby query = query.where('recordings.id is NULL OR claimed_recordings.id IS NOT NULL') #query = query.where('music_sessions.id is NULL OR music_sessions_user_history.id IS NOT NULL') else - query = query.joins('LEFT OUTER JOIN claimed_recordings ON recordings.id = claimed_recordings.recording_id AND claimed_recordings.discarded = FALSE AND claimed_recordings.is_public = TRUE') - query = query.joins("LEFT OUTER JOIN music_sessions_user_history ON music_sessions.id = music_sessions_user_history.music_session_id AND music_sessions.fan_access = TRUE") + query = query.joins('LEFT OUTER JOIN claimed_recordings ON recordings.id = claimed_recordings.recording_id AND claimed_recordings.discarded = FALSE') + query = query.joins("LEFT OUTER JOIN music_sessions_user_history ON music_sessions.id = music_sessions_user_history.music_session_id") query = query.group("feeds.id, feeds.recording_id, feeds.music_session_id, feeds.created_at, feeds.updated_at, recordings.id, music_sessions.id") if sort == 'plays' query = query.group("COALESCE(recordings.play_count, music_sessions.play_count)") @@ -121,9 +110,6 @@ module JamRuby query = query.where('music_sessions.id is NULL OR music_sessions_user_history.id IS NOT NULL') end - - - if params[:hash] if query.length == 0 { query:query, next: nil} diff --git a/ruby/lib/jam_ruby/models/notification.rb b/ruby/lib/jam_ruby/models/notification.rb index 5f7f1aa40..0993ab157 100644 --- a/ruby/lib/jam_ruby/models/notification.rb +++ b/ruby/lib/jam_ruby/models/notification.rb @@ -884,12 +884,12 @@ module JamRuby end end - def send_scheduled_session_comment(music_session, creator, comment) + def send_scheduled_session_comment(music_session, creator, comment, send_to_cancelled = false) return if music_session.nil? || creator.nil? || comment.blank? rsvp_requests = RsvpRequest.index(music_session) - target_users = rsvp_requests.where(:canceled => false).map { |r| r.user } + target_users = send_to_cancelled ? rsvp_requests.map { |r| r.user } : rsvp_requests.where(:canceled => false).map { |r| r.user } target_users = target_users.concat([music_session.creator]) pending_invites = music_session.pending_invitations diff --git a/ruby/lib/jam_ruby/models/rsvp_request.rb b/ruby/lib/jam_ruby/models/rsvp_request.rb index 025e5f0f1..9e534f584 100644 --- a/ruby/lib/jam_ruby/models/rsvp_request.rb +++ b/ruby/lib/jam_ruby/models/rsvp_request.rb @@ -265,7 +265,7 @@ module JamRuby session_info_comment.user = user session_info_comment.comment = params[:message] session_info_comment.save - Notification.send_scheduled_session_comment(music_session, user, params[:message]) + Notification.send_scheduled_session_comment(music_session, user, params[:message], true) end end end diff --git a/ruby/spec/jam_ruby/models/feed_spec.rb b/ruby/spec/jam_ruby/models/feed_spec.rb index 54ec1955e..dc790f13c 100644 --- a/ruby/spec/jam_ruby/models/feed_spec.rb +++ b/ruby/spec/jam_ruby/models/feed_spec.rb @@ -255,7 +255,7 @@ describe Feed do end describe "public feed" do - it "only public" do + it "public and private" do claimed_recording1 = FactoryGirl.create(:claimed_recording) claimed_recording1.is_public = false claimed_recording1.save! @@ -267,7 +267,7 @@ describe Feed do claimed_recording1.recording.music_session.music_session.save! feeds, start = Feed.index(claimed_recording1.user) - feeds.length.should == 0 + feeds.length.should == 1 end end @@ -302,7 +302,7 @@ describe Feed do feeds[0].music_session.should == music_session.music_session end - it "shows private sessions to you, not to others" do + it "shows private sessions to you and to others" do user1.bands << band user1.save! music_session = FactoryGirl.create(:active_music_session, band: band, fan_access: false) @@ -315,7 +315,7 @@ describe Feed do feeds, start = Feed.index(user2, band: band.id) - feeds.length.should == 0 + feeds.length.should == 1 end it "shows public recordings to you and to others" do @@ -334,7 +334,7 @@ describe Feed do feeds[0].recording.should == claimed_recording1.recording end - it "shows private recordings to you, not to others" do + it "shows private recordings to you and to others" do claimed_recording1 = FactoryGirl.create(:claimed_recording) claimed_recording1.is_public = false claimed_recording1.recording.band = band @@ -349,7 +349,7 @@ describe Feed do feeds[0].recording.should == claimed_recording1.recording feeds, start = Feed.index(user1, band: band.id) - feeds.length.should == 0 + feeds.length.should == 1 end end @@ -380,7 +380,7 @@ describe Feed do end - it "shows private sessions to you, not to others" do + it "shows private sessions to you and to others" do music_session = FactoryGirl.create(:active_music_session, fan_access: false) music_session.music_session.fan_access.should be_false FactoryGirl.create(:music_session_user_history, :history => music_session.music_session, :user => user1) @@ -392,7 +392,7 @@ describe Feed do feeds, start = Feed.index(user2, user: user1.id) - feeds.length.should == 0 + feeds.length.should == 1 end it "shows public recordings to you and to others" do @@ -409,7 +409,7 @@ describe Feed do feeds[0].recording.should == claimed_recording1.recording end - it "shows private recordings to you, not to others" do + it "shows private recordings to you and to others" do claimed_recording1 = FactoryGirl.create(:claimed_recording) claimed_recording1.is_public = false claimed_recording1.save! @@ -419,7 +419,7 @@ describe Feed do feeds[0].recording.should == claimed_recording1.recording feeds, start = Feed.index(user1, user: claimed_recording1.user.id) - feeds.length.should == 0 + feeds.length.should == 1 end it "shows band recordings to you even though you did not claim a recording" do diff --git a/web/app/controllers/api_feeds_controller.rb b/web/app/controllers/api_feeds_controller.rb index 693fbe73e..b2e2c08cd 100644 --- a/web/app/controllers/api_feeds_controller.rb +++ b/web/app/controllers/api_feeds_controller.rb @@ -4,14 +4,14 @@ class ApiFeedsController < ApiController def index data = Feed.index(current_user, - start: params[:since], - limit: params[:limit], - sort: params[:sort], - time_range: params[:time_range], - type: params[:type], - user: params[:user], - band: params[:band], - hash: true) + start: params[:since], + limit: params[:limit], + sort: params[:sort], + time_range: params[:time_range], + type: params[:type], + user: params[:user], + band: params[:band], + hash: true) @feeds = data[:query] diff --git a/web/app/helpers/feeds_helper.rb b/web/app/helpers/feeds_helper.rb index 1f9f135b6..50664cf89 100644 --- a/web/app/helpers/feeds_helper.rb +++ b/web/app/helpers/feeds_helper.rb @@ -1,4 +1,6 @@ module FeedsHelper + PRIVATE_TEXT = "Private" + def session_artist_name(music_session) (music_session.band.nil? ? nil : music_session.band.name) || music_session.creator.name end @@ -47,8 +49,20 @@ module FeedsHelper end end - def session_description(music_session) - music_session.description + def session_name(music_session, user) + if music_session.fan_access || ( (user && user.id == music_session.creator.id) || (music_session.band && music_session.band.users.include?(user)) ) + music_session.name + else + PRIVATE_TEXT + end + end + + def session_description(music_session, user) + if music_session.fan_access || ( (user && user.id == music_session.creator.id) || (music_session.band && music_session.band.users.include?(user)) ) + music_session.description + else + PRIVATE_TEXT + end end # grabs 1st genre @@ -80,12 +94,22 @@ module FeedsHelper duration(recording.duration, options) end - def recording_name(recording) - recording.candidate_claimed_recording.name + def recording_name(recording, user) + r = recording.candidate_claimed_recording + if r.is_public || (user && user.id == r.user.id) + r.name + else + PRIVATE_TEXT + end end - def recording_description(recording) - recording.candidate_claimed_recording.description + def recording_description(recording, user) + r = recording.candidate_claimed_recording + if r.is_public || (user && user.id == r.user.id) + r.description + else + PRIVATE_TEXT + end end def recording_genre(recording) diff --git a/web/app/views/api_feeds/show.rabl b/web/app/views/api_feeds/show.rabl index e502fcbf7..fc877a6ec 100644 --- a/web/app/views/api_feeds/show.rabl +++ b/web/app/views/api_feeds/show.rabl @@ -7,7 +7,7 @@ glue :music_session do 'music_session' end - attributes :id, :description, :genres, :created_at, :session_removed_at, :comment_count, :like_count, :play_count, :fan_access, :is_over?, :has_mount? + attributes :id, :genres, :created_at, :session_removed_at, :comment_count, :like_count, :play_count, :fan_access, :is_over?, :has_mount? node do |history| { @@ -18,7 +18,8 @@ glue :music_session do artist_datakey: session_artist_datakey(history), artist_hoveraction: session_artist_hoveraction(history), utc_created_at: history.created_at.getutc.iso8601, - description: session_description(history), + name: session_name(history, current_user), + description: session_description(history, current_user), status: session_text(history), duration: session_duration_value(history), duration_secs: history.created_at.to_i, @@ -88,8 +89,8 @@ glue :recording do artist_hoveraction: recording_artist_hoveraction(recording), artist_datakey: recording_artist_datakey(recording), utc_created_at: recording.created_at.getutc.iso8601, - name: recording_name(recording), - description: recording_description(recording), + name: recording_name(recording, current_user), + description: recording_description(recording, current_user), genre: recording_genre(recording) } } @@ -140,7 +141,7 @@ glue :recording do child(:claimed_recordings => :claimed_recordings) { - attributes :id, :name, :description, :is_public, :genre_id, :has_mix?, :user_id + attributes :id, :is_public, :genre_id, :has_mix?, :user_id child(:user => :creator) { attributes :id, :first_name, :last_name, :photo_url diff --git a/web/app/views/users/_feed_music_session.html.haml b/web/app/views/users/_feed_music_session.html.haml index d7dda270b..33be9304f 100644 --- a/web/app/views/users/_feed_music_session.html.haml +++ b/web/app/views/users/_feed_music_session.html.haml @@ -11,8 +11,10 @@ = timeago(feed_item.created_at, class: 'small created_at') / name and description .left.ml20.w30 + .name.dotdotdot + = session_name(feed_item, current_user) .description.dotdotdot - = session_description(feed_item) + = session_description(feed_item, current_user) / timeline and controls .right.w40 / recording play controls diff --git a/web/app/views/users/_feed_music_session_ajax.html.haml b/web/app/views/users/_feed_music_session_ajax.html.haml index dddf4a630..44e9cff84 100644 --- a/web/app/views/users/_feed_music_session_ajax.html.haml +++ b/web/app/views/users/_feed_music_session_ajax.html.haml @@ -14,6 +14,8 @@ %time.small.created_at.timeago{datetime: '{{data.feed_item.helpers.utc_created_at}}'}= '{{data.feed_item.created_at}}' / name and description .left.ml20.w30 + .name.dotdotdot + %span.name-text {{data.feed_item.helpers.name}} .description.dotdotdot = '{{data.feed_item.helpers.description}}' / timeline and controls diff --git a/web/app/views/users/_feed_recording.html.haml b/web/app/views/users/_feed_recording.html.haml index 389175298..e81203183 100644 --- a/web/app/views/users/_feed_recording.html.haml +++ b/web/app/views/users/_feed_recording.html.haml @@ -15,9 +15,9 @@ / name and description .name-and-description .name.dotdotdot - = recording_name(feed_item) + = recording_name(feed_item, current_user) .description.dotdotdot - = recording_description(feed_item) + = recording_description(feed_item, current_user) / timeline and controls .recording-controls-holder / recording play controls