Beefing up contact form data population.
This commit is contained in:
parent
9522da28e8
commit
6ac0bea5ca
2 changed files with 32 additions and 7 deletions
server
|
@ -50,10 +50,8 @@ LevelSessionSchema.pre 'save', (next) ->
|
|||
LevelSessionSchema.statics.privateProperties = ['code', 'submittedCode', 'unsubscribed']
|
||||
LevelSessionSchema.statics.editableProperties = ['multiplayer', 'players', 'code', 'codeLanguage', 'completed', 'state',
|
||||
'levelName', 'creatorName', 'levelID', 'screenshot',
|
||||
'chat', 'teamSpells', 'submitted', 'submittedCodeLanguage',
|
||||
'chat', 'teamSpells', 'submitted', 'submittedCodeLanguage',
|
||||
'unsubscribed', 'playtime', 'heroConfig', 'team', 'transpiledCode']
|
||||
LevelSessionSchema.statics.jsonSchema = jsonschema
|
||||
|
||||
LevelSessionSchema.index {user: 1, changed: -1}, {sparse: true, name: 'last played index'}
|
||||
|
||||
module.exports = LevelSession = mongoose.model('level.session', LevelSessionSchema, 'level.sessions')
|
||||
|
|
|
@ -2,6 +2,9 @@ config = require '../../server_config'
|
|||
log = require 'winston'
|
||||
User = require '../users/User'
|
||||
sendwithus = require '../sendwithus'
|
||||
async = require 'async'
|
||||
LevelSession = require '../levels/sessions/LevelSession'
|
||||
moment = require 'moment'
|
||||
|
||||
module.exports.setup = (app) ->
|
||||
app.post '/contact', (req, res) ->
|
||||
|
@ -19,7 +22,8 @@ createMailContext = (sender, message, user, recipientID, subject, done) ->
|
|||
content = """
|
||||
#{message}
|
||||
|
||||
#{user.get('name') or 'Anonymous'} - Level #{level}#{if premium then ' - Subscriber' else ''} - #{user._id}
|
||||
--
|
||||
<a href='http://codecombat.com/user/#{user.get('slug') or user.get('_id')}'>#{user.get('name') or 'Anonymous'}</a> - Level #{level}#{if premium then ' - Subscriber' else ''}
|
||||
"""
|
||||
|
||||
context =
|
||||
|
@ -39,8 +43,31 @@ createMailContext = (sender, message, user, recipientID, subject, done) ->
|
|||
if err
|
||||
log.error "Error looking up recipient to email from #{recipientID}: #{err}" if err
|
||||
else
|
||||
context.bcc = [context.to, sender]
|
||||
context.to = document.get('email')
|
||||
context.recipient.bcc = [context.recipient.address, sender]
|
||||
context.recipient.address = document.get('email')
|
||||
context.email_data.content = message
|
||||
done context
|
||||
else
|
||||
done context
|
||||
async.waterfall [
|
||||
fetchRecentSessions.bind undefined, user, context
|
||||
# Can add other data-grabbing stuff here if we want.
|
||||
# TODO: grab platform/browser/browser version/screen size from client
|
||||
# TODO: try automatically including Surface screenshot if opening contact form from level?
|
||||
], (err, results) ->
|
||||
console.error "Error getting contact message context for #{sender}: #{err}" if err
|
||||
done context
|
||||
|
||||
fetchRecentSessions = (user, context, callback) ->
|
||||
query = creator: user.get('_id') + ''
|
||||
projection = levelID: 1, levelName: 1, changed: 1, team: 1, codeLanguage: 1, 'state.complete': 1, playtime: 1
|
||||
sort = changed: -1
|
||||
LevelSession.find(query).select(projection).sort(sort).limit(3).lean().exec (err, sessions) ->
|
||||
return callback err if err
|
||||
console.log 'found', sessions.length, 'sessions'
|
||||
for s in sessions
|
||||
if s.playtime < 120 then playtime = "#{s.playtime}s played"
|
||||
else if s.playtime < 7200 then playtime = "#{Math.round(s.playtime / 60)}m played"
|
||||
else playtime = "#{Math.round(s.playtime / 3600)}h played"
|
||||
ago = moment(s.changed).fromNow()
|
||||
context.email_data.content += "\n<a href='http://codecombat.com/play/level/#{s.levelID}?session=#{s._id}&team=#{s.team or 'humans'}&dev=true'>#{s.levelName}#{if s.team is 'ogres' then ' ' + s.team else ''}</a>#{if s.state?.complete then ' complete ' else ''}- #{s.codeLanguage}, #{playtime}, #{ago}"
|
||||
callback null
|
||||
|
|
Reference in a new issue