diff --git a/package.json b/package.json index a7b05719..2adafe4b 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "dm-manager", - "version": "1.3.12", + "version": "1.3.13", "private": true, "dependencies": { "@fortawesome/fontawesome-svg-core": "^6.1.2", diff --git a/server/controllers/Controller.js b/server/controllers/Controller.js index 1407345e..551628bd 100644 --- a/server/controllers/Controller.js +++ b/server/controllers/Controller.js @@ -1,4 +1,6 @@ const { ObjectId } = require('mongoose').Types + +const User = require('../models/User') const {log, requireSomeRole, requireUser, allowAnonymous} = require('./middleware') function sendBadRequest(res, message) { @@ -541,6 +543,12 @@ class Controller { try { const was = await this.Model.findById(id) await log(req, was, payload) + if (was.createdBy !== undefined) delete payload.createdBy + if (payload.createdBy) { + const user = await User.findOne({username: payload.createdBy}) + if (!user) throw new Error(`user ${payload.createdBy} not found`) + payload.createdBy = user._id + } was.set({...was, ...payload}) await was.save() res.send(was) @@ -612,7 +620,8 @@ class Controller { const payload = {...req.body, updatedBy: req.user._id } - delete payload.createdBy + // รจ possibile modificare l'owner se undefined + //delete payload.createdBy delete payload.createdAt delete payload.updatedAt this.patch(req, res, req.params.id, payload) diff --git a/src/components/ModelEdit.js b/src/components/ModelEdit.js index 35d20ec4..9fad043e 100644 --- a/src/components/ModelEdit.js +++ b/src/components/ModelEdit.js @@ -3,7 +3,7 @@ import { Form, Button, ButtonGroup } from 'react-bootstrap' import { Card } from 'react-bootstrap' import { useEngine } from '../Engine' -import { ModelInputs } from '../components/ModelInput' +import { ModelInput, ModelInputs } from '../components/ModelInput' import Timestamps from '../components/Timestamps' import Loading from '../components/Loading' @@ -56,8 +56,9 @@ export default function ModelEdit({Model, id, clone_id, onSave, onCancel, onDele return v1 === v2 } - const modifiedFields = Object.keys(modifiedObj) + const modifiedFields = [...Object.keys(modifiedObj)] .filter(key => !compareValue(modifiedObj[key], originalObj[key])) + console.log(`Modified fields: ${JSON.stringify(modifiedFields)}`) const changed = modifiedFields.length > 0 @@ -105,6 +106,22 @@ export default function ModelEdit({Model, id, clone_id, onSave, onCancel, onDele modifiedFields={modifiedFields} onChange={onChange && onChange(setModifiedObj)} /> + { /* input speciale per modificare il campo createdBy */ + originalObj.createdBy === undefined && !create && + { + setModifiedObj(obj => ({...obj, createdBy: value})) + }} + edit={true} + value={modifiedObj.createdBy} + obj={modifiedObj} + setObj={setModifiedObj} + modified={modifiedFields.includes("createdBy")} + onChange={onChange && onChange(setModifiedObj)} + />} } + } - + } diff --git a/src/components/ModelInput.js b/src/components/ModelInput.js index 59c759ee..24d15b55 100644 --- a/src/components/ModelInput.js +++ b/src/components/ModelInput.js @@ -53,12 +53,14 @@ export function ModelFieldInput({ id, schema, value, setValue, api_prefix }) { if (schema.items['x-ref'] === 'Institution') return element(InstitutionInput, {multiple:true, api_prefix: api_prefix}) return

x-ref to {schema.items['x-ref']} not yet implemented in array

} else { - if (schema['x-ref'] === 'Person') return element(PersonInput, {api_prefix: api_prefix}) - if (schema['x-ref'] === 'Room') return element(RoomInput, {api_prefix: api_prefix}) - if (schema['x-ref'] === 'ConferenceRoom') return element(ConferenceRoomInput, {api_prefix: api_prefix}) - if (schema['x-ref'] === 'SeminarCategory') return element(SeminarCategoryInput, {api_prefix: api_prefix}) - if (schema['x-ref'] === 'Institution') return element(InstitutionInput, {api_prefix: api_prefix}) - if (schema['x-ref']) return

x-ref to {schema['x-ref']} not yet implemented

+ const xref = schema['x-ref'] + if (xref === 'Person') return element(PersonInput, {api_prefix: api_prefix}) + if (xref === 'Room') return element(RoomInput, {api_prefix: api_prefix}) + if (xref === 'ConferenceRoom') return element(ConferenceRoomInput, {api_prefix: api_prefix}) + if (xref === 'SeminarCategory') return element(SeminarCategoryInput, {api_prefix: api_prefix}) + if (xref === 'Institution') return element(InstitutionInput, {api_prefix: api_prefix}) + if (xref === 'User') return element(StringInput, {api_prefix: api_prefix}) + if (xref) return

x-ref to {xref} not yet implemented

if (schema.format === 'date-time') { if (schema.widget === 'datetime') return element(DatetimeInput) // use formatted text input "YYYY-MM-DD HH:mm" return element(DateInput) // use date only widget @@ -84,7 +86,7 @@ export function ModelFieldInput({ id, schema, value, setValue, api_prefix }) { export function ModelInput({ field, modified, schema, value, setValue, api_prefix}) { const id = useId() - const label = schema.items?.label || schema.label || field + const label = schema?.items?.label || schema?.label || field return @@ -100,7 +102,7 @@ export function ModelInput({ field, modified, schema, value, setValue, api_prefi />
-
{schema.help}
+
{schema?.help}
}