salix/services/mailer/Application/template.js

49 lines
1.8 KiB
JavaScript

var fs = require('fs');
var mustache = require('mustache');
var database = require('./database.js');
var language = require('./language.js');
var path = require('path');
var Template = {
/**
* Obtiene la plantilla
* @param {String} templateName - Nombre de la plantilla
* @param {Object} langCode - Código del idioma
* @param {Object} params - Datos a reemplazar.
* @param {Object} callback - Callback
*/
getTemplate: function(templateName, langCode, params, callback) {
database.pool.query('SELECT name, attachmentPath FROM vn.mailTemplates WHERE name = ?', [templateName], function(error, rs) {
// Comprobamos que exista la plantilla
if (rs.length == 0)
throw new Error('La plantilla ' + templateName + ' no existe');
var langParams = language.load(templateName, langCode);
params = Object.assign({}, langParams, params);
var templatePath = path.join(__dirname, 'Template', `${rs[0].name}.html`);
if (!fs.existsSync(templatePath))
throw new Error('No se ha podido cargar la plantilla ' + templateName + '.html');
Template.render(templatePath, params, function(tplBody) {
callback({subject: params.subject, body: tplBody});
});
});
},
/**
* Renderiza las plantillas
* @param {String} path - Ruta de la plantilla
* @param {Object} params - Listado de parámetros a remplazar
* @param {Object} callback - Callback
*/
render: function(path, params, callback) {
fs.readFile(path, 'utf8', function(error, body) {
mustache.parse(body);
callback(mustache.render(body, params));
});
}
};
module.exports = Template;