Field setup wizard for new list - addresses 1st line of #510
Bugfixes to address #511
This commit is contained in:
parent
de55870561
commit
b26f5008da
10 changed files with 144 additions and 59 deletions
|
@ -532,41 +532,45 @@ async function _sortIn(tx, listId, entityId, orderListBefore, orderSubscribeBefo
|
|||
}
|
||||
}
|
||||
|
||||
async function createTx(tx, context, listId, entity) {
|
||||
await shares.enforceEntityPermissionTx(tx, context, 'list', listId, 'manageFields');
|
||||
|
||||
await _validateAndPreprocess(tx, listId, entity, true);
|
||||
|
||||
const fieldType = fieldTypes[entity.type];
|
||||
|
||||
let columnName;
|
||||
if (!fieldType.grouped) {
|
||||
columnName = ('custom_' + slugify(entity.name, '_') + '_' + shortid.generate()).toLowerCase().replace(/[^a-z0-9_]/g, '');
|
||||
}
|
||||
|
||||
const filteredEntity = filterObject(entity, allowedKeysCreate);
|
||||
filteredEntity.list = listId;
|
||||
filteredEntity.column = columnName;
|
||||
|
||||
const ids = await tx('custom_fields').insert(filteredEntity);
|
||||
const id = ids[0];
|
||||
|
||||
await _sortIn(tx, listId, id, entity.orderListBefore, entity.orderSubscribeBefore, entity.orderManageBefore);
|
||||
|
||||
if (columnName) {
|
||||
await knex.schema.table('subscription__' + listId, table => {
|
||||
fieldType.addColumn(table, columnName);
|
||||
if (fieldType.indexed) {
|
||||
table.index(columnName);
|
||||
}
|
||||
});
|
||||
|
||||
// Altough this is a reference to an import, it is represented as signed int(11). This is because we use negative values for constant from SubscriptionSource
|
||||
await knex.schema.raw('ALTER TABLE `subscription__' + listId + '` ADD `source_' + columnName +'` int(11) DEFAULT NULL');
|
||||
}
|
||||
|
||||
return id;
|
||||
}
|
||||
|
||||
async function create(context, listId, entity) {
|
||||
return await knex.transaction(async tx => {
|
||||
await shares.enforceEntityPermissionTx(tx, context, 'list', listId, 'manageFields');
|
||||
|
||||
await _validateAndPreprocess(tx, listId, entity, true);
|
||||
|
||||
const fieldType = fieldTypes[entity.type];
|
||||
|
||||
let columnName;
|
||||
if (!fieldType.grouped) {
|
||||
columnName = ('custom_' + slugify(entity.name, '_') + '_' + shortid.generate()).toLowerCase().replace(/[^a-z0-9_]/g, '');
|
||||
}
|
||||
|
||||
const filteredEntity = filterObject(entity, allowedKeysCreate);
|
||||
filteredEntity.list = listId;
|
||||
filteredEntity.column = columnName;
|
||||
|
||||
const ids = await tx('custom_fields').insert(filteredEntity);
|
||||
const id = ids[0];
|
||||
|
||||
await _sortIn(tx, listId, id, entity.orderListBefore, entity.orderSubscribeBefore, entity.orderManageBefore);
|
||||
|
||||
if (columnName) {
|
||||
await knex.schema.table('subscription__' + listId, table => {
|
||||
fieldType.addColumn(table, columnName);
|
||||
if (fieldType.indexed) {
|
||||
table.index(columnName);
|
||||
}
|
||||
});
|
||||
|
||||
// Altough this is a reference to an import, it is represented as signed int(11). This is because we use negative values for constant from SubscriptionSource
|
||||
await knex.schema.raw('ALTER TABLE `subscription__' + listId + '` ADD `source_' + columnName +'` int(11) DEFAULT NULL');
|
||||
}
|
||||
|
||||
return id;
|
||||
return await createTx(tx, context, listId, entity);
|
||||
});
|
||||
}
|
||||
|
||||
|
@ -833,6 +837,7 @@ module.exports.listByOrderListTx = listByOrderListTx;
|
|||
module.exports.listDTAjax = listDTAjax;
|
||||
module.exports.listGroupedDTAjax = listGroupedDTAjax;
|
||||
module.exports.create = create;
|
||||
module.exports.createTx = createTx;
|
||||
module.exports.updateWithConsistencyCheck = updateWithConsistencyCheck;
|
||||
module.exports.remove = remove;
|
||||
module.exports.removeAllByListIdTx = removeAllByListIdTx;
|
||||
|
|
|
@ -14,7 +14,7 @@ const imports = require('./imports');
|
|||
const entitySettings = require('../lib/entity-settings');
|
||||
const dependencyHelpers = require('../lib/dependency-helpers');
|
||||
|
||||
const UnsubscriptionMode = require('../../shared/lists').UnsubscriptionMode;
|
||||
const {UnsubscriptionMode, FieldWizard} = require('../../shared/lists');
|
||||
|
||||
const allowedKeys = new Set(['name', 'description', 'default_form', 'public_subscribe', 'unsubscription_mode', 'contact_email', 'homepage', 'namespace', 'to_name', 'listunsubscribe_disabled', 'send_configuration']);
|
||||
|
||||
|
@ -112,6 +112,47 @@ async function create(context, entity) {
|
|||
|
||||
await _validateAndPreprocess(tx, entity);
|
||||
|
||||
const fieldsToAdd = [];
|
||||
|
||||
const fieldWizard = entity.fieldWizard;
|
||||
if (fieldWizard === FieldWizard.FIRST_LAST_NAME) {
|
||||
if (entity.to_name === null) {
|
||||
entity.to_name = '[MERGE_FIRST_NAME] [MERGE_LAST_NAME]';
|
||||
}
|
||||
|
||||
fieldsToAdd.push({
|
||||
name: 'First name',
|
||||
key: 'MERGE_FIRST_NAME',
|
||||
default_value: '',
|
||||
type: 'text',
|
||||
group: null,
|
||||
settings: {}
|
||||
});
|
||||
|
||||
fieldsToAdd.push({
|
||||
name: 'Last name',
|
||||
key: 'MERGE_LAST_NAME',
|
||||
default_value: '',
|
||||
type: 'text',
|
||||
group: null,
|
||||
settings: {}
|
||||
});
|
||||
|
||||
} else if (fieldWizard === FieldWizard.NAME) {
|
||||
if (entity.to_name === null) {
|
||||
entity.to_name = '[MERGE_NAME]';
|
||||
}
|
||||
|
||||
fieldsToAdd.push({
|
||||
name: 'Name',
|
||||
key: 'MERGE_NAME',
|
||||
default_value: '',
|
||||
type: 'text',
|
||||
group: null,
|
||||
settings: {}
|
||||
});
|
||||
}
|
||||
|
||||
const filteredEntity = filterObject(entity, allowedKeys);
|
||||
filteredEntity.cid = shortid.generate();
|
||||
|
||||
|
@ -148,6 +189,10 @@ async function create(context, entity) {
|
|||
|
||||
await shares.rebuildPermissionsTx(tx, { entityTypeId: 'list', entityId: id });
|
||||
|
||||
for (const fld of fieldsToAdd) {
|
||||
await fields.createTx(tx, context, id, fld);
|
||||
}
|
||||
|
||||
return id;
|
||||
});
|
||||
}
|
||||
|
|
|
@ -44,9 +44,6 @@ router.post('/login', passport.csrfProtection, passport.restLogin);
|
|||
router.post('/logout', passport.csrfProtection, passport.restLogout);
|
||||
|
||||
router.postAsync('/password-reset-send', passport.csrfProtection, async (req, res) => {
|
||||
// FIXME
|
||||
console.log(req.locale);
|
||||
console.log(req.cookies);
|
||||
await users.sendPasswordReset(req.locale, req.body.usernameOrEmail);
|
||||
return res.json();
|
||||
});
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue