forked from Restream/redmine_tagging
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathinit.rb
More file actions
119 lines (98 loc) · 3.9 KB
/
Copy pathinit.rb
File metadata and controls
119 lines (98 loc) · 3.9 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
require 'redmine'
ActionDispatch::Callbacks.to_prepare do
require 'tagging_plugin/tagging_patches'
require 'tagging_plugin/api_template_handler_patch'
require 'redmine_tagging'
require File.expand_path('../app/helpers/tagging_helper', __FILE__)
ActionView::Base.send :include, TaggingHelper
unless Issue.searchable_options[:include] && Issue.searchable_options[:include].include?(:issue_tags)
Issue.searchable_options[:columns] << "#{IssueTag.table_name}.tag"
# For redmine < 3
Issue.searchable_options[:include] ||= []
Issue.searchable_options[:include] << :issue_tags
# For redmine > 3
Issue.searchable_options[:scope] = -> { Issue.includes(:issue_tags) }
end
unless WikiPage.searchable_options[:include] && WikiPage.searchable_options[:include].include?(:wiki_page_tags)
WikiPage.searchable_options[:columns] << "#{WikiPageTag.table_name}.tag"
# For redmine < 3
WikiPage.searchable_options[:include] ||= []
WikiPage.searchable_options[:include] << :wiki_page_tags
# For redmine > 3
WikiPage.searchable_options[:scope] = -> { WikiPage.includes(:wiki_page_tags) }
end
end
require_dependency 'tagging_plugin/tagging_hooks'
Redmine::Plugin.register :redmine_tagging do
name 'Redmine Tagging Plugin'
author 'friflaj, nettsundere, Undev'
description 'This plugin adds tagging features to Redmine.'
version '0.1.3'
settings :default => { :dynamic_font_size => "1", :sidebar_tagcloud => "1", :wiki_pages_inline => "0", :issues_inline => "0" }, :partial => 'tagging/settings'
Redmine::WikiFormatting::Macros.register do
desc "Wiki/Issues tagcloud"
macro :tagcloud do |obj, args|
args, options = extract_macro_options(args, :parent)
return if params[:controller] == "mailer"
if obj
if obj.is_a? WikiContent
project = obj.page.wiki.project
else
project = obj.project
end
else
project = Project.visible.where(:identifier => params[:project_id]).first
end
if project # this may be an attempt to render tag cloud when deleting wiki page
if [WikiContent, WikiContent::Version, NilClass].include?(obj.class)
render :partial => 'tagging/tagcloud_search', :project => project
elsif [Journal, Issue].include?(obj.class)
render :partial => 'tagging/tagcloud', :project => project
end
end
end
end
Redmine::WikiFormatting::Macros.register do
desc "Wiki/Issues tag"
macro :tag do |obj, args|
if obj.is_a?(WikiContent) && Setting.plugin_redmine_tagging[:wiki_pages_inline] == "1"
inline = true
elsif obj.is_a?(Issue) && Setting.plugin_redmine_tagging[:issues_inline] == "1"
inline = true
else
inline = false
end
if inline
args, options = extract_macro_options(args, :parent)
tags = args.collect{|a| a.split(/[#"'\s,]+/)}.flatten.select{|tag| !tag.blank?}.collect{|tag| "##{tag}" }.uniq
tags.sort_by! { |t| t.downcase }
if obj.is_a? WikiContent
obj = obj.page
project = obj.wiki.project
else
project = obj.project
end
context = TaggingPlugin::ContextHelper.context_for(project)
tags_present = obj.tag_list_on(context).sort_by { |t| t.downcase }.join(',')
new_tags = tags.join(',')
if tags_present != new_tags
obj.tags_to_update = new_tags
obj.save
end
taglinks = tags.collect do |tag|
search_url = {
:controller => "search",
:action => "index",
:id => project,
:q => "\"#{tag}\""
}
search_url.merge!(obj.is_a?(WikiPage) ? { :wiki_pages => true, :issues => false } : { :wiki_pages => false, :issues => true })
link_to(tag, search_url)
end.join(' ')
raw("<div class='tags'>#{taglinks}</div>")
else
''
end
end
end
end