Files
edx-platform/cms/static/js/programs/models/program_model.js
Renzo Lucioni b540968457 Updates to facilitate program category casing changes
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.
2016-07-26 16:28:41 -04:00

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 );
}
});
}
);