diff --git a/awx/ui/client/src/forms/WorkflowMaker.js b/awx/ui/client/src/forms/WorkflowMaker.js index 9ed3c69b65..a911e85678 100644 --- a/awx/ui/client/src/forms/WorkflowMaker.js +++ b/awx/ui/client/src/forms/WorkflowMaker.js @@ -34,7 +34,7 @@ export default label: i18n._('Type'), type: 'radio_group', ngShow: 'selectedTemplate && edgeFlags.showTypeOptions', - ngDisabled: '!canAddWorkflowJobTemplate', + ngDisabled: '!(workflowJobTemplateObj.summary_fields.user_capabilities.edit || canAddWorkflowJobTemplate)', options: [ { label: i18n._('On Success'), @@ -70,7 +70,7 @@ export default dataPlacement: 'right', dataContainer: "body", ngShow: "selectedTemplate.ask_credential_on_launch", - ngDisabled: '!canAddWorkflowJobTemplate', + ngDisabled: '!(workflowJobTemplateObj.summary_fields.user_capabilities.edit || canAddWorkflowJobTemplate)', awRequiredWhen: { reqExpression: 'selectedTemplate && selectedTemplate.ask_credential_on_launch' } @@ -90,7 +90,7 @@ export default dataPlacement: 'right', dataContainer: "body", ngShow: "selectedTemplate.ask_inventory_on_launch", - ngDisabled: '!canAddWorkflowJobTemplate', + ngDisabled: '!(workflowJobTemplateObj.summary_fields.user_capabilities.edit || canAddWorkflowJobTemplate)', awRequiredWhen: { reqExpression: 'selectedTemplate && selectedTemplate.ask_inventory_on_launch' } @@ -111,7 +111,7 @@ export default dataPlacement: 'right', dataContainer: "body", ngShow: "selectedTemplate.ask_job_type_on_launch", - ngDisabled: '!canAddWorkflowJobTemplate', + ngDisabled: '!(workflowJobTemplateObj.summary_fields.user_capabilities.edit || canAddWorkflowJobTemplate)', awRequiredWhen: { reqExpression: 'selectedTemplate && selectedTemplate.ask_job_type_on_launch' } @@ -128,7 +128,7 @@ export default dataPlacement: 'right', dataContainer: "body", ngShow: "selectedTemplate.ask_limit_on_launch", - ngDisabled: '!canAddWorkflowJobTemplate' + ngDisabled: '!(workflowJobTemplateObj.summary_fields.user_capabilities.edit || canAddWorkflowJobTemplate)' }, job_tags: { label: i18n._('Job Tags'), @@ -143,7 +143,7 @@ export default dataPlacement: "right", dataContainer: "body", ngShow: "selectedTemplate.ask_tags_on_launch", - ngDisabled: '!canAddWorkflowJobTemplate' + ngDisabled: '!(workflowJobTemplateObj.summary_fields.user_capabilities.edit || canAddWorkflowJobTemplate)' }, skip_tags: { label: i18n._('Skip Tags'), @@ -158,22 +158,22 @@ export default dataPlacement: "right", dataContainer: "body", ngShow: "selectedTemplate.ask_skip_tags_on_launch", - ngDisabled: '!canAddWorkflowJobTemplate' + ngDisabled: '!(workflowJobTemplateObj.summary_fields.user_capabilities.edit || canAddWorkflowJobTemplate)' } }, buttons: { cancel: { ngClick: 'cancelNodeForm()', - ngShow: 'canAddWorkflowJobTemplate' + ngShow: '(workflowJobTemplateObj.summary_fields.user_capabilities.edit || canAddWorkflowJobTemplate)' }, close: { ngClick: 'cancelNodeForm()', - ngShow: '!canAddWorkflowJobTemplate' + ngShow: '!(workflowJobTemplateObj.summary_fields.user_capabilities.edit || canAddWorkflowJobTemplate)' }, select: { ngClick: 'saveNodeForm()', ngDisabled: "workflow_maker_form.$invalid || !selectedTemplate", - ngShow: 'canAddWorkflowJobTemplate' + ngShow: '(workflowJobTemplateObj.summary_fields.user_capabilities.edit || canAddWorkflowJobTemplate)' } } };}]) diff --git a/awx/ui/client/src/templates/workflows/workflow-chart/workflow-chart.directive.js b/awx/ui/client/src/templates/workflows/workflow-chart/workflow-chart.directive.js index ea2fa33884..6b4444a71d 100644 --- a/awx/ui/client/src/templates/workflows/workflow-chart/workflow-chart.directive.js +++ b/awx/ui/client/src/templates/workflows/workflow-chart/workflow-chart.directive.js @@ -11,6 +11,7 @@ export default [ '$state','moment', '$timeout', '$window', scope: { treeData: '=', canAddWorkflowJobTemplate: '=', + workflowJobTemplateObj: '=', addNode: '&', editNode: '&', deleteNode: '&', @@ -370,7 +371,7 @@ export default [ '$state','moment', '$timeout', '$window', .attr("cx", nodeW) .attr("r", 10) .attr("class", "addCircle nodeCircle") - .style("display", function(d) { return d.placeholder || scope.canAddWorkflowJobTemplate === false ? "none" : null; }) + .style("display", function(d) { return d.placeholder || !(scope.workflowJobTemplateObj.summary_fields.user_capabilities.edit || scope.canAddWorkflowJobTemplate) ? "none" : null; }) .call(add_node) .on("mouseover", function(d) { d3.select("#node-" + d.id) @@ -392,7 +393,7 @@ export default [ '$state','moment', '$timeout', '$window', .size(60) .type("cross") ) - .style("display", function(d) { return d.placeholder || scope.canAddWorkflowJobTemplate === false ? "none" : null; }) + .style("display", function(d) { return d.placeholder || !(scope.workflowJobTemplateObj.summary_fields.user_capabilities.edit || scope.canAddWorkflowJobTemplate) ? "none" : null; }) .call(add_node) .on("mouseover", function(d) { d3.select("#node-" + d.id) @@ -412,7 +413,7 @@ export default [ '$state','moment', '$timeout', '$window', .attr("cy", nodeH) .attr("r", 10) .attr("class", "removeCircle") - .style("display", function(d) { return (d.canDelete === false || d.placeholder || scope.canAddWorkflowJobTemplate === false) ? "none" : null; }) + .style("display", function(d) { return (d.canDelete === false || d.placeholder || !(scope.workflowJobTemplateObj.summary_fields.user_capabilities.edit || scope.canAddWorkflowJobTemplate)) ? "none" : null; }) .call(remove_node) .on("mouseover", function(d) { d3.select("#node-" + d.id) @@ -434,7 +435,7 @@ export default [ '$state','moment', '$timeout', '$window', .size(60) .type("cross") ) - .style("display", function(d) { return (d.canDelete === false || d.placeholder || scope.canAddWorkflowJobTemplate === false) ? "none" : null; }) + .style("display", function(d) { return (d.canDelete === false || d.placeholder || !(scope.workflowJobTemplateObj.summary_fields.user_capabilities.edit || scope.canAddWorkflowJobTemplate)) ? "none" : null; }) .call(remove_node) .on("mouseover", function(d) { d3.select("#node-" + d.id) @@ -549,7 +550,7 @@ export default [ '$state','moment', '$timeout', '$window', }) .attr("r", 10) .attr("class", "addCircle linkCircle") - .style("display", function(d) { return (d.source.placeholder || d.target.placeholder || scope.canAddWorkflowJobTemplate === false) ? "none" : null; }) + .style("display", function(d) { return (d.source.placeholder || d.target.placeholder || !(scope.workflowJobTemplateObj.summary_fields.user_capabilities.edit || scope.canAddWorkflowJobTemplate)) ? "none" : null; }) .call(add_node_between) .on("mouseover", function(d) { d3.select("#link-" + d.source.id + "-" + d.target.id) @@ -581,7 +582,7 @@ export default [ '$state','moment', '$timeout', '$window', .size(60) .type("cross") ) - .style("display", function(d) { return (d.source.placeholder || d.target.placeholder || scope.canAddWorkflowJobTemplate === false) ? "none" : null; }) + .style("display", function(d) { return (d.source.placeholder || d.target.placeholder || !(scope.workflowJobTemplateObj.summary_fields.user_capabilities.edit || scope.canAddWorkflowJobTemplate)) ? "none" : null; }) .call(add_node_between) .on("mouseover", function(d) { d3.select("#link-" + d.source.id + "-" + d.target.id) @@ -602,16 +603,16 @@ export default [ '$state','moment', '$timeout', '$window', let t = baseSvg.transition(); t.selectAll(".nodeCircle") - .style("display", function(d) { return d.placeholder || scope.canAddWorkflowJobTemplate === false ? "none" : null; }); + .style("display", function(d) { return d.placeholder || !(scope.workflowJobTemplateObj.summary_fields.user_capabilities.edit || scope.canAddWorkflowJobTemplate) ? "none" : null; }); t.selectAll(".nodeAddCross") - .style("display", function(d) { return d.placeholder || scope.canAddWorkflowJobTemplate === false ? "none" : null; }); + .style("display", function(d) { return d.placeholder || !(scope.workflowJobTemplateObj.summary_fields.user_capabilities.edit || scope.canAddWorkflowJobTemplate) ? "none" : null; }); t.selectAll(".removeCircle") - .style("display", function(d) { return (d.canDelete === false || d.placeholder || scope.canAddWorkflowJobTemplate === false) ? "none" : null; }); + .style("display", function(d) { return (d.canDelete === false || d.placeholder || !(scope.workflowJobTemplateObj.summary_fields.user_capabilities.edit || scope.canAddWorkflowJobTemplate)) ? "none" : null; }); t.selectAll(".nodeRemoveCross") - .style("display", function(d) { return (d.canDelete === false || d.placeholder || scope.canAddWorkflowJobTemplate === false) ? "none" : null; }); + .style("display", function(d) { return (d.canDelete === false || d.placeholder || !(scope.workflowJobTemplateObj.summary_fields.user_capabilities.edit || scope.canAddWorkflowJobTemplate)) ? "none" : null; }); t.selectAll(".linkPath") .attr("class", function(d) { @@ -636,7 +637,7 @@ export default [ '$state','moment', '$timeout', '$window', }); t.selectAll(".linkCircle") - .style("display", function(d) { return (d.source.placeholder || d.target.placeholder || scope.canAddWorkflowJobTemplate === false) ? "none" : null; }) + .style("display", function(d) { return (d.source.placeholder || d.target.placeholder || !(scope.workflowJobTemplateObj.summary_fields.user_capabilities.edit || scope.canAddWorkflowJobTemplate)) ? "none" : null; }) .attr("cx", function(d) { return (d.source.isStartNode) ? (d.target.y + d.source.y + rootW) / 2 : (d.target.y + d.source.y + nodeW) / 2; }) @@ -645,7 +646,7 @@ export default [ '$state','moment', '$timeout', '$window', }); t.selectAll(".linkCross") - .style("display", function(d) { return (d.source.placeholder || d.target.placeholder || scope.canAddWorkflowJobTemplate === false) ? "none" : null; }) + .style("display", function(d) { return (d.source.placeholder || d.target.placeholder || !(scope.workflowJobTemplateObj.summary_fields.user_capabilities.edit || scope.canAddWorkflowJobTemplate)) ? "none" : null; }) .attr("transform", function(d) { let translate; if(d.source.isStartNode) { @@ -778,7 +779,7 @@ export default [ '$state','moment', '$timeout', '$window', function add_node() { this.on("click", function(d) { - if(scope.canAddWorkflowJobTemplate !== false) { + if(scope.workflowJobTemplateObj.summary_fields.user_capabilities.edit || scope.canAddWorkflowJobTemplate) { scope.addNode({ parent: d, betweenTwoNodes: false @@ -789,7 +790,7 @@ export default [ '$state','moment', '$timeout', '$window', function add_node_between() { this.on("click", function(d) { - if(scope.canAddWorkflowJobTemplate !== false) { + if(scope.workflowJobTemplateObj.summary_fields.user_capabilities.edit || scope.canAddWorkflowJobTemplate) { scope.addNode({ parent: d, betweenTwoNodes: true @@ -800,7 +801,7 @@ export default [ '$state','moment', '$timeout', '$window', function remove_node() { this.on("click", function(d) { - if(scope.canAddWorkflowJobTemplate !== false) { + if(scope.workflowJobTemplateObj.summary_fields.user_capabilities.edit || scope.canAddWorkflowJobTemplate) { scope.deleteNode({ nodeToDelete: d }); diff --git a/awx/ui/client/src/templates/workflows/workflow-maker/workflow-maker.partial.html b/awx/ui/client/src/templates/workflows/workflow-maker/workflow-maker.partial.html index 14f09234aa..3335e39407 100644 --- a/awx/ui/client/src/templates/workflows/workflow-maker/workflow-maker.partial.html +++ b/awx/ui/client/src/templates/workflows/workflow-maker/workflow-maker.partial.html @@ -64,7 +64,7 @@ - +
{{(workflowMakerFormConfig.nodeMode === 'edit' && nodeBeingEdited) ? ((nodeBeingEdited.unifiedJobTemplate && nodeBeingEdited.unifiedJobTemplate.name) ? nodeBeingEdited.unifiedJobTemplate.name : "EDIT TEMPLATE") : "ADD A TEMPLATE"}}
@@ -86,6 +86,6 @@
- +