mirror of
https://github.com/codeninjasllc/codecombat.git
synced 2024-11-28 01:55:38 -05:00
Inserted score history graph into ladder update emails.
This commit is contained in:
parent
32baf2ae79
commit
eac219a2be
3 changed files with 19 additions and 3 deletions
|
@ -24,7 +24,7 @@ div#columns.row
|
||||||
if team.chartData
|
if team.chartData
|
||||||
tr
|
tr
|
||||||
th(colspan=4, style="color: #{team.primaryColor}")
|
th(colspan=4, style="color: #{team.primaryColor}")
|
||||||
img(src="https://chart.googleapis.com/chart?chs=450x125&cht=lxy&chco=#{team.chartColor}&chtt=Score+History&chts=#{team.chartColor},16,c&chf=a,s,000000FF&chls=2&chm=o,#{team.chartColor},0,4&chd=t:#{team.chartData}")
|
img(src="https://chart.googleapis.com/chart?chs=450x125&cht=lxy&chco=#{team.chartColor}&chtt=Score%3A+#{team.currentScore}&chts=#{team.chartColor},16,c&chf=a,s,000000FF&chls=2&chm=o,#{team.chartColor},0,4&chd=t:#{team.chartData}")
|
||||||
|
|
||||||
tr
|
tr
|
||||||
th Result
|
th Result
|
||||||
|
|
|
@ -78,6 +78,7 @@ module.exports = class MyMatchesTabView extends CocoView
|
||||||
team.losses = _.filter(team.matches, {state: 'loss'}).length
|
team.losses = _.filter(team.matches, {state: 'loss'}).length
|
||||||
team.scoreHistory = team.session?.get('scoreHistory')
|
team.scoreHistory = team.session?.get('scoreHistory')
|
||||||
if team.scoreHistory?.length > 1
|
if team.scoreHistory?.length > 1
|
||||||
|
team.currentScore = Math.round team.scoreHistory[team.scoreHistory.length - 1][1] * 100
|
||||||
team.chartColor = team.primaryColor.replace '#', ''
|
team.chartColor = team.primaryColor.replace '#', ''
|
||||||
times = (s[0] for s in team.scoreHistory)
|
times = (s[0] for s in team.scoreHistory)
|
||||||
times = ((100 * (t - times[0]) / (times[times.length - 1] - times[0])).toFixed(1) for t in times)
|
times = ((100 * (t - times[0]) / (times[times.length - 1] - times[0])).toFixed(1) for t in times)
|
||||||
|
|
|
@ -46,7 +46,7 @@ handleLadderUpdate = (req, res) ->
|
||||||
#endTime = startTime + 1.5 * 60 * 60 * 1000 # Debugging: make sure there's something to send
|
#endTime = startTime + 1.5 * 60 * 60 * 1000 # Debugging: make sure there's something to send
|
||||||
findParameters = {submitted: true, submitDate: {$gt: new Date(startTime), $lte: new Date(endTime)}}
|
findParameters = {submitted: true, submitDate: {$gt: new Date(startTime), $lte: new Date(endTime)}}
|
||||||
# TODO: think about putting screenshots in the email
|
# TODO: think about putting screenshots in the email
|
||||||
selectString = "creator team levelName levelID totalScore matches submitted submitDate"
|
selectString = "creator team levelName levelID totalScore matches submitted submitDate scoreHistory"
|
||||||
query = LevelSession.find(findParameters)
|
query = LevelSession.find(findParameters)
|
||||||
.select(selectString)
|
.select(selectString)
|
||||||
.lean()
|
.lean()
|
||||||
|
@ -69,7 +69,7 @@ sendLadderUpdateEmail = (session, daysAgo) ->
|
||||||
unless session.levelName
|
unless session.levelName
|
||||||
log.info "Not sending email to #{user.email} #{user.name} because the session had no levelName in it."
|
log.info "Not sending email to #{user.email} #{user.name} because the session had no levelName in it."
|
||||||
return
|
return
|
||||||
name = if user.firstName and user.lastName then "#{user.firstName} #{user.lastName}" else user.name
|
name = if user.firstName and user.lastName then "#{user.firstName}" else user.name
|
||||||
name = "Wizard" if not name or name is "Anoner"
|
name = "Wizard" if not name or name is "Anoner"
|
||||||
|
|
||||||
# Fetch the most recent defeat and victory, if there are any.
|
# Fetch the most recent defeat and victory, if there are any.
|
||||||
|
@ -99,6 +99,7 @@ sendLadderUpdateEmail = (session, daysAgo) ->
|
||||||
level_name: session.levelName
|
level_name: session.levelName
|
||||||
session_id: session._id
|
session_id: session._id
|
||||||
ladder_url: "http://codecombat.com/play/ladder/#{session.levelID}#my-matches"
|
ladder_url: "http://codecombat.com/play/ladder/#{session.levelID}#my-matches"
|
||||||
|
score_history_graph_url: getScoreHistoryGraphURL session, daysAgo
|
||||||
defeat: defeatContext
|
defeat: defeatContext
|
||||||
victory: victoryContext
|
victory: victoryContext
|
||||||
log.info "Sending ladder update email to #{context.recipient.address} with #{context.email_data.wins} wins and #{context.email_data.losses} since #{daysAgo} day(s) ago."
|
log.info "Sending ladder update email to #{context.recipient.address} with #{context.email_data.wins} wins and #{context.email_data.losses} since #{daysAgo} day(s) ago."
|
||||||
|
@ -131,6 +132,20 @@ sendLadderUpdateEmail = (session, daysAgo) ->
|
||||||
else
|
else
|
||||||
onFetchedDefeatedOpponent null, null
|
onFetchedDefeatedOpponent null, null
|
||||||
|
|
||||||
|
getScoreHistoryGraphURL = (session, daysAgo) ->
|
||||||
|
# Totally duplicated in My Matches tab for now until we figure out what we're doing.
|
||||||
|
since = new Date() - 86400 * 1000 * daysAgo
|
||||||
|
scoreHistory = (s for s in session.scoreHistory ? [] when s[0] >= since)
|
||||||
|
return '' unless scoreHistory.length > 1
|
||||||
|
times = (s[0] for s in scoreHistory)
|
||||||
|
times = ((100 * (t - times[0]) / (times[times.length - 1] - times[0])).toFixed(1) for t in times)
|
||||||
|
scores = (s[1] for s in scoreHistory)
|
||||||
|
lowest = _.min scores
|
||||||
|
highest = _.max scores
|
||||||
|
scores = (Math.round(100 * (s - lowest) / (highest - lowest)) for s in scores)
|
||||||
|
currentScore = Math.round scoreHistory[scoreHistory.length - 1][1] * 100
|
||||||
|
chartData = times.join(',') + '|' + scores.join(',')
|
||||||
|
"https://chart.googleapis.com/chart?chs=600x75&cht=lxy&chtt=Score%3A+#{currentScore}&chts=222222,12,r&chf=a,s,000000FF&chls=2&chd=t:#{chartData}"
|
||||||
|
|
||||||
handleMailchimpWebHook = (req, res) ->
|
handleMailchimpWebHook = (req, res) ->
|
||||||
post = req.body
|
post = req.body
|
||||||
|
|
Loading…
Reference in a new issue