From dddc0311c0455d0e4e23e4a9de4f9bd17d5db3b7 Mon Sep 17 00:00:00 2001 From: Jonathan Kolyer Date: Wed, 30 Apr 2014 14:07:23 +0000 Subject: [PATCH 01/12] VRFS-1577 VRFS-736 session ratings --- db/manifest | 3 ++- db/up/session_ratings.sql | 1 + .../models/music_session_user_history.rb | 13 +++++----- .../music_sessions_user_history_spec.rb | 2 +- .../content/icon_thumbsdown_big_off.png | Bin 0 -> 1212 bytes .../images/content/icon_thumbsdown_big_on.png | Bin 0 -> 1338 bytes .../images/content/icon_thumbsup_big_off.png | Bin 0 -> 1109 bytes .../images/content/icon_thumbsup_big_on.png | Bin 0 -> 1333 bytes web/app/assets/javascripts/session.js | 3 ++- .../stylesheets/client/session.css.scss | 24 +++++++++++++++++- .../api_music_sessions_controller.rb | 7 +++-- web/app/views/clients/_rateSession.html.erb | 18 +++++++++++++ web/spec/requests/music_sessions_api_spec.rb | 2 +- 13 files changed, 60 insertions(+), 13 deletions(-) create mode 100644 db/up/session_ratings.sql create mode 100644 web/app/assets/images/content/icon_thumbsdown_big_off.png create mode 100644 web/app/assets/images/content/icon_thumbsdown_big_on.png create mode 100644 web/app/assets/images/content/icon_thumbsup_big_off.png create mode 100644 web/app/assets/images/content/icon_thumbsup_big_on.png create mode 100644 web/app/views/clients/_rateSession.html.erb diff --git a/db/manifest b/db/manifest index 4d691b123..0b432c342 100755 --- a/db/manifest +++ b/db/manifest @@ -145,4 +145,5 @@ user_progress_tracking2.sql bands_did_session.sql email_change_default_sender.sql affiliate_partners.sql -chat_messages.sql \ No newline at end of file +chat_messages.sql +session_ratings.sql diff --git a/db/up/session_ratings.sql b/db/up/session_ratings.sql new file mode 100644 index 000000000..68223a849 --- /dev/null +++ b/db/up/session_ratings.sql @@ -0,0 +1 @@ +ALTER TABLE music_sessions_user_history ADD COLUMN rating_comment TEXT; diff --git a/ruby/lib/jam_ruby/models/music_session_user_history.rb b/ruby/lib/jam_ruby/models/music_session_user_history.rb index 5939f8bff..8fda4aaf5 100644 --- a/ruby/lib/jam_ruby/models/music_session_user_history.rb +++ b/ruby/lib/jam_ruby/models/music_session_user_history.rb @@ -6,6 +6,7 @@ module JamRuby self.primary_key = 'id' attr_accessible :max_concurrent_connections, :session_removed_at, :rating + validates_inclusion_of :rating, :in => -1..1, :allow_nil => true belongs_to(:user, :class_name => "JamRuby::User", @@ -16,9 +17,6 @@ module JamRuby :class_name => "MusicSessionHistory", :foreign_key => "music_session_id") - validates_inclusion_of :rating, :in => 0..2, :allow_nil => true - after_save :track_user_progression - def music_session_history @msh ||= JamRuby::MusicSessionHistory.find_by_music_session_id(self.music_session_id) end @@ -104,10 +102,13 @@ module JamRuby self.perf_data.try(:uri) end - def track_user_progression - if self.rating == 0 - user.update_progression_field(:first_good_music_session_at) + def add_rating(rval, comment='') + rval = rval.to_i + if 0 != rval + self.rating += rval + self.rating_comment = comment end end + end end diff --git a/ruby/spec/jam_ruby/models/music_sessions_user_history_spec.rb b/ruby/spec/jam_ruby/models/music_sessions_user_history_spec.rb index 3d7713b86..2ae1f6aec 100644 --- a/ruby/spec/jam_ruby/models/music_sessions_user_history_spec.rb +++ b/ruby/spec/jam_ruby/models/music_sessions_user_history_spec.rb @@ -26,7 +26,7 @@ describe MusicSessionUserHistory do describe "out of range" do before(:each) do - user_history1.update_attribute(:rating, 3) + user_history1.update_attribute(:rating, 2) user_history1.save end diff --git a/web/app/assets/images/content/icon_thumbsdown_big_off.png b/web/app/assets/images/content/icon_thumbsdown_big_off.png new file mode 100644 index 0000000000000000000000000000000000000000..bd7e0261b8bcc0874fe7fa599fc3f129a1e192be GIT binary patch literal 1212 zcmV;t1Vj6YP)x7^bgj#rr!c`IQA3$p1C-4kH@D~uR#6{v)AeHv14{vG4^?Guok>&O5+TS;4zBy;cM;aR&gL-3}_x+g79vQ`!EEXq%rkSE^ z;36{_%jbQ**$;{``H!kzd#$Q}tx8h4zMoW200KWcF*kQ!EtR%I4_VglfAv7q&LSCq ztiA3@CX=6-;M_AYKY#A9u3wg`)qdzPBTUjsOBbo=%^E9yhH} zIEW<3v*GZK8Ufp~*PQCBPCv5ZpEi*d#!3^M3CK zW@H(j#^W#>3W0ZZ6}Ti(qGd7d!T0M@QEZfvP#;WHAzUuQPnis5q=4xw+!-3Op7F(a z-MtmYtiBl4bq4_@j|XlK55rtA*w+1vNZy-p7!JLA2YuBlU_QU$J-HV8*hWA)5U^S& zM&9sH)1ZH4rRE{cOzI{Lz;$(<%eHGKy7mGR$=##@GtnqKP9&hr?A2AN8wk)*@UD-H zSVCsE@oty`F9rr20pB%oK)ypIc0B=u#iC;XxRV-C#&v%ZgPwmQ5%D5Hn)9Uklh}mJ z1#*3T@Uq|i#|Lc_u!8PiVb14LjzxljN(B^b!g>H@ZsYIYTbZ7a1n|$z?HdYhuL3VI z`lEbZ*eNjG-x~+WZ4j`FA*$4U)wS!)hBD?f6dPh&GEIf51`S zx3EwH-0C!Nd_SP2+ySRcv-wJ&{EWIn5vJ=lL|RH(&{dnsRRn==%VymZ2ehLZtjT;G zMlG>>^lc@8&I=j|77^2_n!AF4Mu#ROc7wf6fUik#L;DI52i)IQ0tn~1@qSd;=Hvc8INr31Cn2hB_1y5CEtl;y_iAn%rXN$7@OjH8Wit>oP zR@Fa6C4jKASJCKIs<0H${q-5d&PWLErBbIvBj9c-b+Rf+C97_b>gT+i2dSP;1n`rI z#Ba~yajQW8U# z`u3JBC!WOPzkdO5!ERJOPX(2jxgAXy#vUp%#A~klHzaDCNkWH9-D6byYb5sHDxd#P afB^tny0|hndx!b}0000D=#m{bmO6C zR7l?aTj1SZ#Rpaw2r_TxbR?7cG@|#(g50HATrIGE+aX%_Dd5JYe~z0Dpi=gJ_?pSJ zXM-3PkV5u{WR@G$yd!4?YkgDz1iJXFbglK(^y{0E!ge^2+kRZMZ_&U>vXBw2;GkY-f31dQ7#Xts8gii|DyxngxBQPQuafLSg_I&B{UOjYe$TRB?M3C@z6k{SZ11tpN#m zkz=#{?r4XBX$7Ve4hn5^nVbjw zvTYX}^#|Bp0@+X0Ar6dwSCy?-Z!eq-bo7XY4bK3_CZMqnNF`C@Yb zQH)Ozy!Xe?aBigyMNikoG`pKqfNeYobKmdapL%h8fI5+Cr}qBFAjBA?`hRVkp9kp< z%xk35S6l^mNfk768o22-fsrcdol|6JYwt!`Z5_;J^Q_nFZ2lVM@703PYmH^zIqs(P zxgKTkq0vrI3XJm0~{EXb?^ zxT**W`Ato`&MJWOvSpC8!uma{09vSa(k5ot_sW9Gn)p6NP}{}qy~Nl~dO*%U${K(V zr2L~YIA0_UQWAR(2XfD{BHqwyX#Q6na9p%kf8x)%km}+a{W)ER)|eM331hSL+fNSG}HEZV?$*PyxTVNLEBnE=EWr2 wTqV&Wr(YJ7PQ@}vqkXdx?4xa;|3`oU0B!cmL1G%6%m4rY07*qoM6N<$g1)SM%m4rY literal 0 HcmV?d00001 diff --git a/web/app/assets/images/content/icon_thumbsup_big_off.png b/web/app/assets/images/content/icon_thumbsup_big_off.png new file mode 100644 index 0000000000000000000000000000000000000000..00ecd4f005e821f541dfed51e00582fb806ae322 GIT binary patch literal 1109 zcmV-b1giUqP)Vxkj-V)=NfW*ruFg|OHeg&f@8WTT-iRhCrM!$f@#Q4aA5lGRX?RLBEc4sfnnNm`L z7DCIG?r>g!DQx@y?YYc3%izVuMYP)@9O>@3yVMwOEO{C4TBwIJu!cs+aDZzHQ`R*{ z`)ZcW6qqZ7;ie)m142DjRGmwy!F^R zXT1#7uz(U~ps8`DaXTVWirVxOIQoA8Kzwbw_7El9ysUSfL!h)uKfupKxP75kRsdZ4Wx_W( zMOguG?bDD14Osz*B#0!pQvk99P>1>EM%6&HLZJ_V-6&*bc>sX;!fF8#zvYDHmWe9o zD^Q!|2!ZtP^p1GZl`#e7)^p;k6aYHKw@qtk$fy`{0BCjN`-FyVbbT%H9?hLFi-h$=dw|kZkYRPt^a4PXU;t*>6gi-0 zbx3LzfV&SHpq|x{L@>f0jjb@ms)$#--;Ip;a_faqX$i`0~OWzI< z;(+Zr`1J`vYT==&%F&Gui3*IiHcyB1} zJRFHyaSzu3x33jz10R{=i8~V~W2`f*W(rAervOd?$PNGp*p^j1oFXF%Q%cg_eUFrg zR@c7C3P5-C&xDrgTUh~sc4GcDUn`!nE}M9+c>}Z)NCaa)$L`ApfNQ?TwKqi>1QMB2 z=BX^=K`Uq$p3puyN^SZPj+e3wyP9P2>0jwr`L+B5wEO5REKrNS*BaV)mSPu^c77NR zPv?K+?`Ai%&pP{0-0k>09H?~1-DNNBUE*!*EML<`NidIZ#_RkBFLhsdwqF64-|zVR bKLG{+d_bEA4 z;j%R*j=1lW_WD~EYFyPa&shzWl9UC`NK9KZ(zqik4ST+j$6c>OV-mOT$J`FU+7y51 z?x&+&zJ`)l|EMa=shJpk(FJMr?458(CqvdbOU_Tl}X4r0vTL&qb~=6T_!d7{dS0G`b!7H+36=eGJl3+(Al=QhD=gGG0hH-JXRF7SNr=iFkkngE>T3qV|G!uEzo zRxV6TFdT&P1<;b&k5F~Z$~VNYV8E3p09UdRkA@F`Wmmqel2MRiXG^0L=2Ry*-EQW! z9AgTGVg8cWjmp+*+0^&A^_tJxyvmUrV;b2iuaMNguN+lt3_?_2epf*|0j_LtUl{h8Sq&W@bM z58@H%YQqIpWCYfK^)lq8WQJX81{Fse+`P6>kSrCy;n~cCkqr?ilX4d{=>NF?WVH@ zkicr>tP>~!Kq|^T+g{05nAFAqzpoNbwWc@#7^e9AQt2d8+zh=f;M`CT;*K%;vcS~z z@Ay9QB?g2y&3=GFAArHJv*;D`f3qjQQrIY7DI5+ySb75@h16VpnqB~^s$$^p6NM?J z^6Cs>ecvC}bsd){A~-YlE++k77asr_zFa*{7)wTr@=+oY$0wJ&Fy;TIaMfg9M>A^! z@JnO}sZ=WOo3+_&V2#4Q!<}CxxP}%$>h<1f&*zt_}O~`(zjFCS@|rge6`Rt6}p*54FbhHmK;w$ zQk$e&!D7Skl>zjpk3n(I6%+vT;*Th;nGl8UQG#-90N4OPI{-P(Q5ys`g#nwKwPt7q zkcbH?D~;P{Xaz7o>WHz@u;(jU0TAzOIwBs5PYW7t=80!{RD6{s(@Doas_CW;0P$>S z%s<&QC`ZJu(VoyCE#`?=;(19OAoT@yUHUwDvE0p@9!H4R#bvI#`o^R&gV9oBu9I`W zIbA|cdWYSomepKBGI@IRRNe8!g^Inz>&@Qaiqq%A@uQyYQl~GR47x%x&sj>VUeYoQ r5>Y{&k2qq|kmn2u_PM6d|0}=%wELog1W>#700000NkvXXu0mjf {}, :status => :ok end + else + render :json => { :message => ValidationMessages::SESSION_NOT_FOUND }, :status => 404 + end end def track_index diff --git a/web/app/views/clients/_rateSession.html.erb b/web/app/views/clients/_rateSession.html.erb new file mode 100644 index 000000000..adc56146d --- /dev/null +++ b/web/app/views/clients/_rateSession.html.erb @@ -0,0 +1,18 @@ +
+
+ +
+

