From 164bc700e11d66144e2d18b90ef4bc4f479d95dd Mon Sep 17 00:00:00 2001 From: Alexander Meindl Date: Tue, 7 Jan 2020 13:22:53 +0100 Subject: [PATCH] Fix bug with assigned_to field twice and fallback values, if objects do not exist anymore --- app/models/messenger.rb | 49 +++++++++++--------- lib/redmine_messenger/patches/issue_patch.rb | 6 +-- 2 files changed, 27 insertions(+), 28 deletions(-) diff --git a/app/models/messenger.rb b/app/models/messenger.rb index f56a63b..638df89 100644 --- a/app/models/messenger.rb +++ b/app/models/messenger.rb @@ -184,41 +184,39 @@ class Messenger when 'title', 'subject', 'description' short = false when 'tracker' - tracker = Tracker.find(detail.value) - value = tracker.to_s if tracker.present? + value = object_field_value(Tracker, detail.value) when 'project' - project = Project.find(detail.value) - value = project.to_s if project.present? + value = object_field_value(Project, detail.value) when 'status' - status = IssueStatus.find(detail.value) - value = status.to_s if status.present? + value = object_field_value(IssueStatus, detail.value) when 'priority' - priority = IssuePriority.find(detail.value) - value = priority.to_s if priority.present? + value = object_field_value(IssuePriority, detail.value) when 'category' - category = IssueCategory.find(detail.value) - value = category.to_s if category.present? + value = object_field_value(IssueCategory, detail.value) when 'assigned_to' - user = User.find(detail.value) - value = user.to_s if user.present? + value = object_field_value(User, detail.value) when 'fixed_version' - fixed_version = Version.find(detail.value) - value = fixed_version.to_s if fixed_version.present? + value = object_field_value(Version, detail.value) when 'attachment' attachment = Attachment.find(detail.prop_key) - value = "<#{Messenger.object_url attachment}|#{markup_format(attachment.filename)}>" if attachment.present? - escape = false + value = if attachment.present? + escape = false + "<#{Messenger.object_url attachment}|#{markup_format(attachment.filename)}>" + else + detail.prop_key.to_s + end + when 'parent' issue = Issue.find(detail.value) - value = "<#{Messenger.object_url issue}|#{markup_format(issue)}>" if issue.present? - escape = false - end - - if detail.property == 'cf' && field_format == 'version' - version = Version.find(detail.value) - value = version.to_s if version.present? + value = if issue.present? + escape = false + "<#{Messenger.object_url issue}|#{markup_format(issue)}>" + else + detail.value.to_s + end end + value = object_field_value(Version, detail.value) if detail.property == 'cf' && field_format == 'version' value = if value.present? if escape markup_format(value) @@ -244,6 +242,11 @@ class Messenger private + def object_field_value(klass, id) + obj = klass.find_by(id: id) + obj.nil? ? id.to_s : obj.to_s + end + def extract_usernames(text) text = '' if text.nil? # messenger usernames may only contain lowercase letters, numbers, diff --git a/lib/redmine_messenger/patches/issue_patch.rb b/lib/redmine_messenger/patches/issue_patch.rb index 5764d07..dcada8d 100644 --- a/lib/redmine_messenger/patches/issue_patch.rb +++ b/lib/redmine_messenger/patches/issue_patch.rb @@ -88,11 +88,7 @@ module RedmineMessenger value: Messenger.markup_format(priority.to_s), short: true } end - if assigned_to.present? - fields << { title: I18n.t(:field_assigned_to), - value: Messenger.markup_format(assigned_to.to_s), - short: true } - end + attachment[:fields] = fields if fields.any? Messenger.speak(l(:label_messenger_issue_updated,