105 lines
		
	
	
		
			3.8 KiB
		
	
	
	
		
			Ruby
		
	
	
	
			
		
		
	
	
			105 lines
		
	
	
		
			3.8 KiB
		
	
	
	
		
			Ruby
		
	
	
	
class Ci::TemplatesController < Ci::BaseController
 | 
						|
 | 
						|
  before_action :require_login, only: %i[list create]
 | 
						|
  skip_before_action :connect_to_ci_db
 | 
						|
 | 
						|
  #======模板管理======#
 | 
						|
  def list
 | 
						|
    stage_type = params[:stage_type]
 | 
						|
    template_name = params[:name]
 | 
						|
    templates = template_name.blank? ? Ci::Template.all : Ci::Template.where("template_name like ?", "%#{template_name}%")
 | 
						|
    templates = templates.select{ |template| template.login == current_user.login} unless current_user.admin?
 | 
						|
    if !stage_type.blank?  && stage_type != 'all'
 | 
						|
      templates = templates.select{ |template| template.stage_type == stage_type}
 | 
						|
    end
 | 
						|
    @total_count = templates.map(&:id).count
 | 
						|
    @templates = paginate templates
 | 
						|
  end
 | 
						|
 | 
						|
  def show
 | 
						|
    @template = Ci::Template.find(params[:id])
 | 
						|
  end
 | 
						|
 | 
						|
  def create
 | 
						|
    stage_type = params[:stage_type]
 | 
						|
    category = params[:category]
 | 
						|
    if category.blank?
 | 
						|
      category = Ci::Template::STAGE_TYPES[:"#{stage_type}"]
 | 
						|
    end
 | 
						|
 | 
						|
    if params[:id]
 | 
						|
      template = Ci::Template.find(params[:id])
 | 
						|
      if template
 | 
						|
        template.update!(template_name: params[:template_name],
 | 
						|
                         stage_type: stage_type,
 | 
						|
                         category: category,
 | 
						|
                         parent_category: Ci::Template::STAGE_TYPES[:"#{stage_type}"],
 | 
						|
                         content: params[:content],
 | 
						|
                         login: current_user.admin? ? 'admin' : current_user.login
 | 
						|
        )
 | 
						|
      end
 | 
						|
    else
 | 
						|
      template = Ci::Template.new(template_name: params[:template_name],
 | 
						|
                                  stage_type: stage_type,
 | 
						|
                                  category: category,
 | 
						|
                                  parent_category: Ci::Template::STAGE_TYPES[:"#{stage_type}"],
 | 
						|
                                  content: params[:content],
 | 
						|
                                  login: current_user.admin? ? 'admin' : current_user.login
 | 
						|
      )
 | 
						|
      template.save!
 | 
						|
    end
 | 
						|
    render_ok
 | 
						|
  rescue Exception => ex
 | 
						|
    tip_exception(ex.message)
 | 
						|
  end
 | 
						|
 | 
						|
  def update
 | 
						|
    template = Ci::Template.find(params[:id])
 | 
						|
    template.update!(template_name: params[:template_name],
 | 
						|
                     stage_type: params[:stage_type],
 | 
						|
                     category: params[:category],
 | 
						|
                     parent_category: params[:parent_category],
 | 
						|
                     content: params[:content]
 | 
						|
    )
 | 
						|
    render_ok
 | 
						|
  rescue Exception => ex
 | 
						|
    tip_exception(ex.message)
 | 
						|
  end
 | 
						|
 | 
						|
  def destroy
 | 
						|
    template = Ci::Template.find(params[:id])
 | 
						|
    if template
 | 
						|
      template.destroy!
 | 
						|
    end
 | 
						|
    render_ok
 | 
						|
  rescue Exception => ex
 | 
						|
    tip_exception(ex.message)
 | 
						|
  end
 | 
						|
 | 
						|
  #======流水线模板查询=====#
 | 
						|
  def templates_by_stage
 | 
						|
    stage_type = params[:stage_type]
 | 
						|
    if stage_type != Ci::PipelineStage::CUSTOMIZE_STAGE_TYPE
 | 
						|
      @templates = Ci::Template.where("stage_type = ?", stage_type)
 | 
						|
      @templates = @templates.select{ |template| template.login == current_user.login || template.login == 'admin'} unless current_user.admin?
 | 
						|
      if stage_type == Ci::PipelineStage::INIT_STAGE_TYPE && !@templates.nil?
 | 
						|
        @templates.each do |template|
 | 
						|
          content = template.content
 | 
						|
          unless content.blank?
 | 
						|
            pipeline = Ci::Pipeline.find(params[:id])
 | 
						|
            template.content = content.gsub(/{name}/, pipeline.pipeline_name) unless pipeline.nil?
 | 
						|
          end
 | 
						|
        end
 | 
						|
      end
 | 
						|
      # 根据模板类别分组
 | 
						|
      @category_templates = @templates.group_by{ |template| template.category }
 | 
						|
    else
 | 
						|
      # 自定义阶段,按阶段分类分类返回模板列表
 | 
						|
      @templates = Ci::Template.where("stage_type != ?", Ci::PipelineStage::INIT_STAGE_TYPE)
 | 
						|
      @templates = @templates.select{ |template| template.login == current_user.login || template.login == 'admin'} unless current_user.admin?
 | 
						|
      @category_templates = @templates.group_by{ |template| template.parent_category }
 | 
						|
    end
 | 
						|
  end
 | 
						|
 | 
						|
end
 |