assets_all.rb 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. # Copyright (C) 2012-2025 Zammad Foundation, https://zammad-foundation.org/
  2. class Ticket::AssetsAll
  3. attr_accessor :user, :ticket
  4. def initialize(user, ticket)
  5. @user = user
  6. @ticket = ticket
  7. end
  8. def all_assets(assets = {})
  9. attributes_to_change = get_attributes_to_change(assets)
  10. all_assets = compile_assets(attributes_to_change[:assets])
  11. response(all_assets, attributes_to_change)
  12. end
  13. private
  14. def compile_assets(assets)
  15. ticket.assets(assets)
  16. assets = ApplicationModel::CanAssets.reduce([ticket, articles, mentions].flatten, assets)
  17. assets = Link.reduce_assets(assets, links)
  18. if (draft = ticket.shared_draft) && Ticket::SharedDraftZoomPolicy.new(user, draft).show?
  19. assets = draft.assets(assets)
  20. end
  21. if Setting.get('checklist') && user.permissions?('ticket.agent')
  22. ticket.checklist&.assets(assets)
  23. ticket.referencing_checklists
  24. .includes(:ticket)
  25. .each do |elem|
  26. elem.assets(assets)
  27. elem.ticket.assets(assets) if elem.ticket.authorized_asset?
  28. end
  29. end
  30. assets
  31. end
  32. def response(assets, attributes_to_change)
  33. {
  34. ticket_id: ticket.id,
  35. ticket_article_ids: articles.pluck(:id),
  36. assets: assets,
  37. links: links,
  38. tags: tags,
  39. mentions: mentions.pluck(:id),
  40. time_accountings: time_accountings,
  41. form_meta: attributes_to_change[:form_meta],
  42. }
  43. end
  44. def get_attributes_to_change(assets)
  45. Ticket::ScreenOptions.attributes_to_change(
  46. current_user: user,
  47. ticket: ticket,
  48. screen: 'edit',
  49. assets: assets,
  50. )
  51. end
  52. def articles
  53. @articles ||= ticket.articles.filter { |elem| Ticket::ArticlePolicy.new(user, elem).show? }
  54. end
  55. def links
  56. @links ||= Link.list(
  57. link_object: 'Ticket',
  58. link_object_value: ticket.id,
  59. user: user,
  60. )
  61. end
  62. def tags
  63. @tags ||= ticket.tag_list
  64. end
  65. def time_accountings
  66. @time_accountings = ticket
  67. .ticket_time_accounting
  68. .map { |row| row.slice(:id, :ticket_id, :ticket_article_id, :time_unit, :type_id) }
  69. end
  70. def mentions
  71. @mentions ||= ticket.mentions
  72. end
  73. end