##// END OF EJS Templates
The descendant count in the issues delete confirmation message is wrong if issues share some descendants....
The descendant count in the issues delete confirmation message is wrong if issues share some descendants. git-svn-id: http://svn.redmine.org/redmine/trunk@13818 e93f8b46-1217-0410-a6f0-8f06a7374b81

File last commit:

r13436:bfdd9f7c295d
r13436:bfdd9f7c295d
Show More
issues_helper.rb
430 lines | 15.1 KiB | text/x-ruby | RubyLexer
Jean-Philippe Lang
Added encoding comment to helpers (#9792)....
r8090 # encoding: utf-8
#
Jean-Philippe Lang
Keep track of issue description changes (#746)....
r4834 # Redmine - project management software
Toshi MARUYAMA
update copyright year (#15977)...
r12461 # Copyright (C) 2006-2014 Jean-Philippe Lang
Jean-Philippe Lang
added svn:eol-style native property on /app files...
r330 #
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 2
# of the License, or (at your option) any later version.
Toshi MARUYAMA
remove trailing white-spaces from issues helper source....
r5711 #
Jean-Philippe Lang
added svn:eol-style native property on /app files...
r330 # This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
Toshi MARUYAMA
remove trailing white-spaces from issues helper source....
r5711 #
Jean-Philippe Lang
added svn:eol-style native property on /app files...
r330 # You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
module IssuesHelper
Jean-Philippe Lang
Fixed: Date and time formats defined in settings not applied to the issues CSV export....
r928 include ApplicationHelper
Jean-Philippe Lang
added svn:eol-style native property on /app files...
r330
Jean-Philippe Lang
Issue list improvements for subtasking (#5196):...
r3504 def issue_list(issues, &block)
ancestors = []
issues.each do |issue|
while (ancestors.any? && !issue.is_descendant_of?(ancestors.last))
ancestors.pop
end
yield issue, ancestors.size
Jean-Philippe Lang
Slight optimization in issue tree rendering....
r3506 ancestors << issue unless issue.leaf?
Jean-Philippe Lang
Issue list improvements for subtasking (#5196):...
r3504 end
end
Eric Davis
Document render_issue_tooltip...
r4052
# Renders a HTML/CSS tooltip
#
# To use, a trigger div is needed. This is a div with the class of "tooltip"
# that contains this method wrapped in a span with the class of "tip"
#
# <div class="tooltip"><%= link_to_issue(issue) %>
# <span class="tip"><%= render_issue_tooltip(issue) %></span>
# </div>
#
Jean-Philippe Lang
Performance improvement on calendar and gantt (about 45% on gantt for large number of issues)....
r783 def render_issue_tooltip(issue)
Eric Davis
Add Issue Status to the tooltip. #6169...
r3838 @cached_label_status ||= l(:field_status)
Jean-Philippe Lang
Performance improvement on calendar and gantt (about 45% on gantt for large number of issues)....
r783 @cached_label_start_date ||= l(:field_start_date)
@cached_label_due_date ||= l(:field_due_date)
@cached_label_assigned_to ||= l(:field_assigned_to)
@cached_label_priority ||= l(:field_priority)
Eric Davis
Rewrite the Gantt chart. #6276...
r3958 @cached_label_project ||= l(:field_project)
Toshi MARUYAMA
Rails3: helper: html_safe for IssuesHelper render_issue_tooltip method...
r8334 link_to_issue(issue) + "<br /><br />".html_safe +
"<strong>#{@cached_label_project}</strong>: #{link_to_project(issue.project)}<br />".html_safe +
"<strong>#{@cached_label_status}</strong>: #{h(issue.status.name)}<br />".html_safe +
"<strong>#{@cached_label_start_date}</strong>: #{format_date(issue.start_date)}<br />".html_safe +
"<strong>#{@cached_label_due_date}</strong>: #{format_date(issue.due_date)}<br />".html_safe +
"<strong>#{@cached_label_assigned_to}</strong>: #{h(issue.assigned_to)}<br />".html_safe +
"<strong>#{@cached_label_priority}</strong>: #{h(issue.priority.name)}".html_safe
Jean-Philippe Lang
Performance improvement on calendar and gantt (about 45% on gantt for large number of issues)....
r783 end
Toshi MARUYAMA
remove trailing white-spaces from issues helper source....
r5711
Jean-Philippe Lang
Adds a helper for issue heading (#7647)....
r5327 def issue_heading(issue)
h("#{issue.tracker} ##{issue.id}")
end
Toshi MARUYAMA
remove trailing white-spaces from issues helper source....
r5711
Jean-Philippe Lang
Adds subtasking (#443) including:...
r3459 def render_issue_subject_with_tree(issue)
s = ''
Jean-Philippe Lang
Merged rails-4.1 branch (#14534)....
r13100 ancestors = issue.root? ? [] : issue.ancestors.visible.to_a
Jean-Philippe Lang
Save 2 queries when displaying a root issue....
r5124 ancestors.each do |ancestor|
Jean-Philippe Lang
Adds a setting to allow subtasks to belong to other projects (#5487)....
r10376 s << '<div>' + content_tag('p', link_to_issue(ancestor, :project => (issue.project_id != ancestor.project_id)))
Jean-Philippe Lang
Adds subtasking (#443) including:...
r3459 end
Jean-Philippe Lang
Private issues (#7414)....
r5346 s << '<div>'
subject = h(issue.subject)
if issue.is_private?
subject = content_tag('span', l(:field_is_private), :class => 'private') + ' ' + subject
end
s << content_tag('h3', subject)
Jean-Philippe Lang
Save 2 queries when displaying a root issue....
r5124 s << '</div>' * (ancestors.size + 1)
Toshi MARUYAMA
Rails3: use String#html_safe for render_issue_subject_with_tree() at IssuesHelper....
r6376 s.html_safe
Jean-Philippe Lang
Adds subtasking (#443) including:...
r3459 end
Toshi MARUYAMA
remove trailing white-spaces from issues helper source....
r5711
Jean-Philippe Lang
Adds subtasking (#443) including:...
r3459 def render_descendants_tree(issue)
s = '<form><table class="list issues">'
Jean-Philippe Lang
Private issues (#7414)....
r5346 issue_list(issue.descendants.visible.sort_by(&:lft)) do |child, level|
Jean-Philippe Lang
Use a local variable....
r10449 css = "issue issue-#{child.id} hascontextmenu"
css << " idnt idnt-#{level}" if level > 0
Jean-Philippe Lang
Adds subtasking (#443) including:...
r3459 s << content_tag('tr',
Jean-Philippe Lang
Slight UI changes to the subtasks tree....
r3463 content_tag('td', check_box_tag("ids[]", child.id, false, :id => nil), :class => 'checkbox') +
Jean-Philippe Lang
Do not truncate subissue/related issues titles on the issue view (#18659)....
r13414 content_tag('td', link_to_issue(child, :project => (issue.project_id != child.project_id)), :class => 'subject', :style => 'width: 50%') +
Jean-Philippe Lang
Adds subtasking (#443) including:...
r3459 content_tag('td', h(child.status)) +
content_tag('td', link_to_user(child.assigned_to)) +
content_tag('td', progress_bar(child.done_ratio, :width => '80px')),
Jean-Philippe Lang
Use a local variable....
r10449 :class => css)
Jean-Philippe Lang
Adds subtasking (#443) including:...
r3459 end
Jean-Philippe Lang
Fixed malformed HTML....
r7941 s << '</table></form>'
Toshi MARUYAMA
Rails3: use String#html_safe for render_descendants_tree() at IssuesHelper....
r6377 s.html_safe
Jean-Philippe Lang
Adds subtasking (#443) including:...
r3459 end
Toshi MARUYAMA
remove trailing white-spaces from issues helper source....
r5711
Jean-Philippe Lang
Display the bulk edit form with error messages when some issues can not be saved (#13943)....
r11556 # Returns an array of error messages for bulk edited issues
def bulk_edit_error_messages(issues)
messages = {}
issues.each do |issue|
issue.errors.full_messages.each do |message|
messages[message] ||= []
messages[message] << issue
end
end
messages.map { |message, issues|
"#{message}: " + issues.map {|i| "##{i.id}"}.join(', ')
}
end
Jean-Philippe Lang
Adds a helper for displaying a link to add a subtask (#12113)....
r10450 # Returns a link for adding a new subtask to the given issue
def link_to_new_subtask(issue)
Jean-Philippe Lang
Use parent tracker as the default tracker when adding a subtask (#12113)....
r10451 attrs = {
:tracker_id => issue.tracker,
:parent_issue_id => issue
}
Jean-Philippe Lang
Use named route (#12113)....
r10452 link_to(l(:button_add), new_project_issue_path(issue.project, :issue => attrs))
Jean-Philippe Lang
Adds a helper for displaying a link to add a subtask (#12113)....
r10450 end
Jean-Philippe Lang
Ability to disable standard fields on a per tracker basis (#1091)....
r9729 class IssueFieldsRows
include ActionView::Helpers::TagHelper
def initialize
@left = []
@right = []
end
def left(*args)
args.any? ? @left << cells(*args) : @left
end
def right(*args)
args.any? ? @right << cells(*args) : @right
end
def size
@left.size > @right.size ? @left.size : @right.size
end
def to_html
html = ''.html_safe
blank = content_tag('th', '') + content_tag('td', '')
size.times do |i|
left = @left[i] || blank
right = @right[i] || blank
html << content_tag('tr', left + right)
end
html
end
def cells(label, text, options={})
content_tag('th', "#{label}:", options) + content_tag('td', text, options)
end
end
def issue_fields_rows
r = IssueFieldsRows.new
yield r
r.to_html
end
Jean-Philippe Lang
Fixed: custom fields are not displayed in the same order on issue form and view....
r2722 def render_custom_fields_rows(issue)
Jean-Philippe Lang
Role-based issue custom field visibility (#5037)....
r11782 values = issue.visible_custom_field_values
return if values.empty?
Jean-Philippe Lang
Fixed: custom fields are not displayed in the same order on issue form and view....
r2722 ordered_values = []
Jean-Philippe Lang
Role-based issue custom field visibility (#5037)....
r11782 half = (values.size / 2.0).ceil
Jean-Philippe Lang
Fixed: custom fields are not displayed in the same order on issue form and view....
r2722 half.times do |i|
Jean-Philippe Lang
Role-based issue custom field visibility (#5037)....
r11782 ordered_values << values[i]
ordered_values << values[i + half]
Jean-Philippe Lang
Fixed: custom fields are not displayed in the same order on issue form and view....
r2722 end
s = "<tr>\n"
n = 0
ordered_values.compact.each do |value|
Jean-Philippe Lang
Merged custom fields format refactoring....
r12125 css = "cf_#{value.custom_field.id}"
Jean-Philippe Lang
Fixed: custom fields are not displayed in the same order on issue form and view....
r2722 s << "</tr>\n<tr>\n" if n > 0 && (n % 2) == 0
Jean-Philippe Lang
Merged custom fields format refactoring....
r12125 s << "\t<th class=\"#{css}\">#{ h(value.custom_field.name) }:</th><td class=\"#{css}\">#{ h(show_value(value)) }</td>\n"
Jean-Philippe Lang
Fixed: custom fields are not displayed in the same order on issue form and view....
r2722 n += 1
end
s << "</tr>\n"
Toshi MARUYAMA
Rails3: use String#html_safe for render_custom_fields_rows() at IssuesHelper....
r6378 s.html_safe
Jean-Philippe Lang
Fixed: custom fields are not displayed in the same order on issue form and view....
r2722 end
Toshi MARUYAMA
remove trailing white-spaces from issues helper source....
r5711
Jean-Philippe Lang
The descendant count in the issues delete confirmation message is wrong if issues share some descendants....
r13436 # Returns the number of descendants for an array of issues
def issues_descendant_count(issues)
ids = issues.reject(&:leaf?).map {|issue| issue.descendants.ids}.flatten.uniq
ids -= issues.map(&:id)
ids.size
end
Jean-Philippe Lang
Warn about subtasks before deleting a parent issue (#6562)....
r5375 def issues_destroy_confirmation_message(issues)
issues = [issues] unless issues.is_a?(Array)
message = l(:text_issues_destroy_confirmation)
Jean-Philippe Lang
The descendant count in the issues delete confirmation message is wrong if issues share some descendants....
r13436
descendant_count = issues_descendant_count(issues)
Jean-Philippe Lang
Warn about subtasks before deleting a parent issue (#6562)....
r5375 if descendant_count > 0
Jean-Philippe Lang
The descendant count in the issues delete confirmation message is wrong if issues share some descendants....
r13436 message << "\n" + l(:text_issues_destroy_descendants_confirmation, :count => descendant_count)
Jean-Philippe Lang
Warn about subtasks before deleting a parent issue (#6562)....
r5375 end
message
end
Toshi MARUYAMA
remove trailing white-spaces from issues helper source....
r5711
Jean-Philippe Lang
Queries can be marked as 'For all projects'. Such queries will be available on all projects and on the global issue list (#897, closes #671)....
r1296 def sidebar_queries
unless @sidebar_queries
Jean-Philippe Lang
Code cleanup....
r11238 @sidebar_queries = IssueQuery.visible.
order("#{Query.table_name}.name ASC").
Jean-Philippe Lang
Use Query.visible scope....
r7966 # Project specific queries and global queries
Jean-Philippe Lang
Code cleanup....
r11238 where(@project.nil? ? ["project_id IS NULL"] : ["project_id IS NULL OR project_id = ?", @project.id]).
Jean-Philippe Lang
Merged rails-4.1 branch (#14534)....
r13100 to_a
Jean-Philippe Lang
Queries can be marked as 'For all projects'. Such queries will be available on all projects and on the global issue list (#897, closes #671)....
r1296 end
@sidebar_queries
end
Jean-Philippe Lang
Performance improvement on calendar and gantt (about 45% on gantt for large number of issues)....
r783
Jean-Philippe Lang
Splits private/public issue queries in the sidebar (#1067)....
r4788 def query_links(title, queries)
Jean-Philippe Lang
Code cleanup....
r11237 return '' if queries.empty?
Jean-Philippe Lang
Preserve Issues/Gantt/Calendar tab when displaying a saved query (#7605)....
r4789 # links to #index on issues/show
url_params = controller_name == 'issues' ? {:controller => 'issues', :action => 'index', :project_id => @project} : params
Toshi MARUYAMA
remove trailing white-spaces from issues helper source....
r5711
Jean-Philippe Lang
Code cleanup....
r11239 content_tag('h3', title) + "\n" +
Jean-Philippe Lang
Use ti tags for sidebar queries (#13242)....
r11236 content_tag('ul',
queries.collect {|query|
css = 'query'
css << ' selected' if query == @query
Jean-Philippe Lang
Code cleanup....
r11239 content_tag('li', link_to(query.name, url_params.merge(:query_id => query), :class => css))
Jean-Philippe Lang
Use ti tags for sidebar queries (#13242)....
r11236 }.join("\n").html_safe,
:class => 'queries'
) + "\n"
Jean-Philippe Lang
Splits private/public issue queries in the sidebar (#1067)....
r4788 end
Toshi MARUYAMA
remove trailing white-spaces from issues helper source....
r5711
Jean-Philippe Lang
Splits private/public issue queries in the sidebar (#1067)....
r4788 def render_sidebar_queries
Jean-Philippe Lang
html_safe for Rails3...
r8148 out = ''.html_safe
Jean-Philippe Lang
Role based custom queries (#1019)....
r11764 out << query_links(l(:label_my_queries), sidebar_queries.select(&:is_private?))
out << query_links(l(:label_query_plural), sidebar_queries.reject(&:is_private?))
Jean-Philippe Lang
Splits private/public issue queries in the sidebar (#1067)....
r4788 out
end
Jean-Philippe Lang
Fixed that standard fields disabled still appear in email notifications (#14584)....
r11849 def email_issue_attributes(issue, user)
items = []
%w(author status priority assigned_to category fixed_version).each do |attribute|
unless issue.disabled_core_fields.include?(attribute+"_id")
items << "#{l("field_#{attribute}")}: #{issue.send attribute}"
end
end
issue.visible_custom_field_values(user).each do |value|
Jean-Philippe Lang
Merged custom fields format refactoring....
r12125 items << "#{value.custom_field.name}: #{show_value(value, false)}"
Jean-Philippe Lang
Fixed that standard fields disabled still appear in email notifications (#14584)....
r11849 end
items
end
def render_email_issue_attributes(issue, user, html=false)
items = email_issue_attributes(issue, user)
if html
content_tag('ul', items.map{|s| content_tag('li', s)}.join("\n").html_safe)
else
items.map{|s| "* #{s}"}.join("\n")
end
end
Jean-Philippe Lang
Adds support for multiselect custom fields (#1189)....
r8601 # Returns the textual representation of a journal details
# as an array of strings
Jean-Philippe Lang
Mailer#url_for not called in views with Rails 3.1....
r8903 def details_to_strings(details, no_html=false, options={})
options[:only_path] = (options[:only_path] == false ? false : true)
Jean-Philippe Lang
Adds support for multiselect custom fields (#1189)....
r8601 strings = []
values_by_field = {}
details.each do |detail|
if detail.property == 'cf'
Jean-Philippe Lang
Avoid lots of CustomField.find_by_id calls when displaying an issue history with custom fields (#15072)....
r11987 field = detail.custom_field
Jean-Philippe Lang
Adds support for multiselect custom fields (#1189)....
r8601 if field && field.multiple?
Jean-Philippe Lang
Avoid lots of CustomField.find_by_id calls when displaying an issue history with custom fields (#15072)....
r11987 values_by_field[field] ||= {:added => [], :deleted => []}
Jean-Philippe Lang
Adds support for multiselect custom fields (#1189)....
r8601 if detail.old_value
Jean-Philippe Lang
Avoid lots of CustomField.find_by_id calls when displaying an issue history with custom fields (#15072)....
r11987 values_by_field[field][:deleted] << detail.old_value
Jean-Philippe Lang
Adds support for multiselect custom fields (#1189)....
r8601 end
if detail.value
Jean-Philippe Lang
Avoid lots of CustomField.find_by_id calls when displaying an issue history with custom fields (#15072)....
r11987 values_by_field[field][:added] << detail.value
Jean-Philippe Lang
Adds support for multiselect custom fields (#1189)....
r8601 end
next
end
end
Jean-Philippe Lang
Mailer#url_for not called in views with Rails 3.1....
r8903 strings << show_detail(detail, no_html, options)
Jean-Philippe Lang
Adds support for multiselect custom fields (#1189)....
r8601 end
Jean-Philippe Lang
Avoid lots of CustomField.find_by_id calls when displaying an issue history with custom fields (#15072)....
r11987 values_by_field.each do |field, changes|
detail = JournalDetail.new(:property => 'cf', :prop_key => field.id.to_s)
detail.instance_variable_set "@custom_field", field
Jean-Philippe Lang
Adds support for multiselect custom fields (#1189)....
r8601 if changes[:added].any?
detail.value = changes[:added]
Jean-Philippe Lang
Mailer#url_for not called in views with Rails 3.1....
r8903 strings << show_detail(detail, no_html, options)
Jean-Philippe Lang
Adds support for multiselect custom fields (#1189)....
r8601 elsif changes[:deleted].any?
detail.old_value = changes[:deleted]
Jean-Philippe Lang
Mailer#url_for not called in views with Rails 3.1....
r8903 strings << show_detail(detail, no_html, options)
Jean-Philippe Lang
Adds support for multiselect custom fields (#1189)....
r8601 end
end
strings
end
# Returns the textual representation of a single journal detail
Jean-Philippe Lang
Mailer#url_for not called in views with Rails 3.1....
r8903 def show_detail(detail, no_html=false, options={})
Jean-Philippe Lang
Adds support for multiselect custom fields (#1189)....
r8601 multiple = false
Jean-Philippe Lang
added svn:eol-style native property on /app files...
r330 case detail.property
when 'attr'
Eric Davis
Refactor: Extract similar logic in IssuesHelper#show_detail to a new method....
r3439 field = detail.prop_key.to_s.gsub(/\_id$/, "")
label = l(("field_" + field).to_sym)
Jean-Philippe Lang
Code cleanup....
r8604 case detail.prop_key
when 'due_date', 'start_date'
Jean-Philippe Lang
added svn:eol-style native property on /app files...
r330 value = format_date(detail.value.to_date) if detail.value
old_value = format_date(detail.old_value.to_date) if detail.old_value
Eric Davis
Refactor: Remove duplicated case statements....
r3440
Jean-Philippe Lang
Code cleanup....
r8604 when 'project_id', 'status_id', 'tracker_id', 'assigned_to_id',
'priority_id', 'category_id', 'fixed_version_id'
Eric Davis
Refactor: Extract similar logic in IssuesHelper#show_detail to a new method....
r3439 value = find_name_by_reflection(field, detail.value)
old_value = find_name_by_reflection(field, detail.old_value)
Eric Davis
Refactor: Remove duplicated case statements....
r3440
Jean-Philippe Lang
Code cleanup....
r8604 when 'estimated_hours'
Jean-Philippe Lang
Fixed: Estimated time in issue's journal should be rounded to two decimals (#1793)....
r1753 value = "%0.02f" % detail.value.to_f unless detail.value.blank?
old_value = "%0.02f" % detail.old_value.to_f unless detail.old_value.blank?
Jean-Philippe Lang
Fixed: Wrong label in issue-journal for subtask-changes (#5090)....
r3479
Jean-Philippe Lang
Code cleanup....
r8604 when 'parent_id'
Jean-Philippe Lang
Fixed: Wrong label in issue-journal for subtask-changes (#5090)....
r3479 label = l(:field_parent_issue)
value = "##{detail.value}" unless detail.value.blank?
old_value = "##{detail.old_value}" unless detail.old_value.blank?
Toshi MARUYAMA
remove trailing white-spaces from issues helper source....
r5711
Jean-Philippe Lang
Code cleanup....
r8604 when 'is_private'
Jean-Philippe Lang
Private issues (#7414)....
r5346 value = l(detail.value == "0" ? :general_text_No : :general_text_Yes) unless detail.value.blank?
old_value = l(detail.old_value == "0" ? :general_text_No : :general_text_Yes) unless detail.old_value.blank?
Jean-Philippe Lang
added svn:eol-style native property on /app files...
r330 end
when 'cf'
Jean-Philippe Lang
Avoid lots of CustomField.find_by_id calls when displaying an issue history with custom fields (#15072)....
r11987 custom_field = detail.custom_field
Jean-Philippe Lang
added svn:eol-style native property on /app files...
r330 if custom_field
Jean-Philippe Lang
Adds support for multiselect custom fields (#1189)....
r8601 multiple = custom_field.multiple?
Jean-Philippe Lang
added svn:eol-style native property on /app files...
r330 label = custom_field.name
Jean-Philippe Lang
Merged custom fields format refactoring....
r12125 value = format_value(detail.value, custom_field) if detail.value
old_value = format_value(detail.old_value, custom_field) if detail.old_value
Jean-Philippe Lang
added svn:eol-style native property on /app files...
r330 end
Jean-Philippe Lang
Feature 9867 Allow file upload in comment and add to issue history...
r422 when 'attachment'
label = l(:label_attachment)
Toshi MARUYAMA
add journal after creating/deleting issue relation (#1005)...
r11655 when 'relation'
if detail.value && !detail.old_value
Jean-Philippe Lang
Fixed that journal details about issue relations may disclose issues that are not visible (#1005)....
r11709 rel_issue = Issue.visible.find_by_id(detail.value)
Jean-Philippe Lang
Prepends issue numbers with a number sign (#1005)....
r11710 value = rel_issue.nil? ? "#{l(:label_issue)} ##{detail.value}" :
Jean-Philippe Lang
Fixed that links for relations in notifications do not include hostname (#15677)....
r12140 (no_html ? rel_issue : link_to_issue(rel_issue, :only_path => options[:only_path]))
Toshi MARUYAMA
add journal after creating/deleting issue relation (#1005)...
r11655 elsif detail.old_value && !detail.value
Jean-Philippe Lang
Fixed that journal details about issue relations may disclose issues that are not visible (#1005)....
r11709 rel_issue = Issue.visible.find_by_id(detail.old_value)
Jean-Philippe Lang
Prepends issue numbers with a number sign (#1005)....
r11710 old_value = rel_issue.nil? ? "#{l(:label_issue)} ##{detail.old_value}" :
Jean-Philippe Lang
Fixed that links for relations in notifications do not include hostname (#15677)....
r12140 (no_html ? rel_issue : link_to_issue(rel_issue, :only_path => options[:only_path]))
Toshi MARUYAMA
add journal after creating/deleting issue relation (#1005)...
r11655 end
Jean-Philippe Lang
Store relation type instead of i18n key in journals (#15704)....
r12141 relation_type = IssueRelation::TYPES[detail.prop_key]
label = l(relation_type[:name]) if relation_type
Jean-Philippe Lang
added svn:eol-style native property on /app files...
r330 end
Toshi MARUYAMA
code layout clean up issues helper...
r7905 call_hook(:helper_issues_show_detail_after_setting,
{:detail => detail, :label => label, :value => value, :old_value => old_value })
Jean-Philippe Lang
Merged hooks branch @ r1785 into trunk....
r1785
Jean-Philippe Lang
added svn:eol-style native property on /app files...
r330 label ||= detail.prop_key
value ||= detail.value
old_value ||= detail.old_value
Toshi MARUYAMA
remove trailing white-spaces from issues helper source....
r5711
Jean-Philippe Lang
Reverted r9368....
r9236 unless no_html
Jean-Philippe Lang
added svn:eol-style native property on /app files...
r330 label = content_tag('strong', label)
old_value = content_tag("i", h(old_value)) if detail.old_value
Toshi MARUYAMA
remove "del" tag from deleted issue relation (#1005)...
r11656 if detail.old_value && detail.value.blank? && detail.property != 'relation'
old_value = content_tag("del", old_value)
end
Toshi MARUYAMA
add a view link to note attachment file (#4774)...
r9192 if detail.property == 'attachment' && !value.blank? && atta = Attachment.find_by_id(detail.prop_key)
Jean-Philippe Lang
Main project list now displays root projects with their subprojects....
r718 # Link to the attachment if it has not been removed
Toshi MARUYAMA
add a view link to note attachment file (#4774)...
r9192 value = link_to_attachment(atta, :download => true, :only_path => options[:only_path])
Jean-Philippe Lang
Do not display the magnifier for added files in email notifications (#4774)....
r9199 if options[:only_path] != false && atta.is_text?
Toshi MARUYAMA
add a view link to note attachment file (#4774)...
r9192 value += link_to(
image_tag('magnifier.png'),
:controller => 'attachments', :action => 'show',
:id => atta, :filename => atta.filename
)
end
Jean-Philippe Lang
Main project list now displays root projects with their subprojects....
r718 else
value = content_tag("i", h(value)) if value
end
Jean-Philippe Lang
added svn:eol-style native property on /app files...
r330 end
Toshi MARUYAMA
remove trailing white-spaces from issues helper source....
r5711
Jean-Philippe Lang
Keep track of issue description changes (#746)....
r4834 if detail.property == 'attr' && detail.prop_key == 'description'
s = l(:text_journal_changed_no_detail, :label => label)
unless no_html
Toshi MARUYAMA
remove trailing white-spaces from issues helper source....
r5711 diff_link = link_to 'diff',
Toshi MARUYAMA
code layout cleanup app/helpers/issues_helper.rb...
r9191 {:controller => 'journals', :action => 'diff', :id => detail.journal_id,
:detail_id => detail.id, :only_path => options[:only_path]},
Jean-Philippe Lang
Keep track of issue description changes (#746)....
r4834 :title => l(:label_view_diff)
s << " (#{ diff_link })"
end
Toshi MARUYAMA
Rails3: helper: html_safe for issues helper "show_detail" method...
r7904 s.html_safe
Jean-Philippe Lang
Code cleanup....
r8604 elsif detail.value.present?
Jean-Philippe Lang
Feature 9867 Allow file upload in comment and add to issue history...
r422 case detail.property
when 'attr', 'cf'
Jean-Philippe Lang
Code cleanup....
r8604 if detail.old_value.present?
Toshi MARUYAMA
Rails3: helper: html_safe for issues helper "show_detail" method...
r7904 l(:text_journal_changed, :label => label, :old => old_value, :new => value).html_safe
Jean-Philippe Lang
Adds support for multiselect custom fields (#1189)....
r8601 elsif multiple
l(:text_journal_added, :label => label, :value => value).html_safe
Jean-Philippe Lang
Feature 9867 Allow file upload in comment and add to issue history...
r422 else
Toshi MARUYAMA
Rails3: helper: html_safe for issues helper "show_detail" method...
r7904 l(:text_journal_set_to, :label => label, :value => value).html_safe
Jean-Philippe Lang
Feature 9867 Allow file upload in comment and add to issue history...
r422 end
Toshi MARUYAMA
add journal after creating/deleting issue relation (#1005)...
r11655 when 'attachment', 'relation'
Toshi MARUYAMA
Rails3: helper: html_safe for issues helper "show_detail" method...
r7904 l(:text_journal_added, :label => label, :value => value).html_safe
Jean-Philippe Lang
added svn:eol-style native property on /app files...
r330 end
else
Toshi MARUYAMA
Rails3: helper: html_safe for issues helper "show_detail" method...
r7904 l(:text_journal_deleted, :label => label, :old => old_value).html_safe
Jean-Philippe Lang
added svn:eol-style native property on /app files...
r330 end
Jean-Philippe Lang
improved issues change history...
r52 end
Eric Davis
Refactor: Extract similar logic in IssuesHelper#show_detail to a new method....
r3439
# Find the name of an associated record stored in the field attribute
def find_name_by_reflection(field, id)
Jean-Philippe Lang
Don't do any query if id is not present....
r10875 unless id.present?
return nil
end
Eric Davis
Refactor: Extract similar logic in IssuesHelper#show_detail to a new method....
r3439 association = Issue.reflect_on_association(field.to_sym)
if association
record = association.class_name.constantize.find_by_id(id)
Toshi MARUYAMA
PDF: fix incompatible character encodings: UTF-8 and ASCII-8BIT (#13354)...
r11407 if record
Jean-Philippe Lang
Merged rails-4.1 branch (#14534)....
r13100 record.name.force_encoding('UTF-8')
Toshi MARUYAMA
PDF: fix incompatible character encodings: UTF-8 and ASCII-8BIT (#13354)...
r11407 return record.name
end
Eric Davis
Refactor: Extract similar logic in IssuesHelper#show_detail to a new method....
r3439 end
end
Toshi MARUYAMA
remove trailing white-spaces from issues helper source....
r5711
Jean-Philippe Lang
Adds subtasks to GET /issues/:id API (#5338)....
r4351 # Renders issue children recursively
def render_api_issue_children(issue, api)
return if issue.leaf?
api.array :children do
issue.children.each do |child|
api.issue(:id => child.id) do
api.tracker(:id => child.tracker_id, :name => child.tracker.name) unless child.tracker.nil?
api.subject child.subject
render_api_issue_children(child, api)
end
end
end
end
Jean-Philippe Lang
Initial commit...
r2 end