RootView = require 'views/core/RootView' forms = require 'core/forms' TrialRequest = require 'models/TrialRequest' TrialRequests = require 'collections/TrialRequests' AuthModal = require 'views/core/AuthModal' storage = require 'core/storage' errors = require 'core/errors' User = require 'models/User' FORM_KEY = 'request-quote-form' SIGNUP_REDIRECT = '/teachers/classes' module.exports = class CreateTeacherAccountView extends RootView id: 'create-teacher-account-view' template: require 'templates/teachers/create-teacher-account-view' events: 'click .login-link': 'onClickLoginLink' 'change form': 'onChangeForm' 'submit form': 'onSubmitForm' 'click #gplus-signup-btn': 'onClickGPlusSignupButton' 'click #facebook-signup-btn': 'onClickFacebookSignupButton' initialize: -> @trialRequest = new TrialRequest() @trialRequests = new TrialRequests() @trialRequests.fetchOwn() @supermodel.trackCollection(@trialRequests) onLoaded: -> if @trialRequests.size() @trialRequest = @trialRequests.first() if @trialRequest and @trialRequest.get('status') isnt 'submitted' and @trialRequest.get('status') isnt 'approved' window.tracker?.trackEvent 'View Trial Request', category: 'Teachers', label: 'View Trial Request', ['Mixpanel'] super() afterRender: -> super() # apply existing trial request on form properties = @trialRequest.get('properties') if properties forms.objectToForm(@$('form'), properties) commonLevels = _.map @$('[name="educationLevel"]'), (el) -> $(el).val() submittedLevels = properties.educationLevel or [] otherLevel = _.first(_.difference(submittedLevels, commonLevels)) or '' @$('#other-education-level-checkbox').attr('checked', !!otherLevel) @$('#other-education-level-input').val(otherLevel) # apply changes from local storage obj = storage.load(FORM_KEY) if obj @$('#other-education-level-checkbox').attr('checked', obj.otherChecked) @$('#other-education-level-input').val(obj.otherInput) forms.objectToForm(@$('form'), obj, { overwriteExisting: true }) onClickLoginLink: -> modal = new AuthModal({ initialValues: { email: @trialRequest.get('properties')?.email } }) @openModalView(modal) onChangeRequestForm: -> # Local storage is being used to store the contents of the form whenever it changes, # and filling in the stored values if the page is reloaded or navigated away from and returned to. # save changes to local storage obj = forms.formToObject(@$('form')) obj.otherChecked = @$('#other-education-level-checkbox').is(':checked') obj.otherInput = @$('#other-education-level-input').val() storage.save(FORM_KEY, obj, 10) onSubmitForm: (e) -> e.preventDefault() # Creating Trial Request first, validate user attributes but do not use them form = @$('form') allAttrs = forms.formToObject(form) trialRequestAttrs = _.omit(allAttrs, 'name', 'password1', 'password2') if @$('#other-education-level-checkbox').is(':checked') val = @$('#other-education-level-input').val() trialRequestAttrs.educationLevel.push(val) if val forms.clearFormAlerts(form) result = tv4.validateMultiple(trialRequestAttrs, formSchema) error = false if not result.valid forms.applyErrorsToForm(form, result.errors) error = true if not forms.validateEmail(trialRequestAttrs.email) forms.setErrorToProperty(form, 'email', 'Invalid email.') error = true if not _.size(trialRequestAttrs.educationLevel) forms.setErrorToProperty(form, 'educationLevel', 'Include at least one.') error = true unless @gplusAttrs or @facebookAttrs if not allAttrs.password1 forms.setErrorToProperty(form, 'password1', 'Required field') error = true else if not allAttrs.password2 forms.setErrorToProperty(form, 'password2', 'Required field') error = true else if allAttrs.password1 isnt allAttrs.password2 forms.setErrorToProperty(form, 'password1', 'Password fields are not equivalent') error = true if error forms.scrollToFirstError() return trialRequestAttrs['siteOrigin'] = 'create teacher' @trialRequest = new TrialRequest({ type: 'course' properties: trialRequestAttrs }) @trialRequest.notyErrors = false @$('#create-account-btn').text('Sending').attr('disabled', true) @trialRequest.save() @trialRequest.on 'sync', @onTrialRequestSubmit, @ @trialRequest.on 'error', @onTrialRequestError, @ onTrialRequestError: (model, jqxhr) -> @$('#create-account-btn').text('Submit').attr('disabled', false) if jqxhr.status is 409 userExists = $.i18n.t('teachers_quote.email_exists') logIn = $.i18n.t('login.log_in') @$('#email-form-group') .addClass('has-error') .append($("