2016-07-27 22:18:26 +08:00
|
|
|
class ExperimentsController < ApplicationController
|
|
|
|
include PermissionHelper
|
2016-08-08 21:04:02 +08:00
|
|
|
before_action :set_experiment,
|
|
|
|
except: [:new, :create]
|
|
|
|
before_action :set_project,
|
|
|
|
only: [:new, :create, :samples_index,
|
|
|
|
:samples, :module_archive]
|
|
|
|
before_action :check_view_permissions,
|
|
|
|
only: [:canvas, :module_archive]
|
|
|
|
before_action :check_module_archive_permissions,
|
|
|
|
only: [:module_archive]
|
2016-07-27 22:18:26 +08:00
|
|
|
|
2016-07-28 17:00:56 +08:00
|
|
|
# except parameter could be used but it is not working.
|
|
|
|
layout :choose_layout
|
2016-07-28 17:30:34 +08:00
|
|
|
|
2016-07-27 22:18:26 +08:00
|
|
|
def new
|
|
|
|
@experiment = Experiment.new
|
2016-07-28 20:44:44 +08:00
|
|
|
respond_to do |format|
|
2016-07-29 16:41:08 +08:00
|
|
|
format.json do
|
|
|
|
render json: {
|
|
|
|
html: render_to_string(
|
|
|
|
partial: 'new_modal.html.erb'
|
|
|
|
)
|
2016-07-28 20:44:44 +08:00
|
|
|
}
|
2016-07-29 16:41:08 +08:00
|
|
|
end
|
2016-07-28 20:44:44 +08:00
|
|
|
end
|
2016-07-27 22:18:26 +08:00
|
|
|
end
|
|
|
|
|
|
|
|
def create
|
|
|
|
@experiment = Experiment.new(experiment_params)
|
|
|
|
@experiment.created_by = current_user
|
2016-07-28 20:44:44 +08:00
|
|
|
@experiment.last_modified_by = current_user
|
|
|
|
@experiment.project = @project
|
2016-07-27 22:18:26 +08:00
|
|
|
if @experiment.save
|
2016-08-03 15:34:10 +08:00
|
|
|
flash[:success] = t('experiments.create.success_flash',
|
|
|
|
experiment: @experiment.name)
|
|
|
|
redirect_to project_path(@project)
|
2016-07-27 22:18:26 +08:00
|
|
|
else
|
2016-07-28 22:01:53 +08:00
|
|
|
flash[:alert] = t('experiments.create.error_flash')
|
|
|
|
redirect_to :back
|
2016-07-27 22:18:26 +08:00
|
|
|
end
|
|
|
|
end
|
|
|
|
|
2016-07-28 15:01:44 +08:00
|
|
|
def canvas
|
|
|
|
@project = @experiment.project
|
2016-07-27 22:18:26 +08:00
|
|
|
end
|
|
|
|
|
2016-08-03 15:34:10 +08:00
|
|
|
def edit
|
|
|
|
respond_to do |format|
|
|
|
|
format.json do
|
|
|
|
render json: {
|
|
|
|
html: render_to_string(
|
|
|
|
partial: 'edit_modal.html.erb'
|
|
|
|
)
|
|
|
|
}
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
2016-07-27 22:18:26 +08:00
|
|
|
def update
|
|
|
|
@experiment.update_attributes(experiment_params)
|
|
|
|
@experiment.last_modified_by = current_user
|
|
|
|
if @experiment.save
|
2016-08-03 15:34:10 +08:00
|
|
|
flash[:success] = t('experiments.update.success_flash',
|
|
|
|
experiment: @experiment.name)
|
|
|
|
redirect_to canvas_experiment_path(@experiment)
|
2016-07-27 22:18:26 +08:00
|
|
|
else
|
2016-07-28 22:01:53 +08:00
|
|
|
flash[:alert] = t('experiments.update.error_flash')
|
|
|
|
redirect_to :back
|
2016-07-27 22:18:26 +08:00
|
|
|
end
|
|
|
|
end
|
|
|
|
|
2016-08-03 15:34:10 +08:00
|
|
|
def archive
|
2016-07-27 22:18:26 +08:00
|
|
|
@experiment.archived = true
|
|
|
|
@experiment.archived_by = current_user
|
|
|
|
@experiment.archived_on = DateTime.now
|
|
|
|
if @experiment.save
|
2016-08-03 15:34:10 +08:00
|
|
|
flash[:success] = t('experiments.archive.success_flash',
|
|
|
|
experiment: @experiment.name)
|
2016-08-05 21:23:01 +08:00
|
|
|
|
2016-08-03 15:34:10 +08:00
|
|
|
redirect_to project_path(@experiment.project)
|
2016-07-27 22:18:26 +08:00
|
|
|
else
|
2016-07-28 22:01:53 +08:00
|
|
|
flash[:alert] = t('experiments.archive.error_flash')
|
|
|
|
redirect_to :back
|
2016-07-27 22:18:26 +08:00
|
|
|
end
|
|
|
|
end
|
|
|
|
|
2016-08-08 21:04:02 +08:00
|
|
|
def module_archive
|
|
|
|
end
|
|
|
|
|
2016-08-02 14:44:07 +08:00
|
|
|
def samples
|
2016-08-02 15:13:30 +08:00
|
|
|
@samples_index_link = samples_index_experiment_path(@experiment,
|
|
|
|
format: :json)
|
2016-08-02 14:44:07 +08:00
|
|
|
@organization = @experiment.project.organization
|
|
|
|
end
|
|
|
|
|
|
|
|
def samples_index
|
|
|
|
@organization = @experiment.project.organization
|
|
|
|
|
|
|
|
respond_to do |format|
|
|
|
|
format.html
|
2016-08-02 15:13:30 +08:00
|
|
|
format.json do
|
|
|
|
render json: ::SampleDatatable.new(view_context,
|
|
|
|
@organization,
|
2016-08-03 18:57:51 +08:00
|
|
|
nil,
|
|
|
|
nil,
|
|
|
|
@experiment)
|
2016-08-02 15:13:30 +08:00
|
|
|
end
|
2016-08-02 14:44:07 +08:00
|
|
|
end
|
|
|
|
end
|
|
|
|
|
2016-07-27 22:18:26 +08:00
|
|
|
private
|
|
|
|
|
|
|
|
def set_experiment
|
|
|
|
@experiment = Experiment.find_by_id(params[:id])
|
2016-07-28 16:15:58 +08:00
|
|
|
render_404 unless @experiment
|
2016-07-27 22:18:26 +08:00
|
|
|
end
|
|
|
|
|
|
|
|
def set_project
|
2016-08-02 14:44:07 +08:00
|
|
|
@project = Project.find_by_id(params[:project_id]) || @experiment.project
|
2016-07-28 16:15:58 +08:00
|
|
|
render_404 unless @project
|
2016-07-27 22:18:26 +08:00
|
|
|
end
|
|
|
|
|
|
|
|
def experiment_params
|
2016-08-08 22:35:45 +08:00
|
|
|
params.require(:experiment).permit(:name, :description, :archived)
|
2016-07-27 22:18:26 +08:00
|
|
|
end
|
2016-07-28 17:00:56 +08:00
|
|
|
|
2016-07-28 16:15:58 +08:00
|
|
|
def check_view_permissions
|
|
|
|
render_403 unless can_view_experiment(@experiment)
|
|
|
|
end
|
|
|
|
|
2016-08-08 21:04:02 +08:00
|
|
|
def check_module_archive_permissions
|
|
|
|
render_403 unless can_view_experiment_archive(@experiment)
|
|
|
|
end
|
|
|
|
|
2016-07-28 17:00:56 +08:00
|
|
|
def choose_layout
|
2016-08-03 15:34:10 +08:00
|
|
|
action_name.in?(%w(index archive)) ? 'main' : 'fluid'
|
2016-07-28 17:00:56 +08:00
|
|
|
end
|
2016-07-27 22:18:26 +08:00
|
|
|
end
|