subject.rb 2.6 KB

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