mirror of
https://github.com/scinote-eln/scinote-web.git
synced 2024-11-15 13:45:25 +08:00
62 lines
1.8 KiB
Ruby
62 lines
1.8 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
class StepOrderableElementsController < ApplicationController
|
|
before_action :load_vars_nested
|
|
before_action :check_manage_permissions
|
|
|
|
def reorder
|
|
@step.with_lock do
|
|
position_changed = false
|
|
params[:step_orderable_element_positions].each do |id, position|
|
|
step_element = @step.step_orderable_elements.find(id)
|
|
if step_element.position != position
|
|
position_changed = true
|
|
step_element.update_column(:position, position)
|
|
end
|
|
end
|
|
|
|
if position_changed
|
|
if @protocol.in_module?
|
|
log_activity(:task_step_content_rearranged, @my_module.experiment.project, my_module: @my_module.id)
|
|
else
|
|
log_activity(:protocol_step_content_rearranged, nil, protocol: @protocol.id)
|
|
end
|
|
@step.touch
|
|
end
|
|
end
|
|
|
|
render json: params[:step_orderable_element_positions], status: :ok
|
|
end
|
|
|
|
private
|
|
|
|
def load_vars_nested
|
|
@step = Step.find_by(id: params[:step_id])
|
|
return render_404 unless @step
|
|
|
|
@protocol = @step.protocol
|
|
@my_module = @protocol.my_module
|
|
end
|
|
|
|
def check_view_permissions
|
|
render_403 unless can_read_protocol_in_module?(@protocol) || can_read_protocol_in_repository?(@protocol)
|
|
end
|
|
|
|
def check_manage_permissions
|
|
render_403 unless can_manage_step?(@step)
|
|
end
|
|
|
|
def log_activity(type_of, project = nil, message_items = {})
|
|
default_items = { step: @step.id,
|
|
step_position: { id: @step.id, value_for: 'position_plus_one' } }
|
|
message_items = default_items.merge(message_items)
|
|
|
|
Activities::CreateActivityService
|
|
.call(activity_type: type_of,
|
|
owner: current_user,
|
|
subject: @protocol,
|
|
team: @protocol.team,
|
|
project: project,
|
|
message_items: message_items)
|
|
end
|
|
end
|