From 3ca0442d851f724901074ba60bf24d329763f4f2 Mon Sep 17 00:00:00 2001 From: David Gageot Date: Fri, 4 May 2012 12:25:57 +0200 Subject: [PATCH] SONAR-1927 Global Dashboard and widgets. Part I --- .../app/controllers/dashboard_controller.rb | 46 ++--- .../app/controllers/detached_controller.rb | 175 ------------------ .../WEB-INF/app/helpers/dashboard_helper.rb | 6 +- .../WEB-INF/app/helpers/detached_helper.rb | 22 --- .../views/detached/_configure_widget.html.erb | 53 ------ .../app/views/detached/_header.html.erb | 38 ---- .../app/views/detached/_widget.html.erb | 31 ---- .../detached/_widget_definition.html.erb | 12 -- .../detached/_widget_definitions.html.erb | 24 --- .../detached/_widget_properties.html.erb | 30 --- .../app/views/detached/configure.html.erb | 67 ------- .../app/views/detached/edit_layout.html.erb | 20 -- .../WEB-INF/app/views/detached/index.html.erb | 28 --- .../app/views/detached/no_dashboard.html.erb | 27 --- .../app/views/layouts/_layout.html.erb | 13 +- 15 files changed, 35 insertions(+), 557 deletions(-) delete mode 100644 sonar-server/src/main/webapp/WEB-INF/app/controllers/detached_controller.rb delete mode 100644 sonar-server/src/main/webapp/WEB-INF/app/helpers/detached_helper.rb delete mode 100644 sonar-server/src/main/webapp/WEB-INF/app/views/detached/_configure_widget.html.erb delete mode 100644 sonar-server/src/main/webapp/WEB-INF/app/views/detached/_header.html.erb delete mode 100644 sonar-server/src/main/webapp/WEB-INF/app/views/detached/_widget.html.erb delete mode 100644 sonar-server/src/main/webapp/WEB-INF/app/views/detached/_widget_definition.html.erb delete mode 100644 sonar-server/src/main/webapp/WEB-INF/app/views/detached/_widget_definitions.html.erb delete mode 100644 sonar-server/src/main/webapp/WEB-INF/app/views/detached/_widget_properties.html.erb delete mode 100644 sonar-server/src/main/webapp/WEB-INF/app/views/detached/configure.html.erb delete mode 100644 sonar-server/src/main/webapp/WEB-INF/app/views/detached/edit_layout.html.erb delete mode 100644 sonar-server/src/main/webapp/WEB-INF/app/views/detached/index.html.erb delete mode 100644 sonar-server/src/main/webapp/WEB-INF/app/views/detached/no_dashboard.html.erb diff --git a/sonar-server/src/main/webapp/WEB-INF/app/controllers/dashboard_controller.rb b/sonar-server/src/main/webapp/WEB-INF/app/controllers/dashboard_controller.rb index ff0c91466e9..b9014a082d0 100644 --- a/sonar-server/src/main/webapp/WEB-INF/app/controllers/dashboard_controller.rb +++ b/sonar-server/src/main/webapp/WEB-INF/app/controllers/dashboard_controller.rb @@ -27,21 +27,20 @@ class DashboardController < ApplicationController def index # TODO display error page if no dashboard or no resource load_resource() - if @resource.display_dashboard? + + if !@resource || @resource.display_dashboard? load_dashboard() load_authorized_widget_definitions() unless @dashboard redirect_to home_path end - else + elsif @snapshot # display the layout of the parent, usually the directory, but display the file viewers - if @snapshot - @file = @resource - @project = @snapshot.parent.project - render :action => 'no_dashboard' - else - redirect_to home_path - end + @file = @resource + @project = @snapshot.parent.project + render :action => 'no_dashboard' + else + redirect_to home_path end end @@ -50,7 +49,7 @@ class DashboardController < ApplicationController load_resource() load_dashboard() @category=params[:category] - load_widget_definitions(@category) + load_widget_definitions(@dashboard, @category) unless @dashboard redirect_to home_path end @@ -119,11 +118,11 @@ class DashboardController < ApplicationController end end end - redirect_to :action => :configure, :did => dashboard.id, :id => params[:id], :highlight => widget_id, :category => params[:category] + redirect_to :action => 'configure', :did => dashboard.id, :id => params[:id], :highlight => widget_id, :category => params[:category] end def save_widget - widget=Widget.find(params[:wid].to_i) + widget=Widget.find(params[:wid]) #TODO check owner of dashboard Widget.transaction do widget.properties.clear @@ -137,7 +136,7 @@ class DashboardController < ApplicationController widget.configured=true widget.save! render :update do |page| - page.redirect_to(url_for(:action => :configure, :did => widget.dashboard_id, :id => params[:id])) + page.redirect_to(url_for(:action => configure, :did => widget.dashboard_id, :id => params[:id])) end end end @@ -146,14 +145,15 @@ class DashboardController < ApplicationController @category=params[:category] load_resource() load_dashboard() - load_widget_definitions(@category) - render :partial => 'widget_definitions', :locals => {:dashboard => @dashboard, :resource => @resource, :category => @category} + load_widget_definitions(@dashboard, @category) + render :partial => 'widget_definitions', :locals => {:category => @category} end private def load_dashboard @active=nil + if logged_in? if params[:did] @active=ActiveDashboard.find(:first, :include => 'dashboard', :conditions => ['active_dashboards.dashboard_id=? AND active_dashboards.user_id=?', params[:did].to_i, current_user.id]) @@ -179,21 +179,23 @@ class DashboardController < ApplicationController end def load_resource - init_resource_for_user_role + init_resource_for_user_role unless !params[:id] @project=@resource # for backward compatibility with old widgets end def load_authorized_widget_definitions - if @resource - @authorized_widget_definitions=java_facade.getWidgets().select do |widget| - roles = widget.getUserRoles() - roles.empty? || roles.any? { |role| (role=='user') || (role=='viewer') || has_role?(role, @resource) } - end + @authorized_widget_definitions=java_facade.getWidgets().select do |widget| + roles = widget.getUserRoles() + roles.empty? || roles.any? { |role| (role=='user') || (role=='viewer') || has_role?(role, @resource) } end end - def load_widget_definitions(filter_on_category=nil) + def load_widget_definitions(dashboard, filter_on_category=nil) @widget_definitions=java_facade.getWidgets() + if dashboard.detached + @widget_definitions=@widget_definitions.select(&:isDetached) + end + @widget_categories=@widget_definitions.map(&:getWidgetCategories).flatten.uniq.sort unless filter_on_category.blank? @widget_definitions=@widget_definitions.select { |definition| definition.getWidgetCategories().to_a.include?(filter_on_category) } diff --git a/sonar-server/src/main/webapp/WEB-INF/app/controllers/detached_controller.rb b/sonar-server/src/main/webapp/WEB-INF/app/controllers/detached_controller.rb deleted file mode 100644 index 1074a6674c0..00000000000 --- a/sonar-server/src/main/webapp/WEB-INF/app/controllers/detached_controller.rb +++ /dev/null @@ -1,175 +0,0 @@ -# -# Sonar, entreprise quality control tool. -# Copyright (C) 2008-2012 SonarSource -# mailto:contact AT sonarsource DOT com -# -# Sonar is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 3 of the License, or (at your option) any later version. -# -# Sonar is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with Sonar; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02 -# -class DetachedController < ApplicationController - - SECTION=Navigation::SECTION_HOME - - verify :method => :post, :only => [:set_layout, :add_widget, :set_dashboard, :save_widget], :redirect_to => {:action => :index} - before_filter :login_required, :except => [:index] - - def index - # TODO display error page if no dashboard or no resource - load_resource() - load_dashboard() - load_authorized_widget_definitions() - unless @dashboard - redirect_to home_path - end - end - - def configure - # TODO display error page if no dashboard or no resource - load_resource() - load_dashboard() - @category=params[:category] - load_widget_definitions(@category) - unless @dashboard - redirect_to home_path - end - end - - def edit_layout - load_resource() - load_dashboard() - end - - def set_layout - dashboard=Dashboard.find(params[:id]) - if dashboard.editable_by?(current_user) - dashboard.column_layout=params[:layout] - dashboard.save! - columns=dashboard.column_layout.split('-') - dashboard.widgets.find(:all, :conditions => ["column_index > ?", columns.size()]).each do |widget| - widget.column_index=columns.size() - widget.save - end - end - redirect_to :action => 'index', :did => dashboard.id, :id => params[:id] - end - - def set_dashboard - load_dashboard() - - dashboardstate=params[:dashboardstate] - - columns=dashboardstate.split(";") - all_ids=[] - columns.each_with_index do |col, index| - ids=col.split(",") - ids.each_with_index do |id, order| - widget=@dashboard.widgets.to_a.find { |i| i.id==id.to_i() } - if widget - widget.column_index=index+1 - widget.row_index=order+1 - widget.save! - all_ids< {:status => 'ok'} - end - - def add_widget - dashboard=Dashboard.find(params[:id]) - widget_id=nil - if dashboard.editable_by?(current_user) - definition=java_facade.getWidget(params[:widget]) - if definition - first_column_widgets=dashboard.widgets.select { |w| w.column_index==1 }.sort_by { |w| w.row_index } - new_widget=dashboard.widgets.create(:widget_key => definition.getId(), - :name => definition.getTitle(), - :column_index => 1, - :row_index => 1, - :configured => !definition.hasRequiredProperties()) - widget_id=new_widget.id - first_column_widgets.each_with_index do |w, index| - w.row_index=index+2 - w.save - end - end - end - redirect_to :action => :configure, :id => params[:id], :highlight => widget_id, :category => params[:category] - end - - def save_widget - widget=Widget.find(params[:wid].to_i) - #TODO check owner of dashboard - Widget.transaction do - widget.properties.clear - widget.java_definition.getWidgetProperties().each do |java_property| - value=params[java_property.key()] || java_property.defaultValue() - if value && !value.empty? - prop = widget.properties.build(:kee => java_property.key, :text_value => value) - prop.save! - end - end - widget.configured=true - widget.save! - render :update do |page| - page.redirect_to(url_for(:action => :configure, :id => widget.dashboard_id)) - end - end - end - - def widget_definitions - @category=params[:category] - load_resource() - load_dashboard() - load_widget_definitions(@category) - render :partial => 'widget_definitions', :locals => {:dashboard => @dashboard, :category => @category} - end - - private - - def load_dashboard - @active=nil - if logged_in? - @active=ActiveDashboard.find(:first, :include => 'dashboard', :conditions => ['active_dashboards.dashboard_id=? AND active_dashboards.user_id=?', params[:id].to_i, current_user.id]) - end - - if @active.nil? - # anonymous or not found in user dashboards - @active=ActiveDashboard.find(:first, :include => 'dashboard', :conditions => ['active_dashboards.dashboard_id=? AND active_dashboards.user_id IS NULL', params[:id].to_i]) - end - @dashboard=(@active ? @active.dashboard : nil) - @dashboard_configuration=Api::DashboardConfiguration.new(@dashboard, :period_index => params[:period], :snapshot => @snapshot) if @dashboard && @snapshot - end - - def load_resource - end - - def load_authorized_widget_definitions - @authorized_widget_definitions=java_facade.getWidgets().select do |widget| - roles = widget.getUserRoles() - roles.empty? || roles.any? { |role| (role=='user') || (role=='viewer') } - end - end - - def load_widget_definitions(filter_on_category=nil) - @widget_definitions=java_facade.getWidgets().select(&:isDetached) - @widget_categories=@widget_definitions.map(&:getWidgetCategories).flatten.uniq.sort - unless filter_on_category.blank? - @widget_definitions=@widget_definitions.select { |definition| definition.getWidgetCategories().to_a.include?(filter_on_category) } - end - end -end diff --git a/sonar-server/src/main/webapp/WEB-INF/app/helpers/dashboard_helper.rb b/sonar-server/src/main/webapp/WEB-INF/app/helpers/dashboard_helper.rb index eb099e4a27c..f19c150e62e 100644 --- a/sonar-server/src/main/webapp/WEB-INF/app/helpers/dashboard_helper.rb +++ b/sonar-server/src/main/webapp/WEB-INF/app/helpers/dashboard_helper.rb @@ -22,10 +22,10 @@ module DashboardHelper include MetricsHelper def dashboard_action(action_name, opts={}) - if @dashboard.detached - { :action => action_name, :id => @dashboard.id }.merge!(opts) - else + if @resource { :action => action_name, :did => @dashboard.id, :id => @resource.id }.merge!(opts) + else + { :action => action_name, :did => @dashboard.id }.merge!(opts) end end diff --git a/sonar-server/src/main/webapp/WEB-INF/app/helpers/detached_helper.rb b/sonar-server/src/main/webapp/WEB-INF/app/helpers/detached_helper.rb deleted file mode 100644 index b4858d7b40e..00000000000 --- a/sonar-server/src/main/webapp/WEB-INF/app/helpers/detached_helper.rb +++ /dev/null @@ -1,22 +0,0 @@ -# -# Sonar, entreprise quality control tool. -# Copyright (C) 2008-2012 SonarSource -# mailto:contact AT sonarsource DOT com -# -# Sonar is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 3 of the License, or (at your option) any later version. -# -# Sonar is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with Sonar; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02 -# -module DetachedHelper - include DashboardHelper -end diff --git a/sonar-server/src/main/webapp/WEB-INF/app/views/detached/_configure_widget.html.erb b/sonar-server/src/main/webapp/WEB-INF/app/views/detached/_configure_widget.html.erb deleted file mode 100644 index 61d45160038..00000000000 --- a/sonar-server/src/main/webapp/WEB-INF/app/views/detached/_configure_widget.html.erb +++ /dev/null @@ -1,53 +0,0 @@ -<% - begin - widget_body=render :inline => widget.java_definition.getTarget().getTemplate(), :locals => {:widget_properties => widget.properties_as_hash, :widget => widget, :dashboard_configuration => @dashboard_configuration} - rescue => error - logger.error(message('dashboard.cannot_render_widget_x', :params => [widget.java_definition.getId(), error])) - logger.error(error.backtrace.join("\n")) - widget_body="" - end -%> - -
-
- <% if widget.java_definition.isEditable() %> - <%= message('edit') -%> - <% end %> - <%= message('delete') -%> -
-
- <%= h message('widget.' + widget.java_definition.getId() + '.name', :default => widget.java_definition.getTitle()) -%> -
-
- -
- <%= render :partial => 'widget_properties', :locals => {:widget => widget} -%> -
- -
- -
- <% if widget_body.include? '<' %> - <% - default_layout=(widget.layout=='DEFAULT') - if default_layout - %> -
- <% end %> - <%= widget_body -%> - <% if default_layout %> -
-
- <% end %> - <% else %> -

