object_manager_attributes_controller.rb 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133
  1. # Copyright (C) 2012-2014 Zammad Foundation, http://zammad-foundation.org/
  2. class ObjectManagerAttributesController < ApplicationController
  3. before_action :authentication_check
  4. # GET /object_manager_attributes_list
  5. def list
  6. return if deny_if_not_role(Z_ROLENAME_ADMIN)
  7. render json: {
  8. objects: ObjectManager.list_frontend_objects,
  9. }
  10. end
  11. # GET /object_manager_attributes
  12. def index
  13. return if deny_if_not_role(Z_ROLENAME_ADMIN)
  14. render json: ObjectManager::Attribute.list_full
  15. end
  16. # GET /object_manager_attributes/1
  17. def show
  18. return if deny_if_not_role(Z_ROLENAME_ADMIN)
  19. model_show_render(ObjectManager::Attribute, params)
  20. end
  21. # POST /object_manager_attributes
  22. def create
  23. return if deny_if_not_role(Z_ROLENAME_ADMIN)
  24. check_params
  25. # check if attribute already exists
  26. exists = ObjectManager::Attribute.get(
  27. object: params[:object],
  28. name: params[:name],
  29. )
  30. if exists
  31. render json: model_match_error('already exists'), status: :unprocessable_entity
  32. return
  33. end
  34. begin
  35. object_manager_attribute = ObjectManager::Attribute.add(
  36. object: params[:object],
  37. name: params[:name],
  38. display: params[:display],
  39. data_type: params[:data_type],
  40. data_option: params[:data_option],
  41. active: params[:active],
  42. screens: params[:screens],
  43. position: 1550,
  44. editable: true,
  45. )
  46. render json: object_manager_attribute.attributes_with_associations, status: :created
  47. rescue => e
  48. logger.error e.message
  49. logger.error e.backtrace.inspect
  50. render json: model_match_error(e.message), status: :unprocessable_entity
  51. end
  52. end
  53. # PUT /object_manager_attributes/1
  54. def update
  55. return if deny_if_not_role(Z_ROLENAME_ADMIN)
  56. check_params
  57. begin
  58. object_manager_attribute = ObjectManager::Attribute.add(
  59. object: params[:object],
  60. name: params[:name],
  61. display: params[:display],
  62. data_type: params[:data_type],
  63. data_option: params[:data_option],
  64. active: params[:active],
  65. screens: params[:screens],
  66. position: 1550,
  67. editable: true,
  68. )
  69. render json: object_manager_attribute.attributes_with_associations, status: :ok
  70. rescue => e
  71. logger.error e.message
  72. logger.error e.backtrace.inspect
  73. render json: model_match_error(e.message), status: :unprocessable_entity
  74. end
  75. end
  76. # DELETE /object_manager_attributes/1
  77. def destroy
  78. return if deny_if_not_role(Z_ROLENAME_ADMIN)
  79. object_manager_attribute = ObjectManager::Attribute.find(params[:id])
  80. ObjectManager::Attribute.remove(
  81. object_lookup_id: object_manager_attribute.object_lookup_id,
  82. name: object_manager_attribute.name,
  83. )
  84. model_destory_render_item
  85. end
  86. # POST /object_manager_attributes_discard_changes
  87. def discard_changes
  88. return if deny_if_not_role(Z_ROLENAME_ADMIN)
  89. ObjectManager::Attribute.discard_changes
  90. render json: {}, status: :ok
  91. end
  92. # POST /object_manager_attributes_execute_migrations
  93. def execute_migrations
  94. return if deny_if_not_role(Z_ROLENAME_ADMIN)
  95. ObjectManager::Attribute.migration_execute
  96. render json: {}, status: :ok
  97. end
  98. private
  99. def check_params
  100. if params[:data_type] =~ /^(boolean)$/
  101. if params[:data_option][:options]
  102. if params[:data_option][:options][:false]
  103. params[:data_option][:options][false] = params[:data_option][:options][:false]
  104. params[:data_option][:options].delete(:false)
  105. end
  106. if params[:data_option][:options][:true]
  107. params[:data_option][:options][true] = params[:data_option][:options][:true]
  108. params[:data_option][:options].delete(:true)
  109. end
  110. end
  111. end
  112. if params[:data_option] && !params[:data_option].key?(:default)
  113. params[:data_option][:default] = if params[:data_type] =~ /^(input|select)$/
  114. ''
  115. end
  116. end
  117. return if !params[:data_option][:null].nil?
  118. params[:data_option][:null] = true
  119. end
  120. end