Some checks failed
Lock Threads / action (push) Has been cancelled
Mark stale issues and pull requests / stale (push) Has been cancelled
Publish Chatwoot EE docker images / build (linux/amd64, ubuntu-latest) (push) Has been cancelled
Publish Chatwoot EE docker images / build (linux/arm64, ubuntu-22.04-arm) (push) Has been cancelled
Publish Chatwoot EE docker images / merge (push) Has been cancelled
Publish Chatwoot CE docker images / build (linux/amd64, ubuntu-latest) (push) Has been cancelled
Publish Chatwoot CE docker images / build (linux/arm64, ubuntu-22.04-arm) (push) Has been cancelled
Publish Chatwoot CE docker images / merge (push) Has been cancelled
Run Chatwoot CE spec / lint-backend (push) Has been cancelled
Run Chatwoot CE spec / lint-frontend (push) Has been cancelled
Run Chatwoot CE spec / frontend-tests (push) Has been cancelled
Run Chatwoot CE spec / backend-tests (0, 16) (push) Has been cancelled
Run Chatwoot CE spec / backend-tests (1, 16) (push) Has been cancelled
Run Chatwoot CE spec / backend-tests (10, 16) (push) Has been cancelled
Run Chatwoot CE spec / backend-tests (11, 16) (push) Has been cancelled
Run Chatwoot CE spec / backend-tests (12, 16) (push) Has been cancelled
Run Chatwoot CE spec / backend-tests (13, 16) (push) Has been cancelled
Run Chatwoot CE spec / backend-tests (14, 16) (push) Has been cancelled
Run Chatwoot CE spec / backend-tests (15, 16) (push) Has been cancelled
Run Chatwoot CE spec / backend-tests (2, 16) (push) Has been cancelled
Run Chatwoot CE spec / backend-tests (3, 16) (push) Has been cancelled
Run Chatwoot CE spec / backend-tests (4, 16) (push) Has been cancelled
Run Chatwoot CE spec / backend-tests (5, 16) (push) Has been cancelled
Run Chatwoot CE spec / backend-tests (6, 16) (push) Has been cancelled
Run Chatwoot CE spec / backend-tests (7, 16) (push) Has been cancelled
Run Chatwoot CE spec / backend-tests (8, 16) (push) Has been cancelled
Run Chatwoot CE spec / backend-tests (9, 16) (push) Has been cancelled
Run Linux nightly installer / nightly (push) Has been cancelled
- Add Logistics component with progress tracking - Add OrderDetail component for order information - Support data-driven steps and actions - Add blue color scale to widget SCSS - Fix node overflow and progress bar rendering issues - Add English translations for dashboard components Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
87 lines
2.5 KiB
Ruby
87 lines
2.5 KiB
Ruby
class Api::V1::Accounts::ArticlesController < Api::V1::Accounts::BaseController
|
|
before_action :portal
|
|
before_action :check_authorization
|
|
before_action :fetch_article, except: [:index, :create, :reorder]
|
|
before_action :set_current_page, only: [:index]
|
|
|
|
def index
|
|
@portal_articles = @portal.articles
|
|
|
|
set_article_count
|
|
|
|
@articles = @articles.search(list_params)
|
|
|
|
@articles = if list_params[:category_slug].present?
|
|
@articles.order_by_position.page(@current_page)
|
|
else
|
|
@articles.order_by_updated_at.page(@current_page)
|
|
end
|
|
end
|
|
|
|
def show; end
|
|
def edit; end
|
|
|
|
def create
|
|
params_with_defaults = article_params
|
|
params_with_defaults[:status] ||= :draft
|
|
@article = @portal.articles.create!(params_with_defaults)
|
|
@article.associate_root_article(article_params[:associated_article_id])
|
|
render json: { error: @article.errors.messages }, status: :unprocessable_entity and return unless @article.valid?
|
|
end
|
|
|
|
def update
|
|
@article.update!(article_params) if params[:article].present?
|
|
render json: { error: @article.errors.messages }, status: :unprocessable_entity and return unless @article.valid?
|
|
end
|
|
|
|
def destroy
|
|
@article.destroy!
|
|
head :ok
|
|
end
|
|
|
|
def reorder
|
|
Article.update_positions(params[:positions_hash])
|
|
head :ok
|
|
end
|
|
|
|
private
|
|
|
|
def set_article_count
|
|
# Search the params without status and author_id, use this to
|
|
# compute mine count published draft etc
|
|
base_search_params = list_params.except(:status, :author_id)
|
|
@articles = @portal_articles.search(base_search_params)
|
|
|
|
@articles_count = @articles.count
|
|
@mine_articles_count = @articles.search_by_author(Current.user.id).count
|
|
@published_articles_count = @articles.published.count
|
|
@draft_articles_count = @articles.draft.count
|
|
@archived_articles_count = @articles.archived.count
|
|
end
|
|
|
|
def fetch_article
|
|
@article = @portal.articles.find(params[:id])
|
|
end
|
|
|
|
def portal
|
|
@portal ||= Current.account.portals.find_by!(slug: params[:portal_id])
|
|
end
|
|
|
|
def article_params
|
|
params.require(:article).permit(
|
|
:title, :slug, :position, :content, :description, :category_id, :author_id, :associated_article_id, :status,
|
|
:locale, meta: [:title,
|
|
:description,
|
|
{ tags: [] }]
|
|
)
|
|
end
|
|
|
|
def list_params
|
|
params.permit(:locale, :query, :page, :category_slug, :status, :author_id)
|
|
end
|
|
|
|
def set_current_page
|
|
@current_page = params[:page] || 1
|
|
end
|
|
end
|