# Copyright (C) 2012-2014 Zammad Foundation, http://zammad-foundation.org/ class EmailAddress < ApplicationModel has_many :groups, after_add: :cache_update, after_remove: :cache_update belongs_to :channel validates :realname, presence: true validates :email, presence: true before_create :check_if_channel_exists_set_inactive before_update :check_if_channel_exists_set_inactive after_create :update_email_address_id after_update :update_email_address_id after_destroy :delete_group_reference latest_change_support =begin check and if channel not exists reset configured channels for email addresses EmailAddress.channel_cleanup =end def self.channel_cleanup EmailAddress.all.each { |email_address| # set to active if channel exists if email_address.channel_id && Channel.find_by(id: email_address.channel_id) if !email_address.active email_address.save end next end # set in inactive if channel not longer exists next if !email_address.active email_address.save } end private # set email address to inactive/active if channel exists or not def check_if_channel_exists_set_inactive # set to active if channel exists if channel_id && Channel.find_by(id: channel_id) self.active = true return true end # set in inactive if channel not longer exists self.channel_id = nil self.active = false true end # delete group.email_address_id reference if email address get's deleted def delete_group_reference Group.where(email_address_id: id).each { |group| group.email_address_id = nil } end # keep email email address is of inital group filled def update_email_address_id not_configured = Group.where(email_address_id: nil).count total = Group.count return if not_configured == 0 return if total != 1 group = Group.find_by(email_address_id: nil) group.email_address_id = id group.updated_by_id = updated_by_id group.save end end