The LMS continues to expect lowercased category slugs, while the Studio program creator now uses correctly cased slugs. Programs should be updated before this is released. Part of ECOM-5018.
108 lines
3.8 KiB
JavaScript
108 lines
3.8 KiB
JavaScript
define([
|
|
'backbone',
|
|
'jquery',
|
|
'js/programs/utils/api_config',
|
|
'js/programs/models/auto_auth_model',
|
|
'gettext',
|
|
'jquery.cookie'
|
|
],
|
|
function( Backbone, $, apiConfig, AutoAuthModel, gettext ) {
|
|
'use strict';
|
|
|
|
return AutoAuthModel.extend({
|
|
|
|
// Backbone.Validation rules.
|
|
// See: http://thedersen.com/projects/backbone-validation/#configure-validation-rules-on-the-model.
|
|
validation: {
|
|
name: {
|
|
required: true,
|
|
maxLength: 255
|
|
},
|
|
subtitle: {
|
|
// The underlying Django model does not require a subtitle.
|
|
maxLength: 255
|
|
},
|
|
category: {
|
|
required: true,
|
|
// TODO: Populate with the results of an API call for valid categories.
|
|
oneOf: ['XSeries', 'MicroMasters']
|
|
},
|
|
organizations: 'validateOrganizations',
|
|
marketing_slug: {
|
|
maxLength: 255
|
|
}
|
|
},
|
|
|
|
initialize: function() {
|
|
this.url = apiConfig.get('programsApiUrl') + 'programs/' + this.id + '/';
|
|
},
|
|
|
|
validateOrganizations: function( orgArray ) {
|
|
/**
|
|
* The array passed to this method contains a single object representing
|
|
* the selected organization; the object contains the organization's key.
|
|
* In the future, multiple organizations might be associated with a program.
|
|
*/
|
|
var i,
|
|
len = orgArray ? orgArray.length : 0;
|
|
|
|
for ( i = 0; i < len; i++ ) {
|
|
if ( orgArray[i].key === 'false' ) {
|
|
return gettext('Please select a valid organization.');
|
|
}
|
|
}
|
|
},
|
|
|
|
getConfig: function( options ) {
|
|
var patch = options && options.patch,
|
|
params = patch ? this.get('id') + '/' : '',
|
|
config = _.extend({ validate: true, parse: true }, {
|
|
type: patch ? 'PATCH' : 'POST',
|
|
url: apiConfig.get('programsApiUrl') + 'programs/' + params,
|
|
contentType: patch ? 'application/merge-patch+json' : 'application/json',
|
|
context: this,
|
|
// NB: setting context fails in tests
|
|
success: _.bind( this.saveSuccess, this ),
|
|
error: _.bind( this.saveError, this )
|
|
});
|
|
|
|
if ( patch ) {
|
|
config.data = JSON.stringify( options.update ) || this.attributes;
|
|
}
|
|
|
|
return config;
|
|
},
|
|
|
|
patch: function( data ) {
|
|
this.save({
|
|
patch: true,
|
|
update: data
|
|
});
|
|
},
|
|
|
|
save: function( options ) {
|
|
var method,
|
|
patch = options && options.patch ? true : false,
|
|
config = this.getConfig( options );
|
|
|
|
/**
|
|
* Simplified version of code from the default Backbone save function
|
|
* http://backbonejs.org/docs/backbone.html#section-87
|
|
*/
|
|
method = this.isNew() ? 'create' : ( patch ? 'patch' : 'update' );
|
|
|
|
this.sync( method, this, config );
|
|
},
|
|
|
|
saveError: function( jqXHR ) {
|
|
this.trigger( 'error', jqXHR );
|
|
},
|
|
|
|
saveSuccess: function( data ) {
|
|
this.set({ id: data.id });
|
|
this.trigger( 'sync', this );
|
|
}
|
|
});
|
|
}
|
|
);
|