diff --git a/ruby/lib/jam_ruby/app/mailers/user_mailer.rb b/ruby/lib/jam_ruby/app/mailers/user_mailer.rb index d6dd849ca..25e739518 100644 --- a/ruby/lib/jam_ruby/app/mailers/user_mailer.rb +++ b/ruby/lib/jam_ruby/app/mailers/user_mailer.rb @@ -927,6 +927,31 @@ module JamRuby end end + def student_test_drive_no_bill(lesson_session) + @student = lesson_session.student + @teacher = lesson_session.teacher + @session_name = lesson_session.music_session.name + @session_description = lesson_session.music_session.description + @session_date = lesson_session.slot.pretty_scheduled_start(true) + @session_url = lesson_session.web_url + @lesson_session = lesson_session + + email = @student.email + subject = "Your TestDrive with #{@teacher.name} will not be billed" + unique_args = {:type => "student_test_drive_no_bill"} + + sendgrid_category "Notification" + sendgrid_unique_args :type => unique_args[:type] + + sendgrid_recipients([email]) + sendgrid_substitute('@USERID', [@student.id]) + + mail(:to => email, :subject => subject) do |format| + format.text + format.html { render :layout => "from_user_mailer" } + end + end + # successfully completed, but no more test drives left def student_test_drive_lesson_done(lesson_session) diff --git a/ruby/lib/jam_ruby/app/views/jam_ruby/user_mailer/student_lesson_normal_no_bill.html.erb b/ruby/lib/jam_ruby/app/views/jam_ruby/user_mailer/student_lesson_normal_no_bill.html.erb index f7836f6ce..aa263319f 100644 --- a/ruby/lib/jam_ruby/app/views/jam_ruby/user_mailer/student_lesson_normal_no_bill.html.erb +++ b/ruby/lib/jam_ruby/app/views/jam_ruby/user_mailer/student_lesson_normal_no_bill.html.erb @@ -6,7 +6,7 @@ Hello <%= @student.name %>,

-

You will not be billed for today's session with <%= @teacher.name %> +

You will not be billed for today's session with <%= @teacher.name %>.

Click the button below to see more information about this session. diff --git a/ruby/lib/jam_ruby/app/views/jam_ruby/user_mailer/student_lesson_normal_no_bill.text.erb b/ruby/lib/jam_ruby/app/views/jam_ruby/user_mailer/student_lesson_normal_no_bill.text.erb index 0c6d60a65..31ef00ca0 100644 --- a/ruby/lib/jam_ruby/app/views/jam_ruby/user_mailer/student_lesson_normal_no_bill.text.erb +++ b/ruby/lib/jam_ruby/app/views/jam_ruby/user_mailer/student_lesson_normal_no_bill.text.erb @@ -1,5 +1,5 @@ Hello <%= @student.name %>, -You will not be billed for today's session with <%= @teacher.name %> +You will not be billed for today's session with <%= @teacher.name %>. To see this lesson, click here: <%= @lesson_session.web_url %> diff --git a/ruby/lib/jam_ruby/app/views/jam_ruby/user_mailer/student_test_drive_no_bill.html.erb b/ruby/lib/jam_ruby/app/views/jam_ruby/user_mailer/student_test_drive_no_bill.html.erb new file mode 100644 index 000000000..deee9c563 --- /dev/null +++ b/ruby/lib/jam_ruby/app/views/jam_ruby/user_mailer/student_test_drive_no_bill.html.erb @@ -0,0 +1,23 @@ +<% provide(:title, "Your TestDrive with #{@teacher.name} will not be billed") %> +<% provide(:photo_url, @teacher.resolved_photo_url) %> + +<% content_for :note do %> +

+ Hello <%= @student.name %>, +

+ +

You have not used a credit for today's TestDrive with <%= @teacher.name %>. +
+
+ Click the button below to see more information about this session. +

+

+ VIEW + LESSON DETAILS +

+

+ Best Regards,
Team JamKazam +

