From 1547e887c3492a6adb55256673fa30a18609cae0 Mon Sep 17 00:00:00 2001 From: vladimir Date: Fri, 31 Mar 2017 11:20:43 +0200 Subject: [PATCH] Add option to disable email cheking for imported CSV --- lib/models/subscriptions.js | 6 +-- meta.json | 2 +- routes/lists.js | 2 +- services/importer.js | 76 ++++++++++++++++------------- setup/sql/upgrade-00024.sql | 11 +++++ views/lists/subscription/import.hbs | 16 ++++++ 6 files changed, 73 insertions(+), 40 deletions(-) create mode 100644 setup/sql/upgrade-00024.sql diff --git a/lib/models/subscriptions.js b/lib/models/subscriptions.js index 5af7ad7c..33641063 100644 --- a/lib/models/subscriptions.js +++ b/lib/models/subscriptions.js @@ -982,7 +982,7 @@ module.exports.delete = (listId, cid, callback) => { }); }; -module.exports.createImport = (listId, type, path, size, delimiter, mapping, callback) => { +module.exports.createImport = (listId, type, path, size, delimiter, emailcheck, mapping, callback) => { listId = Number(listId) || 0; type = Number(type) || 1; @@ -994,8 +994,8 @@ module.exports.createImport = (listId, type, path, size, delimiter, mapping, cal if (err) { return callback(err); } - let query = 'INSERT INTO importer (`list`, `type`, `path`, `size`, `delimiter`, `mapping`) VALUES(?,?,?,?,?,?)'; - connection.query(query, [listId, type, path, size, delimiter, JSON.stringify(mapping)], (err, result) => { + let query = 'INSERT INTO importer (`list`, `type`, `path`, `size`, `delimiter`, `emailcheck`, `mapping`) VALUES(?,?,?,?,?,?,?)'; + connection.query(query, [listId, type, path, size, delimiter, emailcheck, JSON.stringify(mapping)], (err, result) => { connection.release(); if (err) { return callback(err); diff --git a/meta.json b/meta.json index 1c21e992..58d89ef6 100644 --- a/meta.json +++ b/meta.json @@ -1,3 +1,3 @@ { - "schemaVersion": 23 + "schemaVersion": 24 } diff --git a/routes/lists.js b/routes/lists.js index b0b0fffd..c82b7c2b 100644 --- a/routes/lists.js +++ b/routes/lists.js @@ -555,7 +555,7 @@ router.post('/subscription/import', uploads.single('listimport'), passport.parse return res.redirect('/lists'); } else { - subscriptions.createImport(list.id, req.body.type === 'subscribed' ? 1 : 2, req.file.path, req.file.size, delimiter, { + subscriptions.createImport(list.id, req.body.type === 'subscribed' ? 1 : 2, req.file.path, req.file.size, delimiter, req.body.emailcheck === 'enabled' ? 1 : 0, { columns: rows[0], example: rows[1] || [] }, (err, importId) => { diff --git a/services/importer.js b/services/importer.js index ee2ef5ed..02c70a87 100644 --- a/services/importer.js +++ b/services/importer.js @@ -140,6 +140,43 @@ function processImport(data, callback) { return setImmediate(processRows); } + function insertToSubscription() { + subscriptions.insert(listId, { + imported: data.id, + status: data.type, + partial: true + }, entry, (err, response) => { + if (err) { + // ignore + log.error('Import', err.stack); + } else if (response.entryId) { + //log.verbose('Import', 'Inserted %s as %s', entry.email, entryId); + } + + db.getConnection((err, connection) => { + if (err) { + log.error('Import', err.stack); + return setImmediate(processRows); + } + + let query; + if (response.inserted) { + // this record did not exist before, count as new + query = 'UPDATE importer SET `processed`=`processed`+1, `new`=`new`+1 WHERE `id`=? LIMIT 1'; + } else { + // it's an existing record + query = 'UPDATE importer SET `processed`=`processed`+1 WHERE `id`=? LIMIT 1'; + } + + connection.query(query, [data.id], () => { + connection.release(); + return setImmediate(processRows); + }); + }); + }); + } + + if (data.emailcheck === 1) { tools.validateEmail(entry.email, true, err => { if (err) { let reason = (err.message || '').toString().trim().replace(/^[a-z]Error:\s*/i, ''); @@ -165,42 +202,11 @@ function processImport(data, callback) { }); return; } - - subscriptions.insert(listId, { - imported: data.id, - status: data.type, - partial: true - }, entry, (err, response) => { - if (err) { - // ignore - log.error('Import', err.stack); - } else if (response.entryId) { - //log.verbose('Import', 'Inserted %s as %s', entry.email, entryId); - } - - db.getConnection((err, connection) => { - if (err) { - log.error('Import', err.stack); - return setImmediate(processRows); - } - - let query; - if (response.inserted) { - // this record did not exist before, count as new - query = 'UPDATE importer SET `processed`=`processed`+1, `new`=`new`+1 WHERE `id`=? LIMIT 1'; - } else { - // it's an existing record - query = 'UPDATE importer SET `processed`=`processed`+1 WHERE `id`=? LIMIT 1'; - } - - connection.query(query, [data.id], () => { - connection.release(); - return setImmediate(processRows); - }); - }); - }); - + insertToSubscription(); }); + } else { + insertToSubscription(); + } }; parser.on('readable', () => { diff --git a/setup/sql/upgrade-00024.sql b/setup/sql/upgrade-00024.sql new file mode 100644 index 00000000..4ff9904a --- /dev/null +++ b/setup/sql/upgrade-00024.sql @@ -0,0 +1,11 @@ +# Header section +# Define incrementing schema version number +SET @schema_version = '24'; + +# Add field +ALTER TABLE `importer` ADD COLUMN `emailcheck` tinyint(4) unsigned DEFAULT 1 NOT NULL AFTER `delimiter`; + +# Footer section +LOCK TABLES `settings` WRITE; +INSERT INTO `settings` (`key`, `value`) VALUES('db_schema_version', @schema_version) ON DUPLICATE KEY UPDATE `value`=@schema_version; +UNLOCK TABLES; diff --git a/views/lists/subscription/import.hbs b/views/lists/subscription/import.hbs index b2bfe460..be1098b5 100644 --- a/views/lists/subscription/import.hbs +++ b/views/lists/subscription/import.hbs @@ -43,6 +43,22 @@ +
+ +
+
+ +
+
+ +
+
+
+