create.rb 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. # Copyright (C) 2012-2025 Zammad Foundation, https://zammad-foundation.org/
  2. class Service::Channel::Email::Create < Service::Base
  3. def execute(inbound_configuration:, outbound_configuration:, group:, email_address:, email_realname:, group_email_address: false)
  4. new_channel = ::Channel.create!(
  5. area: 'Email::Account',
  6. options: {
  7. inbound: inbound_configuration,
  8. outbound: outbound_configuration,
  9. },
  10. group: group,
  11. last_log_in: nil,
  12. last_log_out: nil,
  13. status_in: 'ok',
  14. status_out: 'ok',
  15. active: true,
  16. ).tap do |channel|
  17. set_email_address(channel:, email_address:, email_realname:)
  18. end
  19. if group_email_address
  20. Service::Channel::Email::UpdateDestinationGroupEmail.new(group:, channel: new_channel).execute
  21. end
  22. new_channel
  23. end
  24. private
  25. def set_email_address(channel:, email_address:, email_realname:)
  26. address = if ::Channel.one?
  27. # on initial setup, use placeholder email address
  28. EmailAddress.first
  29. else
  30. # remember address && set channel for email address
  31. EmailAddress.find_by(email: email_address)
  32. end
  33. address ||= EmailAddress.new
  34. address.name = email_realname
  35. address.email = email_address
  36. address.active = true
  37. address.channel = channel
  38. address.save!
  39. end
  40. end