Skip to content

Commit ce08885

Browse files
committed
Bug Fix: Non-admins updating workflows cause admin-locked text fields to reset to defaults. Fixes #136 (again).
1 parent a270f2f commit ce08885

1 file changed

Lines changed: 17 additions & 5 deletions

File tree

lib/api/events.js

Lines changed: 17 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -280,7 +280,7 @@ class Events {
280280
}
281281
else if (is_workflow && !privs.admin) {
282282
// for workflows, if user is non-admin we need to default the locked params of all event and job nodes
283-
self.applyDefaultWorkflowNodeParams(params);
283+
self.applyDefaultWorkflowNodeParams(params, event);
284284
}
285285

286286
// allow api to update state for each event (e.g. cursor)
@@ -1065,32 +1065,44 @@ class Events {
10651065
return true;
10661066
}
10671067

1068-
applyDefaultWorkflowNodeParams(params) {
1068+
applyDefaultWorkflowNodeParams(params, orig_event) {
10691069
// for workflows, we need to apply defaults for all locked params of all event and job nodes
10701070
// this assumes the current user is not an admin
10711071
var self = this;
10721072
if (!params.workflow || !params.workflow.nodes) return;
10731073

10741074
params.workflow.nodes.forEach( function(node) {
1075+
var orig_node = (orig_event && orig_event.workflow && orig_event.workflow.nodes) ?
1076+
Tools.findObject(orig_event.workflow.nodes, { id: node.id }) : null;
1077+
10751078
if (node.type == 'event') {
10761079
// apply defaults for locked event + plugin params, if user is not an admin
10771080
var event = Tools.findObject(self.events, { id: node.data.event });
10781081
if (!event) return;
10791082

10801083
if (event.fields) event.fields.forEach( function(field) {
1081-
if (field.locked) node.data.params[ field.id ] = field.value;
1084+
if (!field.locked) return;
1085+
1086+
node.data.params[ field.id ] = (orig_node && orig_node.data && orig_node.data.params && (field.id in orig_node.data.params)) ?
1087+
orig_node.data.params[field.id] : field.value;
10821088
} );
10831089

10841090
var plugin = Tools.findObject(self.plugins, { id: event.plugin });
10851091
if (plugin && plugin.params) plugin.params.forEach( function(param) {
1086-
if (param.locked) node.data.params[ param.id ] = param.value;
1092+
if (!param.locked) return;
1093+
1094+
node.data.params[ param.id ] = (orig_node && orig_node.data && orig_node.data.params && (param.id in orig_node.data.params)) ?
1095+
orig_node.data.params[param.id] : param.value;
10871096
} );
10881097
}
10891098
else if (node.type == 'job') {
10901099
// apply defaults for locked plugin params, if user is not an admin
10911100
var plugin = Tools.findObject(self.plugins, { id: node.data.plugin });
10921101
if (plugin && plugin.params) plugin.params.forEach( function(param) {
1093-
if (param.locked) node.data.params[ param.id ] = param.value;
1102+
if (!param.locked) return;
1103+
1104+
node.data.params[ param.id ] = (orig_node && orig_node.data && orig_node.data.params && (param.id in orig_node.data.params)) ?
1105+
orig_node.data.params[param.id] : param.value;
10941106
} );
10951107
}
10961108
}); // foreach node

0 commit comments

Comments
 (0)