1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374 |
- # Copyright (C) 2012-2024 Zammad Foundation, https://zammad-foundation.org/
- # Adds certain (missing) meta data when creating articles.
- # This module depends on AddsMetadataOriginById to run before it.
- module Ticket::Article::AddsMetadataGeneral
- extend ActiveSupport::Concern
- TYPE_NO_METADATA = [
- 'email',
- 'twitter status',
- 'twitter direct-message',
- 'facebook feed post',
- 'facebook feed comment',
- 'sms',
- 'whatsapp message',
- ].freeze
- included do
- before_create :ticket_article_add_metadata_general
- end
- private
- def ticket_article_add_metadata_general
- return if !neither_importing_nor_postmaster?
- return if !type_uses_metadata_general?
- metadata_general_process_origin_by
- return if author.blank?
- metadata_general_process_from
- end
- def type_uses_metadata_general?
- return if type_id.blank?
- type = Ticket::Article::Type.lookup(id: type_id)
- return if TYPE_NO_METADATA.include? type.name
- true
- end
- def metadata_general_process_origin_by
- return if origin_by_id.blank?
- # in case the customer is using origin_by_id, force it to current session user
- # and set sender to Customer
- if !created_by.permissions?('ticket.agent')
- self.origin_by_id = created_by_id
- self.sender = Ticket::Article::Sender.lookup(name: 'Customer')
- end
- # in case origin_by is different than created_by, set sender to Customer
- # Customer in context of this conversation, not as a permission
- return if origin_by == created_by_id
- self.sender = Ticket::Article::Sender.lookup(name: 'Customer')
- end
- def metadata_general_process_from
- type = Ticket::Article::Type.lookup(id: type_id)
- is_customer = !author.permissions?('ticket.agent')
- fullname = author.fullname(email_fallback: false).presence
- self.from = if %w[web phone].include?(type.name) && is_customer && author.email.present?
- Channel::EmailBuild.recipient_line fullname, author.email
- else
- fullname
- end
- end
- end
|