subject.rb 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. # Copyright (C) 2012-2014 Zammad Foundation, http://zammad-foundation.org/
  2. # rubocop:disable ClassAndModuleChildren
  3. module Ticket::Subject
  4. =begin
  5. build new subject with ticket number in there
  6. ticket = Ticket.find(123)
  7. result = ticket.subject_build('some subject')
  8. returns
  9. result = "[Ticket#1234567] some subject"
  10. =end
  11. def subject_build (subject)
  12. # clena subject
  13. subject = self.subject_clean(subject)
  14. ticket_hook = Setting.get('ticket_hook')
  15. ticket_hook_divider = Setting.get('ticket_hook_divider')
  16. # none position
  17. if Setting.get('ticket_hook_position') == 'none'
  18. return subject
  19. end
  20. # right position
  21. if Setting.get('ticket_hook_position') == 'right'
  22. return subject + " [#{ticket_hook}#{ticket_hook_divider}#{self.number}] "
  23. end
  24. # left position
  25. "[#{ticket_hook}#{ticket_hook_divider}#{self.number}] " + subject
  26. end
  27. =begin
  28. clean subject remove ticket number and other not needed chars
  29. ticket = Ticket.find(123)
  30. result = ticket.subject_clean('[Ticket#1234567] some subject')
  31. returns
  32. result = "some subject"
  33. =end
  34. def subject_clean (subject)
  35. ticket_hook = Setting.get('ticket_hook')
  36. ticket_hook_divider = Setting.get('ticket_hook_divider')
  37. ticket_subject_size = Setting.get('ticket_subject_size')
  38. # remove all possible ticket hook formats with []
  39. subject = subject.gsub /\[#{ticket_hook}: #{self.number}\](\s+?|)/, ''
  40. subject = subject.gsub /\[#{ticket_hook}:#{self.number}\](\s+?|)/, ''
  41. subject = subject.gsub /\[#{ticket_hook}#{ticket_hook_divider}#{self.number}\](\s+?|)/, ''
  42. # remove all possible ticket hook formats without []
  43. subject = subject.gsub /#{ticket_hook}: #{self.number}(\s+?|)/, ''
  44. subject = subject.gsub /#{ticket_hook}:#{self.number}(\s+?|)/, ''
  45. subject = subject.gsub /#{ticket_hook}#{ticket_hook_divider}#{self.number}(\s+?|)/, ''
  46. # remove leading "..:\s" and "..[\d+]:\s" e. g. "Re: " or "Re[5]: "
  47. subject = subject.gsub /^(..(\[\d+\])?:\s)+/, ''
  48. # resize subject based on config
  49. if subject.length > ticket_subject_size.to_i
  50. subject = subject[ 0, ticket_subject_size.to_i ] + '[...]'
  51. end
  52. subject
  53. end
  54. end