+<% end %> + + diff --git a/ruby/lib/jam_ruby/app/views/jam_ruby/user_mailer/student_test_drive_no_bill.text.erb b/ruby/lib/jam_ruby/app/views/jam_ruby/user_mailer/student_test_drive_no_bill.text.erb new file mode 100644 index 000000000..f3d3b2825 --- /dev/null +++ b/ruby/lib/jam_ruby/app/views/jam_ruby/user_mailer/student_test_drive_no_bill.text.erb @@ -0,0 +1,5 @@ +Hello <%= @student.name %>, + +You have not used a credit for today's TestDrive with <%= @teacher.name %>. + +To see this lesson, click here: <%= @lesson_session.web_url %> diff --git a/ruby/lib/jam_ruby/models/music_session.rb b/ruby/lib/jam_ruby/models/music_session.rb index 14947dd74..d03d8ac67 100644 --- a/ruby/lib/jam_ruby/models/music_session.rb +++ b/ruby/lib/jam_ruby/models/music_session.rb @@ -22,6 +22,7 @@ module JamRuby CREATE_TYPE_IMMEDIATE = 'immediately' CREATE_TYPE_QUICK_START = 'quick-start' CREATE_TYPE_LESSON = 'lesson' + CREATE_TYPE_QUICK_PUBLIC = 'quick-public' attr_accessor :legal_terms, :language_description, :access_description, :scheduling_info_changed @@ -323,11 +324,29 @@ module JamRuby # let session be restarted for up to 2 hours after finishing session_finished = "(music_sessions.session_removed_at > NOW() - '2 hour'::INTERVAL)" - query = MusicSession.where("music_sessions.canceled = FALSE") + query = MusicSession.joins( + %Q{ + LEFT OUTER JOIN + invitations + ON + music_sessions.id = invitations.music_session_id AND invitations.receiver_id = '#{user.id}' + } + ) + query = query.where("music_sessions.canceled = FALSE") query = query.where('music_sessions.fan_access = TRUE or music_sessions.musician_access = TRUE') if only_public - query = query.where("music_sessions.user_id = '#{user.id}'") + #query = query.where("music_sessions.user_id = '#{user.id}' OR invitations.id IS NOT NULL") + query = query.where("music_sessions.id in ( + select distinct(rs.music_session_id) + from rsvp_slots rs + where rs.id in ( + select rrrs.rsvp_slot_id + from rsvp_requests rr + inner join rsvp_requests_rsvp_slots rrrs on rr.id = rrrs.rsvp_request_id + where rr.user_id = '#{user.id}'AND rrrs.chosen = true + ) + ) OR invitations.id IS NOT NULL OR music_sessions.user_id = '#{user.id}'") query = query.where("music_sessions.scheduled_start IS NULL OR #{session_not_started} OR #{session_finished} OR #{session_started_not_finished}") - query = query.where("music_sessions.create_type IS NULL OR music_sessions.create_type != '#{CREATE_TYPE_QUICK_START}'") + query = query.where("music_sessions.create_type IS NULL OR (music_sessions.create_type != '#{CREATE_TYPE_QUICK_START}' AND music_sessions.create_type != '#{CREATE_TYPE_QUICK_PUBLIC}')") query = query.order("music_sessions.scheduled_start ASC") query @@ -339,7 +358,7 @@ module JamRuby filter_approved = only_approved ? 'AND rrrs.chosen = true' : '' MusicSession.where(%Q{music_sessions.canceled = FALSE AND - (music_sessions.create_type is NULL OR music_sessions.create_type != '#{CREATE_TYPE_QUICK_START}') AND + (music_sessions.create_type is NULL OR (music_sessions.create_type != '#{CREATE_TYPE_QUICK_START}' AND music_sessions.create_type != '#{CREATE_TYPE_QUICK_PUBLIC}')) AND (music_sessions.scheduled_start is NULL OR music_sessions.scheduled_start > NOW() - '4 hour'::INTERVAL) AND music_sessions.id in ( select distinct(rs.music_session_id) @@ -760,7 +779,7 @@ module JamRuby query = query.offset(offset) query = query.limit(limit) - query = query.where("music_sessions.create_type IS NULL OR (music_sessions.create_type != ? AND music_sessions.create_type != ?)", MusicSession::CREATE_TYPE_QUICK_START, MusicSession::CREATE_TYPE_IMMEDIATE) + query = query.where("music_sessions.create_type IS NULL OR (music_sessions.create_type != ? AND music_sessions.create_type != ? AND music_sessions.create_type != ?)", MusicSession::CREATE_TYPE_QUICK_START, MusicSession::CREATE_TYPE_IMMEDIATE, MusicSession::CREATE_TYPE_QUICK_PUBLIC) query = query.where("music_sessions.genre_id = ?", genre) unless genre.blank? query = query.where('music_sessions.language = ?', lang) unless lang.blank? query = query.where("(description_tsv @@ to_tsquery('jamenglish', ?))", ActiveRecord::Base.connection.quote(keyword) + ':*') unless keyword.blank? diff --git a/ruby/lib/jam_ruby/models/user.rb b/ruby/lib/jam_ruby/models/user.rb index de83de27b..448d62cb9 100644 --- a/ruby/lib/jam_ruby/models/user.rb +++ b/ruby/lib/jam_ruby/models/user.rb @@ -2051,7 +2051,7 @@ module JamRuby self.remaining_test_drives = self.remaining_test_drives + 1 self.save(validate: false) - UserMailer.test_drive_no_bill(self, lesson_session).deliver + UserMailer.student_test_drive_no_bill(lesson_session).deliver end def used_test_drives diff --git a/ruby/spec/jam_ruby/models/lesson_booking_spec.rb b/ruby/spec/jam_ruby/models/lesson_booking_spec.rb index 4a17aea5b..0c2bab1dd 100644 --- a/ruby/spec/jam_ruby/models/lesson_booking_spec.rb +++ b/ruby/spec/jam_ruby/models/lesson_booking_spec.rb @@ -112,7 +112,7 @@ describe LessonBooking do purchase.last_billing_attempt_at.should eql time purchase.sent_billing_notices.should eql false - user.card_approved(create_stripe_token, '78759') + user.card_approved(create_stripe_token, '78759', booking.id) user.save! day = day + 1 @@ -137,7 +137,7 @@ describe LessonBooking do end it "advances to next month" do - user.card_approved(create_stripe_token, '78759') + user.card_approved(create_stripe_token, '78759', booking.id) user.save! day = Date.new(2016, 1, 20) @@ -258,7 +258,7 @@ describe LessonBooking do purchase.billed.should be false # now that it's suspended, let's unsuspend it - user.card_approved(create_stripe_token, '78759') + user.card_approved(create_stripe_token, '78759', booking.id) user.save! day = day + 1 diff --git a/ruby/spec/jam_ruby/models/music_session_spec.rb b/ruby/spec/jam_ruby/models/music_session_spec.rb index e152fed55..4013eb804 100644 --- a/ruby/spec/jam_ruby/models/music_session_spec.rb +++ b/ruby/spec/jam_ruby/models/music_session_spec.rb @@ -362,6 +362,31 @@ describe MusicSession do end describe "scheduled" do + + it "includes any RSVP'ed" do + rsvp_request = FactoryGirl.create(:rsvp_request_for_multiple_slots, user: some_user, music_session: music_session1, number: 2, chosen:true) + + approved_rsvps = music_session1.approved_rsvps + approved_rsvps.length.should == 2 + + + sessions = MusicSession.scheduled(approved_rsvps[0]) + sessions.length.should == 1 + + sessions = MusicSession.scheduled(approved_rsvps[1]) + sessions.length.should == 1 + end + + it "includes invited" do + invitee = FactoryGirl.create(:user, last_jam_audio_latency: 30, last_jam_locidispid: 3) + FactoryGirl.create(:friendship, user: creator, friend: invitee) + FactoryGirl.create(:friendship, user: invitee, friend: creator) + music_session = FactoryGirl.create(:music_session, creator: creator) + FactoryGirl.create(:invitation, receiver:invitee, sender:creator, music_session: music_session) + + sessions = MusicSession.scheduled(invitee) + sessions.length.should == 1 + end it "excludes based on time-range" do session = FactoryGirl.create(:music_session, scheduled_start: Time.now) diff --git a/web/app/assets/javascripts/homeScreen.js b/web/app/assets/javascripts/homeScreen.js index a96075b47..ef94e580f 100644 --- a/web/app/assets/javascripts/homeScreen.js +++ b/web/app/assets/javascripts/homeScreen.js @@ -89,6 +89,13 @@ if(gon.allow_force_native_client) { $('body').on('keyup', switchClientMode); } + + $('.homecard.jamclass').on('click', function() { + + context.JK.Banner.showNotice("Coming Soon!", "JamClass is just around the corner.") + + return false; + }) } this.initialize = function() { diff --git a/web/app/assets/javascripts/layout.js b/web/app/assets/javascripts/layout.js index 931f1bbaf..6592fcdb7 100644 --- a/web/app/assets/javascripts/layout.js +++ b/web/app/assets/javascripts/layout.js @@ -222,10 +222,10 @@ var childLayout = me.getCardLayout(gridWidth, gridHeight, gridRows, gridCols, childRow, childCol, childRowspan, childColspan); - if($(this).is('.feed')) { + if($(this).is('.jamtrack')) { feedCardLayout = childLayout; } - else if($(this).is('.findsession')) { + else if($(this).is('.jamclass')) { findCardLayout = childLayout; } diff --git a/web/app/assets/javascripts/react-components/BookLesson.js.jsx.coffee b/web/app/assets/javascripts/react-components/BookLesson.js.jsx.coffee index 431f1ee98..fc68f432a 100644 --- a/web/app/assets/javascripts/react-components/BookLesson.js.jsx.coffee +++ b/web/app/assets/javascripts/react-components/BookLesson.js.jsx.coffee @@ -17,7 +17,6 @@ UserStore = context.UserStore {beforeShow: @beforeShow, afterShow: @afterShow, beforeHide: @beforeHide}) onUserChanged: (userState) -> - console.log("userState", userState) @setState({user: userState?.user}) checkboxChanged: (e) -> diff --git a/web/app/assets/javascripts/scheduled_session.js.erb b/web/app/assets/javascripts/scheduled_session.js.erb index 11891e938..3296d9275 100644 --- a/web/app/assets/javascripts/scheduled_session.js.erb +++ b/web/app/assets/javascripts/scheduled_session.js.erb @@ -48,6 +48,10 @@ var $btnSelectFiles = null; var $selectedFilenames = null; var $uploadSpinner = null; + var $quickStartSoloBtn = null; + var $quickStartOpenBtn = null; + var $startOrScheduledBtn = null; + var $featureSessions = null; // Step1 layout var $screenStep1 = null; @@ -57,17 +61,19 @@ var $fetchingSpinner = null; var $fetchingSpinnerLabel = null; var $noSessionFound = null; + var $sessionHeader = null; var scheduledSessions = {}; // Step4 layout var $policyTypes = null; - var TOTAL_STEPS = 5; - var STEP_SELECT_TYPE = 0; - var STEP_SELECT_PLAYING = 1; - var STEP_SELECT_INVITE = 2; - var STEP_SELECT_POLICY = 3; - var STEP_SELECT_CONFIRM = 4; + var TOTAL_STEPS = 6; + var STEP_HOME = 0; + var STEP_SELECT_TYPE = 1; + var STEP_SELECT_PLAYING = 2; + var STEP_SELECT_INVITE = 3; + var STEP_SELECT_POLICY = 4; + var STEP_SELECT_CONFIRM = 5; var ONE_HOUR = 3600 * 1000; var ONE_MINUTE = 60 * 1000; @@ -92,6 +98,84 @@ function afterLoadScheduledSessions(sessionList) { + $featureSessions.empty() + + createSessionSettings.session_count = sessionList.length; + + if (createSessionSettings.session_count == 0) { + createSessionSettings.selectedSessionId = null; + $featureSessions.append('No sessions') + } + else { + $.each(sessionList, function (i, session) { + scheduledSessions[session.id] = session; + }); + + context._.each(sessionList, function (session) { + session.scheduled_start = new Date(session.scheduled_start).toDateString() + ', ' + + context.JK.formatUtcTime(new Date(session.scheduled_start), false); + + var time = session.pretty_scheduled_start_with_timezone; + var receivedUsers = {} + var sessionLink = '/client#/account/sessionDetail/' + session.id + var isActive = session.active_music_session && session.active_music_session.participants.length > 0 + + if(isActive) { + time = 'NOW' + + context._.each(session.active_music_session.participants, function(participant) { + receivedUsers[participant.id] = participant.name; + }) + + sessionLink = '/sessions/' + session.id + } + else { + + context._.each(session.approved_rsvps, function(approved_rsvp) { + receivedUsers[approved_rsvp.id] = approved_rsvp.name; + }) + + context._.each(session.invitations, function(invitation) { + receivedUsers[invitation.receiver_id] = invitation.receiver_name; + }) + } + var $row = $('' + session.pretty_scheduled_start_short + '') + var $sessionCell = $row.find('.session-link') + if (isActive) { + var $sessionLink = $('' + session.name + '') + $sessionCell.append($sessionLink) + context.JK.popExternalLinks($sessionCell) + } + else + { + var $sessionLink = $('' + session.name + '') + $sessionCell.append($sessionLink) + } + + var $actionsCell = $row.find('.actions'); + var $actionsLink = $('join') + $actionsCell.append($actionsLink) + + var msg = ''; + context._.each(receivedUsers, function(value, key) { + var url = '/client#/profile/' + key + msg += '' + value + ', ' + }) + + if (msg.length > 0) { + msg = msg.slice(0, -2) + } + var $usersCell = $row.find('.session-users') + $usersCell.append(msg) + + $featureSessions.append($row); + }); + } + } + + + function afterLoadScheduledSessions2(sessionList) { + createSessionSettings.session_count = sessionList.length; if (createSessionSettings.session_count == 0) { @@ -157,6 +241,30 @@ } } + function clickQuickStartSolo () { + + logger.debug("user clicked quick start solo") + createSessionSettings.createType = '<%= MusicSession::CREATE_TYPE_QUICK_START %>' + next(); + return false; + } + + function clickQuickStartPublic () { + + logger.debug("user clicked quick start public") + createSessionSettings.createType = '<%= MusicSession::CREATE_TYPE_QUICK_PUBLIC %>' + next(); + return false; + } + + function clickStartOrSchedule () { + + logger.debug("user clicked start or scheduled") + toggleCreateType(null, '<%= MusicSession::CREATE_TYPE_IMMEDIATE %>') + next(); + return false; + } + function afterLoadUserDetail(userDetail) { var userInstruments = []; $.each(userDetail.instruments, function(index, userInstrument) { @@ -180,23 +288,33 @@ }); } - function beforeShowStep1() { + function beforeShowStep0() { $scheduledSessions.empty(); $noSessionFound.hide(); $fetchingSpinner.show(); $fetchingSpinnerLabel.show(); rest.findScheduledSessions({}) - .done(afterLoadScheduledSessions) - .fail(app.ajaxError) - .always(function(response) { - $fetchingSpinner.hide(); - $fetchingSpinnerLabel.hide(); - }); + .done(afterLoadScheduledSessions) + .fail(app.ajaxError) + .always(function(response) { + $fetchingSpinner.hide(); + $fetchingSpinnerLabel.hide(); + }); rest.getUserDetail() - .done(afterLoadUserDetail) - .fail(app.ajaxError); + .done(afterLoadUserDetail) + .fail(app.ajaxError); + + + } + + + function beforeShowStep1() { + $scheduledSessions.empty(); + $noSessionFound.hide(); + $fetchingSpinner.show(); + $fetchingSpinnerLabel.show(); createSessionSettings.startDate = createSessionSettings.startDate || (new Date().toDateString()); @@ -362,6 +480,10 @@ $screen.find('#session-policy-disp').html(createSessionSettings.session_policy); } + function beforeMoveStep0() { + return true; + } + function beforeMoveStep1() { if (createSessionSettings.createType == '<%= MusicSession::CREATE_TYPE_START_SCHEDULED%>') { createSessionSettings.selectedSessionId = $scheduledSessions.find('.iradio_minimal.checked input[name="scheduled-session-info"]').attr('data-session-id'); @@ -427,6 +549,24 @@ createSessionSettings.recurring_mode.label = 'Not Recurring'; createSessionSettings.recurring_mode.value = 'once'; } + else if (createSessionSettings.createType == '<%= MusicSession::CREATE_TYPE_QUICK_PUBLIC %>') { + createSessionSettings.genresValues = ['Pop']; + createSessionSettings.genres = ['pop']; + createSessionSettings.timezone.label = "(GMT-06:00) Central Time (US & Canada)"; + createSessionSettings.timezone.value = "Central Time (US & Canada),America/Chicago"; + createSessionSettings.name = "Open Session"; + createSessionSettings.description = "Feel free to join this session, it's open!"; + createSessionSettings.notations = []; + createSessionSettings.language.label = 'English'; + createSessionSettings.language.value = 'eng'; + createSessionSettings.session_policy = 'Standard'; + createSessionSettings.musician_access.label = "Musicians may join at will"; + createSessionSettings.musician_access.value = "musicians"; + createSessionSettings.fans_access.label = "Fans can listen to you while you're playing in session, and can text chat with each other while listening."; + createSessionSettings.fans_access.value = "listen-chat-each"; + createSessionSettings.recurring_mode.label = 'Not Recurring'; + createSessionSettings.recurring_mode.value = 'once'; + } else { createSessionSettings.startDate = $screen.find('#session-start-date').val(); createSessionSettings.startTime = $startTimeList.val(); @@ -660,7 +800,7 @@ data.legal_terms = true; data.language = createSessionSettings.language.value; data.band = createSessionSettings.band.value; - if (createSessionSettings.createType == '<%= MusicSession::CREATE_TYPE_QUICK_START %>' || createSessionSettings.createType == '<%= MusicSession::CREATE_TYPE_IMMEDIATE %>') { + if (createSessionSettings.createType == '<%= MusicSession::CREATE_TYPE_QUICK_START %>' || createSessionSettings.createType == '<%= MusicSession::CREATE_TYPE_IMMEDIATE %>' || createSessionSettings.createType == '<%= MusicSession::CREATE_TYPE_QUICK_PUBLIC %>') { data.start = new Date().toDateString() + ' ' + context.JK.formatUtcTime(new Date(), false); data.duration = "60"; } @@ -748,7 +888,7 @@ $('#create-session-buttons .btn-next').off('click'); var newSessionId = response.id; - if (createSessionSettings.createType == '<%= MusicSession::CREATE_TYPE_QUICK_START %>' || createSessionSettings.createType == "immediately") { + if (createSessionSettings.createType == '<%= MusicSession::CREATE_TYPE_QUICK_START %>' || createSessionSettings.createType == "immediately" || createSessionSettings.createType == '<%= MusicSession::CREATE_TYPE_QUICK_PUBLIC %>') { joinSession(newSessionId); } else { @@ -766,22 +906,26 @@ var STEPS = { 0: { + beforeShow: beforeShowStep0, + beforeMove: beforeMoveStep0 + }, + 1: { beforeShow: beforeShowStep1, beforeMove: beforeMoveStep1 }, - 1: { + 2: { beforeShow: beforeShowStep2, beforeMove: beforeMoveStep2 }, - 2: { + 3: { beforeShow: beforeShowStep3, beforeMove: beforeMoveStep3 }, - 3: { + 4: { beforeShow: beforeShowStep4, beforeMove: beforeMoveStep4 }, - 4: { + 5: { beforeShow: beforeShowStep5, beforeMove: beforeMoveStep5 } @@ -850,6 +994,12 @@ $createSessionSteps.find("#todo-steps").append($("
")); $screen.find('#create-session-steps').replaceWith($createSessionSteps); + if (step == 0) { + $sessionHeader.hide() + } + else { + $sessionHeader.show() + } beforeShowStep(); // update buttons @@ -862,6 +1012,10 @@ // hide back button if 1st step or last step if (step == 0) { $btnBack.hide(); + $btnNext.hide(); + } + else { + $btnNext.show(); } if (step == STEP_SELECT_TYPE && createSessionSettings.createType == '<%= MusicSession::CREATE_TYPE_START_SCHEDULED%>' && createSessionSettings.selectedSessionId == null) { @@ -907,14 +1061,16 @@ function willOptionStartSession() { return createSessionSettings.createType == '<%= MusicSession::CREATE_TYPE_START_SCHEDULED%>' || createSessionSettings.createType == '<%= MusicSession::CREATE_TYPE_IMMEDIATE %>' || - createSessionSettings.createType == '<%= MusicSession::CREATE_TYPE_QUICK_START %>'; + createSessionSettings.createType == '<%= MusicSession::CREATE_TYPE_QUICK_START %>' || + createSessionSettings.createType == '<%= MusicSession::CREATE_TYPE_QUICK_PUBLIC%>'; } function optionRequiresMultiplayerProfile() { return createSessionSettings.createType == '<%= MusicSession::CREATE_TYPE_START_SCHEDULED%>' || createSessionSettings.createType == '<%= MusicSession::CREATE_TYPE_IMMEDIATE %>' || createSessionSettings.createType == '<%= MusicSession::CREATE_TYPE_RSVP %>' || - createSessionSettings.createType == '<%= MusicSession::CREATE_TYPE_SCHEDULE_FUTURE %>'; + createSessionSettings.createType == '<%= MusicSession::CREATE_TYPE_SCHEDULE_FUTURE %>' || + createSessionSettings.createType == '<%= MusicSession::CREATE_TYPE_QUICK_PUBLIC %>'; } function next(event) { @@ -923,7 +1079,7 @@ return false; } - if(createSessionSettings.createType == '<%= MusicSession::CREATE_TYPE_QUICK_START %>') { + if(createSessionSettings.createType == '<%= MusicSession::CREATE_TYPE_QUICK_START %>' || createSessionSettings.createType == '<%= MusicSession::CREATE_TYPE_QUICK_PUBLIC %>') { // short-cut added for private sessions; just get it going beforeMoveStep1(); // this will populate the createSessionSettings structure startSessionClicked(); // and this will create the session @@ -939,6 +1095,7 @@ var valid = beforeMoveStep(); if (!valid) { + console.log("beforeMoveStep check invalid") return false; } @@ -947,7 +1104,7 @@ } if ($(this).is('.disabled')) return false; - if ($.inArray(createSessionSettings.createType, ['<%= MusicSession::CREATE_TYPE_START_SCHEDULED%>', '<%= MusicSession::CREATE_TYPE_QUICK_START %>']) > -1) + if ($.inArray(createSessionSettings.createType, ['<%= MusicSession::CREATE_TYPE_START_SCHEDULED%>', '<%= MusicSession::CREATE_TYPE_QUICK_START %>', '<%= MusicSession::CREATE_TYPE_QUICK_PUBLIC %>']) > -1) step = STEP_SELECT_CONFIRM; else step++; @@ -1094,6 +1251,8 @@ context.JK.helpBubble($sessionPlusMusiciansLabel, 'session-plus-musicians', {}, {offsetParent: $sessionPlusMusiciansLabel.closest('.content-wrapper')}); $editScheduledSessions.on('click', onEditSessions); + + context.JK.popExternalLinks($screen) } function changeSelectedFiles() { @@ -1144,19 +1303,19 @@ if ($.inArray(createSessionSettings.createType, ['<%= MusicSession::CREATE_TYPE_START_SCHEDULED%>', '<%= MusicSession::CREATE_TYPE_QUICK_START %>']) > -1) { if (step == STEP_SELECT_CONFIRM) { - for (var i = 1; i < 4; i++) { - $screen.find('#create-session-steps .session-stepnumber[data-step-number="' + i + '"]').hide(); - } - $screen.find('#create-session-steps .session-stepnumber[data-step-number="4"]').html("2"); - $screen.find('#create-session-steps .session-stepnumber[data-step-number="0"]').on('click', back); - $screen.find('#create-session-steps .session-stepnumber[data-step-number="0"]').addClass('session-stephover'); - } - else if (step == STEP_SELECT_TYPE) { for (var i = 2; i < 5; i++) { $screen.find('#create-session-steps .session-stepnumber[data-step-number="' + i + '"]').hide(); } - $screen.find('#create-session-steps .session-stepnumber[data-step-number="4"]').html("5"); - var $nextStep = $screen.find('#create-session-steps .session-stepnumber[data-step-number="1"]'); + $screen.find('#create-session-steps .session-stepnumber[data-step-number="5"]').html("2"); + $screen.find('#create-session-steps .session-stepnumber[data-step-number="1"]').on('click', back); + $screen.find('#create-session-steps .session-stepnumber[data-step-number="1"]').addClass('session-stephover'); + } + else if (step == STEP_SELECT_TYPE) { + for (var i = 3; i < 6; i++) { + $screen.find('#create-session-steps .session-stepnumber[data-step-number="' + i + '"]').hide(); + } + $screen.find('#create-session-steps .session-stepnumber[data-step-number="5"]').html("5"); + var $nextStep = $screen.find('#create-session-steps .session-stepnumber[data-step-number="2"]'); if (createSessionSettings.createType == '<%= MusicSession::CREATE_TYPE_QUICK_START %>') { $nextStep.on('click', next); $nextStep.addClass('session-stephover') @@ -1176,10 +1335,12 @@ } } - function toggleCreateType(event) { + function toggleCreateType(event, checkedType) { - var $checkedType = $(event.target); - var checkedType = $checkedType.attr('info-value'); + if(!checkedType) { + var $checkedType = $(event.target); + var checkedType = $checkedType.attr('info-value'); + } if (checkedType == createSessionSettings.createType) return; @@ -1293,6 +1454,10 @@ $inputFiles.on('change', changeSelectedFiles); $btnSelectFiles.on('click', toggleSelectFiles); + + $quickStartSoloBtn.on('click', clickQuickStartSolo) + $quickStartOpenBtn.on('click', clickQuickStartPublic) + $startOrScheduledBtn.on('click', clickStartOrSchedule) } function initialize(invitationDialogInstance, friendSelectorDialog, instrumentSelectorInstance, instrumentRSVPSelectorInstance) { @@ -1332,6 +1497,11 @@ $fetchingSpinner = $screen.find('#fetching-spinner'); $fetchingSpinnerLabel = $screen.find('#fetching-spinner-label'); $noSessionFound = $screen.find("#scheduled-session-not-found"); + $sessionHeader = $screen.find('.session-header') + $quickStartSoloBtn = $screen.find('.quick-start-solo') + $quickStartOpenBtn = $screen.find('.quick-start-open') + $startOrScheduledBtn = $screen.find('.start-or-schedule') + $featureSessions = $screen.find('.featured-sessions tbody') initializeControls(); events(); diff --git a/web/app/assets/stylesheets/client/createSession.css.scss b/web/app/assets/stylesheets/client/createSession.css.scss index d324aca04..fbd3a981d 100644 --- a/web/app/assets/stylesheets/client/createSession.css.scss +++ b/web/app/assets/stylesheets/client/createSession.css.scss @@ -17,6 +17,93 @@ font-size: 13px; } + .column { + h2 { + margin-bottom:20px; + } + &.column-left { + width:60%; + float:left; + padding-right:10px; + @include border_box_sizing; + } + &.column-right{ + width:40%; + float:left; + padding-left:10px; + @include border_box_sizing; + + p { + margin:0; + font-size: 12px; + line-height: 125%; + width:100%; + @include border_box_sizing; + } + a.button-orange { + margin:0 0 15px 3px; + } + } + } + .find-sessions, .view-the-feed { + margin-bottom:20px; + } + .view-the-feed { + margin-top:30px; + } + .view-the-feed-learn-more, .find-session-learn-more { + margin-top:10px; + font-size:12px; + } + .quick-option { + position:relative; + margin-bottom:20px; + } + .quick-options { + margin: 0 0 35px 0; + a { + width:130px; + margin-left:0px; + position:absolute; + top:5px; + left: 0; + } + p { + margin:0; + font-size: 12px; + line-height: 125%; + width:100%; + padding-left:176px; + @include border_box_sizing; + } + a.schedule-learn-more { + position:static; + margin-left:176px; + font-size:12px; + padding-top:12px; + } + } + .learn-more-sessions-header { + margin-top:40px; + } + .learn-more-sessions { + a { + display:block; + font-size:12px; + margin-bottom:3px; + } + p { + margin-bottom:20px !important; + } + } + table.featured-sessions { + .actions { + text-align:center; + } + .session-users { + a { color:#fc0; } + } + } .session-header { padding: 15px 35px; .session-stepnumber { @@ -101,7 +188,7 @@ padding-left:5px; } - #session-step-1 { + #session-step-2 { ul#create-session-type { margin-left: 0px; list-style: none; @@ -143,7 +230,7 @@ } } - #session-step-2 { + #session-step-3 { #select-genre { padding-bottom: 10px; @@ -200,7 +287,7 @@ } } - #session-step-3 { + #session-step-4 { .session-instrumentlist { padding: 10px; @@ -275,7 +362,7 @@ } } - #session-step-4 { + #session-step-5 { .terms-checkbox { float:left; @@ -305,7 +392,7 @@ } - #session-step-5 { + #session-step-6 { } #session-name-disp { diff --git a/web/app/views/clients/_home.html.slim b/web/app/views/clients/_home.html.slim index 14b7961de..e6d0e0d15 100644 --- a/web/app/views/clients/_home.html.slim +++ b/web/app/views/clients/_home.html.slim @@ -1,81 +1,64 @@ .screen.no-login-required layout="screen" layout-id="home" / Layout is different if jam_tracks tile available: - -jamtracks=Rails.configuration.jam_tracks_available || (current_user && current_user.admin) - -if (jamtracks) - -small_tile_size="2.4" - -column_positions=["0.0,1", "2.4,1", "4.8,1", "7.2,1", "9.6,1"] - -else - -small_tile_size="3.0" - -column_positions=["0,1", "3,1", "0,1", "6,1", "9,1"] / Grid is the count of the smallest spaces, then / individual spells span those spaces -if @nativeClient .grid layout-grid="2x12" .homecard.createsession layout-grid-columns="4" layout-grid-position="0,0" layout-grid-rows="1" layout-link="createSession" type="createSession" class="#{logged_in_not_logged_in_class}" - h2 create session + h2 sessions .homebox-info /! 4 friends online, 2 currently in sessions - .homecard.findsession layout-grid-columns="4" layout-grid-position="4,0" layout-grid-rows="1" layout-link="findSession" type="findSession" class="#{logged_in_not_logged_in_class}" - h2 find session + .homecard.jamclass layout-grid-columns="4" layout-grid-position="4,0" layout-grid-rows="1" layout-link="jamclass" type="jamclass" class="#{logged_in_not_logged_in_class}" + h2 jamclass .homebox-info /! 1 session invitation, 19 public sessions active - .homecard.feed layout-grid-columns="4" layout-grid-position="8,0" layout-grid-rows="1" layout-link="feed" class="#{logged_in_not_logged_in_class}" - h2 feed + .homecard.jamtrack layout-grid-columns="4" layout-grid-position="8,0" layout-grid-rows="1" layout-link="jamtrack" type="jamtrack" + h2 jamtracks .homebox-info - /! 4 friends online, 2 currently in sessions - .homecard.musicians layout-grid-columns=small_tile_size layout-grid-position=column_positions[0] layout-grid-rows="1" layout-link="musicians" class="#{logged_in_not_logged_in_class}" + /! 5 followers, 3 following + .homecard.musicians layout-grid-columns="3" layout-grid-position="0,1" layout-grid-rows="1" layout-link="musicians" class="#{logged_in_not_logged_in_class}" h2 musicians .homebox-info /! 5 followers, 3 following - .homecard.bands layout-grid-columns=small_tile_size layout-grid-position=column_positions[1] layout-grid-rows="1" layout-link="bands" class="#{logged_in_not_logged_in_class}" + .homecard.bands layout-grid-columns="3" layout-grid-position="3,1" layout-grid-rows="1" layout-link="bands" class="#{logged_in_not_logged_in_class}" h2 bands .homebox-info /! 1 session invitation, 19 public sessions active - -if jamtracks - .homecard.jamtrack layout-grid-columns=small_tile_size layout-grid-position=column_positions[2] layout-grid-rows="1" layout-link="jamtrack" - h2 jamtracks - .homebox-info - /! 5 followers, 3 following - .homecard.profile layout-grid-columns=small_tile_size layout-grid-position=column_positions[3] layout-grid-rows="1" class="#{logged_in_not_logged_in_class}" + .homecard.profile layout-grid-columns="3" layout-grid-position="6,1" layout-grid-rows="1" class="#{logged_in_not_logged_in_class}" h2 profile .homebox-info /! 5 followers, 3 following - .homecard.account layout-grid-columns=small_tile_size layout-grid-position=column_positions[4] layout-grid-rows="1" layout-link="account" class="#{logged_in_not_logged_in_class}" + .homecard.account layout-grid-columns="3" layout-grid-position="9,1" layout-grid-rows="1" layout-link="account" class="#{logged_in_not_logged_in_class}" h2 account .homebox-info /! free service level -else .grid layout-grid="2x12" .homecard.createsession layout-grid-columns="4" layout-grid-position="0,0" layout-grid-rows="1" layout-link="createSession" type="createSession" class="#{logged_in_not_logged_in_class}" - h2 create session + h2 sessions .homebox-info - /! 4 friends online, 2 currently in sessions - .homecard.findsession layout-grid-columns="4" layout-grid-position="4,0" layout-grid-rows="1" layout-link="findSession" type="findSession" class="#{logged_in_not_logged_in_class}" - h2 find session + /! 4 friends online, 2 currently in sessions + .homecard.jamclass layout-grid-columns="4" layout-grid-position="4,0" layout-grid-rows="1" layout-link="jamclass" type="jamclass" class="#{logged_in_not_logged_in_class}" + h2 jamclass .homebox-info - /! 1 session invitation, 19 public sessions active - .homecard.feed layout-grid-columns="4" layout-grid-position="8,0" layout-grid-rows="1" layout-link="feed" class="#{logged_in_not_logged_in_class}" - h2 feed + /! 1 session invitation, 19 public sessions active + .homecard.jamtrack layout-grid-columns="4" layout-grid-position="8,0" layout-grid-rows="1" layout-link="jamtrack" type="jamtrack" + h2 jamtracks .homebox-info - /! 4 friends online, 2 currently in sessions - .homecard.musicians layout-grid-columns=small_tile_size layout-grid-position=column_positions[0] layout-grid-rows="1" layout-link="musicians" class="#{logged_in_not_logged_in_class}" + /! 5 followers, 3 following + .homecard.musicians layout-grid-columns="3" layout-grid-position="0,1" layout-grid-rows="1" layout-link="musicians" class="#{logged_in_not_logged_in_class}" h2 musicians .homebox-info - /! 5 followers, 3 following - .homecard.bands layout-grid-columns=small_tile_size layout-grid-position=column_positions[1] layout-grid-rows="1" layout-link="bands" class="#{logged_in_not_logged_in_class}" + /! 5 followers, 3 following + .homecard.bands layout-grid-columns="3" layout-grid-position="3,1" layout-grid-rows="1" layout-link="bands" class="#{logged_in_not_logged_in_class}" h2 bands .homebox-info - -if jamtracks - /! 1 session invitation, 19 public sessions active - .homecard.jamtrack layout-grid-columns=small_tile_size layout-grid-position=column_positions[2] layout-grid-rows="1" layout-link="jamtrack" - h2 jamtracks - .homebox-info - /! 5 followers, 3 following - .homecard.profile layout-grid-columns=small_tile_size layout-grid-position=column_positions[3] layout-grid-rows="1" class="#{logged_in_not_logged_in_class}" + /! 1 session invitation, 19 public sessions active + .homecard.profile layout-grid-columns="3" layout-grid-position="6,1" layout-grid-rows="1" class="#{logged_in_not_logged_in_class}" h2 profile .homebox-info - /! 5 followers, 3 following - .homecard.account layout-grid-columns=small_tile_size layout-grid-position=column_positions[4] layout-grid-rows="1" layout-link="account" class="#{logged_in_not_logged_in_class}" + /! 5 followers, 3 following + .homecard.account layout-grid-columns="3" layout-grid-position="9,1" layout-grid-rows="1" layout-link="account" class="#{logged_in_not_logged_in_class}" h2 account .homebox-info /! free service level diff --git a/web/app/views/clients/_scheduledSession.html.erb b/web/app/views/clients/_scheduledSession.html.erb index 9e8e2d85a..abcc7b260 100644 --- a/web/app/views/clients/_scheduledSession.html.erb +++ b/web/app/views/clients/_scheduledSession.html.erb @@ -6,7 +6,7 @@ <%= image_tag "content/icon_add.png", :size => "19x19" %> -

