]> source.dussan.org Git - sonarqube.git/commitdiff
SONAR-893 Improve the "History" service for projects
authorFabrice Bellingard <bellingard@gmail.com>
Wed, 31 Aug 2011 16:18:14 +0000 (18:18 +0200)
committerFabrice Bellingard <bellingard@gmail.com>
Wed, 31 Aug 2011 16:18:14 +0000 (18:18 +0200)
- Display snapshot that are currently being built without the
  possibility to modify their status
- Remove the popup and the bulk change, as there's the recovery
  mechanism
- Invert Event and Time columns
- Set the table to minimum width

plugins/sonar-l10n-en-plugin/src/main/resources/org/sonar/l10n/core.properties
sonar-server/src/main/webapp/WEB-INF/app/controllers/project_controller.rb
sonar-server/src/main/webapp/WEB-INF/app/views/project/history.html.erb

index 02cec994c055549fc27ea4505182064fbbe5db02..fa208995a46102854b97fb9221746926f2745afb 100644 (file)
@@ -600,6 +600,8 @@ manual_measures.pending_message=Pending measures are marked with orange box. The
 #------------------------------------------------------------------------------
 
 project_history.page_title=Delete quality snapshots from project history
+project_history.note=Note on snapshot deletion
+project_history.note_detail=A snapshot may be deleted from the database only if it was created more that 6 hours ago.
 project_history.col.year=Year
 project_history.col.month=Month
 project_history.col.time=Time
@@ -607,11 +609,12 @@ project_history.col.events=Events
 project_history.col.action=Action
 project_history.delete=Delete
 project_history.recover=Recover
+project_history.currently_analysing=Currently analysing...
+project_history.last_snapshot=Last snapshot
 project_history.delete_snapshot=Delete snapshot
 project_history.recover_snapshot=Recover snapshot
-project_history.sure_to_delete_snapshot=Are you sure you want to delete this snapshot?
-project_history.x_snapshots_deleted={0} snapshot(s) will be deleted during next analysis.
-project_history.x_snapshots_recovered={0} snapshot(s) will not be deleted during next analysis.
+project_history.snapshot_deleted=The snapshot will be deleted.
+project_history.snapshot_recovered=Snapshot recovered.
 project_history.snapshot_will_be_deleted_next_analysis=This snapshot will be deleted during next analysis.
 
 
index ce250b2011aadb0b565fa0216d5bfad19993f38f..cfd8080f7736773d7f6ca84e38f54d854ca67987 100644 (file)
@@ -64,12 +64,12 @@ class ProjectController < ApplicationController
     project=Project.by_key(params[:id])
     return access_denied unless is_admin?(@project)
     
-    sids = params[:snapshot_ids]
+    sid = params[:snapshot_id]
     delete_operation = params[:operation] == "delete"
-    unless sids.empty?
+    if sid
       status = delete_operation ? 'U' : 'P'
-      Snapshot.update_all("status='"+status+"'", ["id IN (?) or root_snapshot_id IN (?)", sids, sids])
-      flash[:notice] = message(delete_operation ? 'project_history.x_snapshots_deleted' : 'project_history.x_snapshots_recovered', :params => sids.size)
+      Snapshot.update_all("status='"+status+"'", ["id=? or root_snapshot_id=(?)", sid, sid])
+      flash[:notice] = message(delete_operation ? 'project_history.snapshot_deleted' : 'project_history.snapshot_recovered')
     end
     
     redirect_to :action => 'history', :id => project.id
index a7adeb6861616f17243bc611c1c37e08e6da5945..a4126970bd72af5ad96c154cf05840708edd18b3 100644 (file)
@@ -2,41 +2,30 @@
 <h1><%= message('project_history.page_title') -%></h1>
 <br/>
 
-<script>
-  function updateSelectBox() {
-    var inputs = document.getElementsByName("snapshot_ids[]");
-    var selected = false;
-    for (i=0; i<inputs.length; i++) {
-      if (inputs[i].checked) { selected = true; break;}
-    }
-    $('operation-select-box').disabled = !selected;
-  }
-</script>
+<div class="help">
+  <h3><%= message('project_history.note') -%></h3>
+  <p>
+    <%= message('project_history.note_detail') -%>
+  </p>  
+</div>
+<br/>
 
-<form action="<%= ApplicationController.root_context -%>/project/snapshot_history" method="POST" id="snapshots-form">
-<input type="hidden" name="id" value="<%= @project.id -%>"/>
-<table class="width100 data">
+<table class="data" style="width:1%">
   <thead>
     <tr>
       <th class="thin nowrap"><%= message('project_history.col.year') -%></th>
       <th class="thin nowrap"><%= message('project_history.col.month') -%></th>
