mirror of
https://github.com/codeninjasllc/codecombat.git
synced 2025-02-16 00:19:50 -05:00
Sending a couple more offers in the next-steps emails.
This commit is contained in:
parent
031337e472
commit
dc5fb0af14
3 changed files with 28 additions and 5 deletions
|
@ -21,11 +21,15 @@ if docs.length === 1
|
||||||
li
|
li
|
||||||
strong
|
strong
|
||||||
a(class="resource-link", data-resource="code-school", href='http://mbsy.co/bVRsR') Code School
|
a(class="resource-link", data-resource="code-school", href='http://mbsy.co/bVRsR') Code School
|
||||||
| : Learn web technologies with video lessons, coding challenges, and screencasts. Get your first month for only $9 ($20 off).
|
| : Learn web technologies with video lessons, coding challenges, and screencasts.
|
||||||
li
|
li
|
||||||
strong
|
strong
|
||||||
a(class="resource-link", data-resource="treehouse", href='http://teamtreehouse.com/') Treehouse
|
a(class="resource-link", data-resource="learnable", href='http://shrsl.com/?~80my') Learnable
|
||||||
| : Learn HTML, CSS, iPhone apps, and more with a comprehensive video library.
|
| : Learn web design, HTML, CSS, and so much more.
|
||||||
|
li
|
||||||
|
strong
|
||||||
|
a(class="resource-link", data-resource="pluralsight", href='http://shrsl.com/?~81i5') Pluralsight
|
||||||
|
| : Unlock new tech skills with over 3000 online courses.
|
||||||
else
|
else
|
||||||
ul.nav.nav-tabs
|
ul.nav.nav-tabs
|
||||||
for doc in docs
|
for doc in docs
|
||||||
|
|
|
@ -15,7 +15,7 @@ block modal-body-content
|
||||||
.answers-container-wrapper
|
.answers-container-wrapper
|
||||||
.answers-container
|
.answers-container
|
||||||
table.table.table-hover
|
table.table.table-hover
|
||||||
for answer in poll.get("answers")
|
for answer in poll.get("answers") || []
|
||||||
tr(class="answer", data-answer=answer.key)
|
tr(class="answer", data-answer=answer.key)
|
||||||
td!= marked(i18n(answer, "text"))
|
td!= marked(i18n(answer, "text"))
|
||||||
td.graph-cell
|
td.graph-cell
|
||||||
|
|
|
@ -675,7 +675,7 @@ handleNextSteps = (req, res) ->
|
||||||
startTime = getTimeFromDaysAgo now, daysAgo
|
startTime = getTimeFromDaysAgo now, daysAgo
|
||||||
endTime = startTime + 5 * 60 * 1000
|
endTime = startTime + 5 * 60 * 1000
|
||||||
findParameters = {dateCreated: {$gt: new Date(startTime), $lte: new Date(endTime)}, emailLower: {$exists: true}}
|
findParameters = {dateCreated: {$gt: new Date(startTime), $lte: new Date(endTime)}, emailLower: {$exists: true}}
|
||||||
selectString = 'name firstName lastName lastLevel points email gender emailSubscriptions emails dateCreated preferredLanguage aceConfig.language activity stats earned testGroupNumber'
|
selectString = 'name firstName lastName lastLevel points email gender emailSubscriptions emails dateCreated preferredLanguage aceConfig.language activity stats earned testGroupNumber ageRange'
|
||||||
query = User.find(findParameters).select(selectString)
|
query = User.find(findParameters).select(selectString)
|
||||||
do (daysAgo) ->
|
do (daysAgo) ->
|
||||||
query.exec (err, results) ->
|
query.exec (err, results) ->
|
||||||
|
@ -710,6 +710,24 @@ sendNextStepsEmail = (user, now, daysAgo) ->
|
||||||
when 0, 1, 2, 3 then name: 'Forgetful Gemsmith', slug: 'forgetful-gemsmith'
|
when 0, 1, 2, 3 then name: 'Forgetful Gemsmith', slug: 'forgetful-gemsmith'
|
||||||
when 4, 5, 6, 7 then name: 'Signs and Portents', slug: 'signs-and-portents'
|
when 4, 5, 6, 7 then name: 'Signs and Portents', slug: 'signs-and-portents'
|
||||||
|
|
||||||
|
# TODO: make this smarter, actually data-driven, looking at all available sessions
|
||||||
|
shadowGuardSession = _.find sessions, levelID: 'shadow-guard'
|
||||||
|
isFast = shadowGuardSession and shadowGuardSession.playtime < 90 # Average is 107s
|
||||||
|
isVeryFast = shadowGuardSession and shadowGuardSession.playtime < 75
|
||||||
|
isAdult = user.get('ageRange') in ['18-24', '25-34', '35-44', '45-100']
|
||||||
|
isKid = not isAdult # Assume kid if not specified
|
||||||
|
offers =
|
||||||
|
'app-academy': isAdult and isVeryFast
|
||||||
|
'designlab': isAdult
|
||||||
|
'tealeaf-academy': isAdult and isFast
|
||||||
|
'talent-buddy': isAdult
|
||||||
|
'coding-campus': isAdult and Math.random() < 0.5 # TODO: geodetect UT and give priority
|
||||||
|
#'mv-code-club': isKid # TODO: geodetect, get landing page URL
|
||||||
|
nAdditionalOffers = 4 - _.filter(offers).length
|
||||||
|
possibleAdditionalOffers = ['code-school', 'one-month', 'learnable', 'pluralsight']
|
||||||
|
for offer in _.sample possibleAdditionalOffers, nAdditionalOffers
|
||||||
|
offers[offer] = true
|
||||||
|
|
||||||
# TODO: do something with the preferredLanguage?
|
# TODO: do something with the preferredLanguage?
|
||||||
context =
|
context =
|
||||||
email_id: sendwithus.templates.next_steps_email
|
email_id: sendwithus.templates.next_steps_email
|
||||||
|
@ -724,6 +742,7 @@ sendNextStepsEmail = (user, now, daysAgo) ->
|
||||||
secretLevelName: secretLevel.name
|
secretLevelName: secretLevel.name
|
||||||
secretLevelLink: "http://codecombat.com/play/level/#{secretLevel.slug}"
|
secretLevelLink: "http://codecombat.com/play/level/#{secretLevel.slug}"
|
||||||
levelsComplete: complete.length
|
levelsComplete: complete.length
|
||||||
|
offers: offers
|
||||||
log.info "Sending next steps email to #{context.recipient.address} with #{context.email_data.nextLevelName} next and #{context.email_data.levelsComplete} levels complete since #{daysAgo} day(s) ago." if DEBUGGING
|
log.info "Sending next steps email to #{context.recipient.address} with #{context.email_data.nextLevelName} next and #{context.email_data.levelsComplete} levels complete since #{daysAgo} day(s) ago." if DEBUGGING
|
||||||
sendwithus.api.send context, (err, result) ->
|
sendwithus.api.send context, (err, result) ->
|
||||||
log.error "Error sending next steps email: #{err} with result #{result}" if err
|
log.error "Error sending next steps email: #{err} with result #{result}" if err
|
||||||
|
|
Loading…
Reference in a new issue