<%= message('no_data') -%>

- <% end %> -
-
- diff --git a/sonar-server/src/main/webapp/WEB-INF/app/views/detached/_header.html.erb b/sonar-server/src/main/webapp/WEB-INF/app/views/detached/_header.html.erb deleted file mode 100644 index 20963d490eb..00000000000 --- a/sonar-server/src/main/webapp/WEB-INF/app/views/detached/_header.html.erb +++ /dev/null @@ -1,38 +0,0 @@ -
- <% if logged_in? %> -
    - <% if back %> -
  • <%= link_to message('dashboard.back_to_dashboard'), dashboard_action(:index) -%>
  • - <% else %> - <% if @dashboard.editable_by?(current_user) %> -
  • <%= link_to message('dashboard.configure_widgets'), dashboard_action(:configure) -%>
  • -
  • <%= link_to message('dashboard.edit_layout'), dashboard_action(:edit_layout) -%>
  • - <% end %> - <% if @resource %> -
  • <%= link_to message('dashboard.manage_dashboards'), {:controller => :dashboards, :action => :index, :resource => @resource.id} -%>
  • - <% end %> - <% end %> -
- <% end %> - - <% if @snapshot %> -
-

- <%= link_to_favourite(@project) -%> <%= "Version #{@snapshot.version} - " if @snapshot.version.present? -%><%= l @snapshot.created_at -%> - <% if @snapshot.project_snapshot.periods? %> -
- - -
- <% end %> -

