1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556 |
- # Copyright (C) 2012-2024 Zammad Foundation, https://zammad-foundation.org/
- class Service::Translation::Search::Collector::ObjectManagerAttributes < Service::Translation::Search::Collector
- private
- def list_sources
- @list_sources ||= display_names | option_labels
- end
- def search_sources
- @search_sources ||= list_sources.select { |source| source.downcase.include?(query.downcase) }
- end
- def object_attributes
- @object_attributes ||= ObjectManager::Attribute.where(editable: true)
- end
- def display_names
- object_attributes.pluck(:display)
- end
- def option_labels
- labels = []
- object_attributes.each do |attribute|
- labels |= labels_from_options(attribute)
- end
- labels
- end
- def labels_from_options(attribute)
- options = attribute[:data_option][:options]
- return [] if !attribute[:data_option][:translate] || options.nil?
- if options.is_a?(Array)
- return collect_labels(attribute[:data_option][:options])
- end
- options.values
- end
- def collect_labels(options, labels = [])
- options.each do |option|
- # Collect the 'name' value if it exists
- labels << option['name'] if option['name']
- # If 'children' key exists and is an array, recursively collect labels from the children
- if option['children'].is_a?(Array)
- collect_labels(option['children'], labels)
- end
- end
- labels
- end
- end
|