Merged parts of PR #651 and fixed the rest
This commit is contained in:
Tomas Bures 2019-08-07 14:29:58 +02:00
parent 5cae9c849c
commit 30e03adf0c
5 changed files with 51 additions and 32 deletions

View file

@ -82,7 +82,7 @@ export default class CUD extends Component {
]; ];
this.sourceOptions = []; this.sourceOptions = [];
for (const key in sourceLabelsOrder) { for (const key of sourceLabelsOrder) {
this.sourceOptions.push({key, label: this.sourceLabels[key]}); this.sourceOptions.push({key, label: this.sourceLabels[key]});
} }

View file

@ -98,9 +98,13 @@ export default class CUD extends Component {
} }
submitFormValuesMutator(data) { submitFormValuesMutator(data) {
this.templateTypes[data.type].beforeSave(data); if (data.fromExistingEntity) {
return filterData(data, ['name', 'description', 'namespace', 'fromExistingEntity', 'existingEntity']);
return filterData(data, ['name', 'description', 'type', 'tag_language', 'data', 'html', 'text', 'namespace', 'fromExistingEntity', 'existingEntity']); } else {
this.templateTypes[data.type].beforeSave(data);
return filterData(data, ['name', 'description', 'type', 'tag_language', 'data', 'html', 'text', 'namespace', 'fromExistingEntity']);
}
} }
async getPreSubmitFormValuesUpdater() { async getPreSubmitFormValuesUpdater() {
@ -151,27 +155,28 @@ export default class CUD extends Component {
state.setIn(['name', 'error'], t('nameMustNotBeEmpty')); state.setIn(['name', 'error'], t('nameMustNotBeEmpty'));
} }
const typeKey = state.getIn(['type', 'value']);
if (!typeKey && !state.getIn(['fromExistingEntity', 'value'])) {
state.setIn(['type', 'error'], t('typeMustBeSelected'));
}else{
state.setIn(['type', 'error'], null);
}
if (!state.getIn(['tag_language', 'value'])) {
state.setIn(['tag_language', 'error'], t('Tag language must be selected'));
}
if (state.getIn(['fromExistingEntity', 'value']) && !state.getIn(['existingEntity', 'value'])) {
state.setIn(['existingEntity', 'error'], t('sourceTemplateMustNotBeEmpty'));
} else {
state.setIn(['existingEntity', 'error'], null);
}
validateNamespace(t, state); validateNamespace(t, state);
if (typeKey && !state.getIn(['fromExistingEntity', 'value'])) { const fromExistingEntity = state.getIn(['fromExistingEntity', 'value']);
this.templateTypes[typeKey].validate(state);
if (fromExistingEntity) {
if (!state.getIn(['existingEntity', 'value'])) {
state.setIn(['existingEntity', 'error'], t('sourceTemplateMustNotBeEmpty'));
}
} else {
const typeKey = state.getIn(['type', 'value']);
if (!typeKey) {
state.setIn(['type', 'error'], t('typeMustBeSelected'));
}
if (!state.getIn(['tag_language', 'value'])) {
state.setIn(['tag_language', 'error'], t('Tag language must be selected'));
}
if (typeKey) {
this.templateTypes[typeKey].validate(state);
}
} }
} }

View file