-
- <% end %> -
diff --git a/sonar-server/src/main/webapp/WEB-INF/app/views/detached/_widget.html.erb b/sonar-server/src/main/webapp/WEB-INF/app/views/detached/_widget.html.erb deleted file mode 100644 index 035b4a87c94..00000000000 --- a/sonar-server/src/main/webapp/WEB-INF/app/views/detached/_widget.html.erb +++ /dev/null @@ -1,31 +0,0 @@ -
- <% if widget.configured - begin - widget_body=render :inline => widget.java_definition.getTarget().getTemplate(), :locals => {:widget_properties => widget.properties_as_hash, :widget => widget, :dashboard_configuration => @dashboard_configuration} - rescue => error - logger.error(message('dashboard.cannot_render_widget_x', :params => [widget.key, error])) - logger.error(error.backtrace.join("\n")) - widget_body="" - end - - if widget_body.include?('<') - default_layout=(widget.java_definition.getWidgetLayout().name()=='DEFAULT') - if default_layout - %> -
- <% end %> - <%= widget_body -%> - <% if default_layout %> -
-
- <% end %> - <% end %> - <% else %> - - <% end %> -
-
diff --git a/sonar-server/src/main/webapp/WEB-INF/app/views/detached/_widget_definition.html.erb b/sonar-server/src/main/webapp/WEB-INF/app/views/detached/_widget_definition.html.erb deleted file mode 100644 index dd6b59963da..00000000000 --- a/sonar-server/src/main/webapp/WEB-INF/app/views/detached/_widget_definition.html.erb +++ /dev/null @@ -1,12 +0,0 @@ - -
-

