|
@@ -10,14 +10,22 @@ JSON
|
|
|
|
|
|
Example:
|
|
|
{
|
|
|
- "id":1,
|
|
|
- "name":"some template",
|
|
|
+ "id": 1,
|
|
|
+ "name": "some template",
|
|
|
"user_id": null,
|
|
|
- "options":{"a":1,"b":2},
|
|
|
- "updated_at":"2012-09-14T17:51:53Z",
|
|
|
- "created_at":"2012-09-14T17:51:53Z",
|
|
|
- "updated_by_id":2.
|
|
|
- "created_by_id":2,
|
|
|
+ "options": {
|
|
|
+ "ticket.title": {
|
|
|
+ "value": "some title"
|
|
|
+ },
|
|
|
+ "ticket.customer_id": {
|
|
|
+ "value": "2",
|
|
|
+ "value_completion": "Nicole Braun <nicole.braun@zammad.org>"
|
|
|
+ }
|
|
|
+ },
|
|
|
+ "updated_at": "2012-09-14T17:51:53Z",
|
|
|
+ "created_at": "2012-09-14T17:51:53Z",
|
|
|
+ "updated_by_id": 2,
|
|
|
+ "created_by_id": 2
|
|
|
}
|
|
|
|
|
|
=end
|
|
@@ -79,7 +87,15 @@ POST /api/v1/templates.json
|
|
|
Payload:
|
|
|
{
|
|
|
"name": "some name",
|
|
|
- "options":{"a":1,"b":2},
|
|
|
+ "options": {
|
|
|
+ "ticket.title": {
|
|
|
+ "value": "some title"
|
|
|
+ },
|
|
|
+ "ticket.customer_id": {
|
|
|
+ "value": "2",
|
|
|
+ "value_completion": "Nicole Braun <nicole.braun@zammad.org>"
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
Response:
|
|
@@ -90,12 +106,12 @@ Response:
|
|
|
}
|
|
|
|
|
|
Test:
|
|
|
-curl http://localhost/api/v1/templates.json -v -u #{login}:#{password} -H "Content-Type: application/json" -X POST -d '{"name": "some_name","active": true, "note": "some note"}'
|
|
|
+curl http://localhost/api/v1/templates.json -v -u #{login}:#{password} -H "Content-Type: application/json" -X POST -d '{"name": "some_name", "options": {"ticket.title": {"value": "some title"},"ticket.customer_id": {"value": "2", "value_completion": "Nicole Braun <nicole.braun@zammad.org>"}}}'
|
|
|
|
|
|
=end
|
|
|
|
|
|
def create
|
|
|
- model_create_render(Template, params)
|
|
|
+ template_create_render(params)
|
|
|
end
|
|
|
|
|
|
=begin
|
|
@@ -106,7 +122,15 @@ PUT /api/v1/templates/{id}.json
|
|
|
Payload:
|
|
|
{
|
|
|
"name": "some name",
|
|
|
- "options":{"a":1,"b":2},
|
|
|
+ "options": {
|
|
|
+ "ticket.title": {
|
|
|
+ "value": "some title"
|
|
|
+ },
|
|
|
+ "ticket.customer_id": {
|
|
|
+ "value": "2",
|
|
|
+ "value_completion": "Nicole Braun <nicole.braun@zammad.org>"
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
Response:
|
|
@@ -117,12 +141,12 @@ Response:
|
|
|
}
|
|
|
|
|
|
Test:
|
|
|
-curl http://localhost/api/v1/templates.json -v -u #{login}:#{password} -H "Content-Type: application/json" -X PUT -d '{"name": "some_name","active": true, "note": "some note"}'
|
|
|
+curl http://localhost/api/v1/templates/1.json -v -u #{login}:#{password} -H "Content-Type: application/json" -X PUT -d '{"name": "some_name", "options": {"ticket.title": {"value": "some title"},"ticket.customer_id": {"value": "2", "value_completion": "Nicole Braun <nicole.braun@zammad.org>"}}}'
|
|
|
|
|
|
=end
|
|
|
|
|
|
def update
|
|
|
- model_update_render(Template, params)
|
|
|
+ template_update_render(params)
|
|
|
end
|
|
|
|
|
|
=begin
|
|
@@ -141,4 +165,111 @@ curl http://localhost/api/v1/templates.json -v -u #{login}:#{password} -H "Conte
|
|
|
def destroy
|
|
|
model_destroy_render(Template, params)
|
|
|
end
|
|
|
+
|
|
|
+ private
|
|
|
+
|
|
|
+ def old_options?(options)
|
|
|
+ has_new_options = false
|
|
|
+
|
|
|
+ options.each_key do |key|
|
|
|
+ if key.starts_with?(%r{(ticket|article)\.})
|
|
|
+ has_new_options = true
|
|
|
+ end
|
|
|
+ break if has_new_options
|
|
|
+ end
|
|
|
+
|
|
|
+ !has_new_options
|
|
|
+ end
|
|
|
+
|
|
|
+ def migrate_options(options)
|
|
|
+ old_options = options.clone
|
|
|
+ new_options = {}
|
|
|
+
|
|
|
+ article_attribute_list = %w[body form_id]
|
|
|
+
|
|
|
+ # Implements a compatibility layer for templates, by converting `options` to a newer format:
|
|
|
+ # options: {
|
|
|
+ # 'ticket.field_1': { value: 'value_1' },
|
|
|
+ # 'ticket.field_2': { value: 'value_2', value_completion: 'value_completion_2' },
|
|
|
+ # }
|
|
|
+ old_options.each do |key, value|
|
|
|
+ new_key = "ticket.#{key}"
|
|
|
+
|
|
|
+ if article_attribute_list.include?(key)
|
|
|
+ new_key = "article.#{key}"
|
|
|
+ end
|
|
|
+
|
|
|
+ new_options[new_key] = { value: value }
|
|
|
+
|
|
|
+ if old_options.key?("#{key}_completion")
|
|
|
+ new_options[new_key]['value_completion'] = old_options["#{key}_completion"]
|
|
|
+ old_options.delete("#{key}_completion")
|
|
|
+ end
|
|
|
+ end
|
|
|
+
|
|
|
+ new_options
|
|
|
+ end
|
|
|
+
|
|
|
+ def template_create_render(params) # rubocop:disable Metrics/AbcSize
|
|
|
+ clean_params = Template.association_name_to_id_convert(params)
|
|
|
+ clean_params = Template.param_cleanup(clean_params, true)
|
|
|
+
|
|
|
+ if Template.included_modules.include?(ChecksCoreWorkflow)
|
|
|
+ clean_params[:screen] = 'create'
|
|
|
+ end
|
|
|
+
|
|
|
+ if old_options?(clean_params[:options])
|
|
|
+ clean_params[:options] = migrate_options(clean_params[:options])
|
|
|
+ ActiveSupport::Deprecation.warn 'Usage of the old format for template options with unprefixed keys and simple values is deprecated.'
|
|
|
+ end
|
|
|
+
|
|
|
+ template = Template.new(clean_params)
|
|
|
+ template.associations_from_param(params)
|
|
|
+ template.save!
|
|
|
+
|
|
|
+ if response_expand?
|
|
|
+ render json: template.attributes_with_association_names, status: :created
|
|
|
+ return
|
|
|
+ end
|
|
|
+
|
|
|
+ if response_full?
|
|
|
+ render json: template.class.full(template.id), status: :created
|
|
|
+ return
|
|
|
+ end
|
|
|
+
|
|
|
+ model_create_render_item(template)
|
|
|
+ end
|
|
|
+
|
|
|
+ def template_update_render(params) # rubocop:disable Metrics/AbcSize
|
|
|
+ template = Template.find(params[:id])
|
|
|
+
|
|
|
+ clean_params = Template.association_name_to_id_convert(params)
|
|
|
+ clean_params = Template.param_cleanup(clean_params, true)
|
|
|
+
|
|
|
+ if Template.included_modules.include?(ChecksCoreWorkflow)
|
|
|
+ clean_params[:screen] = 'update'
|
|
|
+ end
|
|
|
+
|
|
|
+ if old_options?(clean_params[:options])
|
|
|
+ clean_params[:options] = migrate_options(clean_params[:options])
|
|
|
+ ActiveSupport::Deprecation.warn 'Usage of the old format for template options with unprefixed keys and simple values is deprecated.'
|
|
|
+ end
|
|
|
+
|
|
|
+ template.with_lock do
|
|
|
+ template.associations_from_param(params)
|
|
|
+ template.update!(clean_params)
|
|
|
+ end
|
|
|
+
|
|
|
+ if response_expand?
|
|
|
+ render json: template.attributes_with_association_names, status: :ok
|
|
|
+ return
|
|
|
+ end
|
|
|
+
|
|
|
+ if response_full?
|
|
|
+ render json: template.class.full(template.id), status: :ok
|
|
|
+ return
|
|
|
+ end
|
|
|
+
|
|
|
+ model_update_render_item(template)
|
|
|
+ end
|
|
|
end
|