From 7ed0002bd237564ce6fd4c9daf6b5908c7120f2f Mon Sep 17 00:00:00 2001 From: Don Mitchell Date: Thu, 29 Nov 2012 16:18:36 -0500 Subject: [PATCH] Details now has validation except for youtube ids which cause crossdomain policy violations when i try to validate. --- .../js/models/settings/course_details.js | 65 ++++++++++++++++- .../js/views/settings/main_settings_view.js | 69 +++++++++++++++---- 2 files changed, 118 insertions(+), 16 deletions(-) diff --git a/cms/static/js/models/settings/course_details.js b/cms/static/js/models/settings/course_details.js index 46a31bb9fe..91e211be95 100644 --- a/cms/static/js/models/settings/course_details.js +++ b/cms/static/js/models/settings/course_details.js @@ -33,20 +33,57 @@ CMS.Models.Settings.CourseDetails = Backbone.Model.extend({ return attributes; }, + validate: function(newattrs) { + // Returns either nothing (no return call) so that validate works or an object of {field: errorstring} pairs + // A bit funny in that the video key validation is asynchronous; so, it won't stop the validation. + var errors = {}; + if (newattrs.start_date && newattrs.end_date && newattrs.start_date >= newattrs.end_date) { + errors.end_date = "The course end date cannot be before the course start date."; + } + if (newattrs.start_date && newattrs.enrollment_start && newattrs.start_date < newattrs.enrollment_start) { + errors.enrollment_start = "The course start date cannot be before the enrollment start date."; + } + if (newattrs.enrollment_start && newattrs.enrollment_end && newattrs.enrollment_start >= newattrs.enrollment_end) { + errors.enrollment_end = "The enrollment start date cannot be after the enrollment end date."; + } + if (newattrs.end_date && newattrs.enrollment_end && newattrs.end_date < newattrs.enrollment_end) { + errors.enrollment_end = "The enrollment end date cannot be after the course end date."; + } + if (newattrs.intro_video && newattrs.intro_video != this.get('intro_video')) { + var videos = this.parse_videosource(newattrs.intro_video); + var vid_errors = new Array(); + var cachethis = this; + for (var i=0; i or just the "speed:key, *" string // returns the videosource for the preview which iss the key whose speed is closest to 1 if (newsource == null) this.save({'intro_video': null}); + // TODO remove all whitespace w/in string else if (this._getNextMatch(this._videoprefix, newsource, 0)) this.save('intro_video', newsource); else this.save('intro_video', '