<%= h message("widget.#{definition.id}.name", :default => definition.title) -%>

- -

<%= h message("widget.#{definition.id}.description", :default => definition.description) -%>

- - <% form_tag dashboard_action(:add_widget, :widget => definition.id) do -%> - - - <% end -%> -
- diff --git a/sonar-server/src/main/webapp/WEB-INF/app/views/detached/_widget_definitions.html.erb b/sonar-server/src/main/webapp/WEB-INF/app/views/detached/_widget_definitions.html.erb deleted file mode 100644 index 1cf2deba4f5..00000000000 --- a/sonar-server/src/main/webapp/WEB-INF/app/views/detached/_widget_definitions.html.erb +++ /dev/null @@ -1,24 +0,0 @@ -

-

-<%= image_tag 'loading.gif', :style => 'vertical-align: top;display: none', :id => 'filter-widgets-loading' -%> -

- - - <% @widget_definitions.each_slice(4) do |row_definitions| %> - - <% row_definitions.each do |definition| %> - <%= render :partial => 'widget_definition', :locals => {:definition => definition, :dashboard => @dashboard, :resource => @resource, :category => category} %> - <% end %> - - <% end %> -
diff --git a/sonar-server/src/main/webapp/WEB-INF/app/views/detached/_widget_properties.html.erb b/sonar-server/src/main/webapp/WEB-INF/app/views/detached/_widget_properties.html.erb deleted file mode 100644 index 839de6ccad7..00000000000 --- a/sonar-server/src/main/webapp/WEB-INF/app/views/detached/_widget_properties.html.erb +++ /dev/null @@ -1,30 +0,0 @@ -<% form_remote_tag :url => {:action => :save_widget, :wid => widget.id, :id => params[:id]}, - :method => :post, - :update => {:failure => "error#{widget.id}"}, - :failure => "$('error#{widget.id}').show()" do -%> - - - - <% widget.java_definition.getWidgetProperties().sort { |w1, w2| natural_comparison(w1.key, w2.key) }.each do |property_def| %> - - - - - <% end %> - - - - -
<%= property_def.key() -%><%= "*" unless property_def.optional()==true -%> - <%= property_value_field(property_def, widget.property_text_value(property_def.key())) -%> -
- <%= message("widget." + widget.key + ".param." + property_def.key(), :default => property_def.description()) -%> -
-
- <%= submit_tag message('save') %> - <% if widget.configured %> - <%= message('cancel') -%> - <% end %> -
- <%= hidden_field_tag "widgetid", "", :class => "widgetid" %> -<% end -%> diff --git a/sonar-server/src/main/webapp/WEB-INF/app/views/detached/configure.html.erb b/sonar-server/src/main/webapp/WEB-INF/app/views/detached/configure.html.erb deleted file mode 100644 index 743b447d18f..00000000000 --- a/sonar-server/src/main/webapp/WEB-INF/app/views/detached/configure.html.erb +++ /dev/null @@ -1,67 +0,0 @@ - - -
- <%= render :partial => 'header', :locals => {:back => true} %> - -
- <%= render :partial => 'widget_definitions', :locals => {:category => @category} -%> -
- - <% - columns=@dashboard.column_layout.split('-') - for index in 1..columns.size() - %> -
-
0 <%= index>1 ? "5px" : "0px" -%>;"> - - - <% - @dashboard.widgets.select { |widget| widget.column_index==index && widget.java_definition }.sort_by { |widget| widget.row_index }.each do |widget| - %> -
- <%= render :partial => 'configure_widget', :locals => {:widget => widget} %> -
- <% - end - %> -
-
- <% end %> -
-
diff --git a/sonar-server/src/main/webapp/WEB-INF/app/views/detached/edit_layout.html.erb b/sonar-server/src/main/webapp/WEB-INF/app/views/detached/edit_layout.html.erb deleted file mode 100644 index cd3f8269ce5..00000000000 --- a/sonar-server/src/main/webapp/WEB-INF/app/views/detached/edit_layout.html.erb +++ /dev/null @@ -1,20 +0,0 @@ -
- <%= render :partial => 'header', :locals => {:back => true} %> - -
-

