124 lines
5.7 KiB
JavaScript
124 lines
5.7 KiB
JavaScript
// Backbone Application View: CertificateInvalidationView
|
|
/* global define, RequireJS */
|
|
|
|
(function(define) {
|
|
'use strict';
|
|
define(
|
|
['jquery', 'underscore', 'gettext', 'backbone', 'js/certificates/models/certificate_invalidation'],
|
|
|
|
function($, _, gettext, Backbone, CertificateInvalidationModel) {
|
|
return Backbone.View.extend({
|
|
el: '#certificate-invalidation',
|
|
messages: 'div.message',
|
|
events: {
|
|
'click #invalidate-certificate': 'invalidateCertificate',
|
|
'click .re-validate-certificate': 'reValidateCertificate'
|
|
},
|
|
|
|
initialize: function() {
|
|
this.listenTo(this.collection, 'change add remove', this.render);
|
|
},
|
|
|
|
render: function() {
|
|
var template = this.loadTemplate('certificate-invalidation');
|
|
this.$el.html(template({certificate_invalidations: this.collection.models}));
|
|
},
|
|
|
|
loadTemplate: function(name) {
|
|
var templateSelector = '#' + name + '-tpl',
|
|
templateText = $(templateSelector).text();
|
|
return _.template(templateText);
|
|
},
|
|
|
|
invalidateCertificate: function() {
|
|
var user = this.$('#certificate-invalidation-user').val();
|
|
var notes = this.$('#certificate-invalidation-notes').val();
|
|
var message = '';
|
|
|
|
var certificate_invalidation = new CertificateInvalidationModel(
|
|
{
|
|
user: user,
|
|
notes: notes
|
|
},
|
|
{
|
|
url: this.collection.url
|
|
}
|
|
);
|
|
|
|
if (this.collection.findWhere({user: user})) {
|
|
message = gettext('Certificate of <%= user %> has already been invalidated. Please check your spelling and retry.'); // eslint-disable-line max-len
|
|
this.escapeAndShowMessage(_.template(message)({user: user}));
|
|
} else if (certificate_invalidation.isValid()) {
|
|
var self = this;
|
|
certificate_invalidation.save(null, {
|
|
wait: true,
|
|
|
|
success: function(model) {
|
|
self.collection.add(model);
|
|
message = gettext('Certificate has been successfully invalidated for <%= user %>.');
|
|
self.escapeAndShowMessage(_.template(message)({user: user}));
|
|
},
|
|
|
|
error: function(model, response) {
|
|
try {
|
|
var response_data = JSON.parse(response.responseText);
|
|
self.escapeAndShowMessage(response_data.message);
|
|
} catch (exception) {
|
|
self.escapeAndShowMessage(
|
|
gettext('Server Error, Please refresh the page and try again.')
|
|
);
|
|
}
|
|
}
|
|
});
|
|
} else {
|
|
this.escapeAndShowMessage(certificate_invalidation.validationError);
|
|
}
|
|
},
|
|
|
|
reValidateCertificate: function(event) {
|
|
var certificate_invalidation = $(event.target).data();
|
|
var model = this.collection.get(certificate_invalidation),
|
|
self = this;
|
|
|
|
if (model) {
|
|
model.destroy({
|
|
success: function() {
|
|
self.escapeAndShowMessage(
|
|
gettext('The certificate for this learner has been re-validated and the system is re-running the grade for this learner.') // eslint-disable-line max-len
|
|
);
|
|
},
|
|
error: function(model, response) {
|
|
try {
|
|
var response_data = JSON.parse(response.responseText);
|
|
self.escapeAndShowMessage(response_data.message);
|
|
} catch (exception) {
|
|
self.escapeAndShowMessage(
|
|
gettext('Server Error, Please refresh the page and try again.')
|
|
);
|
|
}
|
|
},
|
|
wait: true,
|
|
data: JSON.stringify(model.attributes)
|
|
});
|
|
} else {
|
|
self.escapeAndShowMessage(
|
|
gettext('Could not find Certificate Invalidation in the list. Please refresh the page and try again') // eslint-disable-line max-len
|
|
);
|
|
}
|
|
},
|
|
|
|
isEmailAddress: function validateEmail(email) {
|
|
var re = /^([\w-]+(?:\.[\w-]+)*)@((?:[\w-]+\.)*\w[\w-]{0,66})\.([a-z]{2,6}(?:\.[a-z]{2})?)$/i;
|
|
return re.test(email);
|
|
},
|
|
|
|
escapeAndShowMessage: function(message) {
|
|
$(this.messages + '>p').remove();
|
|
this.$(this.messages).removeClass('hidden').append('<p>' + _.escape(message) + '</p>');
|
|
}
|
|
|
|
});
|
|
}
|
|
);
|
|
}).call(this, define || RequireJS.define);
|