dynamic_field.rb 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. # Copyright (C) 2012-2022 Zammad Foundation, https://zammad-foundation.org/
  2. module Import
  3. module OTRS
  4. class DynamicField
  5. def initialize(dynamic_field)
  6. @internal_name = self.class.convert_name(dynamic_field['Name'])
  7. return if already_imported?(dynamic_field)
  8. initialize_attribute_config(dynamic_field)
  9. init_callback(dynamic_field)
  10. add
  11. end
  12. def self.convert_name(dynamic_field_name)
  13. dynamic_field_name.underscore.sub(%r{_id(s)?\z}, '_no\1')
  14. end
  15. private
  16. def init_callback(_)
  17. raise 'No init callback defined for this dynamic field!'
  18. end
  19. def already_imported?(dynamic_field)
  20. attribute = ObjectManager::Attribute.get(
  21. object: dynamic_field['ObjectType'],
  22. name: @internal_name,
  23. )
  24. attribute ? true : false
  25. end
  26. def initialize_attribute_config(dynamic_field)
  27. @attribute_config = {
  28. object: dynamic_field['ObjectType'],
  29. name: @internal_name,
  30. display: dynamic_field['Label'],
  31. screens: {
  32. view: {
  33. '-all-' => {
  34. shown: true,
  35. },
  36. },
  37. },
  38. active: true,
  39. editable: dynamic_field['InternalField'] == '0',
  40. position: dynamic_field['FieldOrder'],
  41. created_by_id: 1,
  42. updated_by_id: 1,
  43. }
  44. end
  45. def add
  46. ObjectManager::Attribute.add(@attribute_config)
  47. ObjectManager::Attribute.migration_execute(false)
  48. end
  49. end
  50. end
  51. end