Merge pull request #5433 from jlmitch5/fixWorkflowJobTemplatePermHiding

fix permissions workflow job weirdness
This commit is contained in:
Michael Abashian
2017-02-17 13:59:24 -05:00
committed by GitHub
3 changed files with 28 additions and 27 deletions

View File

@@ -34,7 +34,7 @@ export default
label: i18n._('Type'), label: i18n._('Type'),
type: 'radio_group', type: 'radio_group',
ngShow: 'selectedTemplate && edgeFlags.showTypeOptions', ngShow: 'selectedTemplate && edgeFlags.showTypeOptions',
ngDisabled: '!canAddWorkflowJobTemplate', ngDisabled: '!(workflowJobTemplateObj.summary_fields.user_capabilities.edit || canAddWorkflowJobTemplate)',
options: [ options: [
{ {
label: i18n._('On Success'), label: i18n._('On Success'),
@@ -70,7 +70,7 @@ export default
dataPlacement: 'right', dataPlacement: 'right',
dataContainer: "body", dataContainer: "body",
ngShow: "selectedTemplate.ask_credential_on_launch", ngShow: "selectedTemplate.ask_credential_on_launch",
ngDisabled: '!canAddWorkflowJobTemplate', ngDisabled: '!(workflowJobTemplateObj.summary_fields.user_capabilities.edit || canAddWorkflowJobTemplate)',
awRequiredWhen: { awRequiredWhen: {
reqExpression: 'selectedTemplate && selectedTemplate.ask_credential_on_launch' reqExpression: 'selectedTemplate && selectedTemplate.ask_credential_on_launch'
} }
@@ -90,7 +90,7 @@ export default
dataPlacement: 'right', dataPlacement: 'right',
dataContainer: "body", dataContainer: "body",
ngShow: "selectedTemplate.ask_inventory_on_launch", ngShow: "selectedTemplate.ask_inventory_on_launch",
ngDisabled: '!canAddWorkflowJobTemplate', ngDisabled: '!(workflowJobTemplateObj.summary_fields.user_capabilities.edit || canAddWorkflowJobTemplate)',
awRequiredWhen: { awRequiredWhen: {
reqExpression: 'selectedTemplate && selectedTemplate.ask_inventory_on_launch' reqExpression: 'selectedTemplate && selectedTemplate.ask_inventory_on_launch'
} }
@@ -111,7 +111,7 @@ export default
dataPlacement: 'right', dataPlacement: 'right',
dataContainer: "body", dataContainer: "body",
ngShow: "selectedTemplate.ask_job_type_on_launch", ngShow: "selectedTemplate.ask_job_type_on_launch",
ngDisabled: '!canAddWorkflowJobTemplate', ngDisabled: '!(workflowJobTemplateObj.summary_fields.user_capabilities.edit || canAddWorkflowJobTemplate)',
awRequiredWhen: { awRequiredWhen: {
reqExpression: 'selectedTemplate && selectedTemplate.ask_job_type_on_launch' reqExpression: 'selectedTemplate && selectedTemplate.ask_job_type_on_launch'
} }
@@ -128,7 +128,7 @@ export default
dataPlacement: 'right', dataPlacement: 'right',
dataContainer: "body", dataContainer: "body",
ngShow: "selectedTemplate.ask_limit_on_launch", ngShow: "selectedTemplate.ask_limit_on_launch",
ngDisabled: '!canAddWorkflowJobTemplate' ngDisabled: '!(workflowJobTemplateObj.summary_fields.user_capabilities.edit || canAddWorkflowJobTemplate)'
}, },
job_tags: { job_tags: {
label: i18n._('Job Tags'), label: i18n._('Job Tags'),
@@ -143,7 +143,7 @@ export default
dataPlacement: "right", dataPlacement: "right",
dataContainer: "body", dataContainer: "body",
ngShow: "selectedTemplate.ask_tags_on_launch", ngShow: "selectedTemplate.ask_tags_on_launch",
ngDisabled: '!canAddWorkflowJobTemplate' ngDisabled: '!(workflowJobTemplateObj.summary_fields.user_capabilities.edit || canAddWorkflowJobTemplate)'
}, },
skip_tags: { skip_tags: {
label: i18n._('Skip Tags'), label: i18n._('Skip Tags'),
@@ -158,22 +158,22 @@ export default
dataPlacement: "right", dataPlacement: "right",
dataContainer: "body", dataContainer: "body",
ngShow: "selectedTemplate.ask_skip_tags_on_launch", ngShow: "selectedTemplate.ask_skip_tags_on_launch",
ngDisabled: '!canAddWorkflowJobTemplate' ngDisabled: '!(workflowJobTemplateObj.summary_fields.user_capabilities.edit || canAddWorkflowJobTemplate)'
} }
}, },
buttons: { buttons: {
cancel: { cancel: {
ngClick: 'cancelNodeForm()', ngClick: 'cancelNodeForm()',
ngShow: 'canAddWorkflowJobTemplate' ngShow: '(workflowJobTemplateObj.summary_fields.user_capabilities.edit || canAddWorkflowJobTemplate)'
}, },
close: { close: {
ngClick: 'cancelNodeForm()', ngClick: 'cancelNodeForm()',
ngShow: '!canAddWorkflowJobTemplate' ngShow: '!(workflowJobTemplateObj.summary_fields.user_capabilities.edit || canAddWorkflowJobTemplate)'
}, },
select: { select: {
ngClick: 'saveNodeForm()', ngClick: 'saveNodeForm()',
ngDisabled: "workflow_maker_form.$invalid || !selectedTemplate", ngDisabled: "workflow_maker_form.$invalid || !selectedTemplate",
ngShow: 'canAddWorkflowJobTemplate' ngShow: '(workflowJobTemplateObj.summary_fields.user_capabilities.edit || canAddWorkflowJobTemplate)'
} }
} }
};}]) };}])

