Merge pull request #187 from larrabee/disable_email_check

Add option to disable email cheking for imported CSV
This commit is contained in:
Andris Reinman 2017-03-31 13:43:08 +03:00 committed by GitHub
commit f234a64df7
6 changed files with 73 additions and 40 deletions

View file

@ -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; listId = Number(listId) || 0;
type = Number(type) || 1; type = Number(type) || 1;
@ -994,8 +994,8 @@ module.exports.createImport = (listId, type, path, size, delimiter, mapping, cal
if (err) { if (err) {
return callback(err); return callback(err);
} }
let query = 'INSERT INTO importer (`list`, `type`, `path`, `size`, `delimiter`, `mapping`) VALUES(?,?,?,?,?,?)'; let query = 'INSERT INTO importer (`list`, `type`, `path`, `size`, `delimiter`, `emailcheck`, `mapping`) VALUES(?,?,?,?,?,?,?)';
connection.query(query, [listId, type, path, size, delimiter, JSON.stringify(mapping)], (err, result) => { connection.query(query, [listId, type, path, size, delimiter, emailcheck, JSON.stringify(mapping)], (err, result) => {
connection.release(); connection.release();
if (err) { if (err) {
return callback(err); return callback(err);

View file

@ -1,3 +1,3 @@
{ {
"schemaVersion": 23 "schemaVersion": 24
} }

View file

@ -555,7 +555,7 @@ router.post('/subscription/import', uploads.single('listimport'), passport.parse
return res.redirect('/lists'); return res.redirect('/lists');
} else { } 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], columns: rows[0],
example: rows[1] || [] example: rows[1] || []
}, (err, importId) => { }, (err, importId) => {

View file

@ -140,6 +140,43 @@ function processImport(data, callback) {
return setImmediate(processRows); 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 => { tools.validateEmail(entry.email, true, err => {
if (err) { if (err) {
let reason = (err.message || '').toString().trim().replace(/^[a-z]Error:\s*/i, ''); let reason = (err.message || '').toString().trim().replace(/^[a-z]Error:\s*/i, '');
@ -165,42 +202,11 @@ function processImport(data, callback) {
}); });
return; return;
} }
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);
});
});
});
}); });
} else {
insertToSubscription();
}
}; };
parser.on('readable', () => { parser.on('readable', () => {

View file

@ -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;

View file

@ -43,6 +43,22 @@
</div> </div>
</div> </div>
<div class="form-group">
<label class="col-sm-2 control-label">{{#translate}}Check imported emails{{/translate}}:</label>
<div class="col-sm-6">
<div class="radio">
<label>
<input type="radio" name="emailcheck" id="type" value="enabled" checked> {{#translate}}Enabled{{/translate}}
</label>
</div>
<div class="radio">
<label>
<input type="radio" name="emailcheck" id="type" value="disabled"> {{#translate}}Disabled{{/translate}}
</label>
</div>
</div>
</div>
<hr /> <hr />
<div class="form-group"> <div class="form-group">