diff --git a/cms/djangoapps/contentstore/course_info_model.py b/cms/djangoapps/contentstore/course_info_model.py
index 374b69121b..6ff915eeb9 100644
--- a/cms/djangoapps/contentstore/course_info_model.py
+++ b/cms/djangoapps/contentstore/course_info_model.py
@@ -65,12 +65,9 @@ def update_course_updates(location, update, passed_id=None):
except etree.XMLSyntaxError:
course_html_parsed = etree.fromstring("
")
- try:
- new_html_parsed = etree.fromstring('' + update['date'] + '
' + update['content'] + '',
- etree.XMLParser(remove_blank_text=True))
- except etree.XMLSyntaxError:
- logging.debug("Mashing malformed update")
- new_html_parsed = '' + update['date'] + '
' + update['content'] + ''
+ # No try/catch b/c failure generates an error back to client
+ new_html_parsed = etree.fromstring('' + update['date'] + '
' + update['content'] + '',
+ etree.XMLParser(remove_blank_text=True))
# Confirm that root is , iterate over - , pull out
subs and then rest of val
if course_html_parsed.tag == 'ol':
diff --git a/cms/djangoapps/contentstore/views.py b/cms/djangoapps/contentstore/views.py
index 83ee46c8c4..8705fc2bc6 100644
--- a/cms/djangoapps/contentstore/views.py
+++ b/cms/djangoapps/contentstore/views.py
@@ -54,6 +54,7 @@ from cms.djangoapps.models.settings.course_details import CourseDetails,\
CourseSettingsEncoder
from cms.djangoapps.models.settings.course_grading import CourseGradingModel
from cms.djangoapps.contentstore.utils import get_modulestore
+from lxml import etree
# to install PIL on MacOSX: 'easy_install http://dist.repoze.org/PIL-1.1.6.tar.gz'
@@ -979,13 +980,13 @@ def course_info_updates(request, org, course, provided_id=None):
if request.method == 'GET':
return HttpResponse(json.dumps(get_course_updates(location)), mimetype="application/json")
- elif real_method == 'POST':
- # new instance (unless django makes PUT a POST): updates are coming as POST. Not sure why.
- return HttpResponse(json.dumps(update_course_updates(location, request.POST, provided_id)), mimetype="application/json")
- elif real_method == 'PUT':
- return HttpResponse(json.dumps(update_course_updates(location, request.POST, provided_id)), mimetype="application/json")
elif real_method == 'DELETE': # coming as POST need to pull from Request Header X-HTTP-Method-Override DELETE
return HttpResponse(json.dumps(delete_course_update(location, request.POST, provided_id)), mimetype="application/json")
+ elif request.method == 'POST':
+ try:
+ return HttpResponse(json.dumps(update_course_updates(location, request.POST, provided_id)), mimetype="application/json")
+ except etree.XMLSyntaxError:
+ return HttpResponse("Failed to save: malformed html", status=515, content_type="text/plain")
@expect_json
diff --git a/cms/static/js/views/course_info_edit.js b/cms/static/js/views/course_info_edit.js
index 4aa56cfb8a..0ad02215db 100644
--- a/cms/static/js/views/course_info_edit.js
+++ b/cms/static/js/views/course_info_edit.js
@@ -99,7 +99,10 @@ CMS.Views.ClassInfoUpdateView = Backbone.View.extend({
var targetModel = this.eventModel(event);
targetModel.set({ date : this.dateEntry(event).val(), content : this.$codeMirror.getValue() });
// push change to display, hide the editor, submit the change
- targetModel.save();
+ targetModel.save({}, {error : function(model, xhr) {
+ // TODO use a standard component
+ window.alert(xhr.responseText);
+ }});
this.closeEditor(this);
},