please rate your session

+
+
+
+       +

+ +

+ SEND FEEDBACK   NOT NOW, THANKS +
+
+ +
+
diff --git a/web/spec/requests/music_sessions_api_spec.rb b/web/spec/requests/music_sessions_api_spec.rb index bc453960d..d0b25948b 100755 --- a/web/spec/requests/music_sessions_api_spec.rb +++ b/web/spec/requests/music_sessions_api_spec.rb @@ -659,7 +659,7 @@ describe "Music Session API ", :type => :api do post "/api/participant_histories/#{msuh.id}/rating.json", { :rating => 0 }.to_json, "CONTENT_TYPE" => "application/json" last_response.status.should == 200 msuh.reload - msuh.rating.should == 0 + msuh.rating.to_i.should == 0 end it "track sync" do From 1af868dd608b9e3d04650657473fc3fa037c0bbd Mon Sep 17 00:00:00 2001 From: Jonathan Kolyer Date: Wed, 30 Apr 2014 14:23:26 +0000 Subject: [PATCH 02/12] VRFS-1577 moved session_ratings.sql to bottom --- db/manifest | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/db/manifest b/db/manifest index f74999221..30837d3ad 100755 --- a/db/manifest +++ b/db/manifest @@ -146,9 +146,9 @@ bands_did_session.sql email_change_default_sender.sql affiliate_partners.sql chat_messages.sql -session_ratings.sql diagnostics.sql user_mods.sql connection_stale_expire.sql rename_chat_messages.sql fix_connection_fields.sql +session_ratings.sql From 968dff2829635eb935fefebdd6e4308f84913674 Mon Sep 17 00:00:00 2001 From: Jonathan Kolyer Date: Wed, 30 Apr 2014 16:44:37 +0000 Subject: [PATCH 03/12] VRFS-1577 VRFS-736 --- .../assets/javascripts/rateSessionDialog.js | 69 +++++++++++++++++++ web/app/assets/javascripts/session.js | 20 ++++-- .../api_music_sessions_controller.rb | 2 +- web/app/views/clients/_rateSession.html.erb | 8 +-- web/app/views/clients/index.html.erb | 1 + web/config/routes.rb | 2 +- 6 files changed, 91 insertions(+), 11 deletions(-) create mode 100644 web/app/assets/javascripts/rateSessionDialog.js diff --git a/web/app/assets/javascripts/rateSessionDialog.js b/web/app/assets/javascripts/rateSessionDialog.js new file mode 100644 index 000000000..00d11d126 --- /dev/null +++ b/web/app/assets/javascripts/rateSessionDialog.js @@ -0,0 +1,69 @@ +(function(context,$) { + + "use strict"; + + context.JK = context.JK || {}; + context.JK.RateSessionDialog = function(app, finishedCallback) { + var logger = context.JK.logger; + var dialogId = 'rate-session-dialog'; + var $scopeSelector = "[layout-id='rate-session-dialog']"; + + function showDialog() { + app.layout.showDialog(dialogId); + return true; // false if should not show dialog + } + + function closeDialog() { + app.layout.closeDialog(dialogId); + if (finishedCallback) { + setTimeout(finishedCallback, 100); + } + } + + function events() { + $('#btn-rate-session-cancel', $scopeSelector).click(function(evt) { + closeDialog(); + }); + $('#btn-rate-session-up', $scopeSelector).click(function(evt) { + $(this).hasClass('selected') ? $(this).removeClass('selected') : $(this).addClass('selected'); + if ($('#btn-rate-session-down').hasClass('selected')) { + $('#btn-rate-session-down').removeClass('selected') + } + }); + $('#btn-rate-session-down', $scopeSelector).click(function(evt) { + $(this).hasClass('selected') ? $(this).removeClass('selected') : $(this).addClass('selected'); + if ($('#btn-rate-session-up').hasClass('selected')) { + $('#btn-rate-session-up').removeClass('selected') + } + }); + $('#btn-rate-session-send', $scopeSelector).click(function(evt) { + var url = "/api/participant_histories/"+context.JK.JamServer.clientID+"/rating"; + $.ajax({ + type: "POST", + url: url + }).done(function (response) { + closeDialog(); + }); + }); + } + + function beforeShow(data) { + // confirm user should see dialog + } + + function afterShow(data) { + } + + function initialize() { + var dialogBindings = { + 'beforeShow' : beforeShow, + 'afterShow' : afterShow + }; + app.bindDialog(dialogId, dialogBindings); + events(); + } + + this.initialize = initialize; + this.showDialog = showDialog; + }; +})(window,jQuery); diff --git a/web/app/assets/javascripts/session.js b/web/app/assets/javascripts/session.js index 9b9b3b01d..2819b780a 100644 --- a/web/app/assets/javascripts/session.js +++ b/web/app/assets/javascripts/session.js @@ -1307,14 +1307,24 @@ function sessionLeave(evt) { evt.preventDefault(); - - promptLeave = false; - app.layout.showDialog('leavingSession'); - //context.window.location = '/client#/home'; - + rateSession(); return false; } + function bailOut() { + promptLeave = false; + context.window.location = '/client#/home'; + } + + function rateSession() { + var dialog = new context.JK.RateSessionDialog(context.JK.app, bailOut); + dialog.initialize(); + if (dialog.showDialog() === false) { + bailOut(); + } + return true; + } + function sessionResync(evt) { evt.preventDefault(); var response = context.jamClient.SessionAudioResync(); diff --git a/web/app/controllers/api_music_sessions_controller.rb b/web/app/controllers/api_music_sessions_controller.rb index cb2e266ba..aec1719d3 100644 --- a/web/app/controllers/api_music_sessions_controller.rb +++ b/web/app/controllers/api_music_sessions_controller.rb @@ -151,7 +151,7 @@ class ApiMusicSessionsController < ApiController end def participant_rating - if @history = MusicSessionUserHistory.find(params[:id]) + if @history = MusicSessionUserHistory.find_by_client_id(params[:client_id]) @history.add_rating(params[:rating]) @history.save diff --git a/web/app/views/clients/_rateSession.html.erb b/web/app/views/clients/_rateSession.html.erb index adc56146d..5bb43602e 100644 --- a/web/app/views/clients/_rateSession.html.erb +++ b/web/app/views/clients/_rateSession.html.erb @@ -1,16 +1,16 @@ -
+
-

please rate your session

+

please rate your session

-       +      



- SEND FEEDBACK   NOT NOW, THANKS + SEND FEEDBACK   NOT NOW, THANKS
diff --git a/web/app/views/clients/index.html.erb b/web/app/views/clients/index.html.erb index dd8d91baa..b2865f935 100644 --- a/web/app/views/clients/index.html.erb +++ b/web/app/views/clients/index.html.erb @@ -21,6 +21,7 @@ <%= render "clients/gear/gear_wizard" %> <%= render "terms" %> <%= render "leaveSessionWarning" %> +<%= render "rateSession" %> <%= render "alert" %> <%= render "sidebar" %> <%= render "createSession" %> diff --git a/web/config/routes.rb b/web/config/routes.rb index 6c6fd2a42..aa10f42ff 100644 --- a/web/config/routes.rb +++ b/web/config/routes.rb @@ -167,7 +167,7 @@ SampleApp::Application.routes.draw do match '/sessions/:id/claimed_recording/:claimed_recording_id/start' => 'api_music_sessions#claimed_recording_start', :via => :post match '/sessions/:id/claimed_recording/:claimed_recording_id/stop' => 'api_music_sessions#claimed_recording_stop', :via => :post - match '/participant_histories/:id/rating' => 'api_music_sessions#participant_rating', :via => :post + match '/participant_histories/:client_id/rating' => 'api_music_sessions#participant_rating', :via => :post # genres match '/genres' => 'api_genres#index', :via => :get From 2cbfae22158771092916ae0acd4f0342b1dbad2d Mon Sep 17 00:00:00 2001 From: Jonathan Kolyer Date: Wed, 30 Apr 2014 20:49:32 +0000 Subject: [PATCH 04/12] VRFS-1577 VRFS-736 --- .../assets/javascripts/rateSessionDialog.js | 37 ++++++++++++++++--- .../api_music_sessions_controller.rb | 2 +- web/app/views/clients/_rateSession.html.erb | 2 +- 3 files changed, 33 insertions(+), 8 deletions(-) diff --git a/web/app/assets/javascripts/rateSessionDialog.js b/web/app/assets/javascripts/rateSessionDialog.js index 00d11d126..391425222 100644 --- a/web/app/assets/javascripts/rateSessionDialog.js +++ b/web/app/assets/javascripts/rateSessionDialog.js @@ -9,29 +9,53 @@ var $scopeSelector = "[layout-id='rate-session-dialog']"; function showDialog() { - app.layout.showDialog(dialogId); - return true; // false if should not show dialog + if (context.JK.JamServer.clientID) { + app.layout.showDialog(dialogId); + return true; // false if should not show dialog + } + return false; } function closeDialog() { app.layout.closeDialog(dialogId); if (finishedCallback) { - setTimeout(finishedCallback, 100); + setTimeout(finishedCallback, 10); } } + + function getRating() { + if ($('#btn-rate-session-down', $scopeSelector).hasClass('selected')) { + return -1; + } else if ($('#btn-rate-session-up', $scopeSelector).hasClass('selected')) { + return 1; + } + return 0; + } + + function getComment() { + return $('#txt-rate-session-comment',"[layout-id='rate-session-dialog']").val(); + } function events() { $('#btn-rate-session-cancel', $scopeSelector).click(function(evt) { closeDialog(); }); $('#btn-rate-session-up', $scopeSelector).click(function(evt) { - $(this).hasClass('selected') ? $(this).removeClass('selected') : $(this).addClass('selected'); + if ($(this).hasClass('selected')) { + $(this).removeClass('selected') + } else { + $(this).addClass('selected'); + } if ($('#btn-rate-session-down').hasClass('selected')) { $('#btn-rate-session-down').removeClass('selected') } }); $('#btn-rate-session-down', $scopeSelector).click(function(evt) { - $(this).hasClass('selected') ? $(this).removeClass('selected') : $(this).addClass('selected'); + if ($(this).hasClass('selected')) { + $(this).removeClass('selected') + } else { + $(this).addClass('selected'); + } if ($('#btn-rate-session-up').hasClass('selected')) { $('#btn-rate-session-up').removeClass('selected') } @@ -40,7 +64,8 @@ var url = "/api/participant_histories/"+context.JK.JamServer.clientID+"/rating"; $.ajax({ type: "POST", - url: url + url: url, + data: { rating: getRating(), comment: getComment() } }).done(function (response) { closeDialog(); }); diff --git a/web/app/controllers/api_music_sessions_controller.rb b/web/app/controllers/api_music_sessions_controller.rb index aec1719d3..7c598d56e 100644 --- a/web/app/controllers/api_music_sessions_controller.rb +++ b/web/app/controllers/api_music_sessions_controller.rb @@ -152,7 +152,7 @@ class ApiMusicSessionsController < ApiController def participant_rating if @history = MusicSessionUserHistory.find_by_client_id(params[:client_id]) - @history.add_rating(params[:rating]) + @history.add_rating(params[:rating], params[:comment]) @history.save if @history.errors.any? diff --git a/web/app/views/clients/_rateSession.html.erb b/web/app/views/clients/_rateSession.html.erb index 5bb43602e..612a76d9a 100644 --- a/web/app/views/clients/_rateSession.html.erb +++ b/web/app/views/clients/_rateSession.html.erb @@ -8,7 +8,7 @@
     

- +

SEND FEEDBACK   NOT NOW, THANKS
From 5e27268fa48f59dde3d13bee76cf5f4b25134b73 Mon Sep 17 00:00:00 2001 From: Jonathan Kolyer Date: Thu, 1 May 2014 01:46:57 +0000 Subject: [PATCH 05/12] VRFS-1577 VRFS-736 added should_rate_session?; fixed bug in add_rating --- ruby/lib/jam_ruby/models/music_session_user_history.rb | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/ruby/lib/jam_ruby/models/music_session_user_history.rb b/ruby/lib/jam_ruby/models/music_session_user_history.rb index 8fda4aaf5..6354ac628 100644 --- a/ruby/lib/jam_ruby/models/music_session_user_history.rb +++ b/ruby/lib/jam_ruby/models/music_session_user_history.rb @@ -105,10 +105,15 @@ module JamRuby def add_rating(rval, comment='') rval = rval.to_i if 0 != rval - self.rating += rval + self.rating = self.rating.to_i + rval self.rating_comment = comment end end + def should_rate_session? + 2 <= music_session_history.unique_users.count && + 60 < (Time.now - music_session_history.created_at).seconds + end + end end From b1be072c6c483f62eead891eb2f60aa3c2865438 Mon Sep 17 00:00:00 2001 From: Jonathan Kolyer Date: Thu, 1 May 2014 01:48:57 +0000 Subject: [PATCH 06/12] VRFS-1577 VRFS-736 --- web/app/assets/javascripts/ga.js | 12 +++++++ .../assets/javascripts/rateSessionDialog.js | 27 ++++++++++++++++ web/app/assets/javascripts/session.js | 9 ++++-- .../api_music_sessions_controller.rb | 24 +++++++++----- web/app/views/clients/_rateSession.html.erb | 31 +++++++++---------- web/config/routes.rb | 1 + 6 files changed, 78 insertions(+), 26 deletions(-) diff --git a/web/app/assets/javascripts/ga.js b/web/app/assets/javascripts/ga.js index 11a96eed6..0b3ed3f27 100644 --- a/web/app/assets/javascripts/ga.js +++ b/web/app/assets/javascripts/ga.js @@ -19,6 +19,11 @@ join : "Join" }; + var sessionQualityTypes = { + good : "Good", + poor : "Poor" + }; + var invitationTypes = { email : "Email", facebook : "Facebook", @@ -83,6 +88,7 @@ audioTest : "AudioTest", sessionCount : "SessionCount", sessionMusicians : "SessionMusicians", + sessionQuality : "SessionQuality", invite : "Invite", findSession : "FindSession", friendConnect : "Connect", @@ -174,6 +180,11 @@ context.ga('send', 'event', categories.sessionMusicians, joinOrCreate); } + function trackSessionQuality(goodOrPoor) { + assertOneOf(goodOrPoor, sessionQualityTypes); + context.ga('send', 'event', categories.sessionQuality, goodOrPoor); + } + function trackServiceInvitations(invitationType, numInvited) { assertOneOf(invitationType, invitationTypes); assertNumber(numInvited); @@ -271,6 +282,7 @@ var GA = {}; GA.Categories = categories; GA.SessionCreationTypes = sessionCreationTypes; + GA.SessionQualityTypes = sessionQualityTypes; GA.InvitationTypes = invitationTypes; GA.FriendConnectTypes = friendConnectTypes; GA.RecordingActions = recordingActions; diff --git a/web/app/assets/javascripts/rateSessionDialog.js b/web/app/assets/javascripts/rateSessionDialog.js index 391425222..16bde8cf0 100644 --- a/web/app/assets/javascripts/rateSessionDialog.js +++ b/web/app/assets/javascripts/rateSessionDialog.js @@ -8,8 +8,21 @@ var dialogId = 'rate-session-dialog'; var $scopeSelector = "[layout-id='rate-session-dialog']"; + function reset() { + $('#btn-rate-session-up', $scopeSelector).removeClass('selected'); + $('#btn-rate-session-down', $scopeSelector).removeClass('selected'); + $('#txt-rate-session-comment',"[layout-id='rate-session-dialog']").val(''); + } + function showDialog() { if (context.JK.JamServer.clientID) { + // $.ajax({ + // type: "/api/participant_histories/"+context.JK.JamServer.clientID, + // url: url, + // data: { rating: getRating(), comment: getComment() } + // }).done(function (response) { + // }); + reset(); app.layout.showDialog(dialogId); return true; // false if should not show dialog } @@ -49,6 +62,7 @@ if ($('#btn-rate-session-down').hasClass('selected')) { $('#btn-rate-session-down').removeClass('selected') } + return false; }); $('#btn-rate-session-down', $scopeSelector).click(function(evt) { if ($(this).hasClass('selected')) { @@ -59,16 +73,29 @@ if ($('#btn-rate-session-up').hasClass('selected')) { $('#btn-rate-session-up').removeClass('selected') } + return false; }); $('#btn-rate-session-send', $scopeSelector).click(function(evt) { + var rr = getRating(), cc = getComment(); + if (0 == rr && 0 == cc.length) { + closeDialog(); + return false; + } var url = "/api/participant_histories/"+context.JK.JamServer.clientID+"/rating"; $.ajax({ type: "POST", url: url, data: { rating: getRating(), comment: getComment() } }).done(function (response) { + var qq = getRating(); + if (0 < qq) { + context.JK.GA.trackSessionQuality(context.JK.GA.SessionQualityTypes.good); + } else if (0 > qq){ + context.JK.GA.trackSessionQuality(context.JK.GA.SessionQualityTypes.poor); + } closeDialog(); }); + return false; }); } diff --git a/web/app/assets/javascripts/session.js b/web/app/assets/javascripts/session.js index 2819b780a..9896f9dab 100644 --- a/web/app/assets/javascripts/session.js +++ b/web/app/assets/javascripts/session.js @@ -31,6 +31,7 @@ var playbackControls = null; var promptLeave = false; var backendMixerAlertThrottleTimer = null; + var rateSessionDialog = null; var rest = context.JK.Rest(); @@ -1317,9 +1318,11 @@ } function rateSession() { - var dialog = new context.JK.RateSessionDialog(context.JK.app, bailOut); - dialog.initialize(); - if (dialog.showDialog() === false) { + if (rateSessionDialog === null) { + rateSessionDialog = new context.JK.RateSessionDialog(context.JK.app, bailOut); + rateSessionDialog.initialize(); + } + if (rateSessionDialog.showDialog() === false) { bailOut(); } return true; diff --git a/web/app/controllers/api_music_sessions_controller.rb b/web/app/controllers/api_music_sessions_controller.rb index 7c598d56e..ce47df7de 100644 --- a/web/app/controllers/api_music_sessions_controller.rb +++ b/web/app/controllers/api_music_sessions_controller.rb @@ -152,14 +152,24 @@ class ApiMusicSessionsController < ApiController def participant_rating if @history = MusicSessionUserHistory.find_by_client_id(params[:client_id]) - @history.add_rating(params[:rating], params[:comment]) - @history.save + if request.post? + @history.add_rating(params[:rating], params[:comment]) + @history.save - if @history.errors.any? - response.status = :unprocessable_entity - respond_with @history - else - render :json => {}, :status => :ok + if @history.errors.any? + response.status = :unprocessable_entity + respond_with @history + else + uu = @history.user + if (uu.first_good_music_session_at.nil?) + uu.first_good_music_session_at = Time.now + uu.save + end if uu + render :json => {}, :status => :ok + + elsif request.get? + render :json => { :should_rate_session => @history.should_rate_session? }, :status => :ok + end end else render :json => { :message => ValidationMessages::SESSION_NOT_FOUND }, :status => 404 diff --git a/web/app/views/clients/_rateSession.html.erb b/web/app/views/clients/_rateSession.html.erb index 612a76d9a..fa87832f5 100644 --- a/web/app/views/clients/_rateSession.html.erb +++ b/web/app/views/clients/_rateSession.html.erb @@ -1,18 +1,17 @@ -
-
- -
-

please rate your session

-
-
-
-       -

- -

- SEND FEEDBACK   NOT NOW, THANKS -
-
- +
+ +
+ <%= image_tag "shared/icon_session.png", {:height => 19, :width => 19, :class => "content-icon"} %> +

please rate your session

+
+
+       +

+ +

+ SEND FEEDBACK   NOT NOW, THANKS +
+
+
diff --git a/web/config/routes.rb b/web/config/routes.rb index aa10f42ff..5e59b6c4d 100644 --- a/web/config/routes.rb +++ b/web/config/routes.rb @@ -168,6 +168,7 @@ SampleApp::Application.routes.draw do match '/sessions/:id/claimed_recording/:claimed_recording_id/stop' => 'api_music_sessions#claimed_recording_stop', :via => :post match '/participant_histories/:client_id/rating' => 'api_music_sessions#participant_rating', :via => :post + match '/participant_histories/:client_id' => 'api_music_sessions#participant_rating', :via => :get # genres match '/genres' => 'api_genres#index', :via => :get From affb1cd875344bed02f118ef27bf51d5cab200c2 Mon Sep 17 00:00:00 2001 From: Jonathan Kolyer Date: Thu, 1 May 2014 06:35:16 +0000 Subject: [PATCH 07/12] VRFS-1577 --- .../models/music_session_user_history.rb | 5 ++-- web/app/assets/javascripts/ga.js | 1 + .../assets/javascripts/rateSessionDialog.js | 26 +++++++++---------- web/app/assets/javascripts/session.js | 19 +++++++------- .../api_music_sessions_controller.rb | 5 ++-- 5 files changed, 28 insertions(+), 28 deletions(-) diff --git a/ruby/lib/jam_ruby/models/music_session_user_history.rb b/ruby/lib/jam_ruby/models/music_session_user_history.rb index 6354ac628..979a17e71 100644 --- a/ruby/lib/jam_ruby/models/music_session_user_history.rb +++ b/ruby/lib/jam_ruby/models/music_session_user_history.rb @@ -111,8 +111,9 @@ module JamRuby end def should_rate_session? - 2 <= music_session_history.unique_users.count && - 60 < (Time.now - music_session_history.created_at).seconds + (2 <= music_session_history.unique_users.all.count && + 60 < (Time.now - music_session_history.created_at).seconds) || + Rails.env.development? end end diff --git a/web/app/assets/javascripts/ga.js b/web/app/assets/javascripts/ga.js index 0b3ed3f27..a2d30f72b 100644 --- a/web/app/assets/javascripts/ga.js +++ b/web/app/assets/javascripts/ga.js @@ -293,6 +293,7 @@ GA.trackFTUECompletion = trackFTUECompletion; GA.trackSessionCount = trackSessionCount; GA.trackSessionMusicians = trackSessionMusicians; + GA.trackSessionQuality = trackSessionQuality; GA.trackServiceInvitations = trackServiceInvitations; GA.trackFindSessions = trackFindSessions; GA.virtualPageView = virtualPageView; diff --git a/web/app/assets/javascripts/rateSessionDialog.js b/web/app/assets/javascripts/rateSessionDialog.js index 16bde8cf0..f9dc49e40 100644 --- a/web/app/assets/javascripts/rateSessionDialog.js +++ b/web/app/assets/javascripts/rateSessionDialog.js @@ -3,7 +3,7 @@ "use strict"; context.JK = context.JK || {}; - context.JK.RateSessionDialog = function(app, finishedCallback) { + context.JK.RateSessionDialog = function(app) { var logger = context.JK.logger; var dialogId = 'rate-session-dialog'; var $scopeSelector = "[layout-id='rate-session-dialog']"; @@ -16,24 +16,24 @@ function showDialog() { if (context.JK.JamServer.clientID) { - // $.ajax({ - // type: "/api/participant_histories/"+context.JK.JamServer.clientID, - // url: url, - // data: { rating: getRating(), comment: getComment() } - // }).done(function (response) { - // }); - reset(); - app.layout.showDialog(dialogId); - return true; // false if should not show dialog + $.ajax({ + type: "GET", + url: "/api/participant_histories/"+context.JK.JamServer.clientID + }).done(function (response) { + if (response && + response.hasOwnProperty('should_rate_session') && + true==response['should_rate_session']) { + reset(); + app.layout.showDialog(dialogId); + } + }); + return true; } return false; } function closeDialog() { app.layout.closeDialog(dialogId); - if (finishedCallback) { - setTimeout(finishedCallback, 10); - } } function getRating() { diff --git a/web/app/assets/javascripts/session.js b/web/app/assets/javascripts/session.js index 9896f9dab..8f9da6756 100644 --- a/web/app/assets/javascripts/session.js +++ b/web/app/assets/javascripts/session.js @@ -1306,25 +1306,24 @@ } } - function sessionLeave(evt) { - evt.preventDefault(); - rateSession(); - return false; - } - function bailOut() { promptLeave = false; context.window.location = '/client#/home'; } + function sessionLeave(evt) { + evt.preventDefault(); + rateSession(); + bailOut(); + return false; + } + function rateSession() { if (rateSessionDialog === null) { - rateSessionDialog = new context.JK.RateSessionDialog(context.JK.app, bailOut); + rateSessionDialog = new context.JK.RateSessionDialog(context.JK.app); rateSessionDialog.initialize(); } - if (rateSessionDialog.showDialog() === false) { - bailOut(); - } + rateSessionDialog.showDialog(); return true; } diff --git a/web/app/controllers/api_music_sessions_controller.rb b/web/app/controllers/api_music_sessions_controller.rb index ce47df7de..adf807ac2 100644 --- a/web/app/controllers/api_music_sessions_controller.rb +++ b/web/app/controllers/api_music_sessions_controller.rb @@ -166,10 +166,9 @@ class ApiMusicSessionsController < ApiController uu.save end if uu render :json => {}, :status => :ok - - elsif request.get? - render :json => { :should_rate_session => @history.should_rate_session? }, :status => :ok end + elsif request.get? + render :json => { :should_rate_session => @history.should_rate_session? }, :status => :ok end else render :json => { :message => ValidationMessages::SESSION_NOT_FOUND }, :status => 404 From a5191913944e5931cd04ffd7ff5670fabb4f9f3d Mon Sep 17 00:00:00 2001 From: Jonathan Kolyer Date: Tue, 6 May 2014 02:55:32 +0000 Subject: [PATCH 08/12] replaced find with find_by_id --- ruby/lib/jam_ruby/resque/google_analytics_event.rb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ruby/lib/jam_ruby/resque/google_analytics_event.rb b/ruby/lib/jam_ruby/resque/google_analytics_event.rb index 58c393084..05c24a1e8 100644 --- a/ruby/lib/jam_ruby/resque/google_analytics_event.rb +++ b/ruby/lib/jam_ruby/resque/google_analytics_event.rb @@ -25,7 +25,7 @@ module JamRuby def self.perform(args={}) session_id, interval_idx = args['session_id'], args['interval_idx'].to_i - return unless session_id && session = MusicSession.find(session_id) + return unless session_id && session = MusicSession.find_by_id(session_id) GoogleAnalyticsEvent.enqueue(CAT_SESS_DUR, ACTION_SESS_DUR, SESSION_INTERVALS[interval_idx]) interval_idx += 1 @@ -47,7 +47,7 @@ module JamRuby @queue = QUEUE_BAND_TRACKER def self.perform(session_id) - return unless session = MusicSession.find(session_id) + return unless session = MusicSession.find_by_id(session_id) band = session.band if band.in_real_session?(session) band.update_attribute(:did_real_session, true) From 0119001d3df342594e8e78a838b798cbc8392b23 Mon Sep 17 00:00:00 2001 From: Jonathan Kolyer Date: Tue, 6 May 2014 05:21:09 +0000 Subject: [PATCH 09/12] VRFS-1698 testing --- ruby/lib/jam_ruby/app/mailers/batch_mailer.rb | 2 +- ruby/lib/jam_ruby/models/email_batch.rb | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/ruby/lib/jam_ruby/app/mailers/batch_mailer.rb b/ruby/lib/jam_ruby/app/mailers/batch_mailer.rb index 7b200eb3b..9135b3c98 100644 --- a/ruby/lib/jam_ruby/app/mailers/batch_mailer.rb +++ b/ruby/lib/jam_ruby/app/mailers/batch_mailer.rb @@ -15,7 +15,7 @@ module JamRuby batch.did_send(emails) - mail(:to => emails, + mail(:to => batch.from_email, :from => batch.from_email, :subject => batch.subject) do |format| format.text diff --git a/ruby/lib/jam_ruby/models/email_batch.rb b/ruby/lib/jam_ruby/models/email_batch.rb index 74dff06ec..02c729dda 100644 --- a/ruby/lib/jam_ruby/models/email_batch.rb +++ b/ruby/lib/jam_ruby/models/email_batch.rb @@ -13,7 +13,7 @@ module JamRuby VAR_LAST_NAME = '@LASTNAME' DEFAULT_SENDER = "noreply@jamkazam.com" - BATCH_SIZE = 1000 + BATCH_SIZE = 5 BODY_TEMPLATE =< Date: Tue, 6 May 2014 06:41:10 +0000 Subject: [PATCH 10/12] VRFS-1577 --- ruby/lib/jam_ruby/app/mailers/batch_mailer.rb | 2 +- .../models/music_session_user_history.rb | 4 ++- .../music_sessions_user_history_spec.rb | 36 +++++++++++-------- 3 files changed, 26 insertions(+), 16 deletions(-) diff --git a/ruby/lib/jam_ruby/app/mailers/batch_mailer.rb b/ruby/lib/jam_ruby/app/mailers/batch_mailer.rb index 9135b3c98..17f238090 100644 --- a/ruby/lib/jam_ruby/app/mailers/batch_mailer.rb +++ b/ruby/lib/jam_ruby/app/mailers/batch_mailer.rb @@ -15,7 +15,7 @@ module JamRuby batch.did_send(emails) - mail(:to => batch.from_email, + mail(:to => emails, :from => batch.from_email, :subject => batch.subject) do |format| format.text diff --git a/ruby/lib/jam_ruby/models/music_session_user_history.rb b/ruby/lib/jam_ruby/models/music_session_user_history.rb index 979a17e71..233c64774 100644 --- a/ruby/lib/jam_ruby/models/music_session_user_history.rb +++ b/ruby/lib/jam_ruby/models/music_session_user_history.rb @@ -110,9 +110,11 @@ module JamRuby end end + MIN_SESSION_DURATION_RATING = 60 + def should_rate_session? (2 <= music_session_history.unique_users.all.count && - 60 < (Time.now - music_session_history.created_at).seconds) || + MIN_SESSION_DURATION_RATING < (Time.now - music_session_history.created_at).seconds) || Rails.env.development? end diff --git a/ruby/spec/jam_ruby/models/music_sessions_user_history_spec.rb b/ruby/spec/jam_ruby/models/music_sessions_user_history_spec.rb index 2ae1f6aec..be947eb67 100644 --- a/ruby/spec/jam_ruby/models/music_sessions_user_history_spec.rb +++ b/ruby/spec/jam_ruby/models/music_sessions_user_history_spec.rb @@ -8,6 +8,7 @@ describe MusicSessionUserHistory do let(:user_history2) { FactoryGirl.create(:music_session_user_history, :history => music_session.music_session_history, :user => some_user) } describe "create" do + pending it {user_history1.music_session_id.should == music_session.id } it {user_history1.created_at.should_not be_nil } it {user_history1.session_removed_at.should be_nil } @@ -15,28 +16,35 @@ describe MusicSessionUserHistory do describe "rating" do - describe "success" do - - before(:each) do - user_history1.update_attribute(:rating ,0) - end - - it { user_history1.errors.any?.should be_false} + it "success" do + user_history1.update_attribute(:rating, 1) + expect( user_history1.errors.any? ).to eq(false) end - describe "out of range" do - before(:each) do - user_history1.update_attribute(:rating, 2) - user_history1.save - end + it "out of range" do + user_history1.rating = 2 + user_history1.save + expect( user_history1.errors.any? ).to eq(true) + end - it { user_history1.errors.any?.should be_true} + it 'should rate success' do + users = [user_history1, user_history2] + Timecop.travel(Time.now + (MusicSessionUserHistory::MIN_SESSION_DURATION_RATING * 1.5).seconds) + expect( user_history1.should_rate_session? ).to eq(true) + Timecop.return + end + + it 'should rate fails' do + users = [user_history1] + expect( user_history1.should_rate_session? ).to eq(false) + users = [user_history1, user_history2] + expect( user_history2.should_rate_session? ).to eq(false) end end describe "end_history" do - + pending it "histories created at the same time" do user_history1.reload user_history2.reload From 1c6b5b78bbc048ac4bed63061ba824b2073a0526 Mon Sep 17 00:00:00 2001 From: Jonathan Kolyer Date: Tue, 6 May 2014 07:20:14 +0000 Subject: [PATCH 11/12] VRFS-1577 fixing specs --- web/spec/requests/music_sessions_api_spec.rb | 4 ++-- web/spec/requests/user_progression_spec.rb | 3 ++- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/web/spec/requests/music_sessions_api_spec.rb b/web/spec/requests/music_sessions_api_spec.rb index 7d929d68f..c48cdd7e4 100755 --- a/web/spec/requests/music_sessions_api_spec.rb +++ b/web/spec/requests/music_sessions_api_spec.rb @@ -656,10 +656,10 @@ describe "Music Session API ", :type => :api do msuh = FactoryGirl.create(:music_session_user_history, :music_session_id => music_session.id, :client_id => client.client_id, :user_id => user.id) msuh.rating.should be_nil login(user) - post "/api/participant_histories/#{msuh.id}/rating.json", { :rating => 0 }.to_json, "CONTENT_TYPE" => "application/json" + post "/api/participant_histories/#{msuh.client_id}/rating.json", { :rating => 1 }.to_json, "CONTENT_TYPE" => "application/json" last_response.status.should == 200 msuh.reload - msuh.rating.to_i.should == 0 + msuh.rating.to_i.should == 1 end it "track sync" do diff --git a/web/spec/requests/user_progression_spec.rb b/web/spec/requests/user_progression_spec.rb index c1f904f5c..42894e678 100644 --- a/web/spec/requests/user_progression_spec.rb +++ b/web/spec/requests/user_progression_spec.rb @@ -160,8 +160,9 @@ describe "User Progression", :type => :api do client = FactoryGirl.create(:connection, :user => user) music_session = FactoryGirl.create(:music_session, :creator => user, :description => "My Session") msuh = FactoryGirl.create(:music_session_user_history, :music_session_id => music_session.id, :client_id => client.client_id, :user_id => user.id) + expect(msuh).to_not eq(nil) login(user) - post "/api/participant_histories/#{msuh.id}/rating.json", { :rating => 0 }.to_json, "CONTENT_TYPE" => "application/json" + post "/api/participant_histories/#{msuh.client_id}/rating.json", { :rating => 1 }.to_json, "CONTENT_TYPE" => "application/json" user.reload user.first_good_music_session_at.should_not be_nil From ebe9aa10470e51734657a772bba14546a9a71677 Mon Sep 17 00:00:00 2001 From: Jonathan Kolyer Date: Wed, 7 May 2014 01:33:27 +0000 Subject: [PATCH 12/12] VRFS-1577 VRFS-736 --- .../models/music_session_user_history.rb | 18 ++++++++++++++---- .../assets/javascripts/rateSessionDialog.js | 10 ++++++---- .../api_music_sessions_controller.rb | 11 +++++------ 3 files changed, 25 insertions(+), 14 deletions(-) diff --git a/ruby/lib/jam_ruby/models/music_session_user_history.rb b/ruby/lib/jam_ruby/models/music_session_user_history.rb index 233c64774..94beb488d 100644 --- a/ruby/lib/jam_ruby/models/music_session_user_history.rb +++ b/ruby/lib/jam_ruby/models/music_session_user_history.rb @@ -17,6 +17,14 @@ module JamRuby :class_name => "MusicSessionHistory", :foreign_key => "music_session_id") + def self.latest_history(client_id) + self.where(:client_id => client_id) + .order('created_at DESC') + .limit(1) + .includes(:user) + .first + end + def music_session_history @msh ||= JamRuby::MusicSessionHistory.find_by_music_session_id(self.music_session_id) end @@ -104,10 +112,8 @@ module JamRuby def add_rating(rval, comment='') rval = rval.to_i - if 0 != rval - self.rating = self.rating.to_i + rval - self.rating_comment = comment - end + self.rating = rval if 0 != rval + self.rating_comment = comment end MIN_SESSION_DURATION_RATING = 60 @@ -118,5 +124,9 @@ module JamRuby Rails.env.development? end + def good_rating? + 0 < self.rating.to_i + end + end end diff --git a/web/app/assets/javascripts/rateSessionDialog.js b/web/app/assets/javascripts/rateSessionDialog.js index f9dc49e40..644585bb5 100644 --- a/web/app/assets/javascripts/rateSessionDialog.js +++ b/web/app/assets/javascripts/rateSessionDialog.js @@ -7,23 +7,25 @@ var logger = context.JK.logger; var dialogId = 'rate-session-dialog'; var $scopeSelector = "[layout-id='rate-session-dialog']"; + var clientId = context.JK.JamServer.clientID; function reset() { + clientId = context.JK.JamServer.clientID; $('#btn-rate-session-up', $scopeSelector).removeClass('selected'); $('#btn-rate-session-down', $scopeSelector).removeClass('selected'); $('#txt-rate-session-comment',"[layout-id='rate-session-dialog']").val(''); } function showDialog() { - if (context.JK.JamServer.clientID) { + if (clientId) { + reset(); $.ajax({ type: "GET", - url: "/api/participant_histories/"+context.JK.JamServer.clientID + url: "/api/participant_histories/"+clientId }).done(function (response) { if (response && response.hasOwnProperty('should_rate_session') && true==response['should_rate_session']) { - reset(); app.layout.showDialog(dialogId); } }); @@ -81,7 +83,7 @@ closeDialog(); return false; } - var url = "/api/participant_histories/"+context.JK.JamServer.clientID+"/rating"; + var url = "/api/participant_histories/"+clientId+"/rating"; $.ajax({ type: "POST", url: url, diff --git a/web/app/controllers/api_music_sessions_controller.rb b/web/app/controllers/api_music_sessions_controller.rb index adf807ac2..d832b68a0 100644 --- a/web/app/controllers/api_music_sessions_controller.rb +++ b/web/app/controllers/api_music_sessions_controller.rb @@ -151,7 +151,7 @@ class ApiMusicSessionsController < ApiController end def participant_rating - if @history = MusicSessionUserHistory.find_by_client_id(params[:client_id]) + if @history = MusicSessionUserHistory.latest_history(params[:client_id]) if request.post? @history.add_rating(params[:rating], params[:comment]) @history.save @@ -160,11 +160,10 @@ class ApiMusicSessionsController < ApiController response.status = :unprocessable_entity respond_with @history else - uu = @history.user - if (uu.first_good_music_session_at.nil?) - uu.first_good_music_session_at = Time.now - uu.save - end if uu + if @history.good_rating? && @history.user.first_good_music_session_at.nil? + @history.user.first_good_music_session_at = Time.now + @history.user.save + end render :json => {}, :status => :ok end elsif request.get?