1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071 |
- # Copyright (C) 2012-2024 Zammad Foundation, https://zammad-foundation.org/
- # Trigger GraphQL subscriptions on ticket changes.
- module Ticket::TriggersSubscriptions
- extend ActiveSupport::Concern
- included do
- after_update_commit :trigger_subscriptions
- after_update_commit :trigger_checklist_subscriptions
- after_update_commit :trigger_link_subscriptions
- end
- private
- def trigger_subscriptions
- Gql::Subscriptions::TicketUpdates.trigger(self, arguments: { ticket_id: Gql::ZammadSchema.id_from_object(self) })
- return true if !saved_change_to_attribute?('group_id')
- TaskbarUpdateTriggerSubscriptionsJob.perform_later("#{self.class}-#{id}")
- end
- TRIGGER_CHECKLIST_UPDATE_ON = %w[title group_id].freeze
- def trigger_checklist_subscriptions
- return if !saved_changes.keys.intersect? TRIGGER_CHECKLIST_UPDATE_ON
- Checklist
- .where(id: referencing_checklists)
- .includes(:ticket)
- .each do |elem|
- Gql::Subscriptions::Ticket::ChecklistUpdates.trigger(
- elem,
- arguments: {
- ticket_id: Gql::ZammadSchema.id_from_object(elem.ticket),
- }
- )
- end
- end
- TRIGGER_LINK_UPDATE_ON = %w[title state_id].freeze
- def trigger_link_subscriptions
- return if !saved_changes.keys.intersect? TRIGGER_LINK_UPDATE_ON
- Gql::Subscriptions::LinkUpdates.trigger(
- nil,
- arguments: {
- object_id: Gql::ZammadSchema.id_from_object(self),
- target_type: self.class.name
- }
- )
- links = Link.list(
- link_object: self.class.name,
- link_object_value: id
- ).uniq
- links.each do |link|
- target = link['link_object'].constantize.find(link['link_object_value'])
- Gql::Subscriptions::LinkUpdates.trigger(
- nil,
- arguments: {
- object_id: Gql::ZammadSchema.id_from_object(target),
- target_type: link['link_object']
- }
- )
- end
- end
- end
|