trabajo-afectivo/app/controllers/knowledge_base/categories_controller.rb

49 lines
1.5 KiB
Ruby
Raw Permalink Normal View History

# Copyright (C) 2012-2021 Zammad Foundation, http://zammad-foundation.org/
2019-06-04 03:40:48 +00:00
class KnowledgeBase::CategoriesController < KnowledgeBase::BaseController
before_action :load_knowledge_base, only: %i[reorder_root_categories reorder_categories reorder_answers]
def reorder_root_categories
reorder_records @knowledge_base.categories.root, params[:ordered_ids], KnowledgeBase::Category
2019-06-04 03:40:48 +00:00
end
def reorder_categories
reorder_records @category.children, params[:ordered_ids], KnowledgeBase::Category
2019-06-04 03:40:48 +00:00
end
def reorder_answers
reorder_records @category.answers, params[:ordered_ids], KnowledgeBase::Answer
2019-06-04 03:40:48 +00:00
end
private
def reorder_records(collection, ids, klass)
2019-06-04 03:40:48 +00:00
# Check if ids for models in collection are present
all_ids_present = collection.map(&:id).sort == ids.sort
raise Exceptions::UnprocessableEntity, 'Provide position of all items in scope' if !all_ids_present
klass.notify_kb_clients_suspend = true
klass.acts_as_list_no_update do
ids.each_with_index do |id, index|
collection
.find { |item| item.id == id }
.update!(position: index)
end
end
klass.notify_kb_clients_suspend = false
# it's enough to notify about one updated item
collection.first.touch # rubocop:disable Rails/SkipsModelValidations
assets = ApplicationModel::CanAssets.reduce(collection, {})
render json: assets
end
def load_knowledge_base
@knowledge_base = KnowledgeBase.find params[:knowledge_base_id]
@category = @knowledge_base.categories.find params[:id] if params.key? :id
end
end