parent
f1f0658e53
commit
28cebdbcf6
@ -0,0 +1,15 @@
|
|||||||
|
class Weapps::ShixunListsController < ApplicationController
|
||||||
|
before_action :require_login
|
||||||
|
|
||||||
|
def index
|
||||||
|
results = Weapps::ShixunSearchService.call(search_params, current_laboratory)
|
||||||
|
@total_count = results.size
|
||||||
|
@results = paginate results
|
||||||
|
end
|
||||||
|
|
||||||
|
private
|
||||||
|
|
||||||
|
def search_params
|
||||||
|
params.permit(:keyword, :type, :page, :limit, :order, :status, :diff, :sort, :no_jupyter)
|
||||||
|
end
|
||||||
|
end
|
@ -0,0 +1,48 @@
|
|||||||
|
class Weapps::ShixunSearchService < ApplicationService
|
||||||
|
|
||||||
|
attr_reader :params, :laboratory
|
||||||
|
|
||||||
|
def initialize(params, laboratory)
|
||||||
|
@params = params
|
||||||
|
@laboratory = laboratory
|
||||||
|
end
|
||||||
|
|
||||||
|
def call
|
||||||
|
shixuns = laboratory.shixuns.published.no_jupyter
|
||||||
|
|
||||||
|
# 超级管理员用户显示所有未隐藏的实训、非管理员显示所有已发布的实训(对本单位公开且未隐藏未关闭)
|
||||||
|
if User.current.admin? || User.current.business? || !User.current.school_id
|
||||||
|
shixuns = shixuns.where(hidden: 0)
|
||||||
|
else
|
||||||
|
shixun_ids = ShixunSchool.where(school_id: User.current.school_id).pluck(:shixun_id)
|
||||||
|
shixun_ids = shixun_ids.reject(&:blank?).length == 0 ? -1 : shixun_ids.join(",")
|
||||||
|
|
||||||
|
shixuns = shixuns.where("use_scope = 0 or id in (#{shixun_ids})").unhidden.publiced.or(shixuns.where(id: User.current.shixuns))
|
||||||
|
end
|
||||||
|
|
||||||
|
## 筛选 难度
|
||||||
|
if params[:diff].present? && params[:diff].to_i != 0
|
||||||
|
shixuns = shixuns.where(trainee: params[:diff])
|
||||||
|
end
|
||||||
|
|
||||||
|
unless params[:keyword].blank?
|
||||||
|
keyword = params[:keyword].strip
|
||||||
|
shixuns = shixuns.joins(:user).
|
||||||
|
where("concat(lastname, firstname) like :keyword or shixuns.name like :keyword",
|
||||||
|
keyword: "%#{keyword}%", name: "%#{keyword.split(" ").join("%")}%").distinct.
|
||||||
|
order("#{sort_str} #{order_str}")
|
||||||
|
end
|
||||||
|
|
||||||
|
shixuns
|
||||||
|
end
|
||||||
|
|
||||||
|
private
|
||||||
|
|
||||||
|
def order_str
|
||||||
|
params[:order] || "desc"
|
||||||
|
end
|
||||||
|
|
||||||
|
def sort_str
|
||||||
|
params[:sort] || "myshixuns_count"
|
||||||
|
end
|
||||||
|
end
|
@ -0,0 +1,10 @@
|
|||||||
|
json.shixun_list @results do |obj|
|
||||||
|
json.(obj, :id, :identifier)
|
||||||
|
json.title obj.name
|
||||||
|
json.level level_to_s(obj.trainee)
|
||||||
|
json.study_count obj.myshixuns_count
|
||||||
|
json.author_name obj.user.real_name
|
||||||
|
json.author_school_name obj.user.school_name
|
||||||
|
json.author_img url_to_avatar(obj.user)
|
||||||
|
end
|
||||||
|
json.shixuns_count @total_count
|
Loading…
Reference in new issue