]> source.dussan.org Git - sonarqube.git/commitdiff
SONAR-1922 Improve UI for profile changelog
authorEvgeny Mandrikov <mandrikov@gmail.com>
Fri, 27 May 2011 22:56:48 +0000 (02:56 +0400)
committerEvgeny Mandrikov <mandrikov@gmail.com>
Fri, 27 May 2011 22:58:42 +0000 (02:58 +0400)
* Show message instead of empty table, when no changes were done.

* Add a select box to only show changelog between the last version and
  another selected version (penultimate by default).

sonar-server/src/main/webapp/WEB-INF/app/controllers/profiles_controller.rb
sonar-server/src/main/webapp/WEB-INF/app/views/profiles/changelog.html.erb

index 81160982d5247929d6926ba50bcbf1d4cb78cfa7..555a8adc02f2010813f5a97b58eb5c04b5100d07 100644 (file)
@@ -196,7 +196,7 @@ class ProfilesController < ApplicationController
     profiles=Profile.find(:all, :conditions => ['language=? and id<>? and (parent_name is null or parent_name<>?) and enabled=?', @profile.language, @profile.id, @profile.name, true], :order => 'name')
     @select_parent = [['None', nil]] + profiles.collect{ |profile| [profile.name, profile.name] }
   end
-  
+
   #
   #
   # GET /profiles/changelog?id=<profile id>
@@ -204,12 +204,25 @@ class ProfilesController < ApplicationController
   #
   def changelog
     @profile = Profile.find(params[:id])
-    
-    @changes=ActiveRuleChange.find(:all, :conditions => ['profile_id=?', @profile.id], :order => 'id desc')
-    
+
+    @versions = ActiveRuleChange.find(:all, :select => 'profile_version, MAX(change_date) AS change_date', :conditions => ['profile_id=?', @profile.id], :group => 'profile_version')
+    @versions.sort! { |a,b| b.profile_version <=> a.profile_version }
+
+    if @versions.empty?
+      @last_version = 1
+    else
+      @last_version = @versions[0].profile_version
+      @past_versions = @versions[1, @versions.length]
+      if params[:since].blank?
+        @since_version = @last_version - 1
+      else
+        @since_version = params[:since].to_i
+      end
+      @changes = ActiveRuleChange.find(:all, :conditions => ['profile_id=? and profile_version>?', @profile.id, @since_version], :order => 'id desc')
+    end
   end
-  
-  
+
+
   #
   #
   # POST /profiles/change_parent?id=<profile id>&parent_name=<parent profile name>
index a46645b46fb487fe55b7cf21ba219f2012fb68ac..979c550f135d1986c0059c33c790318e35bd0f7c 100644 (file)
@@ -2,6 +2,18 @@
 <%= render :partial => 'profiles/tabs', :locals => {:selected_tab=>'changelog'} %>
 
 <div class="tabs-panel marginbottom10">
+  <% if @versions.empty? %>
+    No changes has been done on this quality profile.
+  <% else %>
+
+  <% if !@past_versions.empty? %>
+    <% form_tag({:action => 'changelog'}, {:method => 'post'}) do %>
+      <%= hidden_field_tag "id", @profile.id %>
+      Changelog between last version (<%= @versions[0].change_date.strftime("%Y/%m/%d %H:%M:%S") %>) and
+      <%= select_tag "since", options_for_select(@past_versions.map {|u| ["version " + u.profile_version.to_s + " (" + u.change_date.strftime("%Y/%m/%d %H:%M:%S") + ")", u.profile_version]}, @since_version) %>
+      <%= submit_tag "Load", :id => 'submit_since'%>
+    <% end %>
+  <% end %>
 
   <table  class="data width100">
     <thead>
@@ -70,4 +82,5 @@
     <% end %>
   </table>
 
+  <% end %>
 </div>