From 8d3d6716e8221f26040eb81911afffc142fae773 Mon Sep 17 00:00:00 2001 From: Stas Vilchik Date: Thu, 14 Apr 2016 13:26:07 +0200 Subject: [PATCH] SONAR-7452 "Bulk Apply Permission Template" uses api/permissions/bulk_apply_template --- .../sonar-web/src/main/js/api/permissions.js | 5 ++ .../apply-template-view.js | 46 +++++++++++-------- .../main/js/apps/project-permissions/main.js | 5 +- 3 files changed, 35 insertions(+), 21 deletions(-) diff --git a/server/sonar-web/src/main/js/api/permissions.js b/server/sonar-web/src/main/js/api/permissions.js index 4e199cd6c54..03f723e56d1 100644 --- a/server/sonar-web/src/main/js/api/permissions.js +++ b/server/sonar-web/src/main/js/api/permissions.js @@ -140,3 +140,8 @@ export function applyTemplateToProject (options) { const url = window.baseUrl + '/api/permissions/apply_template'; return request(_.extend({ type: 'POST', url }, options)); } + +export function bulkApplyTemplateToProject (options) { + const url = window.baseUrl + '/api/permissions/bulk_apply_template'; + return request(_.extend({ type: 'POST', url }, options)); +} diff --git a/server/sonar-web/src/main/js/apps/project-permissions/apply-template-view.js b/server/sonar-web/src/main/js/apps/project-permissions/apply-template-view.js index e831fef39d1..b97c4e442d4 100644 --- a/server/sonar-web/src/main/js/apps/project-permissions/apply-template-view.js +++ b/server/sonar-web/src/main/js/apps/project-permissions/apply-template-view.js @@ -17,10 +17,9 @@ * along with this program; if not, write to the Free Software Foundation, * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ -import $ from 'jquery'; import _ from 'underscore'; import ModalForm from '../../components/common/modal-form'; -import { applyTemplateToProject } from '../../api/permissions'; +import { applyTemplateToProject, bulkApplyTemplateToProject } from '../../api/permissions'; import Template from './templates/project-permissions-apply-template.hbs'; export default ModalForm.extend({ @@ -37,27 +36,36 @@ export default ModalForm.extend({ onFormSubmit () { ModalForm.prototype.onFormSubmit.apply(this, arguments); const that = this; - this.disableForm(); - - const projects = this.options.project ? [this.options.project] : this.options.projects; const permissionTemplate = this.$('#project-permissions-template').val(); - let looper = $.Deferred().resolve(); + this.disableForm(); - projects.forEach(function (project) { - looper = looper.then(function () { - return applyTemplateToProject({ - data: { projectId: project.id, templateId: permissionTemplate } - }); + if (this.options.project) { + applyTemplateToProject({ + data: { projectId: this.options.project.id, templateId: permissionTemplate } + }).done(function () { + that.options.refresh(); + that.destroy(); + }).fail(function (jqXHR) { + that.enableForm(); + that.showErrors(jqXHR.responseJSON.errors, jqXHR.responseJSON.warnings); }); - }); + } else { + const data = { templateId: permissionTemplate }; + if (this.options.query) { + data.q = this.options.query; + } + if (this.options.filter && this.options.filter !== '__ALL__') { + data.qualifier = this.options.filter; + } - looper.done(function () { - that.options.refresh(); - that.destroy(); - }).fail(function (jqXHR) { - that.enableForm(); - that.showErrors(jqXHR.responseJSON.errors, jqXHR.responseJSON.warnings); - }); + bulkApplyTemplateToProject({ data }).done(function () { + that.options.refresh(); + that.destroy(); + }).fail(function (jqXHR) { + that.enableForm(); + that.showErrors(jqXHR.responseJSON.errors, jqXHR.responseJSON.warnings); + }); + } }, serializeData () { diff --git a/server/sonar-web/src/main/js/apps/project-permissions/main.js b/server/sonar-web/src/main/js/apps/project-permissions/main.js index f58b2abf16a..499cd2f649e 100644 --- a/server/sonar-web/src/main/js/apps/project-permissions/main.js +++ b/server/sonar-web/src/main/js/apps/project-permissions/main.js @@ -105,9 +105,10 @@ export default React.createClass({ bulkApplyTemplate(e) { e.preventDefault(); new ApplyTemplateView({ - projects: this.state.projects, + query: this.state.query, + filter: this.state.filter, permissionTemplates: this.props.permissionTemplates, - refresh: this.requestPermissions + refresh: () => this.requestPermissions(1, this.state.query, this.state.filter) }).render(); }, -- 2.39.5