From 46d6f0d94f528184f02d8a7de268a49364ffaec7 Mon Sep 17 00:00:00 2001 From: Simon Brandhof Date: Mon, 6 Oct 2014 22:44:03 +0200 Subject: [PATCH] SONAR-5699 Ruby pages are not listed in project sidebar --- .../plugins/resource_controller.rb | 55 +++++++++++++++++++ .../app/views/layouts/_layout.html.erb | 8 +++ 2 files changed, 63 insertions(+) create mode 100644 server/sonar-web/src/main/webapp/WEB-INF/app/controllers/plugins/resource_controller.rb diff --git a/server/sonar-web/src/main/webapp/WEB-INF/app/controllers/plugins/resource_controller.rb b/server/sonar-web/src/main/webapp/WEB-INF/app/controllers/plugins/resource_controller.rb new file mode 100644 index 00000000000..88c12c78ab8 --- /dev/null +++ b/server/sonar-web/src/main/webapp/WEB-INF/app/controllers/plugins/resource_controller.rb @@ -0,0 +1,55 @@ +# +# SonarQube, open source software quality management tool. +# Copyright (C) 2008-2014 SonarSource +# mailto:contact AT sonarsource DOT com +# +# SonarQube 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. +# +# SonarQube 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 this program; if not, write to the Free Software Foundation, +# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +# +class Plugins::ResourceController < ApplicationController + + SECTION=Navigation::SECTION_RESOURCE + helper :project + + def index + @resource = ::Project.by_key(params[:id]) + not_found("Not found") unless @resource + @project=@resource # for backward-compatibility + + @snapshot=@resource.last_snapshot + + page_id=params[:page] + @page_proxy=java_facade.getPage(page_id) + + return redirect_to(home_path) unless @page_proxy + + authorized=@page_proxy.getUserRoles().size==0 + unless authorized + @page_proxy.getUserRoles().each do |role| + authorized= (role=='user') || (role=='viewer') || has_role?(role, @resource) + break if authorized + end + end + + if authorized + @page=@page_proxy.getTarget() + render :template => 'plugins/rails_page' + else + access_denied + end + + rescue ActiveRecord::RecordNotFound + redirect_to home_path + end +end diff --git a/server/sonar-web/src/main/webapp/WEB-INF/app/views/layouts/_layout.html.erb b/server/sonar-web/src/main/webapp/WEB-INF/app/views/layouts/_layout.html.erb index 1b6e846b19c..da3714624ca 100644 --- a/server/sonar-web/src/main/webapp/WEB-INF/app/views/layouts/_layout.html.erb +++ b/server/sonar-web/src/main/webapp/WEB-INF/app/views/layouts/_layout.html.erb @@ -97,6 +97,14 @@
  • "><%= message('issues_drilldown.page') -%>
  • + <% project_metrics = @project.last_snapshot.metric_keys.to_java(:string) if @project.last_snapshot + controller.java_facade.getPages(Navigation::SECTION_RESOURCE.key, @project.scope, @project.qualifier, @project.language, project_metrics).each do |page| + page_url = (page.isController() ? "#{page.getId()}?id=#{@project.id}" : "/plugins/resource/#{@project.id}?page=#{page.getId()}") + %> +
  • + <%= h message(page.getId() + '.page', :default => page.getTitle()) -%> +
  • + <% end %>
  • <%= message('design.page') -%>
  • -- 2.39.5