socialforge/app/controllers/stores_controller.rb

121 lines
5.3 KiB
Ruby
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# encoding: utf-8
# Trustie - education management software
# Copyright (C) 2013-2014
class StoresController < ApplicationController
layout 'base_stores'
def search
begin
q = "%#{params[:name].strip}%"
(redirect_to stores_path, :notice => l(:label_sumbit_empty);return) if params[:name].blank?
result = find_public_attache q
@searched_attach = paginateHelper result
@result_all_count = result.count;
rescue Exception => e
#render 'stores'
redirect_to stores_path
end
end
def find_public_attache keywords
# StoresController#search 将每条文件都查出来,再次进行判断过滤。---> resultSet.to_a.map
# 此时内容不多速度还可但文件增长每条判断多则进行3-4次表连接。
# 现在还木有思路 药丸
resultSet = Attachment.where("attachments.container_type IS NOT NULL AND filename LIKE :like ", like: "%#{keywords}%").
reorder("created_on DESC")
# result = resultSet.to_a.dup
# resultSet.to_a.map { |res|
# if(res.container.nil? ||
# (res.container.class.to_s=="Project" && res.container.is_public == false) ||
# (res.container.has_attribute?(:project) && res.container.project.is_public == false) ||
# (res.container.class.to_s=="HomeworkAttach" && res.container.bid.reward_type == 3) ||
# false
# )
# result.delete(res)
# end
# }
# result
end
LIMIT = 12 unless const_defined?(:LIMIT)
def index
@projects_attach = project_classification(0).take(LIMIT)
@courses_attach = Attachment.includes(:course).where("courses.is_public = 1").
where(container_type: 'Course').
limit(LIMIT)
# @projects_attach = Attachment.includes(:project).where("projects.project_type=? AND projects.is_public = ?", 0, 1).
# reorder("#{Attachment.table_name}.downloads DESC").
# limit(LIMIT)
# @courses_attach = Attachment.includes(:project).where("projects.project_type=? AND projects.is_public = ?", 1, 1).
# reorder("#{Attachment.table_name}.downloads DESC").
# limit(LIMIT)
# 悲剧 下面竞赛里没文件
# @homeworks_attach = Attachment.
# joins("LEFT JOIN homework_attaches ON homework_attaches.id=attachments.container_id
# LEFT JOIN bids ON homework_attaches.bid_id=bids.id").
# where("container_type = 'HomeworkAttach' AND bids.reward_type <> 3").
# reorder("downloads DESC").
# limit(LIMIT)
@homeworks_attach = join_tools_project Message, 0
@memos_attach = Attachment.where("container_type = 'Memo'").
reorder("downloads DESC").
limit(LIMIT)
@attach_array = Array.new
@attach_array.push(@projects_attach, @courses_attach, @homeworks_attach, @memos_attach)
@str_arr = [ l(:label_project_deposit),
l(:label_course_practice),
l(:label_borad_project), #l(:label_contest_innovate),
l(:label_forum) ]
end
private
def project_classification project_type=0
# pro_attach = Attachment.joins("LEFT JOIN projects ON attachments.container_id = projects.id").
# where("attachments.container_type='Project' AND projects.is_public=1 AND projects.project_type=#{project_type}").
# reorder("downloads DESC").
# limit(LIMIT)
pro_attach = join_tools_project Project, project_type
doc_attach = join_tools_project Document, project_type
issue_attach = join_tools_project Issue, project_type
mess_attach = []#join_tools_project Message, project_type
news_attach = join_tools_project News, project_type
vers_attach = join_tools_project Version, project_type
wiki_attach = join_tools_project WikiPage, project_type
tmp = pro_attach
tmp = pro_attach+doc_attach+issue_attach+mess_attach+news_attach+vers_attach+wiki_attach
tmp.sort { |a, b| b.downloads <=> a.downloads }
end
def join_tools_project tableName, project_type=0
Attachment.joins(str_join_table(tableName)).
where("attachments.container_type='#{tableName.to_s}' AND projects.is_public=1 AND projects.project_type=#{project_type}").
reorder('downloads DESC').
limit(LIMIT)
end
def str_join_table tableClass
case tableClass.to_s
when 'Project'
"LEFT JOIN projects ON attachments.container_id = projects.id"
when 'Document', 'Issue', 'Version', 'News' # 连接子表即有 project_id 字段,即两层连接
"LEFT JOIN #{tableClass.table_name} ON attachments.container_id = #{tableClass.table_name}.id
LEFT JOIN projects ON #{tableClass.table_name}.project_id = projects.id"
when 'Message' # 三层连接
"LEFT JOIN #{tableClass.table_name} ON attachments.container_id = #{tableClass.table_name}.id
LEFT JOIN boards ON boards.id = #{tableClass.table_name}.board_id
LEFT JOIN projects ON boards.project_id = projects.id"
when 'WikiPage'# 三层连接
"LEFT JOIN #{tableClass.table_name} ON attachments.container_id = #{tableClass.table_name}.id
LEFT JOIN wikis ON wikis.id = #{tableClass.table_name}.wiki_id
LEFT JOIN projects ON wikis.project_id = projects.id"
else
end
end
end