@webiny/api-headless-cms 0.0.0-unstable.5e7233243f → 0.0.0-unstable.6e5425ee89
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/context.js +3 -22
- package/context.js.map +1 -1
- package/crud/contentEntry/afterDelete.d.ts +2 -2
- package/crud/contentEntry/afterDelete.js +2 -7
- package/crud/contentEntry/afterDelete.js.map +1 -1
- package/crud/contentEntry/beforeCreate.d.ts +2 -2
- package/crud/contentEntry/beforeCreate.js +2 -5
- package/crud/contentEntry/beforeCreate.js.map +1 -1
- package/crud/contentEntry/beforeUpdate.d.ts +2 -2
- package/crud/contentEntry/beforeUpdate.js +2 -5
- package/crud/contentEntry/beforeUpdate.js.map +1 -1
- package/crud/contentEntry/entryDataValidation.js +4 -47
- package/crud/contentEntry/entryDataValidation.js.map +1 -1
- package/crud/contentEntry/markLockedFields.js +8 -35
- package/crud/contentEntry/markLockedFields.js.map +1 -1
- package/crud/contentEntry/referenceFieldsMapping.js +8 -68
- package/crud/contentEntry/referenceFieldsMapping.js.map +1 -1
- package/crud/contentEntry.crud.d.ts +0 -2
- package/crud/contentEntry.crud.js +201 -361
- package/crud/contentEntry.crud.js.map +1 -1
- package/crud/contentModel/afterCreate.d.ts +3 -3
- package/crud/contentModel/afterCreate.js +5 -7
- package/crud/contentModel/afterCreate.js.map +1 -1
- package/crud/contentModel/afterCreateFrom.d.ts +3 -3
- package/crud/contentModel/afterCreateFrom.js +5 -7
- package/crud/contentModel/afterCreateFrom.js.map +1 -1
- package/crud/contentModel/afterDelete.d.ts +3 -3
- package/crud/contentModel/afterDelete.js +5 -7
- package/crud/contentModel/afterDelete.js.map +1 -1
- package/crud/contentModel/afterUpdate.d.ts +3 -3
- package/crud/contentModel/afterUpdate.js +5 -7
- package/crud/contentModel/afterUpdate.js.map +1 -1
- package/crud/contentModel/beforeCreate.d.ts +4 -4
- package/crud/contentModel/beforeCreate.js +14 -42
- package/crud/contentModel/beforeCreate.js.map +1 -1
- package/crud/contentModel/beforeDelete.d.ts +3 -3
- package/crud/contentModel/beforeDelete.js +6 -16
- package/crud/contentModel/beforeDelete.js.map +1 -1
- package/crud/contentModel/beforeUpdate.d.ts +3 -3
- package/crud/contentModel/beforeUpdate.js +5 -10
- package/crud/contentModel/beforeUpdate.js.map +1 -1
- package/crud/contentModel/contentModelManagerFactory.js +0 -7
- package/crud/contentModel/contentModelManagerFactory.js.map +1 -1
- package/crud/contentModel/createFieldModels.js +0 -6
- package/crud/contentModel/createFieldModels.js.map +1 -1
- package/crud/contentModel/createFieldStorageId.js +0 -2
- package/crud/contentModel/createFieldStorageId.js.map +1 -1
- package/crud/contentModel/fieldIdValidation.js +0 -5
- package/crud/contentModel/fieldIdValidation.js.map +1 -1
- package/crud/contentModel/idValidation.js +0 -5
- package/crud/contentModel/idValidation.js.map +1 -1
- package/crud/contentModel/models.js +1 -8
- package/crud/contentModel/models.js.map +1 -1
- package/crud/contentModel/systemFields.js.map +1 -1
- package/crud/contentModel/validateLayout.js +0 -8
- package/crud/contentModel/validateLayout.js.map +1 -1
- package/crud/contentModel/validateModel.js +1 -9
- package/crud/contentModel/validateModel.js.map +1 -1
- package/crud/contentModel/validateModelFields.js +11 -67
- package/crud/contentModel/validateModelFields.js.map +1 -1
- package/crud/contentModel.crud.js +84 -145
- package/crud/contentModel.crud.js.map +1 -1
- package/crud/contentModelGroup/beforeCreate.d.ts +2 -2
- package/crud/contentModelGroup/beforeCreate.js +3 -15
- package/crud/contentModelGroup/beforeCreate.js.map +1 -1
- package/crud/contentModelGroup/beforeDelete.d.ts +2 -2
- package/crud/contentModelGroup/beforeDelete.js +3 -11
- package/crud/contentModelGroup/beforeDelete.js.map +1 -1
- package/crud/contentModelGroup/beforeUpdate.d.ts +2 -2
- package/crud/contentModelGroup/beforeUpdate.js +2 -7
- package/crud/contentModelGroup/beforeUpdate.js.map +1 -1
- package/crud/contentModelGroup.crud.js +59 -76
- package/crud/contentModelGroup.crud.js.map +1 -1
- package/crud/index.js +3 -23
- package/crud/index.js.map +1 -1
- package/crud/settings.crud.js +3 -20
- package/crud/settings.crud.js.map +1 -1
- package/crud/system.crud.js +61 -84
- package/crud/system.crud.js.map +1 -1
- package/fieldConverters/CmsModelDefaultFieldConverterPlugin.js +1 -14
- package/fieldConverters/CmsModelDefaultFieldConverterPlugin.js.map +1 -1
- package/fieldConverters/CmsModelObjectFieldConverterPlugin.js +16 -71
- package/fieldConverters/CmsModelObjectFieldConverterPlugin.js.map +1 -1
- package/fieldConverters/index.js +0 -4
- package/fieldConverters/index.js.map +1 -1
- package/graphql/buildSchemaPlugins.js +5 -9
- package/graphql/buildSchemaPlugins.js.map +1 -1
- package/graphql/graphQLHandlerFactory.js +4 -29
- package/graphql/graphQLHandlerFactory.js.map +1 -1
- package/graphql/index.js +1 -8
- package/graphql/index.js.map +1 -1
- package/graphql/schema/baseContentSchema.js +6 -18
- package/graphql/schema/baseContentSchema.js.map +1 -1
- package/graphql/schema/contentEntries.js +3 -43
- package/graphql/schema/contentEntries.js.map +1 -1
- package/graphql/schema/contentModelGroups.js +2 -19
- package/graphql/schema/contentModelGroups.js.map +1 -1
- package/graphql/schema/contentModels.js +20 -17
- package/graphql/schema/contentModels.js.map +1 -1
- package/graphql/schema/createFieldResolvers.js +7 -31
- package/graphql/schema/createFieldResolvers.js.map +1 -1
- package/graphql/schema/createManageResolvers.js +4 -44
- package/graphql/schema/createManageResolvers.js.map +1 -1
- package/graphql/schema/createManageSDL.js +4 -21
- package/graphql/schema/createManageSDL.js.map +1 -1
- package/graphql/schema/createPreviewResolvers.js +3 -17
- package/graphql/schema/createPreviewResolvers.js.map +1 -1
- package/graphql/schema/createReadResolvers.js +3 -17
- package/graphql/schema/createReadResolvers.js.map +1 -1
- package/graphql/schema/createReadSDL.js +0 -10
- package/graphql/schema/createReadSDL.js.map +1 -1
- package/graphql/schema/resolvers/commonFieldResolvers.js +0 -2
- package/graphql/schema/resolvers/commonFieldResolvers.js.map +1 -1
- package/graphql/schema/resolvers/manage/resolveCreate.js +0 -3
- package/graphql/schema/resolvers/manage/resolveCreate.js.map +1 -1
- package/graphql/schema/resolvers/manage/resolveCreateFrom.js +0 -3
- package/graphql/schema/resolvers/manage/resolveCreateFrom.js.map +1 -1
- package/graphql/schema/resolvers/manage/resolveDelete.js +0 -6
- package/graphql/schema/resolvers/manage/resolveDelete.js.map +1 -1
- package/graphql/schema/resolvers/manage/resolveGet.js +5 -25
- package/graphql/schema/resolvers/manage/resolveGet.js.map +1 -1
- package/graphql/schema/resolvers/manage/resolveGetByIds.js +0 -3
- package/graphql/schema/resolvers/manage/resolveGetByIds.js.map +1 -1
- package/graphql/schema/resolvers/manage/resolveGetRevisions.js +0 -3
- package/graphql/schema/resolvers/manage/resolveGetRevisions.js.map +1 -1
- package/graphql/schema/resolvers/manage/resolveList.js +0 -3
- package/graphql/schema/resolvers/manage/resolveList.js.map +1 -1
- package/graphql/schema/resolvers/manage/resolvePublish.js +0 -3
- package/graphql/schema/resolvers/manage/resolvePublish.js.map +1 -1
- package/graphql/schema/resolvers/manage/resolveRepublish.js +0 -3
- package/graphql/schema/resolvers/manage/resolveRepublish.js.map +1 -1
- package/graphql/schema/resolvers/manage/resolveUnpublish.js +0 -3
- package/graphql/schema/resolvers/manage/resolveUnpublish.js.map +1 -1
- package/graphql/schema/resolvers/manage/resolveUpdate.js +0 -3
- package/graphql/schema/resolvers/manage/resolveUpdate.js.map +1 -1
- package/graphql/schema/resolvers/preview/resolveGet.js +3 -15
- package/graphql/schema/resolvers/preview/resolveGet.js.map +1 -1
- package/graphql/schema/resolvers/preview/resolveList.js +0 -3
- package/graphql/schema/resolvers/preview/resolveList.js.map +1 -1
- package/graphql/schema/resolvers/read/resolveGet.js +3 -15
- package/graphql/schema/resolvers/read/resolveGet.js.map +1 -1
- package/graphql/schema/resolvers/read/resolveList.js +0 -3
- package/graphql/schema/resolvers/read/resolveList.js.map +1 -1
- package/graphql/schema/schemaPlugins.js +5 -19
- package/graphql/schema/schemaPlugins.js.map +1 -1
- package/graphql/system.js +1 -14
- package/graphql/system.js.map +1 -1
- package/graphqlFields/boolean.js +0 -12
- package/graphqlFields/boolean.js.map +1 -1
- package/graphqlFields/datetime.js +0 -17
- package/graphqlFields/datetime.js.map +1 -1
- package/graphqlFields/file.js +0 -8
- package/graphqlFields/file.js.map +1 -1
- package/graphqlFields/helpers.js +0 -10
- package/graphqlFields/helpers.js.map +1 -1
- package/graphqlFields/index.js +0 -11
- package/graphqlFields/index.js.map +1 -1
- package/graphqlFields/longText.js +0 -10
- package/graphqlFields/longText.js.map +1 -1
- package/graphqlFields/number.js +0 -12
- package/graphqlFields/number.js.map +1 -1
- package/graphqlFields/object.js +7 -37
- package/graphqlFields/object.js.map +1 -1
- package/graphqlFields/ref.js +21 -59
- package/graphqlFields/ref.js.map +1 -1
- package/graphqlFields/richText.js +0 -9
- package/graphqlFields/richText.js.map +1 -1
- package/graphqlFields/text.js +0 -11
- package/graphqlFields/text.js.map +1 -1
- package/index.js +0 -19
- package/index.js.map +1 -1
- package/modelManager/DefaultCmsModelManager.d.ts +7 -7
- package/modelManager/DefaultCmsModelManager.js +1 -17
- package/modelManager/DefaultCmsModelManager.js.map +1 -1
- package/modelManager/index.js +0 -4
- package/modelManager/index.js.map +1 -1
- package/package.json +27 -28
- package/parameters/context.js +0 -4
- package/parameters/context.js.map +1 -1
- package/parameters/header.js +1 -12
- package/parameters/header.js.map +1 -1
- package/parameters/index.js +0 -8
- package/parameters/index.js.map +1 -1
- package/parameters/manual.js +7 -15
- package/parameters/manual.js.map +1 -1
- package/parameters/path.js +1 -12
- package/parameters/path.js.map +1 -1
- package/plugins/CmsGroupPlugin.js +1 -9
- package/plugins/CmsGroupPlugin.js.map +1 -1
- package/plugins/CmsModelFieldConverterPlugin.js +1 -6
- package/plugins/CmsModelFieldConverterPlugin.js.map +1 -1
- package/plugins/CmsModelPlugin.d.ts +6 -2
- package/plugins/CmsModelPlugin.js +18 -49
- package/plugins/CmsModelPlugin.js.map +1 -1
- package/plugins/CmsParametersPlugin.js +1 -8
- package/plugins/CmsParametersPlugin.js.map +1 -1
- package/plugins/StorageTransformPlugin.js +1 -10
- package/plugins/StorageTransformPlugin.js.map +1 -1
- package/plugins/index.js +0 -10
- package/plugins/index.js.map +1 -1
- package/storage/default.js +0 -3
- package/storage/default.js.map +1 -1
- package/storage/object.js +3 -25
- package/storage/object.js.map +1 -1
- package/types.d.ts +267 -126
- package/types.js +0 -64
- package/types.js.map +1 -1
- package/upgrades/5.33.0/index.js +8 -35
- package/upgrades/5.33.0/index.js.map +1 -1
- package/upgrades/index.js +0 -3
- package/upgrades/index.js.map +1 -1
- package/utils/access.js +11 -25
- package/utils/access.js.map +1 -1
- package/utils/converters/Converter.js +1 -14
- package/utils/converters/Converter.js.map +1 -1
- package/utils/converters/ConverterCollection.d.ts +7 -0
- package/utils/converters/ConverterCollection.js +31 -30
- package/utils/converters/ConverterCollection.js.map +1 -1
- package/utils/converters/valueKeyStorageConverter.js +3 -33
- package/utils/converters/valueKeyStorageConverter.js.map +1 -1
- package/utils/createTypeName.js +1 -9
- package/utils/createTypeName.js.map +1 -1
- package/utils/entryStorage.js +13 -33
- package/utils/entryStorage.js.map +1 -1
- package/utils/filterAsync.js +0 -5
- package/utils/filterAsync.js.map +1 -1
- package/utils/filterModelFields.js +8 -18
- package/utils/filterModelFields.js.map +1 -1
- package/utils/getEntryTitle.js +0 -9
- package/utils/getEntryTitle.js.map +1 -1
- package/utils/getSchemaFromFieldPlugins.js +2 -6
- package/utils/getSchemaFromFieldPlugins.js.map +1 -1
- package/utils/ownership.js +0 -8
- package/utils/ownership.js.map +1 -1
- package/utils/permissions.js +7 -26
- package/utils/permissions.js.map +1 -1
- package/utils/pluralizedTypeName.js +1 -7
- package/utils/pluralizedTypeName.js.map +1 -1
- package/utils/renderFields.js +0 -8
- package/utils/renderFields.js.map +1 -1
- package/utils/renderGetFilterFields.js +0 -11
- package/utils/renderGetFilterFields.js.map +1 -1
- package/utils/renderInputFields.js +0 -8
- package/utils/renderInputFields.js.map +1 -1
- package/utils/renderListFilterFields.js +7 -8
- package/utils/renderListFilterFields.js.map +1 -1
- package/utils/renderSortEnum.js +0 -7
- package/utils/renderSortEnum.js.map +1 -1
- package/utils/toSlug.js +1 -5
- package/utils/toSlug.js.map +1 -1
- package/validators/dateGte.js +0 -7
- package/validators/dateGte.js.map +1 -1
- package/validators/dateLte.js +0 -7
- package/validators/dateLte.js.map +1 -1
- package/validators/gte.js +0 -8
- package/validators/gte.js.map +1 -1
- package/validators/in.js +0 -8
- package/validators/in.js.map +1 -1
- package/validators/index.js +0 -15
- package/validators/index.js.map +1 -1
- package/validators/lte.js +0 -8
- package/validators/lte.js.map +1 -1
- package/validators/maxLength.js +0 -8
- package/validators/maxLength.js.map +1 -1
- package/validators/minLength.js +0 -8
- package/validators/minLength.js.map +1 -1
- package/validators/pattern.js +0 -9
- package/validators/pattern.js.map +1 -1
- package/validators/patternPlugins/email.js +0 -2
- package/validators/patternPlugins/email.js.map +1 -1
- package/validators/patternPlugins/index.js +0 -8
- package/validators/patternPlugins/index.js.map +1 -1
- package/validators/patternPlugins/lowerCase.js +0 -2
- package/validators/patternPlugins/lowerCase.js.map +1 -1
- package/validators/patternPlugins/lowerCaseSpace.js +0 -2
- package/validators/patternPlugins/lowerCaseSpace.js.map +1 -1
- package/validators/patternPlugins/upperCase.js +0 -2
- package/validators/patternPlugins/upperCase.js.map +1 -1
- package/validators/patternPlugins/upperCaseSpace.js +0 -2
- package/validators/patternPlugins/upperCaseSpace.js.map +1 -1
- package/validators/patternPlugins/url.js +0 -2
- package/validators/patternPlugins/url.js.map +1 -1
- package/validators/required.js +0 -5
- package/validators/required.js.map +1 -1
- package/validators/timeGte.js +0 -8
- package/validators/timeGte.js.map +1 -1
- package/validators/timeLte.js +0 -8
- package/validators/timeLte.js.map +1 -1
- package/validators/unique.js +1 -8
- package/validators/unique.js.map +1 -1
|
@@ -1,49 +1,31 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
-
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
|
|
5
4
|
Object.defineProperty(exports, "__esModule", {
|
|
6
5
|
value: true
|
|
7
6
|
});
|
|
8
|
-
exports.createContentEntryCrud = exports.STATUS_UNPUBLISHED = exports.
|
|
9
|
-
|
|
10
|
-
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
11
|
-
|
|
7
|
+
exports.createContentEntryCrud = exports.STATUS_UNPUBLISHED = exports.STATUS_PUBLISHED = exports.STATUS_DRAFT = void 0;
|
|
8
|
+
var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread2"));
|
|
12
9
|
var _mdbid = _interopRequireDefault(require("mdbid"));
|
|
13
|
-
|
|
14
10
|
var _handlerGraphql = require("@webiny/handler-graphql");
|
|
15
|
-
|
|
16
11
|
var _entryDataValidation = require("./contentEntry/entryDataValidation");
|
|
17
|
-
|
|
18
12
|
var _error = _interopRequireDefault(require("@webiny/error"));
|
|
19
|
-
|
|
20
13
|
var _pubsub = require("@webiny/pubsub");
|
|
21
|
-
|
|
22
14
|
var _beforeCreate = require("./contentEntry/beforeCreate");
|
|
23
|
-
|
|
24
15
|
var _beforeUpdate = require("./contentEntry/beforeUpdate");
|
|
25
|
-
|
|
26
16
|
var _utils = require("@webiny/utils");
|
|
27
|
-
|
|
28
17
|
var _afterDelete = require("./contentEntry/afterDelete");
|
|
29
|
-
|
|
30
18
|
var _referenceFieldsMapping = require("./contentEntry/referenceFieldsMapping");
|
|
31
|
-
|
|
32
19
|
var _merge = _interopRequireDefault(require("lodash/merge"));
|
|
33
|
-
|
|
34
20
|
var _permissions = require("../utils/permissions");
|
|
35
|
-
|
|
36
21
|
var _access = require("../utils/access");
|
|
37
|
-
|
|
38
22
|
var _ownership = require("../utils/ownership");
|
|
39
|
-
|
|
40
23
|
var _entryStorage = require("../utils/entryStorage");
|
|
41
|
-
|
|
42
24
|
var _valueKeyStorageConverter = require("../utils/converters/valueKeyStorageConverter");
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
25
|
+
/**
|
|
26
|
+
* Package mdbid does not have types.
|
|
27
|
+
*/
|
|
28
|
+
// @ts-ignore
|
|
47
29
|
|
|
48
30
|
const STATUS_DRAFT = "draft";
|
|
49
31
|
exports.STATUS_DRAFT = STATUS_DRAFT;
|
|
@@ -51,11 +33,6 @@ const STATUS_PUBLISHED = "published";
|
|
|
51
33
|
exports.STATUS_PUBLISHED = STATUS_PUBLISHED;
|
|
52
34
|
const STATUS_UNPUBLISHED = "unpublished";
|
|
53
35
|
exports.STATUS_UNPUBLISHED = STATUS_UNPUBLISHED;
|
|
54
|
-
const STATUS_CHANGES_REQUESTED = "changesRequested";
|
|
55
|
-
exports.STATUS_CHANGES_REQUESTED = STATUS_CHANGES_REQUESTED;
|
|
56
|
-
const STATUS_REVIEW_REQUESTED = "reviewRequested";
|
|
57
|
-
exports.STATUS_REVIEW_REQUESTED = STATUS_REVIEW_REQUESTED;
|
|
58
|
-
|
|
59
36
|
/**
|
|
60
37
|
* Used for some fields to convert their values.
|
|
61
38
|
*/
|
|
@@ -63,45 +40,35 @@ const convertDefaultValue = (field, value) => {
|
|
|
63
40
|
switch (field.type) {
|
|
64
41
|
case "boolean":
|
|
65
42
|
return Boolean(value);
|
|
66
|
-
|
|
67
43
|
case "number":
|
|
68
44
|
return Number(value);
|
|
69
|
-
|
|
70
45
|
default:
|
|
71
46
|
return value;
|
|
72
47
|
}
|
|
73
48
|
};
|
|
74
|
-
|
|
75
49
|
const getDefaultValue = field => {
|
|
76
50
|
const {
|
|
77
51
|
settings,
|
|
78
52
|
multipleValues
|
|
79
53
|
} = field;
|
|
80
|
-
|
|
81
54
|
if (settings && settings.defaultValue !== undefined) {
|
|
82
55
|
return convertDefaultValue(field, settings.defaultValue);
|
|
83
56
|
}
|
|
84
|
-
|
|
85
57
|
const {
|
|
86
58
|
predefinedValues
|
|
87
59
|
} = field;
|
|
88
|
-
|
|
89
60
|
if (!predefinedValues || !predefinedValues.enabled || Array.isArray(predefinedValues.values) === false) {
|
|
90
61
|
return undefined;
|
|
91
62
|
}
|
|
92
|
-
|
|
93
63
|
if (!multipleValues) {
|
|
94
64
|
const selectedValue = predefinedValues.values.find(value => {
|
|
95
65
|
return !!value.selected;
|
|
96
66
|
});
|
|
97
|
-
|
|
98
67
|
if (selectedValue) {
|
|
99
68
|
return convertDefaultValue(field, selectedValue.value);
|
|
100
69
|
}
|
|
101
|
-
|
|
102
70
|
return undefined;
|
|
103
71
|
}
|
|
104
|
-
|
|
105
72
|
return predefinedValues.values.filter(({
|
|
106
73
|
selected
|
|
107
74
|
}) => !!selected).map(({
|
|
@@ -113,8 +80,6 @@ const getDefaultValue = field => {
|
|
|
113
80
|
/**
|
|
114
81
|
* Cleans and adds default values to create input data.
|
|
115
82
|
*/
|
|
116
|
-
|
|
117
|
-
|
|
118
83
|
const mapAndCleanCreateInputData = (model, input) => {
|
|
119
84
|
return model.fields.reduce((acc, field) => {
|
|
120
85
|
/**
|
|
@@ -126,12 +91,10 @@ const mapAndCleanCreateInputData = (model, input) => {
|
|
|
126
91
|
field
|
|
127
92
|
});
|
|
128
93
|
}
|
|
129
|
-
|
|
130
94
|
const value = input[field.fieldId];
|
|
131
95
|
/**
|
|
132
96
|
* We set the default value on create input if value is not defined.
|
|
133
97
|
*/
|
|
134
|
-
|
|
135
98
|
acc[field.fieldId] = value === undefined ? getDefaultValue(field) : value;
|
|
136
99
|
return acc;
|
|
137
100
|
}, {});
|
|
@@ -139,8 +102,6 @@ const mapAndCleanCreateInputData = (model, input) => {
|
|
|
139
102
|
/**
|
|
140
103
|
* Cleans the update input entry data.
|
|
141
104
|
*/
|
|
142
|
-
|
|
143
|
-
|
|
144
105
|
const mapAndCleanUpdatedInputData = (model, input) => {
|
|
145
106
|
return model.fields.reduce((acc, field) => {
|
|
146
107
|
/**
|
|
@@ -155,14 +116,10 @@ const mapAndCleanUpdatedInputData = (model, input) => {
|
|
|
155
116
|
/**
|
|
156
117
|
* We cannot set default value here because user might want to update only certain field values.
|
|
157
118
|
*/
|
|
158
|
-
|
|
159
|
-
|
|
160
119
|
const value = input[field.fieldId];
|
|
161
|
-
|
|
162
120
|
if (value === undefined) {
|
|
163
121
|
return acc;
|
|
164
122
|
}
|
|
165
|
-
|
|
166
123
|
acc[field.fieldId] = value;
|
|
167
124
|
return acc;
|
|
168
125
|
}, {});
|
|
@@ -171,22 +128,16 @@ const mapAndCleanUpdatedInputData = (model, input) => {
|
|
|
171
128
|
* This method takes original entry meta and new input.
|
|
172
129
|
* When new meta is merged onto the existing one, everything that has undefined or null value is removed.
|
|
173
130
|
*/
|
|
174
|
-
|
|
175
|
-
|
|
176
131
|
const createEntryMeta = (input, original) => {
|
|
177
132
|
const meta = (0, _merge.default)(original || {}, input || {});
|
|
178
|
-
|
|
179
133
|
for (const key in meta) {
|
|
180
134
|
if (meta[key] !== undefined || meta[key] !== null) {
|
|
181
135
|
continue;
|
|
182
136
|
}
|
|
183
|
-
|
|
184
137
|
delete meta[key];
|
|
185
138
|
}
|
|
186
|
-
|
|
187
139
|
return meta;
|
|
188
140
|
};
|
|
189
|
-
|
|
190
141
|
const createEntryId = version => {
|
|
191
142
|
const entryId = (0, _mdbid.default)();
|
|
192
143
|
return {
|
|
@@ -198,19 +149,16 @@ const createEntryId = version => {
|
|
|
198
149
|
})
|
|
199
150
|
};
|
|
200
151
|
};
|
|
201
|
-
|
|
202
152
|
const increaseEntryIdVersion = id => {
|
|
203
153
|
const {
|
|
204
154
|
id: entryId,
|
|
205
155
|
version
|
|
206
156
|
} = (0, _utils.parseIdentifier)(id);
|
|
207
|
-
|
|
208
157
|
if (!version) {
|
|
209
158
|
throw new _error.default("Cannot increase version on the ID without the version part.", "WRONG_ID", {
|
|
210
159
|
id
|
|
211
160
|
});
|
|
212
161
|
}
|
|
213
|
-
|
|
214
162
|
return {
|
|
215
163
|
entryId,
|
|
216
164
|
version: version + 1,
|
|
@@ -220,7 +168,6 @@ const increaseEntryIdVersion = id => {
|
|
|
220
168
|
})
|
|
221
169
|
};
|
|
222
170
|
};
|
|
223
|
-
|
|
224
171
|
const getSearchableFields = params => {
|
|
225
172
|
const {
|
|
226
173
|
plugins,
|
|
@@ -235,9 +182,7 @@ const getSearchableFields = params => {
|
|
|
235
182
|
if (!field.fieldId) {
|
|
236
183
|
return false;
|
|
237
184
|
}
|
|
238
|
-
|
|
239
185
|
const plugin = fieldPluginMap[field.type];
|
|
240
|
-
|
|
241
186
|
if (!plugin) {
|
|
242
187
|
return false;
|
|
243
188
|
} else if (!plugin.fullTextSearch) {
|
|
@@ -245,11 +190,13 @@ const getSearchableFields = params => {
|
|
|
245
190
|
} else if (!fields || fields.length === 0) {
|
|
246
191
|
return true;
|
|
247
192
|
}
|
|
248
|
-
|
|
249
193
|
return fields.includes(field.fieldId);
|
|
250
194
|
}).map(field => field.fieldId);
|
|
251
195
|
};
|
|
252
|
-
|
|
196
|
+
const allowedEntryStatus = ["draft", "published", "unpublished"];
|
|
197
|
+
const transformEntryStatus = status => {
|
|
198
|
+
return allowedEntryStatus.includes(status) ? status : "draft";
|
|
199
|
+
};
|
|
253
200
|
const createContentEntryCrud = params => {
|
|
254
201
|
const {
|
|
255
202
|
storageOperations,
|
|
@@ -260,70 +207,93 @@ const createContentEntryCrud = params => {
|
|
|
260
207
|
const {
|
|
261
208
|
plugins
|
|
262
209
|
} = context;
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
const
|
|
266
|
-
const
|
|
267
|
-
const
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
const
|
|
271
|
-
const
|
|
272
|
-
const
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
const
|
|
276
|
-
const
|
|
277
|
-
const
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
const
|
|
281
|
-
const
|
|
282
|
-
const
|
|
210
|
+
|
|
211
|
+
// create
|
|
212
|
+
const onEntryBeforeCreate = (0, _pubsub.createTopic)("cms.onEntryBeforeCreate");
|
|
213
|
+
const onEntryAfterCreate = (0, _pubsub.createTopic)("cms.onEntryAfterCreate");
|
|
214
|
+
const onEntryCreateError = (0, _pubsub.createTopic)("cms.onEntryCreateError");
|
|
215
|
+
|
|
216
|
+
// create revision
|
|
217
|
+
const onEntryBeforeCreateRevision = (0, _pubsub.createTopic)("cms.onEntryBeforeCreateRevision");
|
|
218
|
+
const onEntryRevisionAfterCreate = (0, _pubsub.createTopic)("cms.onEntryRevisionAfterCreate");
|
|
219
|
+
const onEntryCreateRevisionError = (0, _pubsub.createTopic)("cms.onEntryCreateRevisionError");
|
|
220
|
+
|
|
221
|
+
// update
|
|
222
|
+
const onEntryBeforeUpdate = (0, _pubsub.createTopic)("cms.onEntryBeforeUpdate");
|
|
223
|
+
const onEntryAfterUpdate = (0, _pubsub.createTopic)("cms.onEntryAfterUpdate");
|
|
224
|
+
const onEntryUpdateError = (0, _pubsub.createTopic)("cms.onEntryUpdateError");
|
|
225
|
+
|
|
226
|
+
// publish
|
|
227
|
+
const onEntryBeforePublish = (0, _pubsub.createTopic)("cms.onEntryBeforePublish");
|
|
228
|
+
const onEntryAfterPublish = (0, _pubsub.createTopic)("cms.onEntryAfterPublic");
|
|
229
|
+
const onEntryPublishError = (0, _pubsub.createTopic)("cms.onEntryPublishError");
|
|
230
|
+
|
|
231
|
+
// unpublish
|
|
232
|
+
const onEntryBeforeUnpublish = (0, _pubsub.createTopic)("cms.onEntryBeforeUnpublish");
|
|
233
|
+
const onEntryAfterUnpublish = (0, _pubsub.createTopic)("cms.onEntryAfterUnpublish");
|
|
234
|
+
const onEntryUnpublishError = (0, _pubsub.createTopic)("cms.onEntryUnpublishError");
|
|
235
|
+
|
|
236
|
+
// delete
|
|
237
|
+
const onEntryBeforeDelete = (0, _pubsub.createTopic)("cms.onEntryBeforeDelete");
|
|
238
|
+
const onEntryAfterDelete = (0, _pubsub.createTopic)("cms.onEntryAfterDelete");
|
|
239
|
+
const onEntryDeleteError = (0, _pubsub.createTopic)("cms.onEntryDeleteError");
|
|
240
|
+
|
|
241
|
+
// delete revision
|
|
242
|
+
const onEntryRevisionBeforeDelete = (0, _pubsub.createTopic)("cms.onEntryRevisionBeforeDelete");
|
|
243
|
+
const onEntryRevisionAfterDelete = (0, _pubsub.createTopic)("cms.onEntryRevisionAfterDelete");
|
|
244
|
+
const onEntryRevisionDeleteError = (0, _pubsub.createTopic)("cms.onEntryRevisionDeleteError");
|
|
245
|
+
|
|
246
|
+
// get
|
|
247
|
+
const onEntryBeforeGet = (0, _pubsub.createTopic)("cms.onEntryBeforeGet");
|
|
248
|
+
|
|
249
|
+
// list
|
|
250
|
+
const onEntryBeforeList = (0, _pubsub.createTopic)("cms.onEntryBeforeList");
|
|
251
|
+
|
|
283
252
|
/**
|
|
284
253
|
* We need to assign some default behaviors.
|
|
285
254
|
*/
|
|
286
|
-
|
|
287
255
|
(0, _beforeCreate.assignBeforeEntryCreate)({
|
|
288
256
|
context,
|
|
289
|
-
|
|
257
|
+
onEntryBeforeCreate
|
|
290
258
|
});
|
|
291
259
|
(0, _beforeUpdate.assignBeforeEntryUpdate)({
|
|
292
260
|
context,
|
|
293
|
-
|
|
261
|
+
onEntryBeforeUpdate
|
|
294
262
|
});
|
|
295
263
|
(0, _afterDelete.assignAfterEntryDelete)({
|
|
296
264
|
context,
|
|
297
|
-
|
|
265
|
+
onEntryAfterDelete
|
|
298
266
|
});
|
|
299
|
-
|
|
300
267
|
const checkEntryPermissions = check => {
|
|
301
268
|
return (0, _permissions.checkPermissions)(context, "cms.contentEntry", check);
|
|
302
269
|
};
|
|
270
|
+
|
|
303
271
|
/**
|
|
304
272
|
* A helper to delete the entire entry.
|
|
305
273
|
*/
|
|
306
|
-
|
|
307
|
-
|
|
308
274
|
const deleteEntry = async params => {
|
|
309
275
|
const {
|
|
310
276
|
model,
|
|
311
277
|
entry
|
|
312
278
|
} = params;
|
|
313
|
-
|
|
314
279
|
try {
|
|
315
|
-
await
|
|
280
|
+
await onEntryBeforeDelete.publish({
|
|
316
281
|
entry,
|
|
317
282
|
model
|
|
318
283
|
});
|
|
319
284
|
await storageOperations.entries.delete(model, {
|
|
320
285
|
entry
|
|
321
286
|
});
|
|
322
|
-
await
|
|
287
|
+
await onEntryAfterDelete.publish({
|
|
323
288
|
entry,
|
|
324
289
|
model
|
|
325
290
|
});
|
|
326
291
|
} catch (ex) {
|
|
292
|
+
await onEntryDeleteError.publish({
|
|
293
|
+
entry,
|
|
294
|
+
model,
|
|
295
|
+
error: ex
|
|
296
|
+
});
|
|
327
297
|
throw new _error.default(ex.message || "Could not delete entry.", ex.code || "DELETE_ERROR", {
|
|
328
298
|
entry
|
|
329
299
|
});
|
|
@@ -332,8 +302,6 @@ const createContentEntryCrud = params => {
|
|
|
332
302
|
/**
|
|
333
303
|
* A helper to get entries by revision IDs
|
|
334
304
|
*/
|
|
335
|
-
|
|
336
|
-
|
|
337
305
|
const getEntriesByIds = async (initialModel, ids) => {
|
|
338
306
|
const permission = await checkEntryPermissions({
|
|
339
307
|
rwd: "r"
|
|
@@ -348,38 +316,60 @@ const createContentEntryCrud = params => {
|
|
|
348
316
|
});
|
|
349
317
|
return entries.filter(entry => (0, _ownership.validateOwnership)(context, permission, entry));
|
|
350
318
|
};
|
|
351
|
-
|
|
352
319
|
return {
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
320
|
+
/**
|
|
321
|
+
* Deprecated - will be removed in 5.35.0
|
|
322
|
+
*/
|
|
323
|
+
onBeforeEntryCreate: onEntryBeforeCreate,
|
|
324
|
+
onAfterEntryCreate: onEntryAfterCreate,
|
|
325
|
+
onBeforeEntryCreateRevision: onEntryBeforeCreateRevision,
|
|
326
|
+
onAfterEntryCreateRevision: onEntryRevisionAfterCreate,
|
|
327
|
+
onBeforeEntryUpdate: onEntryBeforeUpdate,
|
|
328
|
+
onAfterEntryUpdate: onEntryAfterUpdate,
|
|
329
|
+
onBeforeEntryDelete: onEntryBeforeDelete,
|
|
330
|
+
onAfterEntryDelete: onEntryAfterDelete,
|
|
331
|
+
onBeforeEntryDeleteRevision: onEntryRevisionBeforeDelete,
|
|
332
|
+
onAfterEntryDeleteRevision: onEntryRevisionAfterDelete,
|
|
333
|
+
onBeforeEntryPublish: onEntryBeforePublish,
|
|
334
|
+
onAfterEntryPublish: onEntryAfterPublish,
|
|
335
|
+
onBeforeEntryUnpublish: onEntryBeforeUnpublish,
|
|
336
|
+
onAfterEntryUnpublish: onEntryAfterUnpublish,
|
|
337
|
+
onBeforeEntryGet: onEntryBeforeGet,
|
|
338
|
+
onBeforeEntryList: onEntryBeforeList,
|
|
339
|
+
/**
|
|
340
|
+
* Released in 5.34.0
|
|
341
|
+
*/
|
|
342
|
+
onEntryBeforeCreate,
|
|
343
|
+
onEntryAfterCreate,
|
|
344
|
+
onEntryCreateError,
|
|
345
|
+
onEntryRevisionBeforeCreate: onEntryBeforeCreateRevision,
|
|
346
|
+
onEntryRevisionAfterCreate,
|
|
347
|
+
onEntryRevisionCreateError: onEntryCreateRevisionError,
|
|
348
|
+
onEntryBeforeUpdate,
|
|
349
|
+
onEntryAfterUpdate,
|
|
350
|
+
onEntryUpdateError,
|
|
351
|
+
onEntryBeforeDelete,
|
|
352
|
+
onEntryAfterDelete,
|
|
353
|
+
onEntryDeleteError,
|
|
354
|
+
onEntryRevisionBeforeDelete,
|
|
355
|
+
onEntryRevisionAfterDelete,
|
|
356
|
+
onEntryRevisionDeleteError,
|
|
357
|
+
onEntryBeforePublish,
|
|
358
|
+
onEntryAfterPublish,
|
|
359
|
+
onEntryPublishError,
|
|
360
|
+
onEntryBeforeUnpublish,
|
|
361
|
+
onEntryAfterUnpublish,
|
|
362
|
+
onEntryUnpublishError,
|
|
363
|
+
onEntryBeforeGet,
|
|
364
|
+
onEntryBeforeList,
|
|
374
365
|
/**
|
|
375
366
|
* Get entries by exact revision IDs from the database.
|
|
376
367
|
*/
|
|
377
368
|
getEntriesByIds: getEntriesByIds,
|
|
378
|
-
|
|
379
369
|
/**
|
|
380
370
|
* Get a single entry by revision ID from the database.
|
|
381
371
|
*/
|
|
382
|
-
|
|
372
|
+
async getEntryById(initialModel, id) {
|
|
383
373
|
const where = {
|
|
384
374
|
id
|
|
385
375
|
};
|
|
@@ -387,23 +377,20 @@ const createContentEntryCrud = params => {
|
|
|
387
377
|
model: initialModel,
|
|
388
378
|
plugins
|
|
389
379
|
});
|
|
390
|
-
await
|
|
380
|
+
await onEntryBeforeGet.publish({
|
|
391
381
|
where,
|
|
392
382
|
model
|
|
393
383
|
});
|
|
394
384
|
const [entry] = await getEntriesByIds(model, [id]);
|
|
395
|
-
|
|
396
385
|
if (!entry) {
|
|
397
386
|
throw new _handlerGraphql.NotFoundError(`Entry by ID "${id}" not found.`);
|
|
398
387
|
}
|
|
399
|
-
|
|
400
388
|
return entry;
|
|
401
389
|
},
|
|
402
|
-
|
|
403
390
|
/**
|
|
404
391
|
* Get published revisions by entry IDs.
|
|
405
392
|
*/
|
|
406
|
-
|
|
393
|
+
async getPublishedEntriesByIds(initialModel, ids) {
|
|
407
394
|
const permission = await checkEntryPermissions({
|
|
408
395
|
rwd: "r"
|
|
409
396
|
});
|
|
@@ -417,11 +404,10 @@ const createContentEntryCrud = params => {
|
|
|
417
404
|
});
|
|
418
405
|
return entries.filter(entry => (0, _ownership.validateOwnership)(context, permission, entry));
|
|
419
406
|
},
|
|
420
|
-
|
|
421
407
|
/**
|
|
422
408
|
* Get latest revisions by entry IDs.
|
|
423
409
|
*/
|
|
424
|
-
|
|
410
|
+
async getLatestEntriesByIds(initialModel, ids) {
|
|
425
411
|
const permission = await checkEntryPermissions({
|
|
426
412
|
rwd: "r"
|
|
427
413
|
});
|
|
@@ -435,7 +421,7 @@ const createContentEntryCrud = params => {
|
|
|
435
421
|
});
|
|
436
422
|
return entries.filter(entry => (0, _ownership.validateOwnership)(context, permission, entry));
|
|
437
423
|
},
|
|
438
|
-
|
|
424
|
+
async getEntryRevisions(initialModel, entryId) {
|
|
439
425
|
const model = (0, _valueKeyStorageConverter.attachCmsModelFieldConverters)({
|
|
440
426
|
model: initialModel,
|
|
441
427
|
plugins
|
|
@@ -444,13 +430,12 @@ const createContentEntryCrud = params => {
|
|
|
444
430
|
id: entryId
|
|
445
431
|
});
|
|
446
432
|
},
|
|
447
|
-
|
|
448
433
|
/**
|
|
449
434
|
* TODO determine if this method is required at all.
|
|
450
435
|
*
|
|
451
436
|
* @internal
|
|
452
437
|
*/
|
|
453
|
-
|
|
438
|
+
async getEntry(initialModel, params) {
|
|
454
439
|
await checkEntryPermissions({
|
|
455
440
|
rwd: "r"
|
|
456
441
|
});
|
|
@@ -462,29 +447,26 @@ const createContentEntryCrud = params => {
|
|
|
462
447
|
where,
|
|
463
448
|
sort
|
|
464
449
|
} = params;
|
|
465
|
-
await
|
|
450
|
+
await onEntryBeforeGet.publish({
|
|
466
451
|
where,
|
|
467
452
|
model
|
|
468
453
|
});
|
|
469
|
-
const [items] = await
|
|
454
|
+
const [items] = await this.listEntries(model, {
|
|
470
455
|
where,
|
|
471
456
|
sort,
|
|
472
457
|
limit: 1
|
|
473
458
|
});
|
|
474
|
-
|
|
475
459
|
if (items.length === 0) {
|
|
476
460
|
throw new _handlerGraphql.NotFoundError(`Entry not found!`);
|
|
477
461
|
}
|
|
478
|
-
|
|
479
462
|
return items[0];
|
|
480
463
|
},
|
|
481
|
-
|
|
482
464
|
/**
|
|
483
465
|
* @description Should not be used directly. Internal use only!
|
|
484
466
|
*
|
|
485
467
|
* @internal
|
|
486
468
|
*/
|
|
487
|
-
|
|
469
|
+
async listEntries(initialModel, params) {
|
|
488
470
|
const permission = await checkEntryPermissions({
|
|
489
471
|
rwd: "r"
|
|
490
472
|
});
|
|
@@ -499,16 +481,12 @@ const createContentEntryCrud = params => {
|
|
|
499
481
|
/**
|
|
500
482
|
* We always assign tenant and locale because we do not allow one model to have content through multiple tenants.
|
|
501
483
|
*/
|
|
502
|
-
|
|
503
|
-
const where = _objectSpread({}, initialWhere);
|
|
484
|
+
const where = (0, _objectSpread2.default)({}, initialWhere);
|
|
504
485
|
/**
|
|
505
486
|
* Possibly only get records which are owned by current user.
|
|
506
487
|
* Or if searching for the owner set that value - in the case that user can see other entries than their own.
|
|
507
488
|
*/
|
|
508
|
-
|
|
509
|
-
|
|
510
489
|
const ownedBy = permission.own ? getIdentity().id : where.ownedBy;
|
|
511
|
-
|
|
512
490
|
if (ownedBy !== undefined) {
|
|
513
491
|
where.ownedBy = ownedBy;
|
|
514
492
|
}
|
|
@@ -516,8 +494,6 @@ const createContentEntryCrud = params => {
|
|
|
516
494
|
* Where must contain either latest or published keys.
|
|
517
495
|
* We cannot list entries without one of those
|
|
518
496
|
*/
|
|
519
|
-
|
|
520
|
-
|
|
521
497
|
if (where.latest && where.published) {
|
|
522
498
|
throw new _error.default("Cannot list entries that are both published and latest.", "LIST_ENTRIES_ERROR", {
|
|
523
499
|
where
|
|
@@ -527,15 +503,13 @@ const createContentEntryCrud = params => {
|
|
|
527
503
|
where
|
|
528
504
|
});
|
|
529
505
|
}
|
|
530
|
-
|
|
531
506
|
const fields = getSearchableFields({
|
|
532
507
|
model,
|
|
533
508
|
plugins: context.plugins,
|
|
534
509
|
fields: params.fields || []
|
|
535
510
|
});
|
|
536
|
-
|
|
537
511
|
try {
|
|
538
|
-
await
|
|
512
|
+
await onEntryBeforeList.publish({
|
|
539
513
|
where,
|
|
540
514
|
model
|
|
541
515
|
});
|
|
@@ -544,14 +518,13 @@ const createContentEntryCrud = params => {
|
|
|
544
518
|
totalCount,
|
|
545
519
|
cursor,
|
|
546
520
|
items
|
|
547
|
-
} = await storageOperations.entries.list(model,
|
|
521
|
+
} = await storageOperations.entries.list(model, (0, _objectSpread2.default)((0, _objectSpread2.default)({}, params), {}, {
|
|
548
522
|
where,
|
|
549
523
|
fields
|
|
550
524
|
}));
|
|
551
525
|
const meta = {
|
|
552
526
|
hasMoreItems,
|
|
553
527
|
totalCount,
|
|
554
|
-
|
|
555
528
|
/**
|
|
556
529
|
* Cursor should be null if there are no more items to load.
|
|
557
530
|
* Just make sure of that, disregarding what is returned from the storageOperations.entries.list method.
|
|
@@ -562,33 +535,37 @@ const createContentEntryCrud = params => {
|
|
|
562
535
|
} catch (ex) {
|
|
563
536
|
throw new _error.default("Error while fetching entries from storage.", "LIST_ENTRIES_ERROR", {
|
|
564
537
|
params,
|
|
565
|
-
error:
|
|
538
|
+
error: {
|
|
539
|
+
message: ex.message,
|
|
540
|
+
code: ex.code,
|
|
541
|
+
data: ex.data
|
|
542
|
+
},
|
|
566
543
|
model,
|
|
567
544
|
fields
|
|
568
545
|
});
|
|
569
546
|
}
|
|
570
547
|
},
|
|
571
|
-
|
|
548
|
+
async listLatestEntries(model, params) {
|
|
572
549
|
const where = (params === null || params === void 0 ? void 0 : params.where) || {};
|
|
573
|
-
return
|
|
550
|
+
return this.listEntries(model, (0, _objectSpread2.default)((0, _objectSpread2.default)({
|
|
574
551
|
sort: ["createdOn_DESC"]
|
|
575
552
|
}, params || {}), {}, {
|
|
576
|
-
where:
|
|
553
|
+
where: (0, _objectSpread2.default)((0, _objectSpread2.default)({}, where), {}, {
|
|
577
554
|
latest: true
|
|
578
555
|
})
|
|
579
556
|
}));
|
|
580
557
|
},
|
|
581
|
-
|
|
558
|
+
async listPublishedEntries(model, params) {
|
|
582
559
|
const where = (params === null || params === void 0 ? void 0 : params.where) || {};
|
|
583
|
-
return
|
|
560
|
+
return this.listEntries(model, (0, _objectSpread2.default)((0, _objectSpread2.default)({
|
|
584
561
|
sort: ["createdOn_DESC"]
|
|
585
562
|
}, params || {}), {}, {
|
|
586
|
-
where:
|
|
563
|
+
where: (0, _objectSpread2.default)((0, _objectSpread2.default)({}, where), {}, {
|
|
587
564
|
published: true
|
|
588
565
|
})
|
|
589
566
|
}));
|
|
590
567
|
},
|
|
591
|
-
|
|
568
|
+
async createEntry(initialModel, inputData) {
|
|
592
569
|
await checkEntryPermissions({
|
|
593
570
|
rwd: "w"
|
|
594
571
|
});
|
|
@@ -597,10 +574,10 @@ const createContentEntryCrud = params => {
|
|
|
597
574
|
model: initialModel,
|
|
598
575
|
plugins
|
|
599
576
|
});
|
|
577
|
+
|
|
600
578
|
/**
|
|
601
579
|
* Make sure we only work with fields that are defined in the model.
|
|
602
580
|
*/
|
|
603
|
-
|
|
604
581
|
const initialInput = mapAndCleanCreateInputData(model, inputData);
|
|
605
582
|
await (0, _entryDataValidation.validateModelEntryData)({
|
|
606
583
|
context,
|
|
@@ -614,7 +591,7 @@ const createContentEntryCrud = params => {
|
|
|
614
591
|
validateEntries: true
|
|
615
592
|
});
|
|
616
593
|
const identity = context.security.getIdentity();
|
|
617
|
-
const locale =
|
|
594
|
+
const locale = this.getLocale();
|
|
618
595
|
const owner = {
|
|
619
596
|
id: identity.id,
|
|
620
597
|
displayName: identity.displayName,
|
|
@@ -642,9 +619,8 @@ const createContentEntryCrud = params => {
|
|
|
642
619
|
values: input
|
|
643
620
|
};
|
|
644
621
|
let storageEntry = null;
|
|
645
|
-
|
|
646
622
|
try {
|
|
647
|
-
await
|
|
623
|
+
await onEntryBeforeCreate.publish({
|
|
648
624
|
entry,
|
|
649
625
|
input,
|
|
650
626
|
model
|
|
@@ -654,7 +630,7 @@ const createContentEntryCrud = params => {
|
|
|
654
630
|
entry,
|
|
655
631
|
storageEntry
|
|
656
632
|
});
|
|
657
|
-
await
|
|
633
|
+
await onEntryAfterCreate.publish({
|
|
658
634
|
entry,
|
|
659
635
|
storageEntry: result,
|
|
660
636
|
model,
|
|
@@ -662,6 +638,12 @@ const createContentEntryCrud = params => {
|
|
|
662
638
|
});
|
|
663
639
|
return result;
|
|
664
640
|
} catch (ex) {
|
|
641
|
+
await onEntryCreateError.publish({
|
|
642
|
+
error: ex,
|
|
643
|
+
entry,
|
|
644
|
+
model,
|
|
645
|
+
input
|
|
646
|
+
});
|
|
665
647
|
throw new _error.default(ex.message || "Could not create content entry.", ex.code || "CREATE_ENTRY_ERROR", ex.data || {
|
|
666
648
|
error: ex,
|
|
667
649
|
input,
|
|
@@ -670,7 +652,7 @@ const createContentEntryCrud = params => {
|
|
|
670
652
|
});
|
|
671
653
|
}
|
|
672
654
|
},
|
|
673
|
-
|
|
655
|
+
async createEntryRevisionFrom(initialModel, sourceId, inputData) {
|
|
674
656
|
const permission = await checkEntryPermissions({
|
|
675
657
|
rwd: "w"
|
|
676
658
|
});
|
|
@@ -679,15 +661,15 @@ const createContentEntryCrud = params => {
|
|
|
679
661
|
model: initialModel,
|
|
680
662
|
plugins
|
|
681
663
|
});
|
|
664
|
+
|
|
682
665
|
/**
|
|
683
666
|
* Make sure we only work with fields that are defined in the model.
|
|
684
667
|
*/
|
|
685
|
-
|
|
686
668
|
const input = mapAndCleanUpdatedInputData(model, inputData);
|
|
669
|
+
|
|
687
670
|
/**
|
|
688
671
|
* Entries are identified by a common parent ID + Revision number.
|
|
689
672
|
*/
|
|
690
|
-
|
|
691
673
|
const {
|
|
692
674
|
id: uniqueId
|
|
693
675
|
} = (0, _utils.parseIdentifier)(sourceId);
|
|
@@ -697,19 +679,15 @@ const createContentEntryCrud = params => {
|
|
|
697
679
|
const latestStorageEntry = await storageOperations.entries.getLatestRevisionByEntryId(model, {
|
|
698
680
|
id: uniqueId
|
|
699
681
|
});
|
|
700
|
-
|
|
701
682
|
if (!originalStorageEntry) {
|
|
702
683
|
throw new _handlerGraphql.NotFoundError(`Entry "${sourceId}" of model "${model.modelId}" was not found.`);
|
|
703
684
|
}
|
|
685
|
+
|
|
704
686
|
/**
|
|
705
687
|
* We need to convert data from DB to its original form before using it further.
|
|
706
688
|
*/
|
|
707
|
-
|
|
708
|
-
|
|
709
689
|
const originalEntry = await (0, _entryStorage.entryFromStorageTransform)(context, model, originalStorageEntry);
|
|
710
|
-
|
|
711
|
-
const initialValues = _objectSpread(_objectSpread({}, originalEntry.values), input);
|
|
712
|
-
|
|
690
|
+
const initialValues = (0, _objectSpread2.default)((0, _objectSpread2.default)({}, originalEntry.values), input);
|
|
713
691
|
await (0, _entryDataValidation.validateModelEntryData)({
|
|
714
692
|
context,
|
|
715
693
|
model,
|
|
@@ -729,8 +707,7 @@ const createContentEntryCrud = params => {
|
|
|
729
707
|
id,
|
|
730
708
|
version: nextVersion
|
|
731
709
|
} = increaseEntryIdVersion(latestId);
|
|
732
|
-
|
|
733
|
-
const entry = _objectSpread(_objectSpread({}, originalEntry), {}, {
|
|
710
|
+
const entry = (0, _objectSpread2.default)((0, _objectSpread2.default)({}, originalEntry), {}, {
|
|
734
711
|
id,
|
|
735
712
|
version: nextVersion,
|
|
736
713
|
savedOn: new Date().toISOString(),
|
|
@@ -745,11 +722,9 @@ const createContentEntryCrud = params => {
|
|
|
745
722
|
status: STATUS_DRAFT,
|
|
746
723
|
values
|
|
747
724
|
});
|
|
748
|
-
|
|
749
725
|
let storageEntry = null;
|
|
750
|
-
|
|
751
726
|
try {
|
|
752
|
-
await
|
|
727
|
+
await onEntryBeforeCreateRevision.publish({
|
|
753
728
|
input,
|
|
754
729
|
entry,
|
|
755
730
|
original: originalEntry,
|
|
@@ -760,7 +735,7 @@ const createContentEntryCrud = params => {
|
|
|
760
735
|
entry,
|
|
761
736
|
storageEntry
|
|
762
737
|
});
|
|
763
|
-
await
|
|
738
|
+
await onEntryRevisionAfterCreate.publish({
|
|
764
739
|
input,
|
|
765
740
|
entry,
|
|
766
741
|
model,
|
|
@@ -769,6 +744,12 @@ const createContentEntryCrud = params => {
|
|
|
769
744
|
});
|
|
770
745
|
return result;
|
|
771
746
|
} catch (ex) {
|
|
747
|
+
await onEntryCreateRevisionError.publish({
|
|
748
|
+
entry,
|
|
749
|
+
model,
|
|
750
|
+
input,
|
|
751
|
+
error: ex
|
|
752
|
+
});
|
|
772
753
|
throw new _error.default(ex.message || "Could not create entry from existing one.", ex.code || "CREATE_FROM_REVISION_ERROR", {
|
|
773
754
|
error: ex,
|
|
774
755
|
entry,
|
|
@@ -778,7 +759,7 @@ const createContentEntryCrud = params => {
|
|
|
778
759
|
});
|
|
779
760
|
}
|
|
780
761
|
},
|
|
781
|
-
|
|
762
|
+
async updateEntry(initialModel, id, inputData, metaInput) {
|
|
782
763
|
const permission = await checkEntryPermissions({
|
|
783
764
|
rwd: "w"
|
|
784
765
|
});
|
|
@@ -787,27 +768,24 @@ const createContentEntryCrud = params => {
|
|
|
787
768
|
model: initialModel,
|
|
788
769
|
plugins
|
|
789
770
|
});
|
|
771
|
+
|
|
790
772
|
/**
|
|
791
773
|
* Make sure we only work with fields that are defined in the model.
|
|
792
774
|
*/
|
|
793
|
-
|
|
794
775
|
const input = mapAndCleanUpdatedInputData(model, inputData);
|
|
776
|
+
|
|
795
777
|
/**
|
|
796
778
|
* The entry we are going to update.
|
|
797
779
|
*/
|
|
798
|
-
|
|
799
780
|
const originalStorageEntry = await storageOperations.entries.getRevisionById(model, {
|
|
800
781
|
id
|
|
801
782
|
});
|
|
802
|
-
|
|
803
783
|
if (!originalStorageEntry) {
|
|
804
784
|
throw new _handlerGraphql.NotFoundError(`Entry "${id}" of model "${model.modelId}" was not found.`);
|
|
805
785
|
}
|
|
806
|
-
|
|
807
786
|
if (originalStorageEntry.locked) {
|
|
808
787
|
throw new _error.default(`Cannot update entry because it's locked.`, "CONTENT_ENTRY_UPDATE_ERROR");
|
|
809
788
|
}
|
|
810
|
-
|
|
811
789
|
const originalEntry = await (0, _entryStorage.entryFromStorageTransform)(context, model, originalStorageEntry);
|
|
812
790
|
await (0, _entryDataValidation.validateModelEntryData)({
|
|
813
791
|
context,
|
|
@@ -816,9 +794,7 @@ const createContentEntryCrud = params => {
|
|
|
816
794
|
entry: originalEntry
|
|
817
795
|
});
|
|
818
796
|
(0, _ownership.checkOwnership)(context, permission, originalEntry);
|
|
819
|
-
|
|
820
|
-
const initialValues = _objectSpread(_objectSpread({}, originalEntry.values), input);
|
|
821
|
-
|
|
797
|
+
const initialValues = (0, _objectSpread2.default)((0, _objectSpread2.default)({}, originalEntry.values), input);
|
|
822
798
|
const values = await (0, _referenceFieldsMapping.referenceFieldsMapping)({
|
|
823
799
|
context,
|
|
824
800
|
model,
|
|
@@ -828,22 +804,19 @@ const createContentEntryCrud = params => {
|
|
|
828
804
|
/**
|
|
829
805
|
* If users wants to remove a key from meta values, they need to send meta key with the null value.
|
|
830
806
|
*/
|
|
831
|
-
|
|
832
807
|
const meta = createEntryMeta(metaInput, originalEntry.meta);
|
|
833
808
|
/**
|
|
834
809
|
* We always send the full entry to the hooks and storage operations update.
|
|
835
810
|
*/
|
|
836
|
-
|
|
837
|
-
const entry = _objectSpread(_objectSpread({}, originalEntry), {}, {
|
|
811
|
+
const entry = (0, _objectSpread2.default)((0, _objectSpread2.default)({}, originalEntry), {}, {
|
|
838
812
|
savedOn: new Date().toISOString(),
|
|
839
813
|
values,
|
|
840
|
-
meta
|
|
814
|
+
meta,
|
|
815
|
+
status: transformEntryStatus(originalEntry.status)
|
|
841
816
|
});
|
|
842
|
-
|
|
843
817
|
let storageEntry = null;
|
|
844
|
-
|
|
845
818
|
try {
|
|
846
|
-
await
|
|
819
|
+
await onEntryBeforeUpdate.publish({
|
|
847
820
|
entry,
|
|
848
821
|
model,
|
|
849
822
|
input,
|
|
@@ -854,7 +827,7 @@ const createContentEntryCrud = params => {
|
|
|
854
827
|
entry,
|
|
855
828
|
storageEntry
|
|
856
829
|
});
|
|
857
|
-
await
|
|
830
|
+
await onEntryAfterUpdate.publish({
|
|
858
831
|
entry,
|
|
859
832
|
storageEntry: result,
|
|
860
833
|
model,
|
|
@@ -863,6 +836,12 @@ const createContentEntryCrud = params => {
|
|
|
863
836
|
});
|
|
864
837
|
return result;
|
|
865
838
|
} catch (ex) {
|
|
839
|
+
await onEntryUpdateError.publish({
|
|
840
|
+
entry,
|
|
841
|
+
model,
|
|
842
|
+
input,
|
|
843
|
+
error: ex
|
|
844
|
+
});
|
|
866
845
|
throw new _error.default(ex.message || "Could not update existing entry.", ex.code || "UPDATE_ERROR", {
|
|
867
846
|
error: ex,
|
|
868
847
|
entry,
|
|
@@ -872,7 +851,7 @@ const createContentEntryCrud = params => {
|
|
|
872
851
|
});
|
|
873
852
|
}
|
|
874
853
|
},
|
|
875
|
-
|
|
854
|
+
async republishEntry(initialModel, id) {
|
|
876
855
|
await checkEntryPermissions({
|
|
877
856
|
rwd: "w"
|
|
878
857
|
});
|
|
@@ -884,45 +863,37 @@ const createContentEntryCrud = params => {
|
|
|
884
863
|
/**
|
|
885
864
|
* Fetch the entry from the storage.
|
|
886
865
|
*/
|
|
887
|
-
|
|
888
866
|
const originalStorageEntry = await storageOperations.entries.getRevisionById(model, {
|
|
889
867
|
id
|
|
890
868
|
});
|
|
891
|
-
|
|
892
869
|
if (!originalStorageEntry) {
|
|
893
870
|
throw new _handlerGraphql.NotFoundError(`Entry "${id}" was not found!`);
|
|
894
871
|
}
|
|
895
|
-
|
|
896
872
|
const originalEntry = await (0, _entryStorage.entryFromStorageTransform)(context, model, originalStorageEntry);
|
|
897
873
|
/**
|
|
898
874
|
* We can only process published entries.
|
|
899
875
|
*/
|
|
900
|
-
|
|
901
876
|
if (originalEntry.status !== "published") {
|
|
902
877
|
throw new _error.default("Entry with given ID is not published!", "NOT_PUBLISHED_ERROR", {
|
|
903
878
|
id,
|
|
904
879
|
original: originalEntry
|
|
905
880
|
});
|
|
906
881
|
}
|
|
907
|
-
|
|
908
882
|
const values = await (0, _referenceFieldsMapping.referenceFieldsMapping)({
|
|
909
883
|
context,
|
|
910
884
|
model,
|
|
911
885
|
input: originalEntry.values,
|
|
912
886
|
validateEntries: false
|
|
913
887
|
});
|
|
914
|
-
|
|
915
|
-
const entry = _objectSpread(_objectSpread({}, originalEntry), {}, {
|
|
888
|
+
const entry = (0, _objectSpread2.default)((0, _objectSpread2.default)({}, originalEntry), {}, {
|
|
916
889
|
savedOn: new Date().toISOString(),
|
|
917
890
|
webinyVersion: context.WEBINY_VERSION,
|
|
918
891
|
values
|
|
919
892
|
});
|
|
920
|
-
|
|
921
893
|
const storageEntry = await (0, _entryStorage.entryToStorageTransform)(context, model, entry);
|
|
922
894
|
/**
|
|
923
895
|
* First we need to update existing entry.
|
|
924
896
|
*/
|
|
925
|
-
|
|
926
897
|
try {
|
|
927
898
|
await storageOperations.entries.update(model, {
|
|
928
899
|
entry,
|
|
@@ -936,8 +907,6 @@ const createContentEntryCrud = params => {
|
|
|
936
907
|
/**
|
|
937
908
|
* Then we move onto publishing it again.
|
|
938
909
|
*/
|
|
939
|
-
|
|
940
|
-
|
|
941
910
|
try {
|
|
942
911
|
return await storageOperations.entries.publish(model, {
|
|
943
912
|
entry,
|
|
@@ -949,7 +918,7 @@ const createContentEntryCrud = params => {
|
|
|
949
918
|
});
|
|
950
919
|
}
|
|
951
920
|
},
|
|
952
|
-
|
|
921
|
+
async deleteEntryRevision(initialModel, revisionId) {
|
|
953
922
|
const permission = await checkEntryPermissions({
|
|
954
923
|
rwd: "d"
|
|
955
924
|
});
|
|
@@ -972,11 +941,9 @@ const createContentEntryCrud = params => {
|
|
|
972
941
|
entryId,
|
|
973
942
|
version: version
|
|
974
943
|
});
|
|
975
|
-
|
|
976
944
|
if (!storageEntryToDelete) {
|
|
977
945
|
throw new _handlerGraphql.NotFoundError(`Entry "${revisionId}" was not found!`);
|
|
978
946
|
}
|
|
979
|
-
|
|
980
947
|
(0, _ownership.checkOwnership)(context, permission, storageEntryToDelete);
|
|
981
948
|
const latestEntryRevisionId = latestStorageEntry ? latestStorageEntry.id : null;
|
|
982
949
|
const entryToDelete = await (0, _entryStorage.entryFromStorageTransform)(context, model, storageEntryToDelete);
|
|
@@ -984,7 +951,6 @@ const createContentEntryCrud = params => {
|
|
|
984
951
|
* If targeted record is the latest entry record and there is no previous one, we need to run full delete with hooks.
|
|
985
952
|
* At this point deleteRevision hooks are not fired.
|
|
986
953
|
*/
|
|
987
|
-
|
|
988
954
|
if (entryToDelete.id === latestEntryRevisionId && !previousStorageEntry) {
|
|
989
955
|
return await deleteEntry({
|
|
990
956
|
model,
|
|
@@ -994,18 +960,14 @@ const createContentEntryCrud = params => {
|
|
|
994
960
|
/**
|
|
995
961
|
* If targeted record is latest entry revision, set the previous one as the new latest
|
|
996
962
|
*/
|
|
997
|
-
|
|
998
|
-
|
|
999
963
|
let entryToSetAsLatest = null;
|
|
1000
964
|
let storageEntryToSetAsLatest = null;
|
|
1001
|
-
|
|
1002
965
|
if (entryToDelete.id === latestEntryRevisionId && previousStorageEntry) {
|
|
1003
966
|
entryToSetAsLatest = await (0, _entryStorage.entryFromStorageTransform)(context, model, previousStorageEntry);
|
|
1004
967
|
storageEntryToSetAsLatest = previousStorageEntry;
|
|
1005
968
|
}
|
|
1006
|
-
|
|
1007
969
|
try {
|
|
1008
|
-
await
|
|
970
|
+
await onEntryRevisionBeforeDelete.publish({
|
|
1009
971
|
entry: entryToDelete,
|
|
1010
972
|
model
|
|
1011
973
|
});
|
|
@@ -1015,11 +977,16 @@ const createContentEntryCrud = params => {
|
|
|
1015
977
|
latestEntry: entryToSetAsLatest,
|
|
1016
978
|
latestStorageEntry: storageEntryToSetAsLatest
|
|
1017
979
|
});
|
|
1018
|
-
await
|
|
980
|
+
await onEntryRevisionAfterDelete.publish({
|
|
1019
981
|
entry: entryToDelete,
|
|
1020
982
|
model
|
|
1021
983
|
});
|
|
1022
984
|
} catch (ex) {
|
|
985
|
+
await onEntryRevisionDeleteError.publish({
|
|
986
|
+
entry: entryToDelete,
|
|
987
|
+
model,
|
|
988
|
+
error: ex
|
|
989
|
+
});
|
|
1023
990
|
throw new _error.default(ex.message, ex.code || "DELETE_REVISION_ERROR", {
|
|
1024
991
|
error: ex,
|
|
1025
992
|
entry: entryToDelete,
|
|
@@ -1029,7 +996,7 @@ const createContentEntryCrud = params => {
|
|
|
1029
996
|
});
|
|
1030
997
|
}
|
|
1031
998
|
},
|
|
1032
|
-
|
|
999
|
+
async deleteEntry(initialModel, entryId) {
|
|
1033
1000
|
const permission = await checkEntryPermissions({
|
|
1034
1001
|
rwd: "d"
|
|
1035
1002
|
});
|
|
@@ -1041,11 +1008,9 @@ const createContentEntryCrud = params => {
|
|
|
1041
1008
|
const storageEntry = await storageOperations.entries.getLatestRevisionByEntryId(model, {
|
|
1042
1009
|
id: entryId
|
|
1043
1010
|
});
|
|
1044
|
-
|
|
1045
1011
|
if (!storageEntry) {
|
|
1046
1012
|
throw new _handlerGraphql.NotFoundError(`Entry "${entryId}" was not found!`);
|
|
1047
1013
|
}
|
|
1048
|
-
|
|
1049
1014
|
(0, _ownership.checkOwnership)(context, permission, storageEntry);
|
|
1050
1015
|
const entry = await (0, _entryStorage.entryFromStorageTransform)(context, model, storageEntry);
|
|
1051
1016
|
return await deleteEntry({
|
|
@@ -1053,7 +1018,7 @@ const createContentEntryCrud = params => {
|
|
|
1053
1018
|
entry
|
|
1054
1019
|
});
|
|
1055
1020
|
},
|
|
1056
|
-
|
|
1021
|
+
async publishEntry(initialModel, id) {
|
|
1057
1022
|
const permission = await checkEntryPermissions({
|
|
1058
1023
|
pw: "p"
|
|
1059
1024
|
});
|
|
@@ -1065,26 +1030,21 @@ const createContentEntryCrud = params => {
|
|
|
1065
1030
|
const originalStorageEntry = await storageOperations.entries.getRevisionById(model, {
|
|
1066
1031
|
id
|
|
1067
1032
|
});
|
|
1068
|
-
|
|
1069
1033
|
if (!originalStorageEntry) {
|
|
1070
1034
|
throw new _handlerGraphql.NotFoundError(`Entry "${id}" in the model "${model.modelId}" was not found.`);
|
|
1071
1035
|
}
|
|
1072
|
-
|
|
1073
1036
|
(0, _ownership.checkOwnership)(context, permission, originalStorageEntry);
|
|
1074
1037
|
const originalEntry = await (0, _entryStorage.entryFromStorageTransform)(context, model, originalStorageEntry);
|
|
1075
1038
|
const currentDate = new Date().toISOString();
|
|
1076
|
-
|
|
1077
|
-
const entry = _objectSpread(_objectSpread({}, originalEntry), {}, {
|
|
1039
|
+
const entry = (0, _objectSpread2.default)((0, _objectSpread2.default)({}, originalEntry), {}, {
|
|
1078
1040
|
status: STATUS_PUBLISHED,
|
|
1079
1041
|
locked: true,
|
|
1080
1042
|
savedOn: currentDate,
|
|
1081
1043
|
publishedOn: currentDate
|
|
1082
1044
|
});
|
|
1083
|
-
|
|
1084
1045
|
let storageEntry = null;
|
|
1085
|
-
|
|
1086
1046
|
try {
|
|
1087
|
-
await
|
|
1047
|
+
await onEntryBeforePublish.publish({
|
|
1088
1048
|
entry,
|
|
1089
1049
|
model
|
|
1090
1050
|
});
|
|
@@ -1093,13 +1053,18 @@ const createContentEntryCrud = params => {
|
|
|
1093
1053
|
entry,
|
|
1094
1054
|
storageEntry
|
|
1095
1055
|
});
|
|
1096
|
-
await
|
|
1056
|
+
await onEntryAfterPublish.publish({
|
|
1097
1057
|
entry,
|
|
1098
1058
|
storageEntry: result,
|
|
1099
1059
|
model
|
|
1100
1060
|
});
|
|
1101
1061
|
return result;
|
|
1102
1062
|
} catch (ex) {
|
|
1063
|
+
await onEntryPublishError.publish({
|
|
1064
|
+
entry,
|
|
1065
|
+
model,
|
|
1066
|
+
error: ex
|
|
1067
|
+
});
|
|
1103
1068
|
throw new _error.default(ex.message || "Could not publish entry.", ex.code || "PUBLISH_ERROR", {
|
|
1104
1069
|
error: ex,
|
|
1105
1070
|
entry,
|
|
@@ -1109,130 +1074,7 @@ const createContentEntryCrud = params => {
|
|
|
1109
1074
|
});
|
|
1110
1075
|
}
|
|
1111
1076
|
},
|
|
1112
|
-
|
|
1113
|
-
const permission = await checkEntryPermissions({
|
|
1114
|
-
pw: "c"
|
|
1115
|
-
});
|
|
1116
|
-
const model = (0, _valueKeyStorageConverter.attachCmsModelFieldConverters)({
|
|
1117
|
-
model: initialModel,
|
|
1118
|
-
plugins
|
|
1119
|
-
});
|
|
1120
|
-
const originalStorageEntry = await storageOperations.entries.getRevisionById(model, {
|
|
1121
|
-
id
|
|
1122
|
-
});
|
|
1123
|
-
|
|
1124
|
-
if (!originalStorageEntry) {
|
|
1125
|
-
throw new _handlerGraphql.NotFoundError(`Entry "${id}" of model "${model.modelId}" was not found.`);
|
|
1126
|
-
}
|
|
1127
|
-
|
|
1128
|
-
const originalEntry = await (0, _entryStorage.entryFromStorageTransform)(context, model, originalStorageEntry);
|
|
1129
|
-
|
|
1130
|
-
if (originalEntry.status !== STATUS_REVIEW_REQUESTED) {
|
|
1131
|
-
throw new _error.default("Cannot request changes on an entry that's not under review.", "ENTRY_NOT_UNDER_REVIEW");
|
|
1132
|
-
}
|
|
1133
|
-
|
|
1134
|
-
const identity = context.security.getIdentity();
|
|
1135
|
-
|
|
1136
|
-
if (originalEntry.ownedBy.id === identity.id) {
|
|
1137
|
-
throw new _error.default("You cannot request changes on your own entry.", "CANNOT_REQUEST_CHANGES_ON_OWN_ENTRY");
|
|
1138
|
-
}
|
|
1139
|
-
|
|
1140
|
-
(0, _ownership.checkOwnership)(context, permission, originalEntry);
|
|
1141
|
-
|
|
1142
|
-
const entry = _objectSpread(_objectSpread({}, originalEntry), {}, {
|
|
1143
|
-
status: STATUS_CHANGES_REQUESTED
|
|
1144
|
-
});
|
|
1145
|
-
|
|
1146
|
-
let storageEntry = null;
|
|
1147
|
-
|
|
1148
|
-
try {
|
|
1149
|
-
await onBeforeEntryRequestChanges.publish({
|
|
1150
|
-
entry,
|
|
1151
|
-
model
|
|
1152
|
-
});
|
|
1153
|
-
storageEntry = await (0, _entryStorage.entryToStorageTransform)(context, model, entry);
|
|
1154
|
-
const result = await storageOperations.entries.requestChanges(model, {
|
|
1155
|
-
entry,
|
|
1156
|
-
storageEntry
|
|
1157
|
-
});
|
|
1158
|
-
await onAfterEntryRequestChanges.publish({
|
|
1159
|
-
entry,
|
|
1160
|
-
storageEntry: result,
|
|
1161
|
-
model
|
|
1162
|
-
});
|
|
1163
|
-
return result;
|
|
1164
|
-
} catch (ex) {
|
|
1165
|
-
throw new _error.default(ex.message || "Could not request changes for the entry.", ex.code || "REQUEST_CHANGES_ERROR", {
|
|
1166
|
-
entry,
|
|
1167
|
-
originalEntry
|
|
1168
|
-
});
|
|
1169
|
-
}
|
|
1170
|
-
},
|
|
1171
|
-
requestEntryReview: async (initialModel, id) => {
|
|
1172
|
-
const permission = await checkEntryPermissions({
|
|
1173
|
-
pw: "r"
|
|
1174
|
-
});
|
|
1175
|
-
const {
|
|
1176
|
-
id: entryId
|
|
1177
|
-
} = (0, _utils.parseIdentifier)(id);
|
|
1178
|
-
const model = (0, _valueKeyStorageConverter.attachCmsModelFieldConverters)({
|
|
1179
|
-
model: initialModel,
|
|
1180
|
-
plugins
|
|
1181
|
-
});
|
|
1182
|
-
const originalStorageEntry = await storageOperations.entries.getRevisionById(model, {
|
|
1183
|
-
id
|
|
1184
|
-
});
|
|
1185
|
-
const latestEntryRevision = await storageOperations.entries.getLatestRevisionByEntryId(model, {
|
|
1186
|
-
id: entryId
|
|
1187
|
-
});
|
|
1188
|
-
|
|
1189
|
-
if (!originalStorageEntry) {
|
|
1190
|
-
throw new _handlerGraphql.NotFoundError(`Entry "${id}" of model "${model.modelId}" was not found.`);
|
|
1191
|
-
} else if (!latestEntryRevision) {
|
|
1192
|
-
throw new _handlerGraphql.NotFoundError(`Entry "${id}" does not have latest record`);
|
|
1193
|
-
}
|
|
1194
|
-
|
|
1195
|
-
const originalEntry = await (0, _entryStorage.entryFromStorageTransform)(context, model, originalStorageEntry);
|
|
1196
|
-
const allowedStatuses = [STATUS_DRAFT, STATUS_CHANGES_REQUESTED];
|
|
1197
|
-
|
|
1198
|
-
if (!allowedStatuses.includes(originalEntry.status)) {
|
|
1199
|
-
throw new _error.default("Cannot request review - entry is not a draft nor was a change request issued.", "REQUEST_REVIEW_ERROR", {
|
|
1200
|
-
entry: originalEntry
|
|
1201
|
-
});
|
|
1202
|
-
}
|
|
1203
|
-
|
|
1204
|
-
(0, _ownership.checkOwnership)(context, permission, originalEntry);
|
|
1205
|
-
|
|
1206
|
-
const entry = _objectSpread(_objectSpread({}, originalEntry), {}, {
|
|
1207
|
-
status: STATUS_REVIEW_REQUESTED
|
|
1208
|
-
});
|
|
1209
|
-
|
|
1210
|
-
let storageEntry = null;
|
|
1211
|
-
|
|
1212
|
-
try {
|
|
1213
|
-
await onBeforeEntryRequestReview.publish({
|
|
1214
|
-
entry,
|
|
1215
|
-
model
|
|
1216
|
-
});
|
|
1217
|
-
storageEntry = await (0, _entryStorage.entryToStorageTransform)(context, model, entry);
|
|
1218
|
-
const result = await storageOperations.entries.requestReview(model, {
|
|
1219
|
-
entry,
|
|
1220
|
-
storageEntry
|
|
1221
|
-
});
|
|
1222
|
-
await onAfterEntryRequestReview.publish({
|
|
1223
|
-
entry,
|
|
1224
|
-
storageEntry: result,
|
|
1225
|
-
model
|
|
1226
|
-
});
|
|
1227
|
-
return result;
|
|
1228
|
-
} catch (ex) {
|
|
1229
|
-
throw new _error.default(ex.message || "Could not request review on the entry.", ex.code || "REQUEST_REVIEW_ERROR", {
|
|
1230
|
-
originalEntry,
|
|
1231
|
-
entry
|
|
1232
|
-
});
|
|
1233
|
-
}
|
|
1234
|
-
},
|
|
1235
|
-
unpublishEntry: async (initialModel, id) => {
|
|
1077
|
+
async unpublishEntry(initialModel, id) {
|
|
1236
1078
|
const permission = await checkEntryPermissions({
|
|
1237
1079
|
pw: "u"
|
|
1238
1080
|
});
|
|
@@ -1246,28 +1088,22 @@ const createContentEntryCrud = params => {
|
|
|
1246
1088
|
const originalStorageEntry = await storageOperations.entries.getPublishedRevisionByEntryId(model, {
|
|
1247
1089
|
id: entryId
|
|
1248
1090
|
});
|
|
1249
|
-
|
|
1250
1091
|
if (!originalStorageEntry) {
|
|
1251
1092
|
throw new _handlerGraphql.NotFoundError(`Entry "${id}" of model "${model.modelId}" was not found.`);
|
|
1252
1093
|
}
|
|
1253
|
-
|
|
1254
1094
|
if (originalStorageEntry.id !== id) {
|
|
1255
1095
|
throw new _error.default(`Entry is not published.`, "UNPUBLISH_ERROR", {
|
|
1256
1096
|
entry: originalStorageEntry
|
|
1257
1097
|
});
|
|
1258
1098
|
}
|
|
1259
|
-
|
|
1260
1099
|
(0, _ownership.checkOwnership)(context, permission, originalStorageEntry);
|
|
1261
1100
|
const originalEntry = await (0, _entryStorage.entryFromStorageTransform)(context, model, originalStorageEntry);
|
|
1262
|
-
|
|
1263
|
-
const entry = _objectSpread(_objectSpread({}, originalEntry), {}, {
|
|
1101
|
+
const entry = (0, _objectSpread2.default)((0, _objectSpread2.default)({}, originalEntry), {}, {
|
|
1264
1102
|
status: STATUS_UNPUBLISHED
|
|
1265
1103
|
});
|
|
1266
|
-
|
|
1267
1104
|
let storageEntry = null;
|
|
1268
|
-
|
|
1269
1105
|
try {
|
|
1270
|
-
await
|
|
1106
|
+
await onEntryBeforeUnpublish.publish({
|
|
1271
1107
|
entry,
|
|
1272
1108
|
model
|
|
1273
1109
|
});
|
|
@@ -1276,13 +1112,18 @@ const createContentEntryCrud = params => {
|
|
|
1276
1112
|
entry,
|
|
1277
1113
|
storageEntry
|
|
1278
1114
|
});
|
|
1279
|
-
await
|
|
1115
|
+
await onEntryAfterUnpublish.publish({
|
|
1280
1116
|
entry,
|
|
1281
1117
|
storageEntry: result,
|
|
1282
1118
|
model
|
|
1283
1119
|
});
|
|
1284
1120
|
return result;
|
|
1285
1121
|
} catch (ex) {
|
|
1122
|
+
await onEntryUnpublishError.publish({
|
|
1123
|
+
entry,
|
|
1124
|
+
model,
|
|
1125
|
+
error: ex
|
|
1126
|
+
});
|
|
1286
1127
|
throw new _error.default(ex.message || "Could not unpublish entry.", ex.code || "UNPUBLISH_ERROR", {
|
|
1287
1128
|
originalEntry,
|
|
1288
1129
|
originalStorageEntry,
|
|
@@ -1293,5 +1134,4 @@ const createContentEntryCrud = params => {
|
|
|
1293
1134
|
}
|
|
1294
1135
|
};
|
|
1295
1136
|
};
|
|
1296
|
-
|
|
1297
1137
|
exports.createContentEntryCrud = createContentEntryCrud;
|