Merge branch 'master' of github.com:Mailtrain-org/mailtrain
Conflicts: languages/de_DE.po
This commit is contained in:
commit
11990d62b2
10 changed files with 743 additions and 362 deletions
|
@ -103,6 +103,12 @@ db=5
|
||||||
enabled=false
|
enabled=false
|
||||||
port=2525
|
port=2525
|
||||||
host="0.0.0.0"
|
host="0.0.0.0"
|
||||||
|
# With DMARC, the Return-Path and From address must match the same domain.
|
||||||
|
# By default we get around this by using the VERP address in the Sender header,
|
||||||
|
# with the side effect that some email clients diplay an ugly "on behalf of" message.
|
||||||
|
# You can safely disable this Sender header if you're not using DMARC or your
|
||||||
|
# VERP hostname is in the same domain as the From address.
|
||||||
|
# disablesenderheader=true
|
||||||
|
|
||||||
[testserver]
|
[testserver]
|
||||||
# Starts a vanity server that redirects all mail to /dev/null
|
# Starts a vanity server that redirects all mail to /dev/null
|
||||||
|
|
Binary file not shown.
1018
languages/de_DE.po
1018
languages/de_DE.po
File diff suppressed because it is too large
Load diff
|
@ -6,7 +6,8 @@ let templates = require('../lib/models/templates');
|
||||||
let campaigns = require('../lib/models/campaigns');
|
let campaigns = require('../lib/models/campaigns');
|
||||||
|
|
||||||
module.exports = {
|
module.exports = {
|
||||||
getResource
|
getResource,
|
||||||
|
getMergeTagsForResource
|
||||||
};
|
};
|
||||||
|
|
||||||
function getResource(type, id, callback) {
|
function getResource(type, id, callback) {
|
||||||
|
@ -53,7 +54,7 @@ function getMergeTagsForResource(resource, callback) {
|
||||||
return callback(err.message || err);
|
return callback(err.message || err);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!resource.list) {
|
if (!Number(resource.list)) {
|
||||||
return callback(null, defaultMergeTags);
|
return callback(null, defaultMergeTags);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -62,7 +63,17 @@ function getMergeTagsForResource(resource, callback) {
|
||||||
return callback(err.message || err);
|
return callback(err.message || err);
|
||||||
}
|
}
|
||||||
|
|
||||||
callback(null, defaultMergeTags.concat(listMergeTags));
|
if (resource.type !== 2) {
|
||||||
|
return callback(null, defaultMergeTags.concat(listMergeTags));
|
||||||
|
}
|
||||||
|
|
||||||
|
helpers.getRSSMergeTags((err, rssMergeTags) => {
|
||||||
|
if (err) {
|
||||||
|
return callback(err.message || err);
|
||||||
|
}
|
||||||
|
|
||||||
|
callback(null, defaultMergeTags.concat(listMergeTags, rssMergeTags));
|
||||||
|
});
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
|
@ -50,7 +50,9 @@ module.exports.fetch = (url, callback) => {
|
||||||
date: item.date || item.pubdate || item.pubDate || new Date(),
|
date: item.date || item.pubdate || item.pubDate || new Date(),
|
||||||
guid: item.guid || item.link,
|
guid: item.guid || item.link,
|
||||||
link: item.link,
|
link: item.link,
|
||||||
content: item.description || item.summary
|
content: item.description || item.summary,
|
||||||
|
summary: item.summary || item.description,
|
||||||
|
image_url: item.image.url
|
||||||
};
|
};
|
||||||
entries.push(entry);
|
entries.push(entry);
|
||||||
}
|
}
|
||||||
|
|
|
@ -16,6 +16,7 @@ let hbs = require('hbs');
|
||||||
|
|
||||||
module.exports = {
|
module.exports = {
|
||||||
getDefaultMergeTags,
|
getDefaultMergeTags,
|
||||||
|
getRSSMergeTags,
|
||||||
getListMergeTags,
|
getListMergeTags,
|
||||||
captureFlashMessages,
|
captureFlashMessages,
|
||||||
injectCustomFormData,
|
injectCustomFormData,
|
||||||
|
@ -60,6 +61,32 @@ function getDefaultMergeTags(callback) {
|
||||||
}]);
|
}]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function getRSSMergeTags(callback) {
|
||||||
|
// Using a callback for the sake of future-proofness
|
||||||
|
callback(null, [{
|
||||||
|
key: 'RSS_ENTRY',
|
||||||
|
value: _('content from an RSS entry')
|
||||||
|
}, {
|
||||||
|
key: 'RSS_ENTRY_TITLE',
|
||||||
|
value: _('RSS entry title')
|
||||||
|
}, {
|
||||||
|
key: 'RSS_ENTRY_DATE',
|
||||||
|
value: _('RSS entry date')
|
||||||
|
}, {
|
||||||
|
key: 'RSS_ENTRY_LINK',
|
||||||
|
value: _('RSS entry link')
|
||||||
|
}, {
|
||||||
|
key: 'RSS_ENTRY_CONTENT',
|
||||||
|
value: _('content from an RSS entry')
|
||||||
|
}, {
|
||||||
|
key: 'RSS_ENTRY_SUMMARY',
|
||||||
|
value: _('RSS entry summary')
|
||||||
|
}, {
|
||||||
|
key: 'RSS_ENTRY_IMAGE_URL',
|
||||||
|
value: _('RSS entry image URL')
|
||||||
|
}]);
|
||||||
|
}
|
||||||
|
|
||||||
function getListMergeTags(listId, callback) {
|
function getListMergeTags(listId, callback) {
|
||||||
lists.get(listId, (err, list) => {
|
lists.get(listId, (err, list) => {
|
||||||
if (err) {
|
if (err) {
|
||||||
|
|
|
@ -9,7 +9,7 @@ let campaigns = require('../lib/models/campaigns');
|
||||||
let subscriptions = require('../lib/models/subscriptions');
|
let subscriptions = require('../lib/models/subscriptions');
|
||||||
let settings = require('../lib/models/settings');
|
let settings = require('../lib/models/settings');
|
||||||
let tools = require('../lib/tools');
|
let tools = require('../lib/tools');
|
||||||
let helpers = require('../lib/helpers');
|
let editorHelpers = require('../lib/editor-helpers.js');
|
||||||
let striptags = require('striptags');
|
let striptags = require('striptags');
|
||||||
let passport = require('../lib/passport');
|
let passport = require('../lib/passport');
|
||||||
let htmlescape = require('escape-html');
|
let htmlescape = require('escape-html');
|
||||||
|
@ -186,25 +186,14 @@ router.get('/edit/:id', passport.csrfProtection, (req, res, next) => {
|
||||||
view = 'campaigns/edit';
|
view = 'campaigns/edit';
|
||||||
}
|
}
|
||||||
|
|
||||||
helpers.getDefaultMergeTags((err, defaultMergeTags) => {
|
editorHelpers.getMergeTagsForResource(campaign, (err, mergeTags) => {
|
||||||
if (err) {
|
if (err) {
|
||||||
req.flash('danger', err.message || err);
|
req.flash('danger', err.message || err);
|
||||||
return res.redirect('/');
|
return res.redirect('/');
|
||||||
}
|
}
|
||||||
|
|
||||||
helpers.getListMergeTags(campaign.list, (err, listMergeTags) => {
|
campaign.mergeTags = mergeTags;
|
||||||
if (err) {
|
res.render(view, campaign);
|
||||||
req.flash('danger', err.message || err);
|
|
||||||
return res.redirect('/');
|
|
||||||
}
|
|
||||||
|
|
||||||
campaign.mergeTags = defaultMergeTags.concat(listMergeTags);
|
|
||||||
campaign.type === 2 && campaign.mergeTags.push({
|
|
||||||
key: 'RSS_ENTRY',
|
|
||||||
value: _('content from an RSS entry')
|
|
||||||
});
|
|
||||||
res.render(view, campaign);
|
|
||||||
});
|
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
|
@ -132,8 +132,11 @@ function checkEntries(parent, entries, callback) {
|
||||||
let entryId = result.insertId;
|
let entryId = result.insertId;
|
||||||
let html = (parent.html || '').toString().trim();
|
let html = (parent.html || '').toString().trim();
|
||||||
|
|
||||||
if (/\[RSS_ENTRY\]/i.test(html)) {
|
if (/\[RSS_ENTRY[\w]*\]/i.test(html)) {
|
||||||
html = html.replace(/\[RSS_ENTRY\]/, entry.content);
|
html = html.replace(/\[RSS_ENTRY\]/, entry.content); //for backward compatibility
|
||||||
|
Object.keys(entry).forEach(key => {
|
||||||
|
html = html.replace('\[RSS_ENTRY_'+key.toUpperCase()+'\]', entry[key])
|
||||||
|
});
|
||||||
} else {
|
} else {
|
||||||
html = entry.content + html;
|
html = entry.content + html;
|
||||||
}
|
}
|
||||||
|
|
|
@ -318,6 +318,7 @@ function formatMessage(message, callback) {
|
||||||
}
|
}
|
||||||
|
|
||||||
let useVerp = config.verp.enabled && configItems.verpUse && configItems.verpHostname;
|
let useVerp = config.verp.enabled && configItems.verpUse && configItems.verpHostname;
|
||||||
|
let useVerpSenderHeader = useVerp && config.verp.disablesenderheader !== true;
|
||||||
fields.list(list.id, (err, fieldList) => {
|
fields.list(list.id, (err, fieldList) => {
|
||||||
if (err) {
|
if (err) {
|
||||||
return callback(err);
|
return callback(err);
|
||||||
|
@ -389,7 +390,7 @@ function formatMessage(message, callback) {
|
||||||
name: [].concat(message.subscription.firstName || []).concat(message.subscription.lastName || []).join(' '),
|
name: [].concat(message.subscription.firstName || []).concat(message.subscription.lastName || []).join(' '),
|
||||||
address: message.subscription.email
|
address: message.subscription.email
|
||||||
},
|
},
|
||||||
sender: useVerp ? campaignAddress + '@' + configItems.verpHostname : false,
|
sender: useVerpSenderHeader ? campaignAddress + '@' + configItems.verpHostname : false,
|
||||||
|
|
||||||
envelope: useVerp ? {
|
envelope: useVerp ? {
|
||||||
from: campaignAddress + '@' + configItems.verpHostname,
|
from: campaignAddress + '@' + configItems.verpHostname,
|
||||||
|
|
|
@ -71,8 +71,6 @@
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
{{> merge_tag_reference}}
|
|
||||||
|
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<label for="template" class="col-sm-2 control-label">{{#translate}}RSS Feed Url{{/translate}}</label>
|
<label for="template" class="col-sm-2 control-label">{{#translate}}RSS Feed Url{{/translate}}</label>
|
||||||
<div class="col-sm-10">
|
<div class="col-sm-10">
|
||||||
|
@ -81,6 +79,8 @@
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
{{> merge_tag_reference}}
|
||||||
|
|
||||||
{{#if disableWysiwyg}}
|
{{#if disableWysiwyg}}
|
||||||
{{> codeeditor}}
|
{{> codeeditor}}
|
||||||
{{else}}
|
{{else}}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue