mirror of
https://github.com/scinote-eln/scinote-web.git
synced 2024-09-20 23:16:15 +08:00
88 lines
2.7 KiB
Ruby
88 lines
2.7 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
class LabelTemplatesController < ApplicationController
|
|
include InputSanitizeHelper
|
|
|
|
before_action :check_view_permissions, only: %i(index datatable)
|
|
before_action :check_manage_permissions, only: %i(new duplicate set_default delete)
|
|
before_action :load_label_templates, only: %i(index datatable)
|
|
before_action :load_label_template, only: %i(edit set_default)
|
|
|
|
layout 'fluid'
|
|
|
|
def index; end
|
|
|
|
def datatable
|
|
respond_to do |format|
|
|
format.json do
|
|
render json: ::LabelTemplateDatatable.new(
|
|
view_context,
|
|
can_manage_label_templates?(current_team),
|
|
@label_templates
|
|
)
|
|
end
|
|
end
|
|
end
|
|
|
|
def new; end
|
|
|
|
def edit; end
|
|
|
|
def duplicate
|
|
ActiveRecord::Base.transaction do
|
|
LabelTemplate.where(team_id: current_team.id, id: params[:selected_ids]).each do |template|
|
|
new_template = template.dup
|
|
new_template.default = false
|
|
new_template.name = template.name + '(1)'
|
|
new_template.save!
|
|
end
|
|
render json: { message: I18n.t('label_templates.index.templates_duplicated',
|
|
count: params[:selected_ids].length) }
|
|
rescue ActiveRecord::RecordInvalid => e
|
|
Rails.logger.error e.message
|
|
render json: { error: I18n.t('errors.general') }, status: :unprocessable_entity
|
|
end
|
|
end
|
|
|
|
def delete
|
|
ActiveRecord::Base.transaction do
|
|
LabelTemplate.where(team_id: current_team.id, id: params[:selected_ids]).each(&:destroy!)
|
|
render json: { message: I18n.t('label_templates.index.templates_deleted') }
|
|
end
|
|
rescue ActiveRecord::RecordNotDestroyed => e
|
|
Rails.logger.error e.message
|
|
render json: { error: I18n.t('errors.general') }, status: :unprocessable_entity
|
|
end
|
|
|
|
def set_default
|
|
ActiveRecord::Base.transaction do
|
|
LabelTemplate.find_by(team_id: current_team.id,
|
|
language_type: @label_template.language_type,
|
|
default: true)&.update!(default: false)
|
|
@label_template.update!(default: true)
|
|
render json: { message: I18n.t('label_templates.index.template_set_as_default') }
|
|
end
|
|
rescue ActiveRecord::RecordInvalid => e
|
|
Rails.logger.error e.message
|
|
render json: { error: I18n.t('errors.general') }, status: :unprocessable_entity
|
|
end
|
|
|
|
private
|
|
|
|
def check_view_permissions
|
|
render_403 unless can_view_label_templates?(current_team)
|
|
end
|
|
|
|
def check_manage_permissions
|
|
render_403 unless can_manage_label_templates?(current_team)
|
|
end
|
|
|
|
def load_label_templates
|
|
@label_templates = LabelTemplate.where(team_id: current_team.id)
|
|
end
|
|
|
|
def load_label_template
|
|
@label_template = LabelTemplate.where(team_id: current_team.id).find(params[:id])
|
|
end
|
|
end
|