1332 lines
52 KiB
Plaintext
1332 lines
52 KiB
Plaintext
(function(context, $) {
|
|
|
|
"use strict";
|
|
|
|
context.JK = context.JK || {};
|
|
|
|
context.JK.CreateScheduledSession = function(app) {
|
|
var gearUtils = context.JK.GearUtilsInstance;
|
|
var sessionUtils = context.JK.SessionUtils;
|
|
var logger = context.JK.logger;
|
|
var rest = JK.Rest();
|
|
var invitationDialog = null;
|
|
var inviteMusiciansUtil = null;
|
|
var instrumentSelector = null;
|
|
var instrumentRSVP = null;
|
|
var firstTimeShown = false;
|
|
|
|
var MAX_GENRES = 1;
|
|
var createSessionSettings = {
|
|
createType: '<%= MusicSession::CREATE_TYPE_START_SCHEDULED %>',
|
|
timezone: {},
|
|
recurring_mode: {},
|
|
language: {},
|
|
band: {},
|
|
musician_access: {},
|
|
fans_access: {},
|
|
open_rsvps: false
|
|
};
|
|
var friendInput = null;
|
|
|
|
// Main layout
|
|
var $screen = $('#create-session-layout');
|
|
var $wizardSteps = null;
|
|
var $currentWizardStep = null;
|
|
var step = 0;
|
|
var $templateSteps = null;
|
|
var $templateButtons = null;
|
|
var $sessionButtons = null;
|
|
var $startTimeList = null;
|
|
var $endTimeList = null;
|
|
var $timezoneList = null;
|
|
var $recurringModeList = null;
|
|
var $languageList = null;
|
|
var $bandList = null;
|
|
var $sessionPlusMusiciansLabel = null;
|
|
var $editScheduledSessions = null;
|
|
var $inputFiles = $screen.find('#session-select-files');
|
|
var $btnSelectFiles = null;
|
|
var $selectedFilenames = null;
|
|
var $uploadSpinner = null;
|
|
|
|
// Step1 layout
|
|
var $screenStep1 = null;
|
|
var $createTypes = null;
|
|
var $createTypeHelpers = null;
|
|
var $scheduledSessions = null;
|
|
var $fetchingSpinner = null;
|
|
var $fetchingSpinnerLabel = null;
|
|
var $noSessionFound = 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 ONE_HOUR = 3600 * 1000;
|
|
var ONE_MINUTE = 60 * 1000;
|
|
var ONE_DAY = ONE_HOUR * 24;
|
|
|
|
var defaultTimeArray = ["12:00 AM", "12:30 AM", "01:00 AM", "01:30 AM", "02:00 AM", "02:30 AM",
|
|
"03:00 AM", "03:30 AM", "04:00 AM", "04:30 AM", "05:00 AM", "05:30 AM", "06:00 AM", "06:30 AM",
|
|
"07:00 AM", "07:30 AM", "08:00 AM", "08:30 AM", "09:00 AM", "09:30 AM", "10:00 AM", "10:30 AM",
|
|
"11:00 AM", "11:30 AM", "12:00 PM", "12:30 PM", "01:00 PM", "01:30 PM", "02:00 PM", "02:30 PM",
|
|
"03:00 PM", "03:30 PM", "04:00 PM", "04:30 PM", "05:00 PM", "05:30 PM", "06:00 PM", "06:30 PM",
|
|
"07:00 PM", "07:30 PM", "08:00 PM", "08:30 PM", "09:00 PM", "09:30 PM", "10:00 PM", "10:30 PM",
|
|
"11:00 PM", "11:30 PM"];
|
|
|
|
var proficiencyDescriptionMap = {
|
|
"0": "Any",
|
|
"1": "Beg",
|
|
"2": "Beg/Int",
|
|
"3": "Int",
|
|
"4": "Int/Adv",
|
|
"5": "Adv"
|
|
};
|
|
|
|
function afterLoadScheduledSessions(sessionList) {
|
|
|
|
createSessionSettings.session_count = sessionList.length;
|
|
|
|
if (createSessionSettings.session_count == 0) {
|
|
$noSessionFound.show();
|
|
createSessionSettings.selectedSessionId = null;
|
|
}
|
|
else {
|
|
$noSessionFound.hide();
|
|
$.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 options = {
|
|
id: session.id,
|
|
name: session.name,
|
|
scheduled_start: session.pretty_scheduled_start_short
|
|
};
|
|
var txt = $(context._.template($('#template-scheduled-session').html(), options, { variable: 'data' }));
|
|
$scheduledSessions.append(txt);
|
|
});
|
|
|
|
var firstSession = function() {
|
|
var $firstSession = $scheduledSessions.children().first().find('input[name="scheduled-session-info"]');
|
|
$firstSession.attr('checked', 'checked');
|
|
createSessionSettings.selectedSessionId = $firstSession.attr('data-session-id');
|
|
|
|
};
|
|
if (createSessionSettings.selectedSessionId == null) {
|
|
firstSession();
|
|
}
|
|
else {
|
|
var $selectedSession = $scheduledSessions.children().first().find('input[name="scheduled-session-info"][data-session-id="' + createSessionSettings.selectedSessionId + '"]');
|
|
if ($selectedSession.length)
|
|
$selectedSession.attr('checked', 'checked');
|
|
else
|
|
firstSession();
|
|
}
|
|
|
|
|
|
$scheduledSessions.iCheck({
|
|
checkboxClass: 'icheckbox_minimal',
|
|
radioClass: 'iradio_minimal',
|
|
inheritClass: true
|
|
});
|
|
}
|
|
|
|
if (createSessionSettings.createType == '<%= MusicSession::CREATE_TYPE_START_SCHEDULED%>' && createSessionSettings.session_count == 0)
|
|
$editScheduledSessions.hide();
|
|
else if (createSessionSettings.createType == '<%= MusicSession::CREATE_TYPE_START_SCHEDULED%>' && createSessionSettings.session_count > 0)
|
|
$editScheduledSessions.show();
|
|
|
|
var $btnNext = $screen.find('.btn-next');
|
|
|
|
if (step == STEP_SELECT_TYPE && createSessionSettings.createType == '<%= MusicSession::CREATE_TYPE_START_SCHEDULED%>' && createSessionSettings.selectedSessionId == null) {
|
|
$btnNext.addClass('disabled');
|
|
}
|
|
else {
|
|
$btnNext.removeClass('disabled');
|
|
}
|
|
}
|
|
|
|
function afterLoadUserDetail(userDetail) {
|
|
var userInstruments = [];
|
|
$.each(userDetail.instruments, function(index, userInstrument) {
|
|
userInstrument.level = userInstrument.proficiency_level;
|
|
userInstruments.push(userInstrument);
|
|
})
|
|
|
|
instrumentSelector.render('#instrument-select-list', userInstruments);
|
|
instrumentRSVP.render('#instrument-select-rsvp-list');
|
|
|
|
$("#instrument-select-list").iCheck({
|
|
checkboxClass: 'icheckbox_minimal',
|
|
radioClass: 'iradio_minimal',
|
|
inheritClass: true
|
|
});
|
|
|
|
$("#instrument-select-rsvp-list").iCheck({
|
|
checkboxClass: 'icheckbox_minimal',
|
|
radioClass: 'iradio_minimal',
|
|
inheritClass: true
|
|
});
|
|
}
|
|
|
|
function beforeShowStep1() {
|
|
$scheduledSessions.empty();
|
|
$noSessionFound.hide();
|
|
$fetchingSpinner.show();
|
|
$fetchingSpinnerLabel.show();
|
|
|
|
rest.findScheduledSessions({})
|
|
.done(afterLoadScheduledSessions)
|
|
.fail(app.ajaxError)
|
|
.always(function(response) {
|
|
$fetchingSpinner.hide();
|
|
$fetchingSpinnerLabel.hide();
|
|
});
|
|
|
|
rest.getUserDetail()
|
|
.done(afterLoadUserDetail)
|
|
.fail(app.ajaxError);
|
|
|
|
createSessionSettings.startDate = createSessionSettings.startDate || (new Date().toDateString());
|
|
|
|
$screen.find("#session-start-date").val(createSessionSettings.startDate);
|
|
toggleDate(true);
|
|
toggleStartTime();
|
|
toggleStepStatus();
|
|
sessionUtils.defaultTimezone($timezoneList);
|
|
if(firstTimeShown) {
|
|
firstTimeShown = false;
|
|
$screen.find('#session-when-start-scheduled').iCheck('check');
|
|
}
|
|
}
|
|
|
|
function beforeShowStep2() {
|
|
}
|
|
|
|
function beforeShowStep3() {
|
|
rest.getBands(context.JK.currentUserId)
|
|
.done(function(result) {
|
|
var options = $screen.find("#session-band-list");
|
|
options.empty();
|
|
options.append($("<option />").val('').text('No'));
|
|
$.each(result, function(idx, item) {
|
|
options.append($("<option />").attr('value',item.id).text(item.name));
|
|
});
|
|
context.JK.dropdown($bandList);
|
|
})
|
|
.fail(app.ajaxError)
|
|
}
|
|
|
|
function beforeShowStep4() {
|
|
}
|
|
|
|
function beforeShowStep5() {
|
|
var startType = null;
|
|
if (willOptionStartSession()) {
|
|
startType = 'Now!';
|
|
createSessionSettings.startType = "START SESSION";
|
|
}
|
|
else if (createSessionSettings.createType == '<%= MusicSession::CREATE_TYPE_RSVP %>') {
|
|
startType = 'To be determined after RSVPs received';
|
|
createSessionSettings.startType = "PUBLISH SESSION";
|
|
}
|
|
else if (createSessionSettings.createType == '<%= MusicSession::CREATE_TYPE_SCHEDULE_FUTURE %>') {
|
|
startType = createSessionSettings.startDate + ',' +
|
|
createSessionSettings.startTime + ', ' +
|
|
createSessionSettings.timezone.label;
|
|
createSessionSettings.startType = "PUBLISH SESSION";
|
|
}
|
|
$('#session-step-5 #session-start-type-disp').html(startType);
|
|
|
|
var sessionName = createSessionSettings.name;
|
|
sessionName += ' (' + createSessionSettings.genresValues[0] + ')';
|
|
$screen.find('#session-name-disp').html(sessionName);
|
|
|
|
var sessionDescription = createSessionSettings.description;
|
|
$screen.find('#session-description-disp').html(sessionDescription);
|
|
|
|
var sessionNotations = [];
|
|
for (var i = 0; i < createSessionSettings.notations.length; i++) {
|
|
var name = createSessionSettings.notations[i].file_name;
|
|
sessionNotations.push(name);
|
|
}
|
|
if(sessionNotations.length > 0) {
|
|
$screen.find('#session-notations-disp').html("Notations: " + sessionNotations.join(', '));
|
|
}
|
|
else {
|
|
$screen.find('#session-notations-disp').html('');
|
|
}
|
|
|
|
$screen.find('#session-language-disp').html(createSessionSettings.language.label);
|
|
$screen.find('#session-band-disp').html(createSessionSettings.band.label);
|
|
|
|
var plusMusicians = $screen.find('#session-plus-musicians')[0].checked;
|
|
|
|
var sessionInvited = [];
|
|
var invitedFriends = inviteMusiciansUtil.getInvitedFriendNames();
|
|
$.each(invitedFriends, function(index, friend) {
|
|
sessionInvited.push(friend);
|
|
});
|
|
|
|
var sessionInvitedString = sessionInvited.join(', ');
|
|
if (createSessionSettings.musician_access.value == 'musicians-approval') {
|
|
if (plusMusicians) {
|
|
if (invitedFriends.length == 0)
|
|
sessionInvitedString = "Any interested JamKazam musicians that I approve";
|
|
else
|
|
sessionInvitedString += ", plus any interested JamKazam musicians that I approve";
|
|
}
|
|
else {
|
|
if (invitedFriends.length == 0) {
|
|
sessionInvitedString = "No open RSVPs";
|
|
}
|
|
else {
|
|
sessionInvitedString += " (No open RSVPs)";
|
|
}
|
|
}
|
|
}
|
|
else if (createSessionSettings.musician_access.value == 'musicians') {
|
|
if (invitedFriends.length == 0)
|
|
sessionInvitedString = "Any interested JamKazam musicians who want to join us";
|
|
else
|
|
sessionInvitedString += ", plus any interested JamKazam musicians who want to join us";
|
|
}
|
|
$screen.find('#session-invited-disp').html(sessionInvitedString);
|
|
|
|
if (createSessionSettings.createType == '<%= MusicSession::CREATE_TYPE_START_SCHEDULED%>') {
|
|
var session = scheduledSessions[createSessionSettings.selectedSessionId];
|
|
if (session.approved_rsvps.length > 0) {
|
|
var instruments_me = [];
|
|
$.each(session.approved_rsvps, function(index, user) {
|
|
if (user.id == context.JK.currentUserId) {
|
|
$.each(user.instrument_list, function(index, instrument) {
|
|
instruments_me.push(instrument.desc ? instrument.desc : 'Any Instrument');
|
|
});
|
|
}
|
|
});
|
|
$screen.find('#session-instruments-me-disp').html(instruments_me.join(', '));
|
|
}
|
|
|
|
if (session.open_slots.length > 0) {
|
|
var instruments_rsvp = {};
|
|
$.each(session.open_slots, function(index, slot) {
|
|
if (instruments_rsvp[slot.description]) {
|
|
instruments_rsvp[slot.description]["count"] = instruments_rsvp[slot.description]["count"] + 1;
|
|
}
|
|
else {
|
|
instruments_rsvp[slot.description] = {"count": 1, "level": slot.proficiency_desc};
|
|
}
|
|
});
|
|
|
|
var instruments_rsvp_arr = $.makeArray(instruments_rsvp);
|
|
var instruments_str_arr = [];
|
|
$.map(instruments_rsvp_arr, function(val, i) {
|
|
instruments_str_arr.push(i + ' (' + val.count + ') (' + val.level + ')');
|
|
})
|
|
$screen.find('#session-instruments-rsvp-disp').html(instruments_str_arr.join(', '));
|
|
}
|
|
}
|
|
else {
|
|
var instruments_me = [];
|
|
$.each(getCreatorInstruments(), function(index, instrument) {
|
|
instruments_me.push(instrument.name);
|
|
});
|
|
$screen.find('#session-instruments-me-disp').html(instruments_me.join(', '));
|
|
|
|
var instruments_rsvp = [];
|
|
var otherInstruments = instrumentRSVP.getSelectedInstruments();
|
|
var isUnstructuredRsvp = otherInstruments.length == 0 && userSelectedSlots(createSessionSettings.createType);
|
|
if(isUnstructuredRsvp) {
|
|
instruments_rsvp.push('Any Instrument Allowed');
|
|
}
|
|
$.each(otherInstruments, function(index, instrument) {
|
|
instruments_rsvp.push(instrument.name + ' (' + instrument.count + ') (' + proficiencyDescriptionMap[instrument.level] + ')');
|
|
});
|
|
$screen.find('#session-instruments-rsvp-disp').html(instruments_rsvp.join(', '));
|
|
}
|
|
|
|
$screen.find('#session-musician-access-disp').html('Musicians: ' + createSessionSettings.musician_access.label);
|
|
$screen.find('#session-fans-access-disp').html('Fans: ' + createSessionSettings.fans_access.label);
|
|
|
|
$screen.find('#session-policy-disp').html(createSessionSettings.session_policy);
|
|
}
|
|
|
|
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');
|
|
var session = scheduledSessions[createSessionSettings.selectedSessionId];
|
|
|
|
if(session == null) {
|
|
// TODO: notify user they need to pick session? Or maybe it should be grayed out.
|
|
return false;
|
|
}
|
|
var moveToFinish = function() {
|
|
app.layout.closeDialog('confirm');
|
|
createSessionSettings.startDate = new Date(session.scheduled_start).toDateString();
|
|
createSessionSettings.startTime = context.JK.formatUtcTime(new Date(session.scheduled_start), false);
|
|
createSessionSettings.genresValues = session.genres;
|
|
createSessionSettings.genres = [session.genre_id];
|
|
createSessionSettings.timezone.label = session.timezone_description;
|
|
createSessionSettings.timezone.value = session.timezone;
|
|
createSessionSettings.name = session.name;
|
|
createSessionSettings.description = session.description;
|
|
createSessionSettings.notations = session.music_notations;
|
|
createSessionSettings.language.label = session.language_description;
|
|
createSessionSettings.language.value = session.language;
|
|
createSessionSettings.session_policy = session.legal_policy;
|
|
createSessionSettings.musician_access.label = session.musician_access_description;
|
|
createSessionSettings.fans_access.label = session.fan_access_description;
|
|
createSessionSettings.recurring_mode.value = session.recurring_mode;
|
|
createSessionSettings.open_rsvps = session.open_rsvps;
|
|
|
|
step = STEP_SELECT_CONFIRM;
|
|
moveToStep();
|
|
}
|
|
|
|
var currentTime = new Date();
|
|
var startTime = new Date(session.scheduled_start);
|
|
var diffTime = startTime.getTime() - currentTime.getTime();
|
|
if (diffTime > ONE_HOUR) {
|
|
var confirmDialog = new context.JK.ConfirmDialog(app, "START SESSION NOW",
|
|
"You are starting a session that is scheduled to begin more than one hour from now. Are you sure you want to do this?",
|
|
"Future Session", moveToFinish);
|
|
confirmDialog.initialize();
|
|
context.JK.app.layout.showDialog('confirm');
|
|
}
|
|
else {
|
|
moveToFinish();
|
|
}
|
|
return false;
|
|
}
|
|
else if (createSessionSettings.createType == '<%= MusicSession::CREATE_TYPE_QUICK_START %>') {
|
|
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 = "Private Test Session";
|
|
createSessionSettings.description = "Private session set up just to test things out in the session interface by myself.";
|
|
createSessionSettings.notations = [];
|
|
createSessionSettings.language.label = 'English';
|
|
createSessionSettings.language.value = 'eng';
|
|
createSessionSettings.session_policy = 'Standard';
|
|
createSessionSettings.musician_access.label = "Only RSVP musicians may join";
|
|
createSessionSettings.musician_access.value = "only-rsvp";
|
|
createSessionSettings.fans_access.label = "Fans may not listen to session";
|
|
createSessionSettings.fans_access.value = "no-listen-chat";
|
|
createSessionSettings.recurring_mode.label = 'Not Recurring';
|
|
createSessionSettings.recurring_mode.value = 'once';
|
|
}
|
|
else {
|
|
createSessionSettings.startDate = $screen.find('#session-start-date').val();
|
|
createSessionSettings.startTime = $startTimeList.val();
|
|
createSessionSettings.endTime = $endTimeList.val();
|
|
createSessionSettings.notations = [];
|
|
createSessionSettings.selectedSessionId = $scheduledSessions.find('.iradio_minimal.checked input[name="scheduled-session-info"]').attr('data-session-id');
|
|
createSessionSettings.timezone.value = $timezoneList.val();
|
|
createSessionSettings.timezone.label = $timezoneList.get(0).options[$timezoneList.get(0).selectedIndex].text;
|
|
createSessionSettings.recurring_mode.label = $recurringModeList.get(0).options[$recurringModeList.get(0).selectedIndex].text;
|
|
createSessionSettings.recurring_mode.value = $recurringModeList.val();
|
|
createSessionSettings.open_rsvps = $screen.find('#session-plus-musicians')[0].checked;
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
function uploadNotations(notations) {
|
|
var formData = new FormData();
|
|
var maxExceeded = false;
|
|
$.each(notations, function(i, file) {
|
|
var max = 10 * 1024 * 1024;
|
|
if(file.size > max) {
|
|
maxExceeded = true;
|
|
return false;
|
|
}
|
|
formData.append('files[]', file);
|
|
});
|
|
|
|
if(maxExceeded) {
|
|
app.notify(
|
|
{ title: "Maximum Music Notation Size Exceeded",
|
|
text: "You can only upload files up to 10 megabytes in size."
|
|
});
|
|
var deferred = new $.Deferred();
|
|
deferred.reject();
|
|
return deferred;
|
|
}
|
|
|
|
formData.append('client_id', app.clientId);
|
|
$btnSelectFiles.text('UPLOADING...').data('uploading', true)
|
|
$uploadSpinner.show();
|
|
return rest.uploadMusicNotations(formData)
|
|
.done(function(response) {
|
|
var error_files = [];
|
|
$.each(response, function(i, music_notation) {
|
|
if (music_notation.errors) {
|
|
error_files.push(createSessionSettings.notations[i].name);
|
|
}
|
|
})
|
|
if (error_files.length > 0) {
|
|
app.notifyAlert("Failed to upload notations.", error_files.join(', '));
|
|
}
|
|
|
|
createSessionSettings.notations = $.merge(createSessionSettings.notations, response);
|
|
})
|
|
.fail(function(jqXHR) {
|
|
if(jqXHR.status == 413) {
|
|
// the file is too big. Let the user know.
|
|
// This should happen when they select the file, but a misconfiguration on the server could cause this.
|
|
app.notify(
|
|
{ title: "Maximum Music Notation Size Exceeded",
|
|
text: "You can only upload files up to 10 megabytes in size."
|
|
})
|
|
}
|
|
else {
|
|
app.notifyServerError(jqXHR, "Unable to upload music notations");
|
|
}
|
|
})
|
|
.always(function() {
|
|
$btnSelectFiles.text('SELECT FILES...').data('uploading', null)
|
|
$uploadSpinner.hide();
|
|
})
|
|
}
|
|
|
|
function beforeMoveStep2() {
|
|
var isValid = true;
|
|
var name = $screen.find('#session-name').val();
|
|
if (!name) {
|
|
$('#divSessionName .error-text').remove();
|
|
$('#divSessionName').addClass("error");
|
|
$screen.find('#session-name').after("<ul class='error-text'><li>Name is required</li></ul>");
|
|
isValid = false;
|
|
}
|
|
else {
|
|
$('#divSessionName').removeClass("error");
|
|
}
|
|
|
|
var description = $screen.find('#session-description').val();
|
|
if (!description) {
|
|
$('#divSessionDescription .error-text').remove();
|
|
$('#divSessionDescription').addClass("error");
|
|
$screen.find('#session-description').after("<ul class='error-text'><li>Description is required</li></ul>");
|
|
isValid = false;
|
|
}
|
|
else {
|
|
$('#divSessionDescription').removeClass("error");
|
|
}
|
|
|
|
var genres = context.JK.GenreSelectorHelper.getSelectedGenres('#create-session-genre');
|
|
var genresValues = context.JK.GenreSelectorHelper.getSelectedGenresValues('#create-session-genre');
|
|
|
|
if (genres.length === 0) {
|
|
$('#divSessionGenre .error-text').remove();
|
|
$('#divSessionGenre').addClass("error");
|
|
$('#create-session-genre').after("<ul class='error-text'><li>You must select a genre.</li></ul>");
|
|
isValid = false;
|
|
}
|
|
else {
|
|
$('#divSessionGenre').removeClass("error");
|
|
}
|
|
|
|
if (isValid) {
|
|
createSessionSettings.genres = genres;
|
|
createSessionSettings.genresValues = genresValues;
|
|
createSessionSettings.name = name;
|
|
createSessionSettings.description = description;
|
|
}
|
|
|
|
return isValid;
|
|
}
|
|
|
|
function beforeMoveStep3() {
|
|
createSessionSettings.language.value = $languageList.val();
|
|
createSessionSettings.language.label = $languageList.get(0).options[$languageList.get(0).selectedIndex].text;
|
|
|
|
createSessionSettings.band.value = $bandList.val();
|
|
if (createSessionSettings.band.value === '0')
|
|
createSessionSettings.band.label = '';
|
|
else
|
|
createSessionSettings.band.label = $bandList.get(0).options[$bandList.get(0).selectedIndex].text;
|
|
|
|
createSessionSettings.open_rsvps = $screen.find('#session-plus-musicians')[0].checked;
|
|
return true;
|
|
}
|
|
|
|
function beforeMoveStep4() {
|
|
var isValid = true;
|
|
var sessionPolicyChecked = $screen.find('#session-policy-confirm').is(':checked');
|
|
if (!sessionPolicyChecked) {
|
|
$('#divSessionPolicy .error-text').remove();
|
|
$('#divSessionPolicy').addClass("error");
|
|
$('#divSessionPolicyHelper').after("<ul class='error-text'><li>You must accept the Session Policy.</li></ul>");
|
|
isValid = false;
|
|
}
|
|
else {
|
|
$('#divSessionPolicy').removeClass("error");
|
|
}
|
|
|
|
createSessionSettings.session_policy = $('input[name="session-policy-type"][checked="checked"]').attr('policy-id');
|
|
var $musicianAccess = $screen.find('#session-musician-access');
|
|
createSessionSettings.musician_access.value = $musicianAccess.val();
|
|
createSessionSettings.musician_access.label = $musicianAccess.get(0).options[$musicianAccess.get(0).selectedIndex].text;
|
|
|
|
var $fansAccess = $screen.find('#session-fans-access');
|
|
createSessionSettings.fans_access.value = $fansAccess.val();
|
|
createSessionSettings.fans_access.label = $fansAccess.get(0).options[$fansAccess.get(0).selectedIndex].text;
|
|
|
|
return isValid;
|
|
}
|
|
|
|
function beforeMoveStep5() {
|
|
}
|
|
|
|
function startSessionClicked() {
|
|
var $btn = $(this);
|
|
if($btn.is('.disabled')) { return false; }
|
|
$btn.addClass('disabled');
|
|
|
|
if(willOptionStartSession()) {
|
|
|
|
var shouldVerifyNetwork = createSessionSettings.musician_access.value != 'only-rsvp';
|
|
|
|
gearUtils.guardAgainstInvalidConfiguration(app, shouldVerifyNetwork)
|
|
.fail(function() {
|
|
$btn.removeClass('disabled')
|
|
app.notify(
|
|
{ title: "Unable to Start New Session",
|
|
text: "You can only start a session once you have working audio gear and a tested internet connection."
|
|
})
|
|
})
|
|
.done(function(){
|
|
startSession($btn);
|
|
});
|
|
}
|
|
else {
|
|
startSession($btn);
|
|
}
|
|
|
|
return false;
|
|
}
|
|
|
|
// did the user have to pick the RSVP slots explicitely?
|
|
function userSelectedSlots(createType) {
|
|
return createType == "immediately" || createType == "schedule-future" || createType == "rsvp";
|
|
}
|
|
|
|
function startSession($startBtn) {
|
|
|
|
var data = {};
|
|
|
|
if (createSessionSettings.createType == '<%= MusicSession::CREATE_TYPE_START_SCHEDULED%>') {
|
|
data = scheduledSessions[createSessionSettings.selectedSessionId];
|
|
}
|
|
else {
|
|
data.name = createSessionSettings.name;
|
|
data.description = createSessionSettings.description;
|
|
data.genres = createSessionSettings.genres;
|
|
if (createSessionSettings.musician_access.value == 'only-rsvp') {
|
|
data.musician_access = false;
|
|
data.approval_required = false;
|
|
}
|
|
else if (createSessionSettings.musician_access.value == 'musicians-approval') {
|
|
data.musician_access = true;
|
|
data.approval_required = true;
|
|
}
|
|
else if (createSessionSettings.musician_access.value == 'musicians') {
|
|
data.musician_access = true;
|
|
data.approval_required = false;
|
|
}
|
|
|
|
if (createSessionSettings.fans_access.value == 'no-listen-chat') {
|
|
data.fan_access = false; data.fan_chat = false;
|
|
}
|
|
else if (createSessionSettings.fans_access.value == 'listen-chat-each') {
|
|
data.fan_access = true; data.fan_chat = false;
|
|
}
|
|
else if (createSessionSettings.fans_access.value == 'listen-chat-band') {
|
|
data.fan_access = true; data.fan_chat = true;
|
|
}
|
|
data.legal_policy = createSessionSettings.session_policy;
|
|
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 %>') {
|
|
data.start = new Date().toDateString() + ' ' + context.JK.formatUtcTime(new Date(), false);
|
|
data.duration = "60";
|
|
}
|
|
else if (createSessionSettings.createType == '<%= MusicSession::CREATE_TYPE_RSVP %>') {
|
|
data.start = ""; data.duration = "0";
|
|
}
|
|
else {
|
|
data.start = createSessionSettings.startDate + ' ' + createSessionSettings.startTime;
|
|
var startIndex = defaultTimeArray.indexOf(createSessionSettings.startTime);
|
|
var endIndex = defaultTimeArray.indexOf(createSessionSettings.endTime);
|
|
if (endIndex > startIndex) {
|
|
data.duration = (endIndex - startIndex) * 30;
|
|
}
|
|
else {
|
|
data.duration = (endIndex + defaultTimeArray.length - startIndex + 1) * 30;
|
|
}
|
|
|
|
// console.log(data.duration);
|
|
// var endDate = new Date(createSessionSettings.startDate + ' ' + createSessionSettings.endTime);
|
|
// data.duration = (endDate - new Date(data.start)) / ONE_MINUTE;
|
|
// if (createSessionSettings.endTime == defaultTimeArray[0]) {
|
|
// data.duration += ONE_DAY / ONE_MINUTE;
|
|
// }
|
|
}
|
|
data.invitations = inviteMusiciansUtil.getInvitedFriends();
|
|
data.recurring_mode = createSessionSettings.recurring_mode.value;
|
|
data.music_notations = createSessionSettings.notations;
|
|
data.timezone = createSessionSettings.timezone.value;
|
|
data.open_rsvps = createSessionSettings.open_rsvps;
|
|
data.create_type = createSessionSettings.createType;
|
|
|
|
data.rsvp_slots = [];
|
|
$.each(getCreatorInstruments(), function(index, instrument) {
|
|
var slot = {};
|
|
slot.instrument_id = instrument.id;
|
|
slot.proficiency_level = instrument.level;
|
|
slot.approve = true;
|
|
data.rsvp_slots.push(slot);
|
|
});
|
|
|
|
var otherInstruments = instrumentRSVP.getSelectedInstruments();
|
|
data.isUnstructuredRsvp = otherInstruments.length == 0 && userSelectedSlots(createSessionSettings.createType);
|
|
$.each(instrumentRSVP.getSelectedInstruments(), function(index, instrument) {
|
|
for (var i = 0; i < instrument.count; i++) {
|
|
var slot = {};
|
|
slot.instrument_id = instrument.id;
|
|
slot.proficiency_level = instrument.level;
|
|
slot.approve = false;
|
|
data.rsvp_slots.push(slot);
|
|
}
|
|
});
|
|
}
|
|
|
|
var joinSession = function(sessionId) {
|
|
var invitationCount = data.invitations.length;
|
|
context.JK.GA.trackSessionCount(data.musician_access, data.fan_access, invitationCount);
|
|
|
|
// we redirect to the session screen, which handles the REST call to POST /participants.
|
|
logger.debug("joining session screen: " + sessionId)
|
|
context.location = '/client#/session/' + sessionId;
|
|
};
|
|
|
|
if (createSessionSettings.createType == '<%= MusicSession::CREATE_TYPE_START_SCHEDULED%>') {
|
|
|
|
// warn user if it's a TBD session
|
|
if (data.scheduled_start_date === "") {
|
|
sessionUtils.tbdScheduledSessionWarning(
|
|
function(evt) {
|
|
context.JK.app.layout.closeDialog('alert');
|
|
joinSession(createSessionSettings.selectedSessionId);
|
|
$('#create-session-buttons .btn-next').off('click');
|
|
});
|
|
var $btnNext = $screen.find('.btn-next');
|
|
$btnNext.removeClass('disabled');
|
|
}
|
|
else {
|
|
joinSession(createSessionSettings.selectedSessionId);
|
|
$('#create-session-buttons .btn-next').off('click');
|
|
}
|
|
}
|
|
else {
|
|
rest.createScheduledSession(data)
|
|
.done(function(response) {
|
|
logger.debug("created session on server");
|
|
$('#create-session-buttons .btn-next').off('click');
|
|
var newSessionId = response.id;
|
|
|
|
if (createSessionSettings.createType == '<%= MusicSession::CREATE_TYPE_QUICK_START %>' || createSessionSettings.createType == "immediately") {
|
|
joinSession(newSessionId);
|
|
}
|
|
else {
|
|
app.notifyAlert("Session is successfully published.");
|
|
context.location = '/client#/home';
|
|
}
|
|
})
|
|
.fail(function(jqXHR){
|
|
$startBtn.removeClass('disabled');
|
|
logger.debug("unable to schedule a session")
|
|
app.notifyServerError(jqXHR, "Unable to schedule a session");
|
|
})
|
|
}
|
|
}
|
|
|
|
var STEPS = {
|
|
0: {
|
|
beforeShow: beforeShowStep1,
|
|
beforeMove: beforeMoveStep1
|
|
},
|
|
1: {
|
|
beforeShow: beforeShowStep2,
|
|
beforeMove: beforeMoveStep2
|
|
},
|
|
2: {
|
|
beforeShow: beforeShowStep3,
|
|
beforeMove: beforeMoveStep3
|
|
},
|
|
3: {
|
|
beforeShow: beforeShowStep4,
|
|
beforeMove: beforeMoveStep4
|
|
},
|
|
4: {
|
|
beforeShow: beforeShowStep5,
|
|
beforeMove: beforeMoveStep5
|
|
}
|
|
};
|
|
|
|
function moveToStep() {
|
|
var $nextWizardStep = $wizardSteps.filter($('[layout-wizard-step=' + step + ']'));
|
|
|
|
$wizardSteps.hide();
|
|
|
|
$currentWizardStep = $nextWizardStep;
|
|
|
|
$currentWizardStep.show();
|
|
|
|
var $sessionSteps = $(context._.template($templateSteps.html(), { variable: 'data' }));
|
|
var $activeStep = $sessionSteps.find('.session-stepnumber[data-step-number="' + step + '"]');
|
|
$activeStep.addClass('session-stepactive');
|
|
$activeStep.next().show();
|
|
var $createSessionSteps = $("<div id='create-session-steps'><div id='passed-steps' class='left'></div><div id='todo-steps' class='right'></div><div class='clearall'></div></div></div>");
|
|
for (var i = 0; i < TOTAL_STEPS; i++) {
|
|
var $eachStep = $sessionSteps.find('.session-stepnumber[data-step-number="' + i + '"]');
|
|
|
|
if (createSessionSettings.createType == '<%= MusicSession::CREATE_TYPE_START_SCHEDULED%>') {
|
|
if (step == STEP_SELECT_TYPE) {
|
|
if (createSessionSettings.session_count > 0 && i == STEP_SELECT_CONFIRM) {
|
|
$eachStep.on('click', next);
|
|
$eachStep.addClass('session-stephover');
|
|
}
|
|
}
|
|
else if (step == STEP_SELECT_CONFIRM && i == STEP_SELECT_TYPE) {
|
|
$eachStep.on('click', back);
|
|
$eachStep.addClass('session-stephover');
|
|
}
|
|
}
|
|
else if (createSessionSettings.createType == '<%= MusicSession::CREATE_TYPE_QUICK_START %>') {
|
|
if (step == STEP_SELECT_CONFIRM && i == STEP_SELECT_TYPE) {
|
|
$eachStep.on('click', back);
|
|
$eachStep.addClass('session-stephover');
|
|
}
|
|
else if (step == STEP_SELECT_TYPE && i == STEP_SELECT_CONFIRM) {
|
|
$eachStep.on('click', next);
|
|
$eachStep.addClass('session-stephover');
|
|
}
|
|
}
|
|
else {
|
|
if (i == step - 1) {
|
|
$eachStep.on('click', back);
|
|
$eachStep.addClass('session-stephover');
|
|
}
|
|
else if (i == step + 1) {
|
|
$eachStep.on('click', next);
|
|
$eachStep.addClass('session-stephover');
|
|
}
|
|
}
|
|
|
|
if (i <= step) {
|
|
$createSessionSteps.find("#passed-steps").append($eachStep.clone(true, true));
|
|
$createSessionSteps.find("#passed-steps").append($eachStep.next().clone());
|
|
}
|
|
else {
|
|
$createSessionSteps.find("#todo-steps").append($eachStep.clone(true, true));
|
|
$createSessionSteps.find("#todo-steps").append($eachStep.next().clone());
|
|
}
|
|
}
|
|
$createSessionSteps.find("#passed-steps").append($("<div class='clearall'></div>"));
|
|
$createSessionSteps.find("#todo-steps").append($("<div class='clearall'></div>"));
|
|
$screen.find('#create-session-steps').replaceWith($createSessionSteps);
|
|
|
|
beforeShowStep();
|
|
|
|
// update buttons
|
|
var $sessionButtonsContent = $(context._.template($templateButtons.html(), {}, {variable: 'data'}));
|
|
|
|
var $btnBack = $sessionButtonsContent.find('.btn-back');
|
|
var $btnNext = $sessionButtonsContent.find('.btn-next');
|
|
var $btnCancel = $sessionButtonsContent.find('.btn-cancel');
|
|
|
|
// hide back button if 1st step or last step
|
|
if (step == 0) {
|
|
$btnBack.hide();
|
|
}
|
|
|
|
if (step == STEP_SELECT_TYPE && createSessionSettings.createType == '<%= MusicSession::CREATE_TYPE_START_SCHEDULED%>' && createSessionSettings.selectedSessionId == null) {
|
|
$btnNext.addClass('disabled');
|
|
}
|
|
else {
|
|
$btnNext.removeClass('disabled');
|
|
}
|
|
|
|
if (step == STEP_SELECT_CONFIRM) {
|
|
$btnNext.html(createSessionSettings.startType);
|
|
$btnNext.on('click', startSessionClicked);
|
|
}
|
|
else
|
|
$btnNext.on('click', next);
|
|
|
|
$btnBack.on('click', back);
|
|
|
|
$sessionButtons.empty();
|
|
$sessionButtons.append($sessionButtonsContent);
|
|
}
|
|
|
|
function back(event) {
|
|
if (event) {
|
|
event.preventDefault();
|
|
}
|
|
|
|
if ($(this).is('.disabled')) return false;
|
|
if ($.inArray(createSessionSettings.createType, ['<%= MusicSession::CREATE_TYPE_START_SCHEDULED%>', '<%= MusicSession::CREATE_TYPE_QUICK_START %>']) > -1)
|
|
step = STEP_SELECT_TYPE;
|
|
else
|
|
step--;
|
|
moveToStep();
|
|
return false;
|
|
}
|
|
|
|
function onEditSessions(event) {
|
|
window.location = "/client#/account/sessions"
|
|
return false;
|
|
}
|
|
|
|
// will this option result in a session being started?
|
|
function willOptionStartSession() {
|
|
return createSessionSettings.createType == '<%= MusicSession::CREATE_TYPE_START_SCHEDULED%>' ||
|
|
createSessionSettings.createType == '<%= MusicSession::CREATE_TYPE_IMMEDIATE %>' ||
|
|
createSessionSettings.createType == '<%= MusicSession::CREATE_TYPE_QUICK_START %>';
|
|
}
|
|
|
|
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 %>';
|
|
}
|
|
|
|
function next(event) {
|
|
if(willOptionStartSession()) {
|
|
if(!context.JK.guardAgainstBrowser(app)) {
|
|
return false;
|
|
}
|
|
}
|
|
|
|
if(optionRequiresMultiplayerProfile()) {
|
|
if(context.JK.guardAgainstSinglePlayerProfile(app).canPlay == false) {
|
|
return false;
|
|
}
|
|
}
|
|
|
|
var valid = beforeMoveStep();
|
|
if (!valid) {
|
|
return false;
|
|
}
|
|
|
|
if (event) {
|
|
event.preventDefault();
|
|
}
|
|
if ($(this).is('.disabled')) return false;
|
|
|
|
if ($.inArray(createSessionSettings.createType, ['<%= MusicSession::CREATE_TYPE_START_SCHEDULED%>', '<%= MusicSession::CREATE_TYPE_QUICK_START %>']) > -1)
|
|
step = STEP_SELECT_CONFIRM;
|
|
else
|
|
step++;
|
|
|
|
moveToStep();
|
|
return false;
|
|
}
|
|
|
|
function beforeShowStep() {
|
|
var stepInfo = STEPS[step];
|
|
|
|
if (!stepInfo) {
|
|
throw "unknown step: " + step;
|
|
}
|
|
|
|
toggleStepStatus();
|
|
|
|
stepInfo.beforeShow.call(self);
|
|
}
|
|
|
|
function beforeMoveStep() {
|
|
var stepInfo = STEPS[step];
|
|
|
|
if (!stepInfo) {
|
|
throw "unknown step: " + step;
|
|
}
|
|
|
|
return stepInfo.beforeMove.call(self);
|
|
}
|
|
|
|
function reset() {
|
|
$selectedFilenames.empty(); // we need to be sure and clear out old uploaded notations on every start of create session flow
|
|
}
|
|
|
|
function beforeShow(args) {
|
|
|
|
reset();
|
|
step = args.d1;
|
|
if (!step) step = 0;
|
|
step = parseInt(step);
|
|
firstTimeShown = true;
|
|
moveToStep();
|
|
}
|
|
|
|
function afterShow() {
|
|
|
|
}
|
|
|
|
function toggleDate(dontRebuildDropdowns) {
|
|
var selectedDate = new Date($screen.find('#session-start-date').val());
|
|
var currentDate = new Date();
|
|
var startIndex = 0;
|
|
|
|
if (currentDate.getYear() == selectedDate.getYear() &&
|
|
currentDate.getMonth() == selectedDate.getMonth() &&
|
|
currentDate.getDate() == selectedDate.getDate()) {
|
|
|
|
var timeString = context.JK.formatUtcTime(currentDate, true);
|
|
startIndex = defaultTimeArray.indexOf(timeString);
|
|
}
|
|
$startTimeList.empty();
|
|
for (var i = startIndex; i < defaultTimeArray.length; i++) {
|
|
var strTime = defaultTimeArray[i];
|
|
$startTimeList.append($('<option value="' + strTime + '" class="label">' + strTime +'</option>'));
|
|
}
|
|
|
|
if (createSessionSettings.startTime != selectedDate)
|
|
createSessionSettings.startTime = defaultTimeArray[startIndex];
|
|
$startTimeList.val(createSessionSettings.startTime);
|
|
|
|
toggleStartTime(dontRebuildDropdowns);
|
|
}
|
|
|
|
function toggleStartTime(dontRebuildDropdowns) {
|
|
var valueSelected = $startTimeList.find('option:selected').val();
|
|
var startIndex = defaultTimeArray.indexOf(valueSelected) + 1;
|
|
|
|
var $endTimeList = $('#end-time-list');
|
|
$endTimeList.empty();
|
|
// if (startIndex == defaultTimeArray.length ) {
|
|
// var strTime = defaultTimeArray[0];
|
|
// $endTimeList.append($('<option value="' + strTime + '" class="label">' + strTime +'</option>'));
|
|
// }
|
|
|
|
var endIndex = startIndex + 6;
|
|
var endTimeIndices = [];
|
|
for (var i = startIndex; i < endIndex; i++) {
|
|
if (i <= defaultTimeArray.length - 1) {
|
|
endTimeIndices.push(i);
|
|
}
|
|
else {
|
|
endTimeIndices.push(i - defaultTimeArray.length);
|
|
}
|
|
}
|
|
|
|
$.each(endTimeIndices, function(index, value) {
|
|
var strTime = defaultTimeArray[value];
|
|
$endTimeList.append($('<option value="' + strTime + '" class="label">' + strTime +'</option>'));
|
|
});
|
|
|
|
if (createSessionSettings.endTime != defaultTimeArray[startIndex + 1]) {
|
|
createSessionSettings.endTime = defaultTimeArray[(startIndex + 1) % defaultTimeArray.length];
|
|
}
|
|
|
|
$endTimeList.val(createSessionSettings.endTime);
|
|
|
|
if(!dontRebuildDropdowns) {
|
|
logger.debug("rebuilding start/end time dropdowns")
|
|
context.JK.dropdown($startTimeList);
|
|
context.JK.dropdown($endTimeList);
|
|
}
|
|
|
|
}
|
|
|
|
function initializeControls() {
|
|
$("#create-session-form").iCheck({
|
|
checkboxClass: 'icheckbox_minimal',
|
|
radioClass: 'iradio_minimal',
|
|
inheritClass: true
|
|
});
|
|
$screen.find("#session-start-date").datepicker({
|
|
dateFormat: "D d MM yy",
|
|
onSelect: function() { toggleDate(); }
|
|
}
|
|
);
|
|
|
|
context.JK.GenreSelectorHelper.render('#create-session-genre');
|
|
|
|
//inviteMusiciansUtil.loadFriends();
|
|
|
|
context.JK.dropdown($screen.find('#session-musician-access'));
|
|
context.JK.dropdown($screen.find('#session-fans-access'));
|
|
context.JK.dropdown($timezoneList);
|
|
context.JK.dropdown($recurringModeList);
|
|
context.JK.dropdown($languageList);
|
|
context.JK.dropdown($bandList);
|
|
|
|
context.JK.helpBubble($sessionPlusMusiciansLabel, 'session-plus-musicians', {}, {offsetParent: $sessionPlusMusiciansLabel.closest('.content-wrapper')});
|
|
|
|
$editScheduledSessions.on('click', onEditSessions);
|
|
}
|
|
|
|
function changeSelectedFiles() {
|
|
var fileNames = [];
|
|
var files = $inputFiles.get(0).files;
|
|
var error = false;
|
|
for (var i = 0; i < files.length; ++i) {
|
|
var name = files.item(i).name;
|
|
var ext = name.split('.').pop().toLowerCase();
|
|
if ($.inArray(ext, ["pdf", "png", "jpg", "jpeg", "gif", "xml", "mxl", "txt"]) == -1) {
|
|
error = true;
|
|
break;
|
|
}
|
|
fileNames.push(name);
|
|
}
|
|
|
|
if (error) {
|
|
app.notifyAlert("Error", "We're sorry, but you can only upload images (.png .jpg .jpeg .gif), text (.txt), PDFs (.pdf), and XML files (.xml .mxl).");
|
|
$inputFiles.replaceWith($inputFiles.clone(true));
|
|
}
|
|
else {
|
|
// upload as soon as user picks their files.
|
|
uploadNotations($inputFiles.get(0).files)
|
|
.done(function() {
|
|
context._.each(fileNames, function(fileName) {
|
|
var $text = $('<span>').text(fileName);
|
|
var $file = $('<li>').append($text);
|
|
$selectedFilenames.append($file);
|
|
})
|
|
})
|
|
}
|
|
}
|
|
|
|
function toggleSelectFiles(event) {
|
|
if($btnSelectFiles.data('uploading')) {
|
|
logger.debug("ignoring click of SELECT FILES... while uploading")
|
|
return false;
|
|
}
|
|
|
|
event.preventDefault();
|
|
$inputFiles.trigger('click');
|
|
return false;
|
|
}
|
|
|
|
function toggleStepStatus() {
|
|
$screen.find('#create-session-steps .session-stepnumber').off('click');
|
|
$screen.find('#create-session-steps .session-stepnumber').removeClass('session-stephover');
|
|
|
|
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"]');
|
|
if (createSessionSettings.createType == '<%= MusicSession::CREATE_TYPE_QUICK_START %>') {
|
|
$nextStep.on('click', next);
|
|
$nextStep.addClass('session-stephover')
|
|
}
|
|
else if (createSessionSettings.createType == '<%= MusicSession::CREATE_TYPE_START_SCHEDULED%>' && createSessionSettings.session_count > 0) {
|
|
$nextStep.on('click', next);
|
|
$nextStep.addClass('session-stephover')
|
|
}
|
|
}
|
|
}
|
|
else {
|
|
$screen.find('#create-session-steps').find('.session-stepnumber').show();
|
|
$screen.find('#create-session-steps .session-stepnumber[data-step-number="' + (step + 1) + '"]').on('click', next);
|
|
$screen.find('#create-session-steps .session-stepnumber[data-step-number="' + (step + 1) + '"]').addClass('session-stephover');
|
|
$screen.find('#create-session-steps .session-stepnumber[data-step-number="' + (step - 1) + '"]').on('click', back);
|
|
$screen.find('#create-session-steps .session-stepnumber[data-step-number="' + (step - 1) + '"]').addClass('session-stephover');
|
|
}
|
|
}
|
|
|
|
function toggleCreateType(event) {
|
|
|
|
var $checkedType = $(event.target);
|
|
var checkedType = $checkedType.attr('info-value');
|
|
|
|
if (checkedType == createSessionSettings.createType) return;
|
|
|
|
$createTypeHelpers.addClass('hidden');
|
|
var $checkedInfo = $screen.find('.session-when-info div[info-id=' + '"' + checkedType + '"]');
|
|
$checkedInfo.removeClass('hidden');
|
|
|
|
createSessionSettings.createType = checkedType;
|
|
|
|
if (createSessionSettings.createType == '<%= MusicSession::CREATE_TYPE_START_SCHEDULED%>') {
|
|
$('#start-scheduled-wrapper').show();
|
|
$('#schedule-future-wrapper').hide();
|
|
createSessionSettings.timezone = {};
|
|
createSessionSettings.recurring_mode = {};
|
|
createSessionSettings.timezone = {};
|
|
createSessionSettings.language = {};
|
|
createSessionSettings.band = {};
|
|
createSessionSettings.musician_access = {};
|
|
createSessionSettings.fans_access = {};
|
|
}
|
|
else if (createSessionSettings.createType == '<%= MusicSession::CREATE_TYPE_SCHEDULE_FUTURE %>') {
|
|
$('#start-scheduled-wrapper').hide();
|
|
$('#schedule-future-wrapper').show();
|
|
}
|
|
else
|
|
{
|
|
$('#start-scheduled-wrapper').hide();
|
|
$('#schedule-future-wrapper').hide();
|
|
}
|
|
|
|
var $btnNext = $('#create-session-buttons .btn-next');
|
|
if (step == STEP_SELECT_TYPE && createSessionSettings.createType == '<%= MusicSession::CREATE_TYPE_START_SCHEDULED%>' && createSessionSettings.selectedSessionId == null) {
|
|
$btnNext.addClass('disabled')
|
|
}
|
|
else {
|
|
$btnNext.removeClass('disabled');
|
|
}
|
|
|
|
toggleStepStatus();
|
|
}
|
|
|
|
function togglePolicyTypeChanged(event) {
|
|
$('#session-policy-info .info-box').addClass('hidden');
|
|
$('#session-policy-info .info-box[policy-type="' + $(event.target).attr('policy-id') + '"]').removeClass('hidden');
|
|
}
|
|
|
|
function toggleMusicianAccessTypes(event) {
|
|
$('#session-musician-access-info .info-box').addClass('hidden');
|
|
$('#session-musician-access-info .info-box[musician-access-type="' + $(event.target).val() + '"]').removeClass('hidden');
|
|
}
|
|
|
|
function toggleFanAccessTypes(event) {
|
|
$('#session-fans-access-info .info-box').addClass('hidden');
|
|
$('#session-fans-access-info .info-box[fans-access-type="' + $(event.target).val() + '"]').removeClass('hidden');
|
|
}
|
|
|
|
function selectBand() {
|
|
var bandId = $bandList.get(0).options[$bandList.get(0).selectedIndex].value;
|
|
if (bandId != '') {
|
|
var url = "/api/bands/" + bandId + "/musicians";
|
|
return $.ajax({
|
|
type: "GET",
|
|
dataType: "json",
|
|
url: url,
|
|
processData:false,
|
|
error: app.ajaxError
|
|
})
|
|
.done(function(response) {
|
|
$.each(response, function(index, val) {
|
|
if (val.id !== context.JK.currentUserId) {
|
|
inviteMusiciansUtil.addInvitationIfAbsent(val.name, val.id);
|
|
}
|
|
});
|
|
})
|
|
}
|
|
}
|
|
|
|
// asks the instrument selector for the creator's specified instruments, and defaults to Other/Beginner if none were selected
|
|
function getCreatorInstruments() {
|
|
var instruments = instrumentSelector.getSelectedInstruments();
|
|
if(instruments.length == 0) {
|
|
var otherId = context.JK.server_to_client_instrument_map.Other.server_id; // get server ID
|
|
var otherInstrumentInfo = context.JK.instrument_id_to_instrument[otherId]; // get display name
|
|
var beginnerLevel = 1; // default to beginner
|
|
instruments = [ {id: otherId, name: otherInstrumentInfo.display, level: beginnerLevel} ];
|
|
}
|
|
return instruments;
|
|
}
|
|
|
|
function events() {
|
|
$createTypes.on("ifChanged", toggleCreateType);
|
|
$startTimeList.on('change', function() { toggleStartTime(); });
|
|
$policyTypes.on("ifChanged", togglePolicyTypeChanged);
|
|
$('#session-step-4 #session-musician-access').on('change', toggleMusicianAccessTypes);
|
|
$('#session-step-4 #session-fans-access').on('change', toggleFanAccessTypes);
|
|
|
|
$('div[layout-id="createSession"] .btn-email-invitation').click(function() {
|
|
invitationDialog.showEmailDialog();
|
|
});
|
|
|
|
$('div[layout-id="createSession"] .btn-gmail-invitation').click(function() {
|
|
invitationDialog.showGoogleDialog();
|
|
});
|
|
|
|
$('div[layout-id="createSession"] .btn-facebook-invitation').click(function(e) {
|
|
invitationDialog.showFacebookDialog(e);
|
|
});
|
|
|
|
$(friendInput).focus(function() { $(this).val(''); });
|
|
$bandList.on('change', function() { selectBand() } );
|
|
|
|
$inputFiles.on('change', changeSelectedFiles);
|
|
$btnSelectFiles.on('click', toggleSelectFiles);
|
|
}
|
|
|
|
function initialize(invitationDialogInstance, friendSelectorDialog, instrumentSelectorInstance, instrumentRSVPSelectorInstance) {
|
|
|
|
inviteMusiciansUtil = new JK.InviteMusiciansUtil(app);
|
|
inviteMusiciansUtil.initialize(friendSelectorDialog);
|
|
|
|
invitationDialog = invitationDialogInstance;
|
|
friendInput = inviteMusiciansUtil.inviteSessionCreate('#create-session-invite-musicians', "<h3>Who do you want to invite?</h3>"); //'
|
|
|
|
instrumentSelector = instrumentSelectorInstance;
|
|
instrumentRSVP = instrumentRSVPSelectorInstance;
|
|
|
|
var screenBindings = {'beforeShow': beforeShow, 'afterShow': afterShow};
|
|
app.bindScreen('createSession', screenBindings);
|
|
|
|
$wizardSteps = $screen.find('.create-session-wizard');
|
|
$templateSteps = $('#template-session-steps');
|
|
$templateButtons = $('#template-session-buttons');
|
|
$sessionButtons = $('#create-session-buttons');
|
|
$startTimeList = $screen.find('#start-time-list');
|
|
$endTimeList = $screen.find('#end-time-list');
|
|
$timezoneList = $screen.find('#timezone-list');
|
|
$recurringModeList = $screen.find('#recurring-mode-list');
|
|
$screenStep1 = $screen.find('#session-step-1');
|
|
$createTypes = $screen.find('input[name="session-when"]');
|
|
$createTypeHelpers = $screen.find('.session-when-info div');
|
|
$scheduledSessions = $screenStep1.find("#scheduled-session-list");
|
|
$languageList = $screen.find('#session-language-list');
|
|
$bandList = $screen.find('#session-band-list');
|
|
$sessionPlusMusiciansLabel = $screen.find('label[for="session-plus-musicians"]');
|
|
$editScheduledSessions = $screen.find('#edit_scheduled_sessions');
|
|
$btnSelectFiles = $screen.find('#session-notation-file-selection');
|
|
$selectedFilenames = $screen.find('#selected-filenames');
|
|
$uploadSpinner = $screen.find('#file-upload-spinner');
|
|
$policyTypes = $screen.find('input[name="session-policy-type"]');
|
|
$fetchingSpinner = $screen.find('#fetching-spinner');
|
|
$fetchingSpinnerLabel = $screen.find('#fetching-spinner-label');
|
|
$noSessionFound = $screen.find("#scheduled-session-not-found");
|
|
|
|
initializeControls();
|
|
events();
|
|
}
|
|
|
|
this.initialize = initialize;
|
|
|
|
return this;
|
|
}
|
|
|
|
})(window, jQuery); |