]> source.dussan.org Git - sonarqube.git/commitdiff
SONAR-3755 Display action in issues code viewer
authorJulien Lancelot <julien.lancelot@gmail.com>
Tue, 30 Apr 2013 12:17:15 +0000 (14:17 +0200)
committerJulien Lancelot <julien.lancelot@gmail.com>
Tue, 30 Apr 2013 12:17:15 +0000 (14:17 +0200)
sonar-server/src/main/webapp/WEB-INF/app/controllers/issue_controller.rb
sonar-server/src/main/webapp/WEB-INF/app/controllers/resource_controller.rb
sonar-server/src/main/webapp/WEB-INF/app/views/issue/code_viewer/_transition_form.erb [new file with mode: 0644]
sonar-server/src/main/webapp/WEB-INF/app/views/resource/_issue.html.erb
sonar-server/src/main/webapp/javascripts/resource.js

index eac2c3ba6c49927cf639b67a731080b74f0ac273..b87e3d41ce2758dfdd3a10bf577652ff020d8cd4 100644 (file)
@@ -57,10 +57,48 @@ class IssueController < ApplicationController
       @transitions = Internal.issues.listTransitions(@issue.key)
       render :partial => 'issue/view'
     else
+      # TODO
       render :status => 400
     end
   end
 
+  #
+  #
+  # ACTIONS FROM ISSUES TAB OF RESOURCE VIEWER
+  #
+  #
+
+  def issue_transition_form
+    require_parameters :id, :transition
+
+    init_issue(params[:id])
+    @transition = params[:transition]
+    bad_request('Missing transition') if @transition.blank?
+
+    render :partial => 'issue/code_viewer/transition_form'
+  end
+
+  # POST
+  def issue_transition
+    verify_post_request
+    require_parameters :id, :transition
+    issue = Internal.issues.doTransition(params[:id], params[:transition])
+    if issue
+      init_issue(params[:id])
+      @transitions = Internal.issues.listTransitions(@issue.key)
+      render :partial => 'resource/issue', :locals => {:issue => @issue}
+    else
+      # TODO
+      render :status => 400
+    end
+  end
+
+  # GET
+  def display_issue
+    init_issue(params[:id])
+    render :partial => 'resource/issue', :locals => {:issue => @issue}
+  end
+
   protected
 
   def init_issue(issue_key)
index afa2f1fcfe47d8d690af8facd24ac59fa65a6d37..799222640e352a888b3fd2f17721781665c22c08 100644 (file)
@@ -413,7 +413,7 @@ class ResourceController < ApplicationController
     @filtered = !@expanded
     rule_param = params[:rule]
 
-    options = {'components' => @resource.key, 'resolutions' => 'OPEN'}
+    options = {'components' => @resource.key, 'resolutions' => ['OPEN', 'FIXED']}
 
     if rule_param.blank? && params[:metric]
       metric = Metric.by_id(params[:metric])
diff --git a/sonar-server/src/main/webapp/WEB-INF/app/views/issue/code_viewer/_transition_form.erb b/sonar-server/src/main/webapp/WEB-INF/app/views/issue/code_viewer/_transition_form.erb
new file mode 100644 (file)
index 0000000..1420131
--- /dev/null
@@ -0,0 +1,27 @@
+<form method="POST"
+      onsubmit="new Ajax.Updater('issue-key<%= params[:id] -%>', '<%= url_for :controller => 'issue', :action => 'issue_transition' -%>', {asynchronous:true, evalScripts:true, parameters:Form.serialize(this)});return false;">
+  <input type="hidden" name="id" value="<%= params[:id] -%>"/>
+  <input type="hidden" name="transition" value="<%= params[:transition] -%>"/>
+
+  <table class="width100">
+    <tr>
+      <td style="vertical-align:top">
+        <textarea id="commentText<%= params[:id] -%>" rows="4" name="text" style="width: 100%"></textarea>
+      </td>
+      <td class="sep"></td>
+      <td style="vertical-align:top;width: 90px">
+        <%= render :partial => 'markdown/tips' -%>
+      </td>
+    </tr>
+  </table>
+
+  <div>
+    <%= submit_to_remote "submit_btn"+params[:id],
+                         message("issues.transition.#{params[:transition]}.button"),
+                         :url => {:controller => 'issue', :action => 'issue_transition'},
+                         :html => {:id => "submit_btn"+params[:id]},
+                         :update => 'issue-key'+params[:id] -%>
+    &nbsp;
+    <%= link_to_function message('cancel'), "cancelIssueAction('#{params[:id]}')" -%>
+  </div>
+</form>
index 22d717c3c337eccc3038ca4042d7db78523a7e35..38f22725de38ea2c24eb63f01a172ffd3609da47 100644 (file)
@@ -1,14 +1,9 @@
-<div id="vId<%= issue.key -%>">
+<div id="issue-key<%= issue.key -%>">
   <div class="violation">
     <div class="vtitle">
