- Mail profile submission info and approval link
- Stuff
This commit is contained in:
@@ -1,9 +1,21 @@
|
|||||||
const EventEmitter = require('events');
|
|
||||||
const Images = require('../modules/images');
|
const Images = require('../modules/images');
|
||||||
const Logger = require('../modules/logger');
|
const Logger = require('../modules/logger');
|
||||||
|
const Mailer = require('../modules/mailer');
|
||||||
const Messages = require('../models/message');
|
const Messages = require('../models/message');
|
||||||
const Mongoose = require('mongoose');
|
const Mongoose = require('mongoose');
|
||||||
|
|
||||||
|
function outputMessagesAsText (messages, asHtml = false) {
|
||||||
|
var output = '';
|
||||||
|
for (let i = 0; i < messages.length; i++) {
|
||||||
|
if (asHtml) {
|
||||||
|
output += (!message.isUser ? '<p><b>Question: ' : '<b>Response</b><br>') + message.text + (!message.isUser ? '</b>' : '') + '</p>';
|
||||||
|
} else {
|
||||||
|
output += (!message.isUser ? 'Question: ' : 'Response\r\r') + message.text + '\r\r\r\r';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return output;
|
||||||
|
}
|
||||||
|
|
||||||
const ProfileSchema = new Mongoose.Schema({
|
const ProfileSchema = new Mongoose.Schema({
|
||||||
"order" : { type: Number, default: 0 },
|
"order" : { type: Number, default: 0 },
|
||||||
"details": {
|
"details": {
|
||||||
@@ -333,9 +345,7 @@ module.exports = {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|
||||||
promise.then((result) => {
|
promise.then((result) => {
|
||||||
@@ -483,28 +493,46 @@ module.exports = {
|
|||||||
},
|
},
|
||||||
|
|
||||||
processSubmission: (e, profile) => {
|
processSubmission: (e, profile) => {
|
||||||
var ProfileEvents = new EventEmitter();
|
var profileModel = {};
|
||||||
var temp = JSON.parse(profile.profile);
|
profileModel.details = profile.details;
|
||||||
var insert = {
|
profileModel.details.pic = { detail: profile.image };
|
||||||
details: temp.details,
|
profileModel.messages = profile.messages;
|
||||||
messages: temp.messages,
|
profileModel.submitted = true;
|
||||||
submitted: true,
|
profileModel.approved = false;
|
||||||
approved: false
|
|
||||||
};
|
|
||||||
|
|
||||||
insert.details.pic = { detail: profile.image };
|
const promise = new Promise((resolve, reject) => {
|
||||||
|
var profileInstance = new ProfileModel(profileData);
|
||||||
|
|
||||||
ProfileEvents.once('create', (err, result) => {
|
profileInstance.save((err, result) => {
|
||||||
if (err) {
|
if (err) {
|
||||||
e.emit('processSubmission', err, null);
|
reject({ success: false, message: 'Failed to save user submission.', err: err });
|
||||||
}
|
}
|
||||||
|
|
||||||
if (result) {
|
if (result) {
|
||||||
e.emit('processSubmission', null, result);
|
let approveProfileLink = 'https://api.fitz.guru/urnings/profiles/approve/' + encodeURIComponent(result._id);
|
||||||
|
|
||||||
|
// setup email data with unicode symbols
|
||||||
|
let mail = {
|
||||||
|
from: '"Urnings|looking App" <system@appsby.fitz.guru>',
|
||||||
|
to: 'mike@fitz.guru',
|
||||||
|
subject: 'New Profile Submission',
|
||||||
|
text: 'New Profile Submission\r\r\r\rName: ' + result.details.name + '(' + result.details.email + ')\r\rLocation: ' + result.details.location + '\r\rAbout: ' + result.details.about + '\r\rImage: ' + result.details.pic.detail + '\r\rMessages:\r' + outputMessagesAsText(result.messages) + '\r\r\r\rTo approve this profile: ' + approveProfileLink + '\r\r',
|
||||||
|
html: '<h2>New Profile Submission<h2><p><b>Name:</b> ' + result.details.name + '(<a href="mailto:' + result.details.email + '">' + result.details.email + '</a>)<br><b>Location:</b> ' + result.details.location + '<p><p>About:<br>' + result.details.about + '</p><p><b>Image:</b><br><img src="' + result.details.pic.detail + '"></p><div>Messages:<br>' + outputMessagesAsText(result.messages, true) + '</div><p>To approve this profile: <a href="' + approveProfileLink + '">click here</a>.</p>',
|
||||||
|
};
|
||||||
|
|
||||||
|
Mailer.send(mail, (err, result) => {
|
||||||
|
resolve({ success: true, mailer: { err: err, result: result } });
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
module.exports.create(ProfileEvents, insert);
|
promise.then((result) => {
|
||||||
|
e.emit('processSubmission', null, result);
|
||||||
|
})
|
||||||
|
.catch((err) => {
|
||||||
|
e.emit('processSubmission', err, null);
|
||||||
|
});
|
||||||
},
|
},
|
||||||
|
|
||||||
update: (e, profileId, profile) => {
|
update: (e, profileId, profile) => {
|
||||||
|
|||||||
32
modules/mailer.js
Normal file
32
modules/mailer.js
Normal file
@@ -0,0 +1,32 @@
|
|||||||
|
const Mailer = require('nodemailer');
|
||||||
|
|
||||||
|
function sendMail (options, callback) {
|
||||||
|
// create reusable transporter object using the default SMTP transport
|
||||||
|
let transporter = Mailer.createTransport({
|
||||||
|
host: 'mail.fitz.guru',
|
||||||
|
port: 587,
|
||||||
|
secure: false, // secure:true for port 465, secure:false for port 587
|
||||||
|
auth: {
|
||||||
|
user: 'support@fitz.guru',
|
||||||
|
pass: 'NotSt@ff3d!'
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
callback = typeof callback === 'function' ? callback : (error, info) => {
|
||||||
|
if (error) {
|
||||||
|
return console.error(error);
|
||||||
|
}
|
||||||
|
|
||||||
|
console.debug('Message %s sent: %s', info.messageId, info.response);
|
||||||
|
};
|
||||||
|
|
||||||
|
// send mail with defined transport object
|
||||||
|
transporter.sendMail(options, callback);
|
||||||
|
}
|
||||||
|
|
||||||
|
module.exports = {
|
||||||
|
|
||||||
|
send: (email, callback) => {
|
||||||
|
sendMail(mail, callback);
|
||||||
|
}
|
||||||
|
};
|
||||||
Reference in New Issue
Block a user