]> source.dussan.org Git - sonarqube.git/commitdiff
SONAR-5699 Ruby pages are not listed in project sidebar
authorSimon Brandhof <simon.brandhof@sonarsource.com>
Mon, 6 Oct 2014 20:44:03 +0000 (22:44 +0200)
committerSimon Brandhof <simon.brandhof@sonarsource.com>
Mon, 6 Oct 2014 20:44:03 +0000 (22:44 +0200)
server/sonar-web/src/main/webapp/WEB-INF/app/controllers/plugins/resource_controller.rb [new file with mode: 0644]
server/sonar-web/src/main/webapp/WEB-INF/app/views/layouts/_layout.html.erb

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 (file)
index 0000000..88c12c7
--- /dev/null
@@ -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
index 1b6e846b19c7df61c7e4fcd7b7b898aba35d553b..da3714624caead566e5416a8baa5b951963e4aea 100644 (file)
               <li class="<%= 'active' if request.request_uri.include?('/drilldown/issues') -%>">
                 <a href="<%= ApplicationController.root_context -%>/drilldown/issues/<%= @project.id -%><%= "?"+period_param if period_param -%>"><%= message('issues_drilldown.page') -%></a>
               </li>
+              <% 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()}")
+              %>
+                  <li class="<%= 'active' if request.request_uri.include?(page_url) -%>">
+                    <a href="<%= ApplicationController.root_context -%><%= page_url -%>"><%= h message(page.getId() + '.page', :default => page.getTitle()) -%></a>
+                  </li>
+              <% end %>
               <li class="<%= 'active' if request.request_uri.include?('/design/index') -%>">
                 <a href="<%= ApplicationController.root_context -%>/design/index/<%= @project.key -%>"><%= message('design.page') -%></a>
               </li>