12345678910111213141516171819202122232425262728293031323334353637383940414243 |
- # Copyright (C) 2012-2024 Zammad Foundation, https://zammad-foundation.org/
- module Gql::Queries
- class Ticket::Attachments < BaseQuery
- description 'Fetch ticket attachments by ticket ID'
- argument :ticket_id, GraphQL::Types::ID, loads: Gql::Types::TicketType, description: 'The ticket to fetch attachments for'
- type [Gql::Types::StoredFileType, { null: false }], null: false
- def resolve(ticket:)
- articles = Service::Ticket::Article::List
- .new(current_user: context.current_user)
- .execute(ticket:)
- return [] if articles.blank?
- inline_attachments = articles.map { |x| x.attachments_inline.map(&:id) }.flatten.uniq
- articles
- .map(&:attachments)
- .flatten
- .reject { |f| inline_attachment?(inline_attachments, f) || original_format?(f) }
- .uniq(&:store_file_id)
- .sort_by(&:created_at).reverse
- end
- private
- def inline_attachment?(inline_attachments, file)
- inline_attachments.include?(file.id)
- end
- def original_format?(file)
- return false if file.preferences.blank?
- return false if !file.preferences.key?('original-format')
- return false if file.preferences['original-format'].blank?
- file.preferences['original-format']
- end
- end
- end
|