Add /courses prepaid code query var

Update invite students link to go to /courses
This commit is contained in:
Matt Lott 2015-10-06 12:30:14 -07:00
parent d09711be37
commit 75b9cb50d9
4 changed files with 52 additions and 31 deletions

View file

@ -250,7 +250,7 @@ mixin invite-tab
h3(data-i18n="courses.invite_link_header")
p(data-i18n="courses.invite_link_p_1")
.alert.alert-info
strong= document.location.origin + "/account/prepaid?_ppc=" + view.prepaid.get('code')
strong= document.location.origin + "/courses?_ppc=" + view.prepaid.get('code')
p(data-i18n="courses.invite_link_p_2")
.form
.form-group

View file

@ -7,19 +7,25 @@ block content
a.spl(href='mailto:team@codecombat.com') team@codecombat.com
br
if studentMode
+student-main
if state === 'enrolling'
.alert.alert-info Enrolling in course..
else
+teacher-main
.container-fluid
- var i = 0
while i < courses.length
.row
+course-block(courses[i], instances)
- i++
if i < courses.length
if state === 'unknown_error'
.alert.alert-danger.alert-dismissible= stateMessage
if studentMode
+student-main
else
+teacher-main
.container-fluid
- var i = 0
while i < courses.length
.row
+course-block(courses[i], instances)
- i++
if i < courses.length
+course-block(courses[i], instances)
- i++
mixin student-main
button.btn.btn-warning.btn-teacher(data-i18n="courses.teachers_click")

View file

@ -26,6 +26,7 @@ module.exports = class CoursesView extends RootView
@courseInstances = new CocoCollection([], { url: "/db/user/#{me.id}/course_instances", model: CourseInstance})
@listenToOnce @courseInstances, 'sync', @onCourseInstancesLoaded
@supermodel.loadCollection(@courseInstances, 'course_instances')
@courseEnroll(prepaidCode) if prepaidCode = utils.getQueryVariable('_ppc', false)
getRenderData: ->
context = super()
@ -33,6 +34,8 @@ module.exports = class CoursesView extends RootView
context.enrolledCourses = @enrolledCourses ? {}
context.instances = @courseInstances.models ? []
context.praise = @praise
context.state = @state
context.stateMessage = @stateMessage
context.studentMode = @studentMode
context
@ -73,24 +76,7 @@ module.exports = class CoursesView extends RootView
$('.continue-dialog').modal('hide')
courseID = $(e.target).data('course-id')
prepaidCode = $(".code-input[data-course-id=#{courseID}]").val()
data = prepaidCode: prepaidCode
jqxhr = $.post('/db/course_instance/-/redeem_prepaid', data)
jqxhr.done (data, textStatus, jqXHR) =>
application.tracker?.trackEvent 'Redeemed course prepaid code', {courseID: courseID, prepaidCode: prepaidCode}
# TODO: handle fetch errors
me.fetch(cache: false).always =>
route = "/courses/#{courseID}"
viewArgs = [{}, courseID]
Backbone.Mediator.publish 'router:navigate',
route: route
viewClass: 'views/courses/CourseDetailsView'
viewArgs: viewArgs
jqxhr.fail (xhr, textStatus, errorThrown) =>
console.error 'Got an error redeeming a course prepaid code:', textStatus, errorThrown
application.tracker?.trackEvent 'Failed to redeem course prepaid code', status: textStatus
@state = 'unknown_error'
@stateMessage = "#{xhr.status}: #{xhr.responseText}"
@render?()
@courseEnroll(prepaidCode)
onClickEnter: (e) ->
$('.continue-dialog').modal('hide')
@ -115,3 +101,32 @@ module.exports = class CoursesView extends RootView
viewArgs = [studentMode: false]
navigationEvent = route: route, viewClass: viewClass, viewArgs: viewArgs
Backbone.Mediator.publish 'router:navigate', navigationEvent
courseEnroll: (prepaidCode) ->
@state = 'enrolling'
@render?()
data = prepaidCode: prepaidCode
jqxhr = $.post('/db/course_instance/-/redeem_prepaid', data)
jqxhr.done (data, textStatus, jqXHR) =>
application.tracker?.trackEvent 'Redeemed course prepaid code', {prepaidCode: prepaidCode}
# TODO: handle fetch errors
me.fetch(cache: false).always =>
if data?.length > 0 && data[0].courseID && data[0]._id
courseID = data[0].courseID
courseInstanceID = data[0]._id
route = "/courses/#{courseID}/#{courseInstanceID}"
viewArgs = [{}, courseID, courseInstanceID]
Backbone.Mediator.publish 'router:navigate',
route: route
viewClass: 'views/courses/CourseDetailsView'
viewArgs: viewArgs
else
@state = 'unknown_error'
@stateMessage = "Database error."
@render?()
jqxhr.fail (xhr, textStatus, errorThrown) =>
console.error 'Got an error redeeming a course prepaid code:', textStatus, errorThrown
application.tracker?.trackEvent 'Failed to redeem course prepaid code', status: textStatus
@state = 'unknown_error'
@stateMessage = "#{xhr.status}: #{xhr.responseText}"
@render?()

View file

@ -123,7 +123,7 @@ CourseInstanceHandler = class CourseInstanceHandler extends Handler
address: email
email_data:
class_name: courseInstance.get('name')
join_link: "https://codecombat.com/account/prepaid?_ppc=" + prepaid.get('code')
join_link: "https://codecombat.com/courses?_ppc=" + prepaid.get('code')
sendwithus.api.send context, _.noop
return @sendSuccess(res, {})
@ -160,6 +160,6 @@ CourseInstanceHandler = class CourseInstanceHandler extends Handler
tasks = (makeAddMemberToCourseInstanceFn(courseInstance) for courseInstance in courseInstances)
async.parallel tasks, (err, results) =>
return @sendDatabaseError(res, err) if err
@sendSuccess(res)
@sendSuccess(res, courseInstances)
module.exports = new CourseInstanceHandler()