create session

+

sessions

<%= render "screen_navigation" %>
@@ -21,19 +21,60 @@
+
+

start a session

+
+
QUICK START SOLO

Use this button to quick start a private session just for yourself. Good for solo practice and gear testing.

+
QUICK START OPEN

Use this button to quick start an open session that anyone can join to play with you, and that fans can listen to.

+
START OR SCHEDULE

Use this button start a wizard that will let you have more control over your session. Schedule future sessions. Start private sessions. Invite other musicians. And lots more...

learn more
+
+

featured sessions

+ + + + + + + + +
+
+

check out other sessions

+ +
+ FIND SESSIONS +

+ Use the Find Sessions feature to browse through current and future/scheduled sessions you can join to play with other musicians. +

+ learn more +
+ +
+ VIEW THE FEED +

+ Use the Feed to check out current and past sessions and session recordings, and to listen to current sessions. +

+ learn more +
+ +

learn more about online sessions

+ + +
+
+

When do you want to schedule and play in this session?


    -
  • - - -
    -
  • -
  • - - -
    -
@@ -159,7 +193,7 @@
-
+

Please select a genre for your session:

@@ -221,7 +255,7 @@
-
+
@@ -266,7 +300,7 @@
-
+
    @@ -380,7 +414,7 @@
-
+

When are you starting your session?

@@ -435,15 +469,15 @@