applies_ticket_shared_draft.rb 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. # Copyright (C) 2012-2024 Zammad Foundation, https://zammad-foundation.org/
  2. module FormUpdater::Concerns::AppliesTicketSharedDraft
  3. extend ActiveSupport::Concern
  4. def resolve
  5. if agent? && selected_draft.present?
  6. apply_draft
  7. end
  8. super
  9. end
  10. private
  11. def apply_draft
  12. apply_value = FormUpdater::ApplyValue.new(context:, data:, result:)
  13. new_attachments = UserInfo.with_user_id(context[:current_user].id) do
  14. selected_draft.clone_attachments('UploadCache', meta[:form_id])
  15. end
  16. apply_value.perform(field: 'attachments', config: { 'value' => new_attachments.reject(&:inline?) })
  17. selected_draft
  18. .content_with_form_id_body_urls(meta[:form_id])
  19. .each_pair do |field, value|
  20. apply_value.perform(field: field, config: { 'value' => value })
  21. end
  22. # Include shared draft internal ID for a subsequent reference.
  23. apply_value.perform(field: 'shared_draft_id', config: { 'value' => selected_draft.id })
  24. end
  25. def selected_draft
  26. @selected_draft ||= begin
  27. id = meta.dig(:additional_data, 'sharedDraftStartId')
  28. Gql::ZammadSchema.authorized_object_from_id(id, type: Ticket::SharedDraftStart, user: context[:current_user]) if id.present?
  29. end
  30. end
  31. def agent?
  32. current_user.permissions?('ticket.agent')
  33. end
  34. end