mirror of
				https://github.com/scinote-eln/scinote-web.git
				synced 2025-10-31 16:49:40 +08:00 
			
		
		
		
	
		
			
				
	
	
		
			149 lines
		
	
	
	
		
			3.9 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
			
		
		
	
	
			149 lines
		
	
	
	
		
			3.9 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
| class SampleGroupsController < ApplicationController
 | |
|   before_action :load_vars_nested
 | |
|   before_action :check_view_permissions, only: %i(index sample_group_element)
 | |
|   before_action :check_manage_permissions, only: %i(create edit update destroy
 | |
|                                                     destroy_confirmation)
 | |
|   before_action :set_sample_group, except: %i(create index)
 | |
|   before_action :set_project_my_module, only: :index
 | |
|   layout 'fluid'
 | |
| 
 | |
|   def create
 | |
|     @sample_group = SampleGroup.new(sample_group_params)
 | |
|     @sample_group.team = @team
 | |
|     @sample_group.created_by = current_user
 | |
|     @sample_group.last_modified_by = current_user
 | |
| 
 | |
|     respond_to do |format|
 | |
|       if @sample_group.save
 | |
|         format.json do
 | |
|           render json: {
 | |
|             html: render_to_string(
 | |
|               partial: 'sample_group.html.erb',
 | |
|                        locals: { sample_group: @sample_group,
 | |
|                                  team: @team }
 | |
|             )
 | |
|           },
 | |
|           status: :ok
 | |
|         end
 | |
|       else
 | |
|         format.json do
 | |
|           render json: @sample_group.errors,
 | |
|             status: :unprocessable_entity
 | |
|         end
 | |
|       end
 | |
|     end
 | |
|   end
 | |
| 
 | |
|   def index
 | |
|     render_404 unless current_team
 | |
|     @sample_groups = current_team.sample_groups
 | |
|   end
 | |
| 
 | |
|   def update
 | |
|     @sample_group.update_attributes(sample_group_params)
 | |
| 
 | |
|     respond_to do |format|
 | |
|       format.json do
 | |
|         if @sample_group.save
 | |
|           render json: {
 | |
|             html: render_to_string(
 | |
|               partial: 'sample_group.html.erb',
 | |
|                        locals: { sample_group: @sample_group,
 | |
|                                  team: @team }
 | |
|             )
 | |
|           }
 | |
|         else
 | |
|           render json: @sample_group.errors,
 | |
|                  status: :unprocessable_entity
 | |
|         end
 | |
|       end
 | |
|     end
 | |
|   end
 | |
| 
 | |
|   def edit
 | |
|     respond_to do |format|
 | |
|       format.json do
 | |
|         render json: {
 | |
|           html:
 | |
|             render_to_string(
 | |
|               partial: 'edit.html.erb',
 | |
|                        locals: { sample_group: @sample_group,
 | |
|                                  team: @team }
 | |
|             ),
 | |
|           id: @sample_group.id
 | |
|         }
 | |
|       end
 | |
|     end
 | |
|   end
 | |
| 
 | |
|   def sample_group_element
 | |
|     respond_to do |format|
 | |
|       format.json do
 | |
|         render json: {
 | |
|           html: render_to_string(
 | |
|             partial: 'sample_group.html.erb',
 | |
|                      locals: { sample_group: @sample_group,
 | |
|                                team: @team }
 | |
|           )
 | |
|         }
 | |
|       end
 | |
|     end
 | |
|   end
 | |
| 
 | |
|   def destroy_confirmation
 | |
|     respond_to do |format|
 | |
|       format.json do
 | |
|         render json: {
 | |
|           html: render_to_string(
 | |
|             partial: 'delete_sample_group_modal.html.erb',
 | |
|                      locals: { sample_group: @sample_group,
 | |
|                                team: @team }
 | |
|           )
 | |
|         }
 | |
|       end
 | |
|     end
 | |
|   end
 | |
| 
 | |
|   def destroy
 | |
|     flash[:success] = t 'sample_groups.index.destroy_flash',
 | |
|                         name: @sample_group.name
 | |
|     Sample.where(sample_group: @sample_group).find_each do |sample|
 | |
|       sample.update(sample_group_id: nil)
 | |
|     end
 | |
|     @sample_group.destroy
 | |
|     redirect_back(fallback_location: root_path)
 | |
|   end
 | |
| 
 | |
|   private
 | |
| 
 | |
|   def set_project_my_module
 | |
|     @project = Project.find_by_id(params[:project_id]) if params[:project_id]
 | |
|     @experiment = Experiment
 | |
|                   .find_by_id(params[:experiment_id]) if params[:experiment_id]
 | |
|     @my_module = MyModule
 | |
|                  .find_by_id(params[:my_module_id]) if params[:my_module_id]
 | |
|     render_403 unless @project || @my_module
 | |
|   end
 | |
| 
 | |
|   def set_sample_group
 | |
|     @sample_group = SampleGroup.find_by_id(params[:id])
 | |
|   end
 | |
| 
 | |
|   def load_vars_nested
 | |
|     @team = Team.find_by_id(params[:team_id])
 | |
| 
 | |
|     render_404 unless @team
 | |
|   end
 | |
| 
 | |
|   def check_view_permissions
 | |
|     render_403 unless can_read_team?(@team)
 | |
|   end
 | |
| 
 | |
|   def check_manage_permissions
 | |
|     render_403 unless can_manage_sample_types_and_groups?(@team)
 | |
|   end
 | |
| 
 | |
|   def sample_group_params
 | |
|     params.require(:sample_group).permit(:name, :color)
 | |
|   end
 | |
| end
 |