Fixes https://linear.app/chatwoot/issue/CW-6950/support-bulk-actions-for-publish-archive-move-to-draft-delete-in How to test 1. Go to Help Center → Articles 2. Select articles using checkboxes → bulk bar appears 3. Click Publish/Draft/Archive → articles update, list refreshes 4. Click Delete → confirmation dialog → articles removed 5. Click Translate (requires Captain enabled) → select locale + category → translation starts 6. Try translating to a locale that already has translations → warning with links to existing articles → "Overwrite and translate" proceeds 8. Single article: click three-dot menu → Translate → same dialog opens for that article https://github.com/user-attachments/assets/7c76495e-f89e-4456-92bd-a6639a9992f4 --------- Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
44 lines
1.3 KiB
Ruby
44 lines
1.3 KiB
Ruby
class Api::V1::Accounts::Articles::BulkActionsController < Api::V1::Accounts::BaseController
|
|
before_action :portal
|
|
before_action :check_authorization
|
|
before_action :set_articles, only: [:update_status, :delete_articles]
|
|
|
|
def translate
|
|
head :not_implemented
|
|
end
|
|
|
|
def update_status
|
|
return render_could_not_create_error(I18n.t('portals.articles.no_articles_found')) if @articles.none?
|
|
return render_could_not_create_error(I18n.t('portals.articles.invalid_status')) unless Article.statuses.key?(params[:status])
|
|
|
|
ActiveRecord::Base.transaction do
|
|
@articles.find_each { |article| article.update!(status: params[:status]) }
|
|
end
|
|
head :ok
|
|
rescue ActiveRecord::RecordInvalid => e
|
|
render_could_not_create_error(e.message)
|
|
end
|
|
|
|
def delete_articles
|
|
return render_could_not_create_error(I18n.t('portals.articles.no_articles_found')) if @articles.none?
|
|
|
|
@articles.destroy_all
|
|
head :ok
|
|
end
|
|
|
|
private
|
|
|
|
def portal
|
|
@portal ||= Current.account.portals.find_by!(slug: params[:portal_id])
|
|
end
|
|
|
|
def check_authorization
|
|
authorize(Article, :create?)
|
|
end
|
|
|
|
def set_articles
|
|
@articles = @portal.articles.where(id: params[:ids])
|
|
end
|
|
end
|
|
Api::V1::Accounts::Articles::BulkActionsController.prepend_mod_with('Api::V1::Accounts::Articles::BulkActionsController')
|