mirror of
https://github.com/scinote-eln/scinote-web.git
synced 2024-11-11 01:44:34 +08:00
245 lines
6.5 KiB
Ruby
245 lines
6.5 KiB
Ruby
class ResultTextsController < ApplicationController
|
|
include ResultsHelper
|
|
include ActionView::Helpers::UrlHelper
|
|
include ApplicationHelper
|
|
include TinyMceHelper
|
|
include Rails.application.routes.url_helpers
|
|
|
|
before_action :load_vars, only: [:edit, :update, :download]
|
|
before_action :load_vars_nested, only: [:new, :create]
|
|
|
|
before_action :check_create_permissions, only: [:new, :create]
|
|
before_action :check_edit_permissions, only: [:edit, :update]
|
|
before_action :check_archive_permissions, only: [:update]
|
|
|
|
def new
|
|
@result = Result.new(
|
|
user: current_user,
|
|
my_module: @my_module
|
|
)
|
|
@result.build_result_text
|
|
|
|
respond_to do |format|
|
|
format.json {
|
|
render json: {
|
|
html: render_to_string({
|
|
partial: "new.html.erb"
|
|
})
|
|
}, status: :ok
|
|
}
|
|
end
|
|
end
|
|
|
|
def create
|
|
@result_text = ResultText.new(result_params[:result_text_attributes])
|
|
@result_text.text = parse_tiny_mce_asset_to_token(@result_text.text)
|
|
@result = Result.new(
|
|
user: current_user,
|
|
my_module: @my_module,
|
|
name: result_params[:name],
|
|
result_text: @result_text
|
|
)
|
|
@result.last_modified_by = current_user
|
|
|
|
respond_to do |format|
|
|
if (@result.save and @result_text.save) then
|
|
# link tiny_mce_assets to the result text
|
|
link_tiny_mce_assets(@result_text.text, @result_text)
|
|
|
|
result_annotation_notification
|
|
# Generate activity
|
|
Activity.create(
|
|
type_of: :add_result,
|
|
user: current_user,
|
|
project: @my_module.experiment.project,
|
|
my_module: @my_module,
|
|
message: t(
|
|
"activities.add_text_result",
|
|
user: current_user.full_name,
|
|
result: @result.name
|
|
)
|
|
)
|
|
|
|
format.html {
|
|
flash[:success] = t(
|
|
"result_texts.create.success_flash",
|
|
module: @my_module.name)
|
|
redirect_to results_my_module_path(@my_module)
|
|
}
|
|
format.json {
|
|
render json: {
|
|
html: render_to_string({
|
|
partial: "my_modules/result.html.erb",
|
|
locals: {
|
|
result: @result
|
|
}
|
|
})
|
|
}, status: :ok
|
|
}
|
|
else
|
|
format.json {
|
|
render json: @result.errors, status: :bad_request
|
|
}
|
|
end
|
|
end
|
|
end
|
|
|
|
def edit
|
|
@result_text.text = generate_image_tag_from_token(@result_text.text)
|
|
respond_to do |format|
|
|
format.json {
|
|
render json: {
|
|
html: render_to_string({
|
|
partial: "edit.html.erb"
|
|
})
|
|
}, status: :ok
|
|
}
|
|
end
|
|
end
|
|
|
|
def update
|
|
old_text = @result_text.text
|
|
update_params = result_params
|
|
@result.last_modified_by = current_user
|
|
@result.assign_attributes(update_params)
|
|
@result_text.text = parse_tiny_mce_asset_to_token(@result_text.text,
|
|
@result_text)
|
|
success_flash = t("result_texts.update.success_flash",
|
|
module: @my_module.name)
|
|
if @result.archived_changed?(from: false, to: true)
|
|
saved = @result.archive(current_user)
|
|
success_flash = t("result_texts.archive.success_flash",
|
|
module: @my_module.name)
|
|
if saved
|
|
Activity.create(
|
|
type_of: :archive_result,
|
|
project: @my_module.experiment.project,
|
|
my_module: @my_module,
|
|
user: current_user,
|
|
message: t(
|
|
'activities.archive_text_result',
|
|
user: current_user.full_name,
|
|
result: @result.name
|
|
)
|
|
)
|
|
end
|
|
elsif @result.archived_changed?(from: true, to: false)
|
|
render_403
|
|
else
|
|
saved = @result.save
|
|
|
|
if saved then
|
|
Activity.create(
|
|
type_of: :edit_result,
|
|
user: current_user,
|
|
project: @my_module.experiment.project,
|
|
my_module: @my_module,
|
|
message: t(
|
|
"activities.edit_text_result",
|
|
user: current_user.full_name,
|
|
result: @result.name
|
|
)
|
|
)
|
|
end
|
|
end
|
|
|
|
result_annotation_notification(old_text) if saved
|
|
|
|
respond_to do |format|
|
|
if saved
|
|
format.html {
|
|
flash[:success] = success_flash
|
|
redirect_to results_my_module_path(@my_module)
|
|
}
|
|
format.json {
|
|
render json: {
|
|
html: render_to_string({
|
|
partial: "my_modules/result.html.erb",
|
|
locals: {
|
|
result: @result
|
|
}
|
|
})
|
|
}, status: :ok
|
|
}
|
|
else
|
|
format.json {
|
|
render json: @result.errors, status: :bad_request
|
|
}
|
|
end
|
|
end
|
|
end
|
|
|
|
def download
|
|
send_data @result_text.text, filename: @result_text.result.name + '.txt',
|
|
type: 'plain/text'
|
|
end
|
|
|
|
private
|
|
|
|
def load_vars
|
|
@result_text = ResultText.find_by_id(params[:id])
|
|
|
|
if @result_text
|
|
@result = @result_text.result
|
|
@my_module = @result.my_module
|
|
else
|
|
render_404
|
|
end
|
|
end
|
|
|
|
def load_vars_nested
|
|
@my_module = MyModule.find_by_id(params[:my_module_id])
|
|
|
|
unless @my_module
|
|
render_404
|
|
end
|
|
end
|
|
|
|
def check_create_permissions
|
|
unless can_create_result_text_in_module(@my_module)
|
|
render_403
|
|
end
|
|
end
|
|
|
|
def check_edit_permissions
|
|
unless can_edit_result_text_in_module(@my_module)
|
|
render_403
|
|
end
|
|
end
|
|
|
|
def check_archive_permissions
|
|
if result_params[:archived].to_s != '' and
|
|
not can_archive_result(@result)
|
|
render_403
|
|
end
|
|
end
|
|
|
|
def result_params
|
|
params.require(:result).permit(
|
|
:name, :archived,
|
|
result_text_attributes: [
|
|
:id,
|
|
:text
|
|
]
|
|
)
|
|
end
|
|
|
|
def result_annotation_notification(old_text = nil)
|
|
smart_annotation_notification(
|
|
old_text: (old_text if old_text),
|
|
new_text: @result_text.text,
|
|
title: t('notifications.result_annotation_title',
|
|
result: @result.name,
|
|
user: current_user.full_name),
|
|
message: t('notifications.result_annotation_message_html',
|
|
project: link_to(@result.my_module.experiment.project.name,
|
|
project_url(@result.my_module
|
|
.experiment
|
|
.project)),
|
|
my_module: link_to(@result.my_module.name,
|
|
protocols_my_module_url(
|
|
@result.my_module
|
|
)))
|
|
)
|
|
end
|
|
end
|