@strapi/content-releases 5.0.0-beta.0 → 5.0.0-beta.10
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/dist/_chunks/{App-IkyOz9wq.mjs → App-B2R2exNT.mjs} +257 -256
- package/dist/_chunks/App-B2R2exNT.mjs.map +1 -0
- package/dist/_chunks/{App-FuRaphre.js → App-CEwOQkKT.js} +265 -265
- package/dist/_chunks/App-CEwOQkKT.js.map +1 -0
- package/dist/_chunks/{PurchaseContentReleases-YhAPgpG9.js → PurchaseContentReleases-Be3acS2L.js} +8 -7
- package/dist/_chunks/PurchaseContentReleases-Be3acS2L.js.map +1 -0
- package/dist/_chunks/{PurchaseContentReleases-Clm0iACO.mjs → PurchaseContentReleases-_MxP6-Dt.mjs} +9 -8
- package/dist/_chunks/PurchaseContentReleases-_MxP6-Dt.mjs.map +1 -0
- package/dist/_chunks/{en-RdapH-9X.mjs → en-B9Ur3VsE.mjs} +11 -2
- package/dist/_chunks/en-B9Ur3VsE.mjs.map +1 -0
- package/dist/_chunks/{en-faJDuv3q.js → en-DtFJ5ViE.js} +11 -2
- package/dist/_chunks/en-DtFJ5ViE.js.map +1 -0
- package/dist/_chunks/{index-Sb3Nal8H.js → index-BrWv-zV4.js} +169 -193
- package/dist/_chunks/index-BrWv-zV4.js.map +1 -0
- package/dist/_chunks/{index-qP3rNiDS.mjs → index-DbmynICx.mjs} +170 -192
- package/dist/_chunks/index-DbmynICx.mjs.map +1 -0
- package/dist/admin/index.js +1 -1
- package/dist/admin/index.mjs +2 -2
- package/dist/admin/src/components/CMReleasesContainer.d.ts +21 -0
- package/dist/admin/src/components/ReleaseAction.d.ts +3 -0
- package/dist/admin/src/components/ReleaseActionMenu.d.ts +1 -1
- package/dist/admin/src/components/ReleaseListCell.d.ts +0 -0
- package/dist/admin/src/components/ReleaseModal.d.ts +3 -2
- package/dist/admin/src/services/release.d.ts +56 -320
- package/dist/admin/src/utils/api.d.ts +6 -0
- package/dist/server/index.js +101 -52
- package/dist/server/index.js.map +1 -1
- package/dist/server/index.mjs +102 -53
- package/dist/server/index.mjs.map +1 -1
- package/dist/server/src/bootstrap.d.ts +2 -2
- package/dist/server/src/bootstrap.d.ts.map +1 -1
- package/dist/server/src/controllers/index.d.ts +1 -0
- package/dist/server/src/controllers/index.d.ts.map +1 -1
- package/dist/server/src/controllers/release-action.d.ts.map +1 -1
- package/dist/server/src/controllers/release.d.ts +1 -0
- package/dist/server/src/controllers/release.d.ts.map +1 -1
- package/dist/server/src/controllers/validation/release-action.d.ts +7 -2
- package/dist/server/src/controllers/validation/release-action.d.ts.map +1 -1
- package/dist/server/src/destroy.d.ts +2 -2
- package/dist/server/src/destroy.d.ts.map +1 -1
- package/dist/server/src/index.d.ts +1412 -1411
- package/dist/server/src/index.d.ts.map +1 -1
- package/dist/server/src/migrations/index.d.ts.map +1 -1
- package/dist/server/src/register.d.ts +2 -2
- package/dist/server/src/register.d.ts.map +1 -1
- package/dist/server/src/routes/release.d.ts.map +1 -1
- package/dist/server/src/services/index.d.ts +1407 -1407
- package/dist/server/src/services/release.d.ts +9 -9
- package/dist/server/src/services/release.d.ts.map +1 -1
- package/dist/server/src/services/scheduling.d.ts +6 -6
- package/dist/server/src/services/scheduling.d.ts.map +1 -1
- package/dist/server/src/services/validation.d.ts +2 -2
- package/dist/server/src/services/validation.d.ts.map +1 -1
- package/dist/server/src/utils/index.d.ts +10 -10
- package/dist/server/src/utils/index.d.ts.map +1 -1
- package/dist/shared/contracts/release-actions.d.ts +9 -9
- package/dist/shared/contracts/release-actions.d.ts.map +1 -1
- package/dist/shared/contracts/releases.d.ts +17 -1
- package/dist/shared/contracts/releases.d.ts.map +1 -1
- package/dist/shared/types.d.ts +2 -2
- package/dist/shared/types.d.ts.map +1 -1
- package/package.json +19 -19
- package/dist/_chunks/App-FuRaphre.js.map +0 -1
- package/dist/_chunks/App-IkyOz9wq.mjs.map +0 -1
- package/dist/_chunks/PurchaseContentReleases-Clm0iACO.mjs.map +0 -1
- package/dist/_chunks/PurchaseContentReleases-YhAPgpG9.js.map +0 -1
- package/dist/_chunks/en-RdapH-9X.mjs.map +0 -1
- package/dist/_chunks/en-faJDuv3q.js.map +0 -1
- package/dist/_chunks/index-Sb3Nal8H.js.map +0 -1
- package/dist/_chunks/index-qP3rNiDS.mjs.map +0 -1
- package/dist/admin/src/services/axios.d.ts +0 -29
package/dist/server/index.mjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { contentTypes as contentTypes$1, async, setCreatorFields,
|
|
1
|
+
import { contentTypes as contentTypes$1, async, setCreatorFields, errors, validateYupSchema, yup as yup$1 } from "@strapi/utils";
|
|
2
2
|
import isEqual from "lodash/isEqual";
|
|
3
3
|
import { difference, keys } from "lodash";
|
|
4
4
|
import _ from "lodash/fp";
|
|
@@ -53,10 +53,10 @@ const ACTIONS = [
|
|
|
53
53
|
const ALLOWED_WEBHOOK_EVENTS = {
|
|
54
54
|
RELEASES_PUBLISH: "releases.publish"
|
|
55
55
|
};
|
|
56
|
-
const getService = (name, { strapi: strapi2 }
|
|
56
|
+
const getService = (name, { strapi: strapi2 }) => {
|
|
57
57
|
return strapi2.plugin("content-releases").service(name);
|
|
58
58
|
};
|
|
59
|
-
const getPopulatedEntry = async (contentTypeUid, entryId, { strapi: strapi2 }
|
|
59
|
+
const getPopulatedEntry = async (contentTypeUid, entryId, { strapi: strapi2 }) => {
|
|
60
60
|
const populateBuilderService = strapi2.plugin("content-manager").service("populate-builder");
|
|
61
61
|
const populate = await populateBuilderService(contentTypeUid).populateDeep(Infinity).build();
|
|
62
62
|
const entry = await strapi2.db.query(contentTypeUid).findOne({
|
|
@@ -65,7 +65,7 @@ const getPopulatedEntry = async (contentTypeUid, entryId, { strapi: strapi2 } =
|
|
|
65
65
|
});
|
|
66
66
|
return entry;
|
|
67
67
|
};
|
|
68
|
-
const getEntryValidStatus = async (contentTypeUid, entry, { strapi: strapi2 }
|
|
68
|
+
const getEntryValidStatus = async (contentTypeUid, entry, { strapi: strapi2 }) => {
|
|
69
69
|
try {
|
|
70
70
|
await strapi2.entityValidator.validateEntityCreation(
|
|
71
71
|
strapi2.getModel(contentTypeUid),
|
|
@@ -213,13 +213,16 @@ async function disableContentTypeLocalized({ oldContentTypes, contentTypes: cont
|
|
|
213
213
|
if (!oldContentTypes) {
|
|
214
214
|
return;
|
|
215
215
|
}
|
|
216
|
+
const i18nPlugin = strapi.plugin("i18n");
|
|
217
|
+
if (!i18nPlugin) {
|
|
218
|
+
return;
|
|
219
|
+
}
|
|
216
220
|
for (const uid in contentTypes2) {
|
|
217
221
|
if (!oldContentTypes[uid]) {
|
|
218
222
|
continue;
|
|
219
223
|
}
|
|
220
224
|
const oldContentType = oldContentTypes[uid];
|
|
221
225
|
const contentType = contentTypes2[uid];
|
|
222
|
-
const i18nPlugin = strapi.plugin("i18n");
|
|
223
226
|
const { isLocalizedContentType } = i18nPlugin.service("content-types");
|
|
224
227
|
if (isLocalizedContentType(oldContentType) && !isLocalizedContentType(contentType)) {
|
|
225
228
|
await strapi.db.queryBuilder(RELEASE_ACTION_MODEL_UID).update({
|
|
@@ -232,13 +235,16 @@ async function enableContentTypeLocalized({ oldContentTypes, contentTypes: conte
|
|
|
232
235
|
if (!oldContentTypes) {
|
|
233
236
|
return;
|
|
234
237
|
}
|
|
238
|
+
const i18nPlugin = strapi.plugin("i18n");
|
|
239
|
+
if (!i18nPlugin) {
|
|
240
|
+
return;
|
|
241
|
+
}
|
|
235
242
|
for (const uid in contentTypes2) {
|
|
236
243
|
if (!oldContentTypes[uid]) {
|
|
237
244
|
continue;
|
|
238
245
|
}
|
|
239
246
|
const oldContentType = oldContentTypes[uid];
|
|
240
247
|
const contentType = contentTypes2[uid];
|
|
241
|
-
const i18nPlugin = strapi.plugin("i18n");
|
|
242
248
|
const { isLocalizedContentType } = i18nPlugin.service("content-types");
|
|
243
249
|
const { getDefaultLocale } = i18nPlugin.service("locales");
|
|
244
250
|
if (!isLocalizedContentType(oldContentType) && isLocalizedContentType(contentType)) {
|
|
@@ -251,7 +257,7 @@ async function enableContentTypeLocalized({ oldContentTypes, contentTypes: conte
|
|
|
251
257
|
}
|
|
252
258
|
const register = async ({ strapi: strapi2 }) => {
|
|
253
259
|
if (strapi2.ee.features.isEnabled("cms-content-releases")) {
|
|
254
|
-
await strapi2.admin
|
|
260
|
+
await strapi2.service("admin::permission").actionProvider.registerMany(ACTIONS);
|
|
255
261
|
strapi2.hook("strapi::content-types.beforeSync").register(disableContentTypeLocalized).register(deleteActionsOnDisableDraftAndPublish);
|
|
256
262
|
strapi2.hook("strapi::content-types.afterSync").register(deleteActionsOnDeleteContentType).register(enableContentTypeLocalized).register(revalidateChangedContentTypes).register(migrateIsValidAndStatusReleases);
|
|
257
263
|
}
|
|
@@ -321,9 +327,7 @@ const bootstrap = async ({ strapi: strapi2 }) => {
|
|
|
321
327
|
actions: {
|
|
322
328
|
target_type: model.uid,
|
|
323
329
|
target_id: {
|
|
324
|
-
$in: entriesToDelete.map(
|
|
325
|
-
(entry) => entry.id
|
|
326
|
-
)
|
|
330
|
+
$in: entriesToDelete.map((entry) => entry.id)
|
|
327
331
|
}
|
|
328
332
|
}
|
|
329
333
|
}
|
|
@@ -350,13 +354,9 @@ const bootstrap = async ({ strapi: strapi2 }) => {
|
|
|
350
354
|
try {
|
|
351
355
|
const { model, result } = event;
|
|
352
356
|
if (model.kind === "collectionType" && model.options?.draftAndPublish) {
|
|
353
|
-
const isEntryValid = await getEntryValidStatus(
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
{
|
|
357
|
-
strapi: strapi2
|
|
358
|
-
}
|
|
359
|
-
);
|
|
357
|
+
const isEntryValid = await getEntryValidStatus(model.uid, result, {
|
|
358
|
+
strapi: strapi2
|
|
359
|
+
});
|
|
360
360
|
await strapi2.db.query(RELEASE_ACTION_MODEL_UID).update({
|
|
361
361
|
where: {
|
|
362
362
|
target_type: model.uid,
|
|
@@ -390,7 +390,7 @@ const bootstrap = async ({ strapi: strapi2 }) => {
|
|
|
390
390
|
throw err;
|
|
391
391
|
});
|
|
392
392
|
Object.entries(ALLOWED_WEBHOOK_EVENTS).forEach(([key, value]) => {
|
|
393
|
-
strapi2.webhookStore.addAllowedEvent(key, value);
|
|
393
|
+
strapi2.get("webhookStore").addAllowedEvent(key, value);
|
|
394
394
|
});
|
|
395
395
|
}
|
|
396
396
|
};
|
|
@@ -639,7 +639,7 @@ const createReleaseService = ({ strapi: strapi2 }) => {
|
|
|
639
639
|
return release2;
|
|
640
640
|
},
|
|
641
641
|
async findOne(id, query = {}) {
|
|
642
|
-
const dbQuery =
|
|
642
|
+
const dbQuery = strapi2.get("query-params").transform(RELEASE_MODEL_UID, query);
|
|
643
643
|
const release2 = await strapi2.db.query(RELEASE_MODEL_UID).findOne({
|
|
644
644
|
...dbQuery,
|
|
645
645
|
where: { id }
|
|
@@ -647,7 +647,7 @@ const createReleaseService = ({ strapi: strapi2 }) => {
|
|
|
647
647
|
return release2;
|
|
648
648
|
},
|
|
649
649
|
findPage(query) {
|
|
650
|
-
const dbQuery =
|
|
650
|
+
const dbQuery = strapi2.get("query-params").transform(RELEASE_MODEL_UID, query ?? {});
|
|
651
651
|
return strapi2.db.query(RELEASE_MODEL_UID).findPage({
|
|
652
652
|
...dbQuery,
|
|
653
653
|
populate: {
|
|
@@ -657,12 +657,18 @@ const createReleaseService = ({ strapi: strapi2 }) => {
|
|
|
657
657
|
}
|
|
658
658
|
});
|
|
659
659
|
},
|
|
660
|
-
async findManyWithContentTypeEntryAttached(contentTypeUid,
|
|
660
|
+
async findManyWithContentTypeEntryAttached(contentTypeUid, entriesIds) {
|
|
661
|
+
let entries = entriesIds;
|
|
662
|
+
if (!Array.isArray(entriesIds)) {
|
|
663
|
+
entries = [entriesIds];
|
|
664
|
+
}
|
|
661
665
|
const releases = await strapi2.db.query(RELEASE_MODEL_UID).findMany({
|
|
662
666
|
where: {
|
|
663
667
|
actions: {
|
|
664
668
|
target_type: contentTypeUid,
|
|
665
|
-
target_id:
|
|
669
|
+
target_id: {
|
|
670
|
+
$in: entries
|
|
671
|
+
}
|
|
666
672
|
},
|
|
667
673
|
releasedAt: {
|
|
668
674
|
$null: true
|
|
@@ -673,18 +679,25 @@ const createReleaseService = ({ strapi: strapi2 }) => {
|
|
|
673
679
|
actions: {
|
|
674
680
|
where: {
|
|
675
681
|
target_type: contentTypeUid,
|
|
676
|
-
target_id:
|
|
682
|
+
target_id: {
|
|
683
|
+
$in: entries
|
|
684
|
+
}
|
|
685
|
+
},
|
|
686
|
+
populate: {
|
|
687
|
+
entry: {
|
|
688
|
+
select: ["id"]
|
|
689
|
+
}
|
|
677
690
|
}
|
|
678
691
|
}
|
|
679
692
|
}
|
|
680
693
|
});
|
|
681
694
|
return releases.map((release2) => {
|
|
682
695
|
if (release2.actions?.length) {
|
|
683
|
-
const
|
|
696
|
+
const actionsForEntry = release2.actions;
|
|
684
697
|
delete release2.actions;
|
|
685
698
|
return {
|
|
686
699
|
...release2,
|
|
687
|
-
|
|
700
|
+
actions: actionsForEntry
|
|
688
701
|
};
|
|
689
702
|
}
|
|
690
703
|
return release2;
|
|
@@ -808,10 +821,7 @@ const createReleaseService = ({ strapi: strapi2 }) => {
|
|
|
808
821
|
if (!release2) {
|
|
809
822
|
throw new errors.NotFoundError(`No release found for id ${releaseId}`);
|
|
810
823
|
}
|
|
811
|
-
const dbQuery =
|
|
812
|
-
RELEASE_ACTION_MODEL_UID,
|
|
813
|
-
query ?? {}
|
|
814
|
-
);
|
|
824
|
+
const dbQuery = strapi2.get("query-params").transform(RELEASE_ACTION_MODEL_UID, query ?? {});
|
|
815
825
|
return strapi2.db.query(RELEASE_ACTION_MODEL_UID).findPage({
|
|
816
826
|
...dbQuery,
|
|
817
827
|
populate: {
|
|
@@ -825,10 +835,7 @@ const createReleaseService = ({ strapi: strapi2 }) => {
|
|
|
825
835
|
});
|
|
826
836
|
},
|
|
827
837
|
async countActions(query) {
|
|
828
|
-
const dbQuery =
|
|
829
|
-
RELEASE_ACTION_MODEL_UID,
|
|
830
|
-
query ?? {}
|
|
831
|
-
);
|
|
838
|
+
const dbQuery = strapi2.get("query-params").transform(RELEASE_ACTION_MODEL_UID, query ?? {});
|
|
832
839
|
return strapi2.db.query(RELEASE_ACTION_MODEL_UID).count(dbQuery);
|
|
833
840
|
},
|
|
834
841
|
async groupActions(actions, groupBy) {
|
|
@@ -838,9 +845,7 @@ const createReleaseService = ({ strapi: strapi2 }) => {
|
|
|
838
845
|
}
|
|
839
846
|
return acc;
|
|
840
847
|
}, []);
|
|
841
|
-
const allReleaseContentTypesDictionary = await this.getContentTypesDataForActions(
|
|
842
|
-
contentTypeUids
|
|
843
|
-
);
|
|
848
|
+
const allReleaseContentTypesDictionary = await this.getContentTypesDataForActions(contentTypeUids);
|
|
844
849
|
const allLocalesDictionary = await this.getLocalesDataForActions();
|
|
845
850
|
const formattedData = actions.map((action) => {
|
|
846
851
|
const { mainField, displayName } = allReleaseContentTypesDictionary[action.contentType];
|
|
@@ -962,9 +967,7 @@ const createReleaseService = ({ strapi: strapi2 }) => {
|
|
|
962
967
|
}
|
|
963
968
|
try {
|
|
964
969
|
strapi2.log.info(`[Content Releases] Starting to publish release ${lockedRelease.name}`);
|
|
965
|
-
const { collectionTypeActions, singleTypeActions } = await getFormattedActions(
|
|
966
|
-
releaseId
|
|
967
|
-
);
|
|
970
|
+
const { collectionTypeActions, singleTypeActions } = await getFormattedActions(releaseId);
|
|
968
971
|
await strapi2.db.transaction(async () => {
|
|
969
972
|
for (const { uid, action, id } of singleTypeActions) {
|
|
970
973
|
await publishSingleTypeAction(uid, action, id);
|
|
@@ -1135,7 +1138,8 @@ const createReleaseValidationService = ({ strapi: strapi2 }) => ({
|
|
|
1135
1138
|
}
|
|
1136
1139
|
},
|
|
1137
1140
|
async validatePendingReleasesLimit() {
|
|
1138
|
-
const
|
|
1141
|
+
const featureCfg = strapi2.ee.features.get("cms-content-releases");
|
|
1142
|
+
const maximumPendingReleases = typeof featureCfg === "object" && featureCfg?.options?.maximumReleases || 3;
|
|
1139
1143
|
const [, pendingReleasesCount] = await strapi2.db.query(RELEASE_MODEL_UID).findWithCount({
|
|
1140
1144
|
filters: {
|
|
1141
1145
|
releasedAt: {
|
|
@@ -1178,7 +1182,7 @@ const createSchedulingService = ({ strapi: strapi2 }) => {
|
|
|
1178
1182
|
}
|
|
1179
1183
|
const job = scheduleJob(scheduleDate, async () => {
|
|
1180
1184
|
try {
|
|
1181
|
-
await getService("release").publish(releaseId);
|
|
1185
|
+
await getService("release", { strapi: strapi2 }).publish(releaseId);
|
|
1182
1186
|
} catch (error) {
|
|
1183
1187
|
}
|
|
1184
1188
|
this.cancel(releaseId);
|
|
@@ -1248,7 +1252,7 @@ const RELEASE_SCHEMA = yup.object().shape({
|
|
|
1248
1252
|
const validateRelease = validateYupSchema(RELEASE_SCHEMA);
|
|
1249
1253
|
const releaseController = {
|
|
1250
1254
|
async findMany(ctx) {
|
|
1251
|
-
const permissionsManager = strapi.admin
|
|
1255
|
+
const permissionsManager = strapi.service("admin::permission").createPermissionsManager({
|
|
1252
1256
|
ability: ctx.state.userAbility,
|
|
1253
1257
|
model: RELEASE_MODEL_UID
|
|
1254
1258
|
});
|
|
@@ -1298,7 +1302,7 @@ const releaseController = {
|
|
|
1298
1302
|
});
|
|
1299
1303
|
const sanitizedRelease = {
|
|
1300
1304
|
...release2,
|
|
1301
|
-
createdBy: release2.createdBy ? strapi.admin
|
|
1305
|
+
createdBy: release2.createdBy ? strapi.service("admin::user").sanitizeUser(release2.createdBy) : null
|
|
1302
1306
|
};
|
|
1303
1307
|
const data = {
|
|
1304
1308
|
...sanitizedRelease,
|
|
@@ -1310,19 +1314,48 @@ const releaseController = {
|
|
|
1310
1314
|
};
|
|
1311
1315
|
ctx.body = { data };
|
|
1312
1316
|
},
|
|
1317
|
+
async mapEntriesToReleases(ctx) {
|
|
1318
|
+
const { contentTypeUid, entriesIds } = ctx.query;
|
|
1319
|
+
if (!contentTypeUid || !entriesIds) {
|
|
1320
|
+
throw new errors.ValidationError("Missing required query parameters");
|
|
1321
|
+
}
|
|
1322
|
+
const releaseService = getService("release", { strapi });
|
|
1323
|
+
const releasesWithActions = await releaseService.findManyWithContentTypeEntryAttached(
|
|
1324
|
+
contentTypeUid,
|
|
1325
|
+
entriesIds
|
|
1326
|
+
);
|
|
1327
|
+
const mappedEntriesInReleases = releasesWithActions.reduce(
|
|
1328
|
+
// TODO: Fix for v5 removed mappedEntriedToRelease
|
|
1329
|
+
(acc, release2) => {
|
|
1330
|
+
release2.actions.forEach((action) => {
|
|
1331
|
+
if (!acc[action.entry.id]) {
|
|
1332
|
+
acc[action.entry.id] = [{ id: release2.id, name: release2.name }];
|
|
1333
|
+
} else {
|
|
1334
|
+
acc[action.entry.id].push({ id: release2.id, name: release2.name });
|
|
1335
|
+
}
|
|
1336
|
+
});
|
|
1337
|
+
return acc;
|
|
1338
|
+
},
|
|
1339
|
+
// TODO: Fix for v5 removed mappedEntriedToRelease
|
|
1340
|
+
{}
|
|
1341
|
+
);
|
|
1342
|
+
ctx.body = {
|
|
1343
|
+
data: mappedEntriesInReleases
|
|
1344
|
+
};
|
|
1345
|
+
},
|
|
1313
1346
|
async create(ctx) {
|
|
1314
1347
|
const user = ctx.state.user;
|
|
1315
1348
|
const releaseArgs = ctx.request.body;
|
|
1316
1349
|
await validateRelease(releaseArgs);
|
|
1317
1350
|
const releaseService = getService("release", { strapi });
|
|
1318
1351
|
const release2 = await releaseService.create(releaseArgs, { user });
|
|
1319
|
-
const permissionsManager = strapi.admin
|
|
1352
|
+
const permissionsManager = strapi.service("admin::permission").createPermissionsManager({
|
|
1320
1353
|
ability: ctx.state.userAbility,
|
|
1321
1354
|
model: RELEASE_MODEL_UID
|
|
1322
1355
|
});
|
|
1323
|
-
ctx.
|
|
1356
|
+
ctx.created({
|
|
1324
1357
|
data: await permissionsManager.sanitizeOutput(release2)
|
|
1325
|
-
};
|
|
1358
|
+
});
|
|
1326
1359
|
},
|
|
1327
1360
|
async update(ctx) {
|
|
1328
1361
|
const user = ctx.state.user;
|
|
@@ -1331,7 +1364,7 @@ const releaseController = {
|
|
|
1331
1364
|
await validateRelease(releaseArgs);
|
|
1332
1365
|
const releaseService = getService("release", { strapi });
|
|
1333
1366
|
const release2 = await releaseService.update(id, releaseArgs, { user });
|
|
1334
|
-
const permissionsManager = strapi.admin
|
|
1367
|
+
const permissionsManager = strapi.service("admin::permission").createPermissionsManager({
|
|
1335
1368
|
ability: ctx.state.userAbility,
|
|
1336
1369
|
model: RELEASE_MODEL_UID
|
|
1337
1370
|
});
|
|
@@ -1395,9 +1428,9 @@ const releaseActionController = {
|
|
|
1395
1428
|
await validateReleaseAction(releaseActionArgs);
|
|
1396
1429
|
const releaseService = getService("release", { strapi });
|
|
1397
1430
|
const releaseAction2 = await releaseService.createAction(releaseId, releaseActionArgs);
|
|
1398
|
-
ctx.
|
|
1431
|
+
ctx.created({
|
|
1399
1432
|
data: releaseAction2
|
|
1400
|
-
};
|
|
1433
|
+
});
|
|
1401
1434
|
},
|
|
1402
1435
|
async createMany(ctx) {
|
|
1403
1436
|
const releaseId = ctx.params.releaseId;
|
|
@@ -1423,17 +1456,17 @@ const releaseActionController = {
|
|
|
1423
1456
|
return releaseActions2;
|
|
1424
1457
|
});
|
|
1425
1458
|
const newReleaseActions = releaseActions.filter((action) => action !== null);
|
|
1426
|
-
ctx.
|
|
1459
|
+
ctx.created({
|
|
1427
1460
|
data: newReleaseActions,
|
|
1428
1461
|
meta: {
|
|
1429
1462
|
entriesAlreadyInRelease: releaseActions.length - newReleaseActions.length,
|
|
1430
1463
|
totalEntries: releaseActions.length
|
|
1431
1464
|
}
|
|
1432
|
-
};
|
|
1465
|
+
});
|
|
1433
1466
|
},
|
|
1434
1467
|
async findMany(ctx) {
|
|
1435
1468
|
const releaseId = ctx.params.releaseId;
|
|
1436
|
-
const permissionsManager = strapi.admin
|
|
1469
|
+
const permissionsManager = strapi.service("admin::permission").createPermissionsManager({
|
|
1437
1470
|
ability: ctx.state.userAbility,
|
|
1438
1471
|
model: RELEASE_ACTION_MODEL_UID
|
|
1439
1472
|
});
|
|
@@ -1447,7 +1480,7 @@ const releaseActionController = {
|
|
|
1447
1480
|
if (acc[action.contentType]) {
|
|
1448
1481
|
return acc;
|
|
1449
1482
|
}
|
|
1450
|
-
const contentTypePermissionsManager = strapi.admin
|
|
1483
|
+
const contentTypePermissionsManager = strapi.service("admin::permission").createPermissionsManager({
|
|
1451
1484
|
ability: ctx.state.userAbility,
|
|
1452
1485
|
model: action.contentType
|
|
1453
1486
|
});
|
|
@@ -1499,6 +1532,22 @@ const controllers = { release: releaseController, "release-action": releaseActio
|
|
|
1499
1532
|
const release = {
|
|
1500
1533
|
type: "admin",
|
|
1501
1534
|
routes: [
|
|
1535
|
+
{
|
|
1536
|
+
method: "GET",
|
|
1537
|
+
path: "/mapEntriesToReleases",
|
|
1538
|
+
handler: "release.mapEntriesToReleases",
|
|
1539
|
+
config: {
|
|
1540
|
+
policies: [
|
|
1541
|
+
"admin::isAuthenticatedAdmin",
|
|
1542
|
+
{
|
|
1543
|
+
name: "admin::hasPermissions",
|
|
1544
|
+
config: {
|
|
1545
|
+
actions: ["plugin::content-releases.read"]
|
|
1546
|
+
}
|
|
1547
|
+
}
|
|
1548
|
+
]
|
|
1549
|
+
}
|
|
1550
|
+
},
|
|
1502
1551
|
{
|
|
1503
1552
|
method: "POST",
|
|
1504
1553
|
path: "/",
|