Class: Spina::Admin::Journal::ArticlesController

Inherits:
ApplicationController show all
Defined in:
app/controllers/spina/admin/journal/articles_controller.rb

Overview

Controller for Article records.

Constant Summary collapse

PARTS_PARAMS =
:name, :title, :type, :content, :filename, :signed_blob_id, :alt, :attachment_id, :image_id,
  { images_attributes: i[filename signed_blob_id image_id alt],
    content_attributes: [
      :name, :title,
      { parts_attributes: [
        :name, :title, :type, :content, :filename, :signed_blob_id, :alt, :attachment_id, :image_id,
        { images_attributes: i[filename signed_blob_id image_id alt] }
      ] }
    ] }
].freeze
CONTENT_PARAMS =
Spina.config.locales.inject({}) do |params, locale|
  params.merge("#{locale}_content_attributes": [*PARTS_PARAMS])
end
PARAMS =
[:issue_id, :title, :url, :doi, :status, { affiliation_ids: [], **CONTENT_PARAMS }].freeze
PARTS =
%w[abstract attachment].freeze

Instance Method Summary collapse

Instance Method Details

#createObject



43
44
45
46
47
48
49
50
51
52
53
# File 'app/controllers/spina/admin/journal/articles_controller.rb', line 43

def create
  @article = Article.new(article_params)
  sister_articles = Article.where(issue: @article.issue_id)
  @article.number = sister_articles.any? ? sister_articles.sorted_desc.first.number + 1 : 1

  if @article.save
    redirect_to admin_journal_articles_path, success: t('.saved')
  else
    render :new
  end
end

#destroyObject



63
64
65
66
67
68
69
70
# File 'app/controllers/spina/admin/journal/articles_controller.rb', line 63

def destroy
  @article.destroy
  respond_to do |format|
    format.html do
      redirect_to admin_journal_articles_path, success: t('.deleted')
    end
  end
end

#editObject



41
# File 'app/controllers/spina/admin/journal/articles_controller.rb', line 41

def edit; end

#indexObject



31
32
33
# File 'app/controllers/spina/admin/journal/articles_controller.rb', line 31

def index
  @articles = Article.sorted_desc
end

#newObject



35
36
37
38
39
# File 'app/controllers/spina/admin/journal/articles_controller.rb', line 35

def new
  @article = Article.new
  build_parts
  add_breadcrumb t('.new')
end

#sortObject



72
73
74
75
76
77
78
79
80
81
82
# File 'app/controllers/spina/admin/journal/articles_controller.rb', line 72

def sort
  ActiveRecord::Base.transaction do
    sort_params.each do |id, new_pos|
      Article.find(id.to_i).update_attribute(:number, new_pos.to_i) # rubocop:disable Rails/SkipsModelValidations
    end
    validate_sort_order
  end
  render json: { success: true, message: t('.sort_success') }
rescue ActiveRecord::RecordInvalid
  render json: { success: false, message: t('.sort_error') }
end

#updateObject



55
56
57
58
59
60
61
# File 'app/controllers/spina/admin/journal/articles_controller.rb', line 55

def update
  if @article.update(article_params)
    redirect_to admin_journal_articles_path, success: t('.saved')
  else
    render :edit
  end
end