-      <th style="width: 18px"></th>
-      <th class="nowrap"><%= message('project_history.col.time') -%></th>
-      <th class="nowrap"><%= message('project_history.col.events') -%></th>
+      <th class="thin nowrap" style="padding-left: 20px;"><%= message('project_history.col.events') -%></th>
+      <th style="min-width: 20px; padding-left: 30px;"> </th>
+      <th class="thin nowrap"><%= message('project_history.col.time') -%></th>
       <th class="thin nowrap center"><%= message('project_history.col.action') -%></th>
-      <th class="thin nowrap">
-        <select id="operation-select-box" name="operation" onChange="$('snapshots-form').submit()" disabled>
-             <option value="" selected></option>
-             <option value="delete"><%= message('project_history.delete') -%></option>
-             <option value="recover"><%= message('project_history.recover') -%></option>
-           </select>
-      </th>
     </tr>
   </thead>
   <tbody>
     <% 
       current_year = nil
-      current_month = nil 
+      current_month = nil
+      last_snapshot_found = false
       @snapshots.each do |snapshot|
         number_of_events = snapshot.events.size
         time = snapshot.created_at
     <tr class="<%= cycle 'even','odd' -%>">
       <td class="thin nowrap"><%= time.year unless time.year == current_year -%></td>
       <td class="thin nowrap"><%= l(time, :format => '%B').capitalize unless time.month == current_month -%></td>
-      <td style="width: 18px">
-        <% if snapshot.status == 'U' %>
+      <td class="thin nowrap" style="padding-left: 20px;">
+        <%= snapshot.events.map{|e| e.name}.join(', ') -%>
+      </td>
+      <td class="right" style="padding-left: 30px;">
+        <% if last_snapshot_found && snapshot.status == 'U' %>
             <img src="<%= image_path '/images/exclamation.png' -%>" title="<%= message('project_history.snapshot_will_be_deleted_next_analysis') -%>">
         <% end %>
       </td>
-      <td class="nowrap"><%= l time, :format => :long -%></td>
-      <td>
-        <%= snapshot.events.map{|e| e.name}.join(', ') -%>
-      </td>
-      <td class="thin nowrap center">
-        <% 
-          unless snapshot.islast
-            button_value, operation, class_style, confirm_message = nil
+      <td class="thin nowrap"><%= l time, :format => :long -%></td>
+      <td class="thin nowrap center" style="padding-left:10px; padding-right:10px">
+        <%
+          cell_content = nil;
+          if snapshot.islast?
+            last_snapshot_found = true
+            cell_content = "<b>" + message('project_history.last_snapshot') + "</b>"
+          elsif !last_snapshot_found
+            # the current snapshot is older than the last snapshot (the one that #islast == true), so this means that it represents
+            # an analysis that is currently running => no action should be taken
+            cell_content = "<i>" + message('project_history.currently_analysing') + "</i>"
+          else
+            # this is a past snapshot, let's see if it could be deleted or recovered
             if snapshot.status == 'P'
-              button_value = message('project_history.delete_snapshot')
-              operation = 'delete'
-              class_style = 'action red-button'
-              confirm_message = message('project_history.sure_to_delete_snapshot')
+              cell_content = button_to( message('project_history.delete_snapshot'), 
+                                        { :action => "snapshot_history", :id => @project.id, :snapshot_id => [snapshot.id], :operation => "delete" }, 
+                                        :class => 'action red-button', 
+                                        :method => :delete)
             else
-              button_value = message('project_history.recover_snapshot') 
-              operation = 'recover' 
-              class_style = 'action'
+              cell_content = button_to( message('project_history.recover_snapshot'), 
+                                        { :action => "snapshot_history", :id => @project.id, :snapshot_id => [snapshot.id], :operation => "recover" }, 
+                                        :class => 'action',
+                                        :method => :delete)
             end  
+          end
         %>
-          <input type="submit" value="<%= button_value-%>" id="delete_exclusions" class="<%= class_style -%>"
-               onclick="if (<%= confirm_message ? "confirm('"+confirm_message+"')" : 'true'-%>) { var f = document.createElement('form'); f.style.display = 'none'; this.parentNode.appendChild(f); f.method = 'POST'; f.action = '<%= url_for :action => "snapshot_history", :id => @project.id, :snapshot_ids => [snapshot.id], :operation => operation -%>';f.submit(); };return false;">
-        <% end %>
-      </td>
-      <td class="center">
-        <% unless snapshot.islast %>
-          <input id="snapshot_ids" name="snapshot_ids[]" type="checkbox" value="<%= snapshot.id -%>" onClick="updateSelectBox()" />
-        <% end %>
+        <%= cell_content -%>
       </td>
     </tr>
     <%
@@ -85,6 +77,5 @@
     %>
   </tbody>
 </table>
-</form>
 
 <% end %>
\ No newline at end of file