Class: Spina::Admin::Journal::IssuesController

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

Overview

Controller for Issue 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 =
[:volume_id, :title, :date, { **CONTENT_PARAMS }].freeze
PARTS =
%w[cover_img description attachment].freeze

Instance Method Summary collapse

Instance Method Details

#createObject



47
48
49
50
51
52
53
54
55
56
57
# File 'app/controllers/spina/admin/journal/issues_controller.rb', line 47

def create
  @issue = Issue.new(issue_params)
  sister_issues = Issue.where(volume: @issue.volume_id)
  @issue.number = sister_issues.any? ? sister_issues.sorted_desc.first.number + 1 : 1

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

#destroyObject



67
68
69
70
71
72
73
74
# File 'app/controllers/spina/admin/journal/issues_controller.rb', line 67

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

#editObject



41
42
43
44
45
# File 'app/controllers/spina/admin/journal/issues_controller.rb', line 41

def edit
  add_breadcrumb t('spina.admin.journal.volumes.volume_number', number: @issue.volume.number),
                 edit_admin_journal_volume_path(@issue.volume)
  add_breadcrumb t('spina.admin.journal.issues.issue_number', number: @issue.number)
end

#indexObject



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

def index
  @issues = Issue.sorted_desc
end

#newObject



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

def new
  @issue = Issue.new
  build_parts
  add_breadcrumb t('.new')
end

#sortObject



76
77
78
79
80
81
82
83
84
85
86
87
# File 'app/controllers/spina/admin/journal/issues_controller.rb', line 76

def sort
  ActiveRecord::Base.transaction do
    sort_params.each do |id, new_pos|
      # ignore uniqueness validation for now
      Issue.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



59
60
61
62
63
64
65
# File 'app/controllers/spina/admin/journal/issues_controller.rb', line 59

def update
  if @issue.update(issue_params)
    redirect_to admin_journal_issues_path, success: t('.saved')
  else
    render :edit
  end
end