adds_metadata_general.rb 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. # Copyright (C) 2012-2023 Zammad Foundation, https://zammad-foundation.org/
  2. # Adds certain (missing) meta data when creating articles.
  3. # This module depends on AddsMetadataOriginById to run before it.
  4. module Ticket::Article::AddsMetadataGeneral
  5. extend ActiveSupport::Concern
  6. TYPE_NO_METADATA = [
  7. 'email',
  8. 'twitter status',
  9. 'twitter direct-message',
  10. 'facebook feed post',
  11. 'facebook feed comment',
  12. 'sms'
  13. ].freeze
  14. included do
  15. before_create :ticket_article_add_metadata_general
  16. end
  17. private
  18. def ticket_article_add_metadata_general
  19. return if !neither_importing_nor_postmaster?
  20. return if !type_uses_metadata_general?
  21. metadata_general_process_origin_by
  22. return if author.blank?
  23. metadata_general_process_from
  24. end
  25. def type_uses_metadata_general?
  26. return if type_id.blank?
  27. type = Ticket::Article::Type.lookup(id: type_id)
  28. return if TYPE_NO_METADATA.include? type.name
  29. true
  30. end
  31. def metadata_general_process_origin_by
  32. return if origin_by_id.blank?
  33. # in case the customer is using origin_by_id, force it to current session user
  34. # and set sender to Customer
  35. if !created_by.permissions?('ticket.agent')
  36. self.origin_by_id = created_by_id
  37. self.sender = Ticket::Article::Sender.lookup(name: 'Customer')
  38. end
  39. # in case origin_by is different than created_by, set sender to Customer
  40. # Customer in context of this conversation, not as a permission
  41. return if origin_by == created_by_id
  42. self.sender = Ticket::Article::Sender.lookup(name: 'Customer')
  43. end
  44. def metadata_general_process_from
  45. type = Ticket::Article::Type.lookup(id: type_id)
  46. is_customer = !author.permissions?('ticket.agent')
  47. self.from = if %w[web phone].include?(type.name) && is_customer
  48. Channel::EmailBuild.recipient_line "#{author.firstname} #{author.lastname}", author.email
  49. else
  50. "#{author.firstname} #{author.lastname}"
  51. end
  52. end
  53. end