@ -1,6 +1,6 @@
'use strict'; 'use strict';
function convertFileURLs(sourceCustom, fromEntityType, fromEntityId, toEntityType, toEntityId, campaign) { function convertFileURLs(sourceCustom, fromEntityType, fromEntityId, toEntityType, toEntityId) {
function convertText(text) { function convertText(text) {
if (text) { if (text) {
@ -22,7 +22,7 @@ function convertFileURLs(sourceCustom, fromEntityType, fromEntityId, toEntityTyp
sourceCustom.html = convertText(sourceCustom.html); sourceCustom.html = convertText(sourceCustom.html);
sourceCustom.text = convertText(sourceCustom.text); sourceCustom.text = convertText(sourceCustom.text);
if ((sourceCustom.type === 'mosaico' || sourceCustom.type === 'mosaicoWithFsTemplate') && campaign){ if (sourceCustom.type === 'mosaico' || sourceCustom.type === 'mosaicoWithFsTemplate') {
sourceCustom.data.model = convertText(sourceCustom.data.model); sourceCustom.data.model = convertText(sourceCustom.data.model);
sourceCustom.data.model = convertText(sourceCustom.data.model); sourceCustom.data.model = convertText(sourceCustom.data.model);
sourceCustom.data.metadata = convertText(sourceCustom.data.metadata); sourceCustom.data.metadata = convertText(sourceCustom.data.metadata);

View file

@ -529,7 +529,7 @@ async function _createTx(tx, context, entity, content) {
if (copyFilesFrom) { if (copyFilesFrom) {
await files.copyAllTx(tx, context, copyFilesFrom.entityType, 'file', copyFilesFrom.entityId, 'campaign', 'file', id); await files.copyAllTx(tx, context, copyFilesFrom.entityType, 'file', copyFilesFrom.entityId, 'campaign', 'file', id);
convertFileURLs(data.sourceCustom, copyFilesFrom.entityType, copyFilesFrom.entityId, 'campaign', id, true); convertFileURLs(data.sourceCustom, copyFilesFrom.entityType, copyFilesFrom.entityId, 'campaign', id);
await tx('campaigns') await tx('campaigns')
.update({ .update({
data: JSON.stringify(data) data: JSON.stringify(data)

View file

@ -67,8 +67,6 @@ async function _validateAndPreprocess(tx, entity) {
enforce(allTagLanguages.includes(entity.tag_language), `Invalid tag language '${entity.tag_language}'`); enforce(allTagLanguages.includes(entity.tag_language), `Invalid tag language '${entity.tag_language}'`);
// We don't check contents of the "data" because it is processed solely on the client. The client generates the HTML code we use when sending out campaigns. // We don't check contents of the "data" because it is processed solely on the client. The client generates the HTML code we use when sending out campaigns.
entity.data = JSON.stringify(entity.data);
} }
async function create(context, entity) { async function create(context, entity) {
@ -87,15 +85,28 @@ async function create(context, entity) {
await _validateAndPreprocess(tx, entity); await _validateAndPreprocess(tx, entity);
const ids = await tx('templates').insert(filterObject(entity, allowedKeys)); const filteredEntityWithUnstringifiedData = filterObject(entity, allowedKeys);
const filteredEntity = {
...filteredEntityWithUnstringifiedData,
data: JSON.stringify(filteredEntityWithUnstringifiedData.data)
};
const ids = await tx('templates').insert(filteredEntity);
const id = ids[0]; const id = ids[0];
await shares.rebuildPermissionsTx(tx, { entityTypeId: 'template', entityId: id }); await shares.rebuildPermissionsTx(tx, { entityTypeId: 'template', entityId: id });
if (entity.fromExistingEntity) { if (entity.fromExistingEntity) {
await files.copyAllTx(tx, context, 'template', 'file', entity.existingEntity, 'template', 'file', id); await files.copyAllTx(tx, context, 'template', 'file', entity.existingEntity, 'template', 'file', id);
convertFileURLs(entity, 'template', entity.existingEntity, 'template', id, false);
await tx('templates').update(filterObject(entity, allowedKeys)).where('id', id); convertFileURLs(filteredEntityWithUnstringifiedData, 'template', entity.existingEntity, 'template', id);
const filteredEntity = {
...filteredEntityWithUnstringifiedData,
data: JSON.stringify(filteredEntityWithUnstringifiedData.data)
};
await tx('templates').update(filteredEntity).where('id', id);
} }
return id; return id;
@ -119,10 +130,13 @@ async function updateWithConsistencyCheck(context, entity) {
} }
await _validateAndPreprocess(tx, entity); await _validateAndPreprocess(tx, entity);
entity.data = JSON.stringify(entity.data);
await namespaceHelpers.validateMove(context, entity, existing, 'template', 'createTemplate', 'delete'); await namespaceHelpers.validateMove(context, entity, existing, 'template', 'createTemplate', 'delete');
await tx('templates').where('id', entity.id).update(filterObject(entity, allowedKeys)); const filteredEntity = filterObject(entity, allowedKeys);
await tx('templates').where('id', entity.id).update(filteredEntity);
await shares.rebuildPermissionsTx(tx, { entityTypeId: 'template', entityId: entity.id }); await shares.rebuildPermissionsTx(tx, { entityTypeId: 'template', entityId: entity.id });
}); });