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
-%>
-
-
-
-
- <%= render :partial => 'widget_properties', :locals => {:widget => widget} -%>
-
-
-
-
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 @@
-
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 @@
-
-
- |
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| %>
-
- <%= 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()) -%>
-
- |
-
- <% end %>
-
-
- <%= 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