Skip to content
This repository was archived by the owner on Dec 14, 2023. It is now read-only.

Commit bf0d95e

Browse files
Moved email subject translation to back-end (#192)
1 parent b3c0e8a commit bf0d95e

File tree

7 files changed

+3095
-8
lines changed

7 files changed

+3095
-8
lines changed

.gitignore

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,3 +29,9 @@ node_modules
2929

3030
.idea
3131
*~
32+
33+
# i18n dictionaries from crowdin, except en_US
34+
web/locale/*
35+
!web/locale/en_US
36+
email-templates/*
37+
!email-templates/*-en_US

crowdin.yaml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,3 +50,8 @@ files:
5050
dest: '/invite-parent-guardian.text.txt'
5151
translation: '/email-templates/invite-parent-guardian-%locale_with_underscore%/%file_name%.ejs'
5252
type: 'txt'
53+
54+
-
55+
source: '/web/locale/en_US/messages.po'
56+
dest: '/messages.po'
57+
translation: '/web/locale/%locale_with_underscore%/%original_file_name%'

email-notifications.js

Lines changed: 21 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,26 +1,44 @@
11
'use strict';
22

3+
var fs = require('fs');
4+
var path = require('path');
5+
var I18NHelper = require('cp-i18n-lib');
6+
var i18nHelper = new I18NHelper({
7+
poFilePath: path.resolve('web/locale/'),
8+
poFileName: 'messages.po',
9+
domain: 'coder-dojo-platform'
10+
});
11+
312
module.exports = function (options) {
413
var seneca = this;
514
var plugin = 'email-notifications';
6-
var fs = require('fs');
7-
var path = require('path');
15+
816
var so = seneca.options();
917

1018
options = seneca.util.deepextend({}, so[plugin], options);
1119

1220
seneca.add({role: plugin, cmd: 'send'}, send_notification);
1321

1422
function send_notification (args, done) {
23+
var subject = args.subject;
24+
var subjectVariables = args.subjectVariables || [];
25+
var subjectTranslation;
1526
if (options.sendemail && options.email) {
1627
var emailCode = args.code + args.locality;
1728
if (!fs.existsSync(path.join(__dirname, '/email-templates/', emailCode))) emailCode = args.code + 'en_US';
29+
if (!args.to) return done(null, {ok: false, why: 'No recipient set.'});
30+
31+
subjectTranslation = i18nHelper.getClosestTranslation(args.locality, subject);
32+
if (subjectTranslation === null) {
33+
return done(null, {ok: false, why: 'Invalid email subject.'});
34+
}
35+
1836
seneca.act({
1937
role: 'mail', cmd: 'send',
2038
from: options.sendFrom,
2139
code: emailCode,
2240
to: args.to,
23-
subject: args.subject,
41+
subject: subjectTranslation.fetch(subjectVariables),
2442
content: args.content
2543
}, done);
2644
} else {

package.json

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,10 @@
1818
"license": "ISC",
1919
"dependencies": {
2020
"async": "0.9.0",
21+
"cp-i18n-lib": "git+https://github.com/CoderDojo/cp-i18n-lib.git",
2122
"cuid": "1.2.5",
2223
"ejs": "1.0.0",
24+
"jed": "1.1.0",
2325
"js-yaml": "3.2.7",
2426
"le_node": "1.1.0",
2527
"lodash": "3.7.0",
@@ -29,6 +31,7 @@
2931
"optimist": "0.6.1",
3032
"pg": "4.4.0",
3133
"pg-large-object": "0.0.1",
34+
"po2json": "0.4.2",
3235
"postgrator": "2.2.0",
3336
"request": "2.58.0",
3437
"seneca": "0.7.2",

profiles.js

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -638,7 +638,7 @@ module.exports = function (options) {
638638
var invitedParentEmail = data.invitedParentEmail;
639639
var childId = data.childId;
640640
var emailSubject = data.emailSubject;
641-
var zenHostname = args.zenHostname;
641+
var zenHostname = process.env.HOSTNAME || '127.0.0.1:8000';
642642

643643
var childQuery = {
644644
userId: childId
@@ -795,7 +795,7 @@ module.exports = function (options) {
795795
}
796796

797797
function cmd_change_avatar (args, done) {
798-
var hostname = args.zenHostname;
798+
var hostname = process.env.HOSTNAME || '127.0.0.1:8000';
799799
var file = args.file;
800800

801801
if (!_.contains(args.fileType, 'image')) return done(null, {ok: false, why: 'Avatar upload: file must be an image.'});
@@ -1100,7 +1100,7 @@ module.exports = function (options) {
11001100
}
11011101

11021102
function emailNinja (parentProfile, done) {
1103-
var zenHostname = args.zenHostname;
1103+
var zenHostname = process.env.HOSTNAME || '127.0.0.1:8000';
11041104
var content = {
11051105
ninjaName: ninjaProfile.name,
11061106
parentName: parentProfile.name,

users.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,7 @@ module.exports = function (options) {
8080
var locality = args.locality || 'en_US';
8181
var emailCode = 'auth-register-';
8282
var emailSubject = args.emailSubject;
83-
var zenHostname = args.zenHostname;
83+
var zenHostname = process.env.HOSTNAME || '127.0.0.1:8000';
8484
delete args.isChampion;
8585

8686
if (args.initUserType.name === 'attendee-u13') {
@@ -328,7 +328,7 @@ module.exports = function (options) {
328328
var locality = args.locality || 'en_US';
329329
var emailCode = 'auth-create-reset-';
330330
var emailSubject = args.emailSubject;
331-
var zenHostname = args.zenHostname || '127.0.0.1:8000';
331+
var zenHostname = process.env.HOSTNAME || '127.0.0.1:8000';
332332

333333
args = {};
334334
if (void 0 !== nick) args.nick = nick;

0 commit comments

Comments
 (0)