]> source.dussan.org Git - redmine.git/commitdiff
Autocomplete issue relations on subject (#3170).
authorJean-Philippe Lang <jp_lang@yahoo.fr>
Sun, 12 Dec 2010 16:04:28 +0000 (16:04 +0000)
committerJean-Philippe Lang <jp_lang@yahoo.fr>
Sun, 12 Dec 2010 16:04:28 +0000 (16:04 +0000)
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@4502 e93f8b46-1217-0410-a6f0-8f06a7374b81

app/controllers/auto_completes_controller.rb
app/views/issue_relations/_form.rhtml
public/javascripts/application.js
public/stylesheets/application.css
test/functional/auto_completes_controller_test.rb

index 1438106f608a76b3c0c66bcf32ae6a00abdbd61b..a3ed88e36f2a5682e4e3adbfefcdb92d73d6a73f 100644 (file)
@@ -4,11 +4,12 @@ class AutoCompletesController < ApplicationController
   def issues
     @issues = []
     q = params[:q].to_s
+    query = (params[:scope] == "all" && Setting.cross_project_issue_relations?) ? Issue : @project.issues
     if q.match(/^\d+$/)
-      @issues << @project.issues.visible.find_by_id(q.to_i)
+      @issues << query.visible.find_by_id(q.to_i)
     end
     unless q.blank?
-      @issues += @project.issues.visible.find(:all, :conditions => ["LOWER(#{Issue.table_name}.subject) LIKE ?", "%#{q.downcase}%"], :limit => 10)
+      @issues += query.visible.find(:all, :conditions => ["LOWER(#{Issue.table_name}.subject) LIKE ?", "%#{q.downcase}%"], :limit => 10)
     end
     render :layout => false
   end
index 0de386306ddea19709b27c106625e6c604ee0e68..fdf0582ff55921910a1677aeccfc914d560b975b 100644 (file)
@@ -1,7 +1,9 @@
 <%= error_messages_for 'relation' %>
 
 <p><%= f.select :relation_type, collection_for_relation_type_select, {}, :onchange => "setPredecessorFieldsVisibility();" %>
-<%= l(:label_issue) %> #<%= f.text_field :issue_to_id, :size => 6 %>
+<%= l(:label_issue) %> #<%= f.text_field :issue_to_id, :size => 10 %>
+<div id="related_issue_candidates" class="autocomplete"></div>
+<%= javascript_tag "observeRelatedIssueField('#{auto_complete_issues_path(:id => @issue, :project_id => @project) }')" %>
 <span id="predecessor_fields" style="display:none;">
 <%= l(:field_delay) %>: <%= f.text_field :delay, :size => 3 %> <%= l(:label_day_plural) %>
 </span>
index 8f6c5182813d47f277a638c8b08f9720d750c8ba..486623459f5f63b51f9dcfe37d2cf721bc274b98 100644 (file)
@@ -218,6 +218,20 @@ function observeParentIssueField(url) {
                            }});
 }
 
+function observeRelatedIssueField(url) {
+  new Ajax.Autocompleter('relation_issue_to_id',
+                         'related_issue_candidates',
+                         url,
+                         { minChars: 3,
+                           frequency: 0.5,
+                           paramName: 'q',
+                           updateElement: function(value) {
+                             document.getElementById('relation_issue_to_id').value = value.id;
+                           },
+                           parameters: 'scope=all'
+                           });
+}
+
 /* shows and hides ajax indicator */
 Ajax.Responders.register({
     onCreate: function(){
index 8055c87968ce9ee29da9ec0dee46b0485f0d6b23..7a253c87910c5d07ac947e66159080b8117d1a05 100644 (file)
@@ -663,6 +663,7 @@ div.autocomplete ul li span.informal {
 }
 
 #parent_issue_candidates ul li {width: 500px;}
+#related_issue_candidates ul li {width: 500px;}
 
 /***** Diff *****/
 .diff_out { background: #fcc; }
index 25e75fc4ba08e787c68436e4261c2d96cf591897..697436b6ea7d282263c4ea3a0fbf32c56062d5d0 100644 (file)
@@ -17,4 +17,18 @@ class AutoCompletesControllerTest < ActionController::TestCase
     assert assigns(:issues).include?(Issue.find(13))
   end
   
+  def test_auto_complete_with_scope_all_and_cross_project_relations
+    Setting.cross_project_issue_relations = '1'
+    get :issues, :project_id => 'ecookbook', :q => '13', :scope => 'all'
+    assert_response :success
+    assert_not_nil assigns(:issues)
+    assert assigns(:issues).include?(Issue.find(13))
+  end
+     
+  def test_auto_complete_with_scope_all_without_cross_project_relations
+    Setting.cross_project_issue_relations = '0'
+    get :issues, :project_id => 'ecookbook', :q => '13', :scope => 'all'
+    assert_response :success
+    assert_equal [nil], assigns(:issues)
+  end
 end