# HG changeset patch
# User luisf
# Date 1364395936 0
# Node ID a3ed5c4d90f0f45a704b372dd0e2719298276c43
# Parent b1d3bc0b7f7e4cb9b694318e4b603331777a6112
The Create Project page now allows for correct search/insertion of tags. Using the new version of the redmine tags plugin.
diff -r b1d3bc0b7f7e -r a3ed5c4d90f0 plugins/redmine_tags/app/views/projects/_tags_form.html.erb
--- a/plugins/redmine_tags/app/views/projects/_tags_form.html.erb Tue Mar 26 16:26:50 2013 +0000
+++ b/plugins/redmine_tags/app/views/projects/_tags_form.html.erb Wed Mar 27 14:52:16 2013 +0000
@@ -5,7 +5,23 @@
<%= l(:text_tags_info).html_safe %>
- <%= javascript_include_tag 'tags_input', :plugin => 'redmine_tags' %>
- <%= javascript_tag "observeProjectTagsField('#{url_for(:controller => 'auto_completes', :action => 'project_tags')}', false)" %>
+ <%= stylesheet_link_tag 'jquery.tagit.css', :plugin => 'redmine_tags' %>
+ <%= stylesheet_link_tag 'redmine_tags', :plugin => 'redmine_tags' %>
+ <%= javascript_include_tag 'tag-it', :plugin => 'redmine_tags' %>
+
+ <%= javascript_tag "$('#project_tag_list').tagit({
+ tagSource: function(search, showChoices) {
+ var that = this;
+ $.ajax({
+ url: '#{url_for(:controller => 'auto_completes', :action => 'project_tags')}',
+ data: {q: search.term},
+ success: function(choices) {
+ showChoices(that._subtractArray(jQuery.parseJSON(choices), that.assignedTags()));
+ }
+ });
+ },
+ });
+" %>
+
<% end -%>
diff -r b1d3bc0b7f7e -r a3ed5c4d90f0 plugins/redmine_tags/lib/redmine_tags/hooks/model_project_hook.rb
--- a/plugins/redmine_tags/lib/redmine_tags/hooks/model_project_hook.rb Tue Mar 26 16:26:50 2013 +0000
+++ b/plugins/redmine_tags/lib/redmine_tags/hooks/model_project_hook.rb Wed Mar 27 14:52:16 2013 +0000
@@ -21,7 +21,6 @@
module Hooks
class ModelProjectHook < Redmine::Hook::ViewListener
def controller_project_before_save(context={})
- debugger
save_tags_to_project(context, true)
end
@@ -30,15 +29,12 @@
# cleared on reload. So instead, hook in after the Issue#save to update
# this issue's tag_list and call #save ourselves.
def controller_projects_before_save(context={})
- debugger
save_tags_to_project(context, false)
context[:project].save
end
def save_tags_to_project(context, create_journal)
params = context[:params]
- debugger
- logger.error { "WORKING" }
# if params && params[:issue] && !params[:issue][:tag_list].nil?
# old_tags = context[:issue].tag_list.to_s
diff -r b1d3bc0b7f7e -r a3ed5c4d90f0 plugins/redmine_tags/lib/redmine_tags/patches/project_patch.rb
--- a/plugins/redmine_tags/lib/redmine_tags/patches/project_patch.rb Tue Mar 26 16:26:50 2013 +0000
+++ b/plugins/redmine_tags/lib/redmine_tags/patches/project_patch.rb Wed Mar 27 14:52:16 2013 +0000
@@ -22,6 +22,14 @@
end
module ClassMethods
+ TAGGING_IDS_LIMIT_SQL = <<-SQL
+ tag_id IN (
+ SELECT #{ActsAsTaggableOn::Tagging.table_name}.tag_id
+ FROM #{ActsAsTaggableOn::Tagging.table_name}
+ WHERE #{ActsAsTaggableOn::Tagging.table_name}.taggable_id IN (?)
+ )
+ SQL
+
def search_by_question(question)
if question.length > 1
search(RedmineProjectFiltering.calculate_tokens(question), nil, :all_words => true).first.sort_by(&:lft)
@@ -30,24 +38,26 @@
end
end
+ # Returns available project tags
+ # Does not return tags from private projects
+ # === Parameters
+ # * options = (optional) Options hash of
+ # * name_like - String. Substring to filter found tags.
+ def available_tags( options = {} )
+ ids_scope = Project.visible
- # Returns available project tags
- # does not show tags from private projects
- def available_tags( options = {} )
+ conditions = [""]
- name_like = options[:name_like]
- options = {}
- visible = ARCondition.new
-
- visible << ["#{Project.table_name}.is_public = '1'"]
-
- if name_like
- visible << ["#{ActsAsTaggableOn::Tag.table_name}.name LIKE ?", "%#{name_like.downcase}%"]
+ # limit to the tags matching given %name_like%
+ if options[:name_like]
+ conditions[0] << "#{ActsAsTaggableOn::Tag.table_name}.name LIKE ? AND "
+ conditions << "%#{options[:name_like].downcase}%"
end
- options[:conditions] = visible.conditions
+ conditions[0] << TAGGING_IDS_LIMIT_SQL
+ conditions << ids_scope.map{ |issue| issue.id }.push(-1)
- self.all_tag_counts(options)
+ self.all_tag_counts(:conditions => conditions)
end
end
end