diff --git a/packages/strapi-plugin-content-manager/admin/src/containers/EditPage/saga.js b/packages/strapi-plugin-content-manager/admin/src/containers/EditPage/saga.js index 8d3d365796..ff4e297eb4 100644 --- a/packages/strapi-plugin-content-manager/admin/src/containers/EditPage/saga.js +++ b/packages/strapi-plugin-content-manager/admin/src/containers/EditPage/saga.js @@ -84,8 +84,8 @@ export function* submit() { return acc; }, new FormData()); - - const id = isCreating ? '' : record.id; + + const id = isCreating ? '' : record.id || record._id; const params = { source }; // Change the request helper default headers so we can pass a FormData const headers = { diff --git a/packages/strapi-plugin-content-manager/config/policies/routing.js b/packages/strapi-plugin-content-manager/config/policies/routing.js index bb204f0fff..fd484994e9 100644 --- a/packages/strapi-plugin-content-manager/config/policies/routing.js +++ b/packages/strapi-plugin-content-manager/config/policies/routing.js @@ -8,6 +8,49 @@ module.exports = async (ctx, next) => { if (controller && action) { // Redirect to specific controller. + if (ctx.request.body.hasOwnProperty('fields') && ctx.request.body.hasOwnProperty('files')) { + let {files, fields} = ctx.request.body; + + const parser = (value) => { + try { + value = JSON.parse(value); + } catch (e) { + // Silent. + } + + return _.isArray(value) ? value.map(obj => parser(obj)) : value; + }; + + fields = Object.keys(fields).reduce((acc, current) => { + acc[current] = parser(fields[current]); + + return acc; + }, {}); + + ctx.request.body = fields; + + await strapi.plugins[source].controllers[controller.toLowerCase()][action](ctx); + const resBody = ctx.body; + + await Promise.all(Object.keys(files).map(async field => { + ctx.request.body = { + files: { + files: files[field] + }, + fields: { + refId: resBody.id || resBody._id, + ref: ctx.params.model, + source, + field + } + }; + + return strapi.plugins.upload.controllers.upload.upload(ctx); + })); + + return ctx.send(resBody); + } + return await strapi.plugins[source].controllers[controller.toLowerCase()][action](ctx); } } diff --git a/packages/strapi-plugin-users-permissions/models/Role.settings.json b/packages/strapi-plugin-users-permissions/models/Role.settings.json index cdb41d5235..66fa504376 100644 --- a/packages/strapi-plugin-users-permissions/models/Role.settings.json +++ b/packages/strapi-plugin-users-permissions/models/Role.settings.json @@ -23,8 +23,7 @@ "users": { "collection": "user", "via": "role", - "plugin": "users-permissions", - "configurable": false + "plugin": "users-permissions" }, "permissions": { "collection": "permission", @@ -33,4 +32,4 @@ "configurable": false } } -} +} \ No newline at end of file diff --git a/packages/strapi-plugin-users-permissions/models/User.settings.json b/packages/strapi-plugin-users-permissions/models/User.settings.json index 99479b1cba..a5a45e2eb4 100644 --- a/packages/strapi-plugin-users-permissions/models/User.settings.json +++ b/packages/strapi-plugin-users-permissions/models/User.settings.json @@ -38,6 +38,12 @@ "via": "users", "plugin": "users-permissions", "configurable": false + }, + "picture": { + "collection": "file", + "via": "related", + "plugin": "upload" } - } -} + }, + "collectionName": "users-permissions_user" +} \ No newline at end of file