<%= message('dashboard.click_to_choose_layout') -%>:


- - <% {'100%', 'layout100.png', - '50%-50%', 'layout5050.png', - '30%-70%', 'layout3070.png', - '70%-30%', 'layout7030.png', - '33%-33%-33%', 'layout333333.png' - }.each_pair do |layout, picto| %> -
- <%= link_to image_tag(picto), dashboard_action(:set_layout, :layout => layout), :method => :post %> -
- <% end %> - -
-
-
diff --git a/sonar-server/src/main/webapp/WEB-INF/app/views/detached/index.html.erb b/sonar-server/src/main/webapp/WEB-INF/app/views/detached/index.html.erb deleted file mode 100644 index 83b795b23ed..00000000000 --- a/sonar-server/src/main/webapp/WEB-INF/app/views/detached/index.html.erb +++ /dev/null @@ -1,28 +0,0 @@ -
- <%= render :partial => 'header', :locals => {:back => false} %> -
- <% - columns=@dashboard.column_layout.split('-') - for index in 1..columns.size() - %> - -
-
0 <%= index>1 ? "5px" : "0px" -%>;"> - <% - @dashboard.widgets.select { |widget| widget.column_index==index }.sort_by { |widget| widget.row_index }.each do |widget| - widget_definition=@authorized_widget_definitions.find { |wd| wd.getId()==widget.widget_key } - if widget_definition - %> -
- <%= render :partial => 'widget', :locals => {:widget => widget} %> -
- <% - end - end - %> -
-
- <% end %> -
-
-
diff --git a/sonar-server/src/main/webapp/WEB-INF/app/views/detached/no_dashboard.html.erb b/sonar-server/src/main/webapp/WEB-INF/app/views/detached/no_dashboard.html.erb deleted file mode 100644 index be9f086e585..00000000000 --- a/sonar-server/src/main/webapp/WEB-INF/app/views/detached/no_dashboard.html.erb +++ /dev/null @@ -1,27 +0,0 @@ -<%= render :partial => 'gwt/base', :locals => {:resource => nil, :popup => false, :metric => nil} -%> -<%= render :partial => 'gwt/resource_viewers' -%> - - -
- - diff --git a/sonar-server/src/main/webapp/WEB-INF/app/views/layouts/_layout.html.erb b/sonar-server/src/main/webapp/WEB-INF/app/views/layouts/_layout.html.erb index 9117a336cdc..aeb2e3fa7aa 100644 --- a/sonar-server/src/main/webapp/WEB-INF/app/views/layouts/_layout.html.erb +++ b/sonar-server/src/main/webapp/WEB-INF/app/views/layouts/_layout.html.erb @@ -1,5 +1,8 @@ <% selected_section = controller.class::SECTION + if selected_section==Navigation::SECTION_RESOURCE && !@resource + selected_section = Navigation::SECTION_HOME + end @project=@resource unless @project || selected_section==Navigation::SECTION_HOME period_param = "period=#{params[:period]}" if params[:period] %> @@ -40,9 +43,9 @@ <%= message('dependencies.page') -%> <% ActiveDashboard.user_dashboards(current_user).select { |active_dashboard| active_dashboard.dashboard.detached }.each do |active_dashboard| %> -
  • - <%= active_dashboard.dashboard.name(true) -%> -
  • +
  • + <%= active_dashboard.dashboard.name(true) -%> +
  • <% end %> <% controller.java_facade.getPages(Navigation::SECTION_HOME, nil, nil, nil, nil).each do |page| @@ -53,7 +56,7 @@ <%= message(page.getId() + '.page', :default => page.getTitle()) -%> <% end %> - <% elsif (selected_section==Navigation::SECTION_RESOURCE) %> + <% elsif selected_section==Navigation::SECTION_RESOURCE %> <% ActiveDashboard.user_dashboards(current_user).select { |active_dashboard| !active_dashboard.dashboard.detached }.each do |active_dashboard| %>
  • "><%= active_dashboard.dashboard.name(true) -%> @@ -98,7 +101,7 @@ <% end %> <% # NOTE: we keep "@project.view? || @project.subview?" in the test for backward compatibility with the Views plugin - if (controller.java_facade.getResourceTypeBooleanProperty(@project.qualifier, 'modifiable_history') || @project.view? || @project.subview?) + if (controller.java_facade.getResourceTypeBooleanProperty(@project.qualifier, 'modifiable_history') || @project.view? || @project.subview?) %>
  • <%= message('project_history.page') -%>
  • -- 2.39.5