12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758 |
- # Copyright (C) 2012-2024 Zammad Foundation, https://zammad-foundation.org/
- # Trigger GraphQL subscriptions on avatar changes.
- module Avatar::TriggersSubscriptions
- extend ActiveSupport::Concern
- included do
- after_update_commit :update_avatar_subscription
- after_destroy_commit :destroy_avatar_subscription
- end
- private
- def update_avatar_subscription
- return if saved_changes.blank?
- return if !saved_changes.key?('default')
- # Following logic for checking if the subscription triggering is needed is applied:
- # If the default avatar was changed from false to true, we can skip the triggering if
- # a) the avatar is not initial.
- # b) there is already a default avatar that is not initial.
- if saved_changes['default'].first == false && saved_changes['default'].last == true
- return if !initial
- default_non_initial_avatar = Avatar.find_by(
- object_lookup_id:,
- o_id:,
- default: true,
- initial: false,
- )
- return if default_non_initial_avatar.present?
- end
- trigger_user_subscription
- end
- def destroy_avatar_subscription
- # We need to check if the default avatar was deleted.
- # If yes, there is no need to trigger the subscription,
- # because it will be triggered by changing the default state of the remaining avatar.
- return if default
- trigger_user_subscription
- end
- def trigger_user_subscription
- return if ObjectLookup.by_id(object_lookup_id) != 'User'
- Gql::Subscriptions::User::Current::AvatarUpdates.trigger(
- nil,
- arguments: {
- user_id: Gql::ZammadSchema.id_from_internal_id('User', o_id)
- }
- )
- end
- end
|