-      <%
-         # TODO
-         #if violation.review
-         if false
-      %>
         <div class="review_permalink">
+          <span class="review_permalink"><%= link_to message('issue'), :controller => "issue", :action => "view", :id => issue.key -%></span>
         </div>
-      <% end %>
 
       <img src="<%= ApplicationController.root_context -%>/images/priority/<%= issue.severity -%>.png">
       &nbsp;
     </div>
 
     <div class="discussionComment first">
-      <div id="vMsg<%= issue.key -%>">
+      <div id="issue-description<%= issue.key -%>">
         <% issue_description = issue.description ? Api::Utils.split_newlines(h(issue.description)).join('<br/>') : '' %>
         <%= issue_description || '&nbsp;' -%>
       </div>
     </div>
 
-  </div>
+    <% if current_user %>
+      <div class="vActions" id="issue-actions<%= issue.key -%>">
+        <% if defined?(error_message) && error_message %>
+          <div id="issue-error-<%= issue.key -%>" class="error"><%= h error_message -%> <a href="#" onclick="$('issue-error-<%= issue.key -%>').hide(); return false;"><%= message('issues.hide_this_message') -%></a></div>
+        <% end %>
+        <% transitions = Internal.issues.listTransitions(issue.key) %>
+        <% transitions.each do |transition| %>
+        <%= link_to_function message("issues.transition.#{transition.key}.button"), "displayIssueTransitionForm('#{issue.key}', '#{transition.key}')",
+                             :name => message("issues.transition.#{transition.key}.button"), :class => 'link-action spacer-right' -%>
+        <% end %>
+    </div>
+    <% end %>
+    <div class="discussionComment" id="issue-form<%= issue.key -%>" style="display:none"></div>
 
+  </div>
 </div>
\ No newline at end of file
index d6da6359dce44b1947abd496296b22ca77d239c2..7c102fc75830723d2d069ff31d6c5bddfa893015 100644 (file)
@@ -183,6 +183,41 @@ function hVF(elt, line) {
   return false;
 }
 
+/*
+ Functions used in issues code viewer
+ */
+
+// show the form for transition
+function displayIssueTransitionForm(issueKey, transitionKey) {
+  // TODO
+  //hideMoreViolationActions(violation_id);
+  new Ajax.Updater('issue-form' + issueKey,
+      baseUrl + '/issue/issue_transition_form?id=' + issueKey + '&transition='+ transitionKey,
+      {
+        asynchronous:true,
+        evalScripts:true,
+        onComplete:function (request) {
+          $('issue-actions' + issueKey).remove();
+          $('issue-form' + issueKey).show();
+          // TODO
+//          $('commentText' + issueKey).focus();
+        }
+      });
+  return false;
+}
+
+// cancel action : hide form and refresh issue
+function cancelIssueAction(issueKey) {
+  new Ajax.Updater(
+      'issue-key' + issueKey,
+      baseUrl + '/issue/display_issue/' + issueKey,
+      {
+        asynchronous:true,
+        evalScripts:true
+      });
+  return false;
+}
+
 /*
  Functions used in tests viewer
  */