diff --git a/awx/ui/client/src/projects/list/projects-list.controller.js b/awx/ui/client/src/projects/list/projects-list.controller.js index f129fe5f7a..2fc7a60794 100644 --- a/awx/ui/client/src/projects/list/projects-list.controller.js +++ b/awx/ui/client/src/projects/list/projects-list.controller.js @@ -154,6 +154,21 @@ export default ['$scope', '$rootScope', '$log', 'Rest', 'Alert', } }); + $scope.copyProject = project => { + Wait('start'); + new Project('get', project.id) + .then(model => model.copy()) + .then(({ id }) => { + const params = { project_id: id }; + $state.go('projects.edit', params, { reload: true }); + }) + .catch(({ data, status }) => { + const params = { hdr: 'Error!', msg: `Call to copy failed. Return status: ${status}` }; + ProcessErrors($scope, data, status, null, params); + }) + .finally(() => Wait('stop')); + }; + $scope.showSCMStatus = function(id) { // Refresh the project list var project = Find({ list: $scope.projects, key: 'id', val: id }); diff --git a/awx/ui/client/src/projects/projects.list.js b/awx/ui/client/src/projects/projects.list.js index 7c445408b8..5bec3aefad 100644 --- a/awx/ui/client/src/projects/projects.list.js +++ b/awx/ui/client/src/projects/projects.list.js @@ -100,6 +100,15 @@ export default ['i18n', function(i18n) { dataPlacement: 'top', ngShow: "project.summary_fields.user_capabilities.schedule" }, + copy: { + label: i18n._('Copy'), + ngClick: 'copyProject(project)', + "class": 'btn-danger btn-xs', + awToolTip: i18n._('Copy project'), + dataPlacement: 'top', + // requires future api rbac changes + //ngShow: 'project.summary_fields.user_capabilities.copy' + }, edit: { ngClick: "editProject(project.id)", awToolTip: i18n._('Edit the project'),