View File

@@ -11,6 +11,7 @@ export default [ '$state','moment', '$timeout', '$window',
scope: { scope: {
treeData: '=', treeData: '=',
canAddWorkflowJobTemplate: '=', canAddWorkflowJobTemplate: '=',
workflowJobTemplateObj: '=',
addNode: '&', addNode: '&',
editNode: '&', editNode: '&',
deleteNode: '&', deleteNode: '&',
@@ -370,7 +371,7 @@ export default [ '$state','moment', '$timeout', '$window',
.attr("cx", nodeW) .attr("cx", nodeW)
.attr("r", 10) .attr("r", 10)
.attr("class", "addCircle nodeCircle") .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) .call(add_node)
.on("mouseover", function(d) { .on("mouseover", function(d) {
d3.select("#node-" + d.id) d3.select("#node-" + d.id)
@@ -392,7 +393,7 @@ export default [ '$state','moment', '$timeout', '$window',
.size(60) .size(60)
.type("cross") .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) .call(add_node)
.on("mouseover", function(d) { .on("mouseover", function(d) {
d3.select("#node-" + d.id) d3.select("#node-" + d.id)
@@ -412,7 +413,7 @@ export default [ '$state','moment', '$timeout', '$window',
.attr("cy", nodeH) .attr("cy", nodeH)
.attr("r", 10) .attr("r", 10)
.attr("class", "removeCircle") .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) .call(remove_node)
.on("mouseover", function(d) { .on("mouseover", function(d) {
d3.select("#node-" + d.id) d3.select("#node-" + d.id)
@@ -434,7 +435,7 @@ export default [ '$state','moment', '$timeout', '$window',
.size(60) .size(60)
.type("cross") .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) .call(remove_node)
.on("mouseover", function(d) { .on("mouseover", function(d) {
d3.select("#node-" + d.id) d3.select("#node-" + d.id)
@@ -549,7 +550,7 @@ export default [ '$state','moment', '$timeout', '$window',
}) })
.attr("r", 10) .attr("r", 10)
.attr("class", "addCircle linkCircle") .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) .call(add_node_between)
.on("mouseover", function(d) { .on("mouseover", function(d) {
d3.select("#link-" + d.source.id + "-" + d.target.id) d3.select("#link-" + d.source.id + "-" + d.target.id)
@@ -581,7 +582,7 @@ export default [ '$state','moment', '$timeout', '$window',
.size(60) .size(60)
.type("cross") .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) .call(add_node_between)
.on("mouseover", function(d) { .on("mouseover", function(d) {
d3.select("#link-" + d.source.id + "-" + d.target.id) d3.select("#link-" + d.source.id + "-" + d.target.id)
@@ -602,16 +603,16 @@ export default [ '$state','moment', '$timeout', '$window',
let t = baseSvg.transition(); let t = baseSvg.transition();
t.selectAll(".nodeCircle") 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") 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") 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") 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") t.selectAll(".linkPath")
.attr("class", function(d) { .attr("class", function(d) {
@@ -636,7 +637,7 @@ export default [ '$state','moment', '$timeout', '$window',
}); });
t.selectAll(".linkCircle") 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) { .attr("cx", function(d) {
return (d.source.isStartNode) ? (d.target.y + d.source.y + rootW) / 2 : (d.target.y + d.source.y + nodeW) / 2; 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") 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) { .attr("transform", function(d) {
let translate; let translate;
if(d.source.isStartNode) { if(d.source.isStartNode) {
@@ -778,7 +779,7 @@ export default [ '$state','moment', '$timeout', '$window',
function add_node() { function add_node() {
this.on("click", function(d) { this.on("click", function(d) {
if(scope.canAddWorkflowJobTemplate !== false) { if(scope.workflowJobTemplateObj.summary_fields.user_capabilities.edit || scope.canAddWorkflowJobTemplate) {
scope.addNode({ scope.addNode({
parent: d, parent: d,
betweenTwoNodes: false betweenTwoNodes: false
@@ -789,7 +790,7 @@ export default [ '$state','moment', '$timeout', '$window',
function add_node_between() { function add_node_between() {
this.on("click", function(d) { this.on("click", function(d) {
if(scope.canAddWorkflowJobTemplate !== false) { if(scope.workflowJobTemplateObj.summary_fields.user_capabilities.edit || scope.canAddWorkflowJobTemplate) {
scope.addNode({ scope.addNode({
parent: d, parent: d,
betweenTwoNodes: true betweenTwoNodes: true
@@ -800,7 +801,7 @@ export default [ '$state','moment', '$timeout', '$window',
function remove_node() { function remove_node() {
this.on("click", function(d) { this.on("click", function(d) {
if(scope.canAddWorkflowJobTemplate !== false) { if(scope.workflowJobTemplateObj.summary_fields.user_capabilities.edit || scope.canAddWorkflowJobTemplate) {
scope.deleteNode({ scope.deleteNode({
nodeToDelete: d nodeToDelete: d
}); });

View File

@@ -64,7 +64,7 @@
</div> </div>
</div> </div>
</div> </div>
<workflow-chart ng-if="modalOpen" tree-data="treeData.data" add-node="startAddNode(parent, betweenTwoNodes)" edit-node="startEditNode(nodeToEdit)" delete-node="startDeleteNode(nodeToDelete)" workflow-zoomed="workflowZoomed(zoom)" can-add-workflow-job-template="canAddWorkflowJobTemplate" mode="edit" class="WorkflowMaker-chart"></workflow-chart> <workflow-chart ng-if="modalOpen" tree-data="treeData.data" add-node="startAddNode(parent, betweenTwoNodes)" edit-node="startEditNode(nodeToEdit)" delete-node="startDeleteNode(nodeToDelete)" workflow-zoomed="workflowZoomed(zoom)" can-add-workflow-job-template="canAddWorkflowJobTemplate" workflow-job-template-obj="workflowJobTemplateObj" mode="edit" class="WorkflowMaker-chart"></workflow-chart>
</div> </div>
<div class="WorkflowMaker-contentRight"> <div class="WorkflowMaker-contentRight">
<div class="WorkflowMaker-formTitle">{{(workflowMakerFormConfig.nodeMode === 'edit' && nodeBeingEdited) ? ((nodeBeingEdited.unifiedJobTemplate && nodeBeingEdited.unifiedJobTemplate.name) ? nodeBeingEdited.unifiedJobTemplate.name : "EDIT TEMPLATE") : "ADD A TEMPLATE"}}</div> <div class="WorkflowMaker-formTitle">{{(workflowMakerFormConfig.nodeMode === 'edit' && nodeBeingEdited) ? ((nodeBeingEdited.unifiedJobTemplate && nodeBeingEdited.unifiedJobTemplate.name) ? nodeBeingEdited.unifiedJobTemplate.name : "EDIT TEMPLATE") : "ADD A TEMPLATE"}}</div>
@@ -86,6 +86,6 @@
</div> </div>
<div class="WorkflowMaker-buttonHolder"> <div class="WorkflowMaker-buttonHolder">
<button type="button" class="btn btn-sm WorkflowMaker-cancelButton" ng-click="closeWorkflowMaker()"> Close</button> <button type="button" class="btn btn-sm WorkflowMaker-cancelButton" ng-click="closeWorkflowMaker()"> Close</button>
<button type="button" class="btn btn-sm WorkflowMaker-saveButton" ng-click="saveWorkflowMaker()" ng-show="workflow_job_template_obj.summary_fields.user_capabilities.edit || canAddWorkflowJobTemplate" ng-disabled="edgeFlags.conflict || workflowMakerFormConfig.nodeMode === 'add'"> Save</button> <button type="button" class="btn btn-sm WorkflowMaker-saveButton" ng-click="saveWorkflowMaker()" ng-show="workflowJobTemplateObj.summary_fields.user_capabilities.edit || canAddWorkflowJobTemplate" ng-disabled="edgeFlags.conflict || workflowMakerFormConfig.nodeMode === 'add'"> Save</button>
</div> </div>
</div> </div>