mirror of
https://github.com/HackPlan/RootPanel.git
synced 2026-01-12 22:27:09 +08:00
工单邮件通知
This commit is contained in:
@@ -47,6 +47,15 @@ module.exports =
|
||||
|
||||
redis_password: 'password'
|
||||
|
||||
email:
|
||||
send_from: 'robot@rpvhost.net'
|
||||
|
||||
account:
|
||||
service: 'Postmark'
|
||||
auth:
|
||||
user: 'postmark-api-token'
|
||||
pass: 'postmark-api-token'
|
||||
|
||||
bitcoin:
|
||||
coinbase_api_key: null
|
||||
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
crypto = require 'crypto'
|
||||
nodemailer = require 'nodemailer'
|
||||
|
||||
config = require '../../config'
|
||||
bitcoin = require '../bitcoin'
|
||||
@@ -196,3 +197,15 @@ exports.calcResourcesLimit = (plans) ->
|
||||
limit[k] += v
|
||||
|
||||
return limit
|
||||
|
||||
exports.sendEmail = (account, title, content) ->
|
||||
mailer = nodemailer.createTransport 'SMTP', config.email.account
|
||||
|
||||
mail =
|
||||
from: config.email.send_from
|
||||
to: account.email
|
||||
subject: title
|
||||
html: content
|
||||
|
||||
mailer.sendMail mail, (err) ->
|
||||
throw err if err
|
||||
|
||||
@@ -1,5 +1,7 @@
|
||||
markdown = require('markdown').markdown
|
||||
|
||||
mAccount = require './account'
|
||||
|
||||
module.exports = exports = app.db.buildModel 'tickets'
|
||||
|
||||
sample =
|
||||
@@ -73,8 +75,18 @@ exports.addMember = (ticket, account, callback) ->
|
||||
exports.update _id: ticket._id,
|
||||
$push:
|
||||
members: account._id
|
||||
updated_at: new Date()
|
||||
, callback
|
||||
$set:
|
||||
updated_at: new Date()
|
||||
, (err) ->
|
||||
throw err if err
|
||||
callback()
|
||||
|
||||
exports.getMember = (ticket, account) ->
|
||||
return _.find(ticket.members, (member) -> member.equals(account._id))
|
||||
|
||||
exports.sendMailToAdmins = (title, content) ->
|
||||
mAccount.find
|
||||
group: 'root'
|
||||
.toArray (err, accounts) ->
|
||||
for account in accounts
|
||||
mAccount.sendEmail account, title, content
|
||||
|
||||
@@ -55,10 +55,11 @@ exports.post '/create', requireAuthenticate, (req, res) ->
|
||||
unless /^.+$/.test req.body.title
|
||||
return res.error 'invalid_title'
|
||||
|
||||
createTicket = (members, status) ->
|
||||
createTicket = (members, status, callback) ->
|
||||
mTicket.createTicket req.account, req.body.title, req.body.content, members, status, {}, (err, ticket) ->
|
||||
return res.json
|
||||
res.json
|
||||
id: ticket._id
|
||||
callback ticket
|
||||
|
||||
if mAccount.inGroup req.account, 'root'
|
||||
tasks = []
|
||||
@@ -81,10 +82,11 @@ exports.post '/create', requireAuthenticate, (req, res) ->
|
||||
unless _.find(result, (item) -> item._id == req.account._id)
|
||||
result.push req.account
|
||||
|
||||
createTicket result, 'open'
|
||||
createTicket result, 'open', ->
|
||||
|
||||
else
|
||||
createTicket [req.account], 'pending'
|
||||
createTicket [req.account], 'pending', (ticket) ->
|
||||
mTicket.sendMailToAdmins "TK Create | #{req.account.username} | #{req.body.title}", "#{req.body.content}\n<br /><br />\n<a href='#{config.web.url}/ticket/view/?id=#{ticket._id}'>#{ticket._id}</a>"
|
||||
|
||||
exports.post '/reply', requireAuthenticate, (req, res) ->
|
||||
mTicket.findId req.body.id, (errr, ticket) ->
|
||||
@@ -96,9 +98,21 @@ exports.post '/reply', requireAuthenticate, (req, res) ->
|
||||
return res.error 'forbidden'
|
||||
|
||||
status = if mAccount.inGroup(req.account, 'root') then 'open' else 'pending'
|
||||
mTicket.createReply ticket, req.account, req.body.content, status, (err, reply) ->
|
||||
return res.json
|
||||
id: reply._id
|
||||
|
||||
async.each ticket.members, (member_id, callback) ->
|
||||
if member_id.toString() == req.account._id.toString()
|
||||
return callback()
|
||||
|
||||
mAccount.findOne
|
||||
_id: member_id
|
||||
, (err, account) ->
|
||||
mAccount.sendEmail account, "TK Reply | #{req.account.username} | #{ticket.title}", "#{req.body.content}\n<br /><br />\n<a href='#{config.web.url}/ticket/view/?id=#{ticket._id}'>#{ticket._id}</a>"
|
||||
callback()
|
||||
|
||||
, ->
|
||||
mTicket.createReply ticket, req.account, req.body.content, status, (err, reply) ->
|
||||
return res.json
|
||||
id: reply._id
|
||||
|
||||
exports.post '/list', requireAuthenticate, (req, res) ->
|
||||
mTicket.find do ->
|
||||
|
||||
@@ -3,7 +3,7 @@ $ ->
|
||||
$.post '/ticket/create/', JSON.stringify
|
||||
type: $('#type').val()
|
||||
title: $('#title').val()
|
||||
content: $('#content').val()
|
||||
content: $(':input[name=content]').val()
|
||||
.fail (jqXHR) ->
|
||||
if jqXHR.responseJSON?.error
|
||||
alert jqXHR.responseJSON.error
|
||||
|
||||
@@ -10,7 +10,7 @@ block main
|
||||
.form-group.padding
|
||||
input#title.form-control(type='text', name='title', placeholder= t('ticket.title'),required)
|
||||
.form-group.padding
|
||||
textarea#content.form-control(name='content', rows='15', required)
|
||||
textarea.form-control(name='content', rows='15', required)
|
||||
.form-group.padding
|
||||
button.btn.btn-lg.btn-primary.action-create(type='button')= t('ticket.create')
|
||||
|
||||
|
||||
@@ -47,6 +47,7 @@
|
||||
"moment": "*",
|
||||
"request": "*",
|
||||
"mongo-min": "*",
|
||||
"redis": "*"
|
||||
"redis": "*",
|
||||
"nodemailer": "~0.7.0"
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user