/** * In-memory storage of verification photo data. * * This can be passed to multiple steps in the workflow * to persist image data in-memory before it is submitted * to the server. * */ var edx = edx || {}; (function($, Backbone) { 'use strict'; edx.verify_student = edx.verify_student || {}; edx.verify_student.VerificationModel = Backbone.Model.extend({ defaults: { // If provided, change the user's full name when submitting photos. fullName: null, // Image data for the user's face photo. faceImage: '', // Image data for the user's ID photo. // In the case of an in-course reverification, we won't // need to send this because we'll send the ID photo that // the user submitted with the initial verification attempt. identificationImage: null, // If the verification attempt is associated with a checkpoint // in a course, we send the the course and checkpoint location. courseKey: null, checkpoint: null }, sync: function(method, model) { var headers = {'X-CSRFToken': $.cookie('csrftoken')}, data = {}; data.face_image = model.get('faceImage'); // The ID photo is optional, since in-course reverification // re-uses the image from the initial verification attempt. if (model.has('identificationImage')) { data.photo_id_image = model.get('identificationImage'); } // Full name is an optional parameter; if not provided, // it won't be changed. if (model.has('fullName')) { data.full_name = model.get('fullName'); // Track the user's decision to change the name on their account window.analytics.track('edx.bi.user.full_name.changed', { category: 'verification' }); } // If the user entered the verification flow from a checkpoint // in a course, we need to send the course and checkpoint // location to associate the attempt with the checkpoint. if (model.has('courseKey') && model.has('checkpoint')) { data.course_key = model.get('courseKey'); data.checkpoint = model.get('checkpoint'); } // Submit the request to the server, // triggering events on success and error. $.ajax({ url: '/verify_student/submit-photos/', type: 'POST', data: data, headers: headers, success: function(response) { model.trigger('sync', response.url); }, error: function(error) { model.trigger('error', error); } }); } }); }(jQuery, Backbone));