diff options
author | Jean-Baptiste Vilain <jean-baptiste.vilain@sonarsource.com> | 2013-06-18 17:16:41 +0200 |
---|---|---|
committer | Jean-Baptiste Vilain <jean-baptiste.vilain@sonarsource.com> | 2013-06-18 17:16:41 +0200 |
commit | 076dc17e1f50c4b9c31759d4640ab24472a43469 (patch) | |
tree | 0fcb71eafa1621e9be1302edf0eeb0534ba54c90 | |
parent | fa2fcc0312a3c22a03e1c28bdd42ab4e45249c45 (diff) | |
download | sonarqube-076dc17e1f50c4b9c31759d4640ab24472a43469.tar.gz sonarqube-076dc17e1f50c4b9c31759d4640ab24472a43469.zip |
SONAR-4136 Added shared dashboards ownership change for admins
10 files changed, 157 insertions, 62 deletions
diff --git a/sonar-server/src/main/webapp/WEB-INF/app/controllers/dashboards_controller.rb b/sonar-server/src/main/webapp/WEB-INF/app/controllers/dashboards_controller.rb index 52474be0159..ca949ed9e89 100644 --- a/sonar-server/src/main/webapp/WEB-INF/app/controllers/dashboards_controller.rb +++ b/sonar-server/src/main/webapp/WEB-INF/app/controllers/dashboards_controller.rb @@ -45,10 +45,16 @@ class DashboardsController < ApplicationController end end + def create_form + @global = !params[:resource] + @dashboard = Dashboard.new + render :partial => 'create_form', :resource => params[:resource] + end + def create verify_post_request - @dashboard=Dashboard.new() - @dashboard.user_id=current_user.id + @dashboard = Dashboard.new() + @dashboard.user_id = current_user.id load_dashboard_from_params(@dashboard) active_dashboard = current_user.active_dashboards.to_a.find { |ad| ad.name==@dashboard.name } @@ -69,10 +75,10 @@ class DashboardsController < ApplicationController end end - def edit - @dashboard=Dashboard.find(params[:id]) + def edit_form + @dashboard = Dashboard.find(params[:id]) if @dashboard.editable_by?(current_user) - render :partial => 'edit' + render :partial => 'edit_form', :resource => params[:resource] else redirect_to :action => 'index', :resource => params[:resource] end @@ -92,6 +98,15 @@ class DashboardsController < ApplicationController redirect_to :action => 'index', :resource => params[:resource] end + def delete_form + @dashboard = Dashboard.find(params[:id]) + if @dashboard.editable_by?(current_user) + render :partial => 'delete_form', :resource => params[:resource] + else + redirect_to :action => 'index', :resource => params[:resource] + end + end + def delete verify_post_request dashboard=Dashboard.find(params[:id]) @@ -174,6 +189,7 @@ class DashboardsController < ApplicationController dashboard.is_global=(params[:global].present?) dashboard.shared=(params[:shared].present? && is_admin?) dashboard.column_layout=Dashboard::DEFAULT_LAYOUT if !dashboard.column_layout + dashboard.user = User.find_active_by_login(params[:owner]) unless params[:owner].nil? end def add_default_dashboards_if_first_user_dashboard(global) diff --git a/sonar-server/src/main/webapp/WEB-INF/app/models/dashboard.rb b/sonar-server/src/main/webapp/WEB-INF/app/models/dashboard.rb index 4d8577fff51..f4337a54e6d 100644 --- a/sonar-server/src/main/webapp/WEB-INF/app/models/dashboard.rb +++ b/sonar-server/src/main/webapp/WEB-INF/app/models/dashboard.rb @@ -68,7 +68,7 @@ class Dashboard < ActiveRecord::Base end def editable_by?(user) - (user && self.user_id==user.id) || (user_id.nil? && user.has_role?(:admin)) + (user && self.user_id==user.id) || user.has_role?(:admin) end def owner?(user) diff --git a/sonar-server/src/main/webapp/WEB-INF/app/views/dashboards/_available_dashboards.html.erb b/sonar-server/src/main/webapp/WEB-INF/app/views/dashboards/_available_dashboards.html.erb index 1146206e2fd..a60c371d5ad 100644 --- a/sonar-server/src/main/webapp/WEB-INF/app/views/dashboards/_available_dashboards.html.erb +++ b/sonar-server/src/main/webapp/WEB-INF/app/views/dashboards/_available_dashboards.html.erb @@ -13,8 +13,7 @@ <tr class="even"> <td colspan="5" class="empty"><%= message('dashboard.no_dashboard') -%></td> </tr> - <% - else + <% else @shared_dashboards.each do |dashboard| %> <tr id="dashboard-<%= dashboard.id -%>" class="<%= cycle('even', 'odd', :name => 'shared') -%>"> <td> @@ -29,23 +28,10 @@ <%= h(dashboard.user_name || message('dashboard.username.default')) -%> </td> <td class="order"> </td> - <td class="thin nowrap operations"> - <% if dashboard.editable_by?(current_user) %> - <%= link_to message('dashboard.configure_widgets'), {:controller => :dashboard, :action => :configure, :did => dashboard.id, :id => (params[:resource] unless dashboard.global?)}, - :id => "configure-#{u dashboard.name}", :class => 'link-action' %> - | - <%= link_to_remote message('edit'), {:update => "create_dashboard", :url => {:action => :edit, :id => dashboard.id, :resource => params[:resource]}}, - {:id => "edit-#{u dashboard.name}", :method => :get, :class => 'link-action'} %> - | - <%= link_to message('delete'), {:action => :delete, :id => dashboard.id, :resource => params[:resource]}, :method => :post, - :confirm => message('dashboard.do_you_want_to_delete_dashboard'), :id => "delete-#{u dashboard.name}", :class => 'link-action' %> - | - <% end %> - <%= link_to message('follow'), {:action => :follow, :id => dashboard.id, :resource => params[:resource]}, :method => :post, :id => "follow-#{u dashboard.name}", :class => 'link-action' %> - </td> + <%= render :partial => 'dashboard_operations', :locals => {:dashboard => dashboard, :can_be_disabled => true, :subscription_action => 'follow'} %> </tr> <% end - end + end %> </tbody> </table> diff --git a/sonar-server/src/main/webapp/WEB-INF/app/views/dashboards/_create_form.html.erb b/sonar-server/src/main/webapp/WEB-INF/app/views/dashboards/_create_form.html.erb new file mode 100644 index 00000000000..a570962e753 --- /dev/null +++ b/sonar-server/src/main/webapp/WEB-INF/app/views/dashboards/_create_form.html.erb @@ -0,0 +1,44 @@ +<form id="create-dashboard-form" method="post" action="<%= ApplicationController.root_context -%>/dashboards/create"> + <% if @global %> + <input type="hidden" name="global" value="true" /> + <% else %> + <input type="hidden" name="resource" value="<%= params[:resource] %>"/> + <% end %> + <fieldset> + <div class="modal-head"> + <h2><%= message('dashboard.create_dashboard') -%></h2> + </div> + <div class="modal-body"> + <% if @dashboard %> + <% @dashboard.errors.each do |attr, msg| %> + <p class="error"><%= h msg -%></p> + <% end %> + <% end %> + <div class="modal-field"> + <label for="name"><%= h message('name') -%> <em class="mandatory">*</em></label> + <input id="name" name="name" type="text" size="50" maxlength="256" value="<%= h @dashboard.name -%>" autofocus="autofocus"/> + </div> + <div class="modal-field"> + <label for="description"><%= h message('description') -%></label> + <input id="description" name="description" type="text" size="50" maxlength="4000" value="<%= h @dashboard.description -%>"/> + </div> + <% if is_admin? %> + <div class="modal-field"> + <label for="shared"><%= h message('shared') -%></label> + <input id="shared" name="shared" type="checkbox" value="true" <%= 'checked' if @dashboard.shared -%>/> + </div> + <% end %> + </div> + <div class="modal-foot"> + <input type="submit" value="<%= h message('save') -%>" id="save-submit"/> + <a href="#" onclick="return closeModalWindow()" id="save-cancel"><%= h message('cancel') -%></a> + </div> + </fieldset> +</form> + +<script> + $j("#create-dashboard-form").modalForm({success: function (data) { + window.location = baseUrl + '/dashboards'; + }}); +</script> + diff --git a/sonar-server/src/main/webapp/WEB-INF/app/views/dashboards/_dashboard_operations.html.erb b/sonar-server/src/main/webapp/WEB-INF/app/views/dashboards/_dashboard_operations.html.erb new file mode 100644 index 00000000000..98f60da4ffc --- /dev/null +++ b/sonar-server/src/main/webapp/WEB-INF/app/views/dashboards/_dashboard_operations.html.erb @@ -0,0 +1,20 @@ +<td class="thin nowrap operations"> + <% if dashboard.editable_by?(current_user) %> + <%= link_to message('dashboard.configure_widgets'), {:controller => :dashboard, :action => :configure, :did => dashboard.id, :id => (params[:resource] unless dashboard.global?)}, + :id => "configure-#{u dashboard.name}", :class => 'link-action' %> + | + <%= link_to message('edit'), {:action => :edit_form, :id => dashboard.id, :resource => params[:resource]}, + :id => "edit-#{u dashboard.name}", :class => 'open-modal link-action' %> + + <% if can_be_disabled %> + | + <%= link_to message('delete'), {:action => :delete_form, :id => dashboard.id, :resource => params[:resource]}, + :id => "delete-#{u dashboard.name}", :class => 'open-modal link-action' %> + | + <% end %> + <% end %> + <% if can_be_disabled %> + <%= link_to message(subscription_action), {:action => subscription_action.to_sym, :id => dashboard.id, :resource => params[:resource]}, :method => :post, + :id => "#{subscription_action}-#{u dashboard.name}", :class => 'link-action' %> + <% end %> +</td> diff --git a/sonar-server/src/main/webapp/WEB-INF/app/views/dashboards/_delete_form.html.erb b/sonar-server/src/main/webapp/WEB-INF/app/views/dashboards/_delete_form.html.erb new file mode 100644 index 00000000000..87eb2f68ea2 --- /dev/null +++ b/sonar-server/src/main/webapp/WEB-INF/app/views/dashboards/_delete_form.html.erb @@ -0,0 +1,18 @@ +<form id="delete-dashboard-form" method="post" action="<%= ApplicationController.root_context -%>/dashboards/delete"> + <input type="hidden" name="id" value="<%= params[:id] -%>"> + <fieldset> + <div class="modal-head"> + <h2><%= message 'dashboard.delete_confirm_title' -%></h2> + </div> + <div class="modal-body"> + <div class="info"> + <img src="<%= ApplicationController.root_context -%>/images/information.png" style="vertical-align: text-bottom"/> + <%= message 'dashboard.delete_confirm_message' -%> + </div> + </div> + <div class="modal-foot"> + <input type="submit" value="<%= message 'dashboard.delete_confirm_button' -%>" id="confirm-submit"/> + <a href="#" onclick="return closeModalWindow()" id="confirm-cancel"><%= h message('cancel') -%></a> + </div> + </fieldset> +</form> diff --git a/sonar-server/src/main/webapp/WEB-INF/app/views/dashboards/_edit_form.html.erb b/sonar-server/src/main/webapp/WEB-INF/app/views/dashboards/_edit_form.html.erb new file mode 100644 index 00000000000..faa26a54363 --- /dev/null +++ b/sonar-server/src/main/webapp/WEB-INF/app/views/dashboards/_edit_form.html.erb @@ -0,0 +1,40 @@ +<form id="edit-dashboard-form" method="post" action="<%= ApplicationController.root_context -%>/dashboards/update"> + <input type="hidden" name="id" value="<%= @dashboard.id -%>"> + <% if @dashboard.global %> + <input type="hidden" name="global" value="true" /> + <% else %> + <input type="hidden" name="resource" value="<%= params[:resource] %>"/> + <% end %> + <fieldset> + <div class="modal-head"> + <h2><%= message('dashboard.edit_dashboard') -%></h2> + </div> + <div class="modal-body"> + <% @dashboard.errors.each do |attr, msg| %> + <p class="error"><%= h msg -%></p> + <% end %> + <div class="modal-field"> + <label for="name"><%= h message('name') -%> <em class="mandatory">*</em></label> + <input id="name" name="name" type="text" size="50" maxlength="256" value="<%= h @dashboard.name -%>" autofocus="autofocus"/> + </div> + <div class="modal-field"> + <label for="description"><%= h message('description') -%></label> + <input id="description" name="description" type="text" size="50" maxlength="4000" value="<%= h @dashboard.description -%>"/> + </div> + <% if is_admin? %> + <div class="modal-field"> + <label for="owner"><%= h message('owner') -%></label> + <%= user_select_tag('owner', :html_id => 'select-dashboard-owner', :selected_user => @dashboard.user) -%> + </div> + <div class="modal-field"> + <label for="shared"><%= h message('shared') -%></label> + <input id="shared" name="shared" type="checkbox" value="true" <%= 'checked' if @dashboard.shared -%>/> + </div> + <% end %> + </div> + <div class="modal-foot"> + <input type="submit" value="<%= h message('save') -%>" id="save-submit"/> + <a href="#" onclick="return closeModalWindow()" id="save-cancel"><%= h message('cancel') -%></a> + </div> + </fieldset> +</form> diff --git a/sonar-server/src/main/webapp/WEB-INF/app/views/dashboards/_my_dashboards.html.erb b/sonar-server/src/main/webapp/WEB-INF/app/views/dashboards/_my_dashboards.html.erb index 193af39786f..9164ce3927d 100644 --- a/sonar-server/src/main/webapp/WEB-INF/app/views/dashboards/_my_dashboards.html.erb +++ b/sonar-server/src/main/webapp/WEB-INF/app/views/dashboards/_my_dashboards.html.erb @@ -39,25 +39,7 @@ <%= image_tag('transparent_16.gif') %> <% end %> </td> - <td class="thin nowrap operations"> - <% if dashboard.editable_by?(current_user) %> - <%= link_to message('dashboard.configure_widgets'), {:controller => :dashboard, :action => :configure, :did => dashboard.id, :id => (params[:resource] unless dashboard.global?)}, - :id => "configure-#{u dashboard.name}", :class => 'link-action' %> - | - <%= link_to_remote message('edit'), {:update => "create_dashboard", :url => {:action => :edit, :id => dashboard.id, :resource => params[:resource]}}, - {:id => "edit-#{u dashboard.name}", :method => :get, :class => 'link-action'} %> - <% if @actives.size() > 1 %> - | - <%= link_to message('delete'), {:action => :delete, :id => dashboard.id, :resource => params[:resource]}, :method => :post, - :confirm => message('dashboard.do_you_want_to_delete_dashboard'), :id => "delete-#{u dashboard.name}", :class => 'link-action' %> - | - <% end %> - <% end %> - <% if @actives.size() > 1 %> - <%= link_to message('unfollow'), {:action => :unfollow, :id => dashboard.id, :resource => params[:resource]}, :method => :post, - :id => "unfollow-#{u dashboard.name}", :class => 'link-action' %> - <% end %> - </td> + <%= render :partial => 'dashboard_operations', :locals => {:dashboard => dashboard, :can_be_disabled => @actives.length > 1, :subscription_action => 'unfollow'} %> </tr> <% end end diff --git a/sonar-server/src/main/webapp/WEB-INF/app/views/dashboards/index.html.erb b/sonar-server/src/main/webapp/WEB-INF/app/views/dashboards/index.html.erb index 2fda8e73f69..ff63175ddb2 100644 --- a/sonar-server/src/main/webapp/WEB-INF/app/views/dashboards/index.html.erb +++ b/sonar-server/src/main/webapp/WEB-INF/app/views/dashboards/index.html.erb @@ -1,15 +1,15 @@ <div class="admin_page"> - <div id="my_dasboards"> - <h1><%= message(@global ? 'dashboard.my_global_dashboards' : 'dashboard.my_project_dashboards') -%></h1> - <%= render_partial :partial => 'my_dashboards', :locals => { :is_admin => is_admin? } %> + <ul style="float: right" class="horizontal"> + <li class="marginleft10 add"> + <%= link_to message('create'), {:action => :create_form, :resource => params[:resource]}, :id => "create-link-dashboard", :class => 'open-modal link-action' %> + </li> + </ul> - <h1><%= message('dashboard.available_dashboards') -%></h1> - <%= render_partial :partial => 'available_dashboards', :locals => { :is_admin => is_admin? } %> - </div> + <h1><%= message(@global ? 'dashboard.my_global_dashboards' : 'dashboard.my_project_dashboards') -%></h1> + <%= render_partial :partial => 'my_dashboards', :locals => { :is_admin => is_admin? } %> - <div id="create_dashboard"> - <%= render :partial => 'dashboards/create' %> - </div> + <h1><%= message('dashboard.available_dashboards') -%></h1> + <%= render_partial :partial => 'available_dashboards', :locals => { :is_admin => is_admin? } %> </div> <% if params[:highlight] %> diff --git a/sonar-server/src/main/webapp/stylesheets/dashboard.css b/sonar-server/src/main/webapp/stylesheets/dashboard.css index 4579e3373da..ea1431d917d 100644 --- a/sonar-server/src/main/webapp/stylesheets/dashboard.css +++ b/sonar-server/src/main/webapp/stylesheets/dashboard.css @@ -161,17 +161,6 @@ font-weight: normal; } -#my_dasboards { - margin-right: 280px; -} - -#create_dashboard { - width: 235px; - position: absolute; - top: 0; - right: 28px; -} - /*OPERATIONS*/ #dashboard #dashboard-operations { position: relative; |