diff --git a/server/lib/campaign-sender.js b/server/lib/campaign-sender.js index a9771db9..ba3b6067 100644 --- a/server/lib/campaign-sender.js +++ b/server/lib/campaign-sender.js @@ -262,7 +262,8 @@ class CampaignSender { tags['RSS_ENTRY_LINK'] = rssEntry.link; tags['RSS_ENTRY_CONTENT'] = rssEntry.content; tags['RSS_ENTRY_SUMMARY'] = rssEntry.summary; - tags['RSS_ENTRY_IMAGE_URL'] = rssEntry.image_url; + tags['RSS_ENTRY_IMAGE_URL'] = rssEntry.imageUrl; + tags['RSS_ENTRY_CUSTOM_TAGS'] = rssEntry.customTags; } return tags; @@ -311,6 +312,7 @@ class CampaignSender { const sendConfiguration = this.sendConfiguration; const {html, text, attachments} = await this._getMessage(campaign, list, subscriptionGrouped, mergeTags, true); + console.log(html); const campaignAddress = [campaign.cid, list.cid, subscriptionGrouped.cid].join('.'); diff --git a/server/lib/tools.js b/server/lib/tools.js index da64b08a..f1cd68dc 100644 --- a/server/lib/tools.js +++ b/server/lib/tools.js @@ -150,23 +150,31 @@ function validateEmailGetMessage(result, address, language) { function formatMessage(campaign, list, subscription, mergeTags, message, isHTML) { const links = getMessageLinks(campaign, list, subscription); - const getValue = key => { - key = (key || '').toString().toUpperCase().trim(); - if (links.hasOwnProperty(key)) { - return links[key]; + const getValue = fullKey => { + const keys = (fullKey || '').split('.'); + + if (links.hasOwnProperty(keys[0])) { + return links[keys[0]]; } - if (mergeTags.hasOwnProperty(key)) { - const value = (mergeTags[key] || '').toString(); - const containsHTML = /<[a-z][\s\S]*>/.test(value); - return isHTML ? he.encode((containsHTML ? value : value.replace(/(?:\r\n|\r|\n)/g, '
')), { - useNamedReferences: true, - allowUnsafeSymbols: true - }) : (containsHTML ? htmlToText.fromString(value) : value); + + let value = mergeTags; + while (keys.length > 0) { + let key = keys.shift(); + if (value.hasOwnProperty(key)) { + value = value[key]; + } else { + return false; + } } - return false; + + const containsHTML = /<[a-z][\s\S]*>/.test(value); + return isHTML ? he.encode((containsHTML ? value : value.replace(/(?:\r\n|\r|\n)/g, '
')), { + useNamedReferences: true, + allowUnsafeSymbols: true + }) : (containsHTML ? htmlToText.fromString(value) : value); }; - return message.replace(/\[([a-z0-9_]+)(?:\/([^\]]+))?\]/ig, (match, identifier, fallback) => { + return message.replace(/\[([a-z0-9_.]+)(?:\/([^\]]+))?\]/ig, (match, identifier, fallback) => { let value = getValue(identifier); if (value === false) { return match; diff --git a/server/models/fields.js b/server/models/fields.js index d9388909..9b461cd6 100644 --- a/server/models/fields.js +++ b/server/models/fields.js @@ -186,7 +186,7 @@ fieldTypes['radio-enum'] = { cardinality: Cardinality.SINGLE, getHbsType: field => 'typeRadioEnum', render: (field, value) => { - const fld = field.groupedOptions[value]; + const fld = field.settings.options[value]; return fld ? fld.name : ''; } }; @@ -203,7 +203,7 @@ fieldTypes['dropdown-enum'] = { cardinality: Cardinality.SINGLE, getHbsType: field => 'typeDropdownEnum', render: (field, value) => { - const fld = field.groupedOptions[value]; + const fld = field.settings.options[value]; return fld ? fld.name : ''; } }; diff --git a/server/package-lock.json b/server/package-lock.json index 66b722e5..1546911a 100644 --- a/server/package-lock.json +++ b/server/package-lock.json @@ -863,7 +863,7 @@ "dependencies": { "iconv-lite": { "version": "0.4.15", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.15.tgz", + "resolved": "http://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.15.tgz", "integrity": "sha1-/iZaIYrGpXz+hUkn6dBMGYJe3es=" }, "libmime": { diff --git a/server/services/feedcheck.js b/server/services/feedcheck.js index 537fbb28..fe26326a 100644 --- a/server/services/feedcheck.js +++ b/server/services/feedcheck.js @@ -19,7 +19,7 @@ let running = false; async function fetch(url) { const httpOptions = { - uri: 'http://feeds.feedwrench.com/JavaScriptJabber.rss', + uri: url, headers: { 'user-agent': 'Mailtrain', 'accept': 'text/html,application/xhtml+xml' @@ -37,8 +37,13 @@ async function fetch(url) { link: item.link, content: item.description || item.summary, summary: item.summary || item.description, - image_url: item.image.url + imageUrl: item.image.url, }; + + if ('mt:entries-json' in item) { + entry.customTags = JSON.parse(item['mt:entries-json']['#']) + } + entries.push(entry); } @@ -140,7 +145,7 @@ async function run() { rssCampaign.data.checkStatus = checkStatus; await knex('campaigns').where('id', rssCampaign.id).update({ - last_check: Date.now(), + last_check: new Date(), data: JSON.stringify(rssCampaign.data) }); @@ -148,7 +153,7 @@ async function run() { log.error('Feed', err.message); rssCampaign.data.checkStatus = err.message; await knex('campaigns').where('id', rssCampaign.id).update({ - last_check: Date.now(), + last_check: new Date(), data: JSON.stringify(rssCampaign.data) }); }