aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJean-Baptiste Vilain <jean-baptiste.vilain@sonarsource.com>2013-06-18 17:16:41 +0200
committerJean-Baptiste Vilain <jean-baptiste.vilain@sonarsource.com>2013-06-18 17:16:41 +0200
commit076dc17e1f50c4b9c31759d4640ab24472a43469 (patch)
tree0fcb71eafa1621e9be1302edf0eeb0534ba54c90
parentfa2fcc0312a3c22a03e1c28bdd42ab4e45249c45 (diff)
downloadsonarqube-076dc17e1f50c4b9c31759d4640ab24472a43469.tar.gz
sonarqube-076dc17e1f50c4b9c31759d4640ab24472a43469.zip
SONAR-4136 Added shared dashboards ownership change for admins
-rw-r--r--sonar-server/src/main/webapp/WEB-INF/app/controllers/dashboards_controller.rb26
-rw-r--r--sonar-server/src/main/webapp/WEB-INF/app/models/dashboard.rb2
-rw-r--r--sonar-server/src/main/webapp/WEB-INF/app/views/dashboards/_available_dashboards.html.erb20
-rw-r--r--sonar-server/src/main/webapp/WEB-INF/app/views/dashboards/_create_form.html.erb44
-rw-r--r--sonar-server/src/main/webapp/WEB-INF/app/views/dashboards/_dashboard_operations.html.erb20
-rw-r--r--sonar-server/src/main/webapp/WEB-INF/app/views/dashboards/_delete_form.html.erb18
-rw-r--r--sonar-server/src/main/webapp/WEB-INF/app/views/dashboards/_edit_form.html.erb40
-rw-r--r--sonar-server/src/main/webapp/WEB-INF/app/views/dashboards/_my_dashboards.html.erb20
-rw-r--r--sonar-server/src/main/webapp/WEB-INF/app/views/dashboards/index.html.erb18
-rw-r--r--sonar-server/src/main/webapp/stylesheets/dashboard.css11
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">&nbsp;</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;