commit
099fffab51
@ -1,14 +1,101 @@
|
||||
# encoding: utf-8
|
||||
# Trustie - education management software
|
||||
# Copyright (C) 2013-2014
|
||||
class StoresController < ApplicationController
|
||||
layout 'base_stores'
|
||||
# menu_item :overview
|
||||
# menu_item :roadmap, :only => :roadmap
|
||||
# menu_item :settings, :only => :settings
|
||||
|
||||
# include ActsAsTaggableOn::TagsHelper
|
||||
def search
|
||||
name = params[:name] ||= ''
|
||||
redirect_to stores_path, :notice => l(:field_course_un) if name.blank?
|
||||
# 按文件名搜索
|
||||
result = Attachment.where("attachments.container_type IS NOT NULL AND filename LIKE '%" + name + "%' ").
|
||||
reorder("created_on DESC")
|
||||
# result = result.to_a
|
||||
result.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
|
||||
}
|
||||
@searched_attach = paginateHelper result
|
||||
end
|
||||
|
||||
LIMIT = 12 unless const_defined?(:LIMIT)
|
||||
def index
|
||||
@projects_attach = project_classification(0).take(LIMIT)
|
||||
@courses_attach = project_classification(1).take(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
|
||||
|
@ -0,0 +1,137 @@
|
||||
module StoresHelper
|
||||
def attachFromUrl attachment
|
||||
container = attachment.container
|
||||
case container.class.to_s
|
||||
when 'Message'
|
||||
board_message_path(container.board, container)
|
||||
when 'Issue'
|
||||
issue_path(container)
|
||||
when 'Document'
|
||||
document_path container
|
||||
when 'HomeworkAttach'
|
||||
bid_path(container.bid)
|
||||
when 'Memo'
|
||||
forum_memo_path(container.forum, container)
|
||||
when 'News'
|
||||
news_path(container)
|
||||
when 'Project'
|
||||
project_files_path(container)
|
||||
when 'Version'
|
||||
# version_path(container)
|
||||
project_files_path(container.project)
|
||||
when 'WikiPage'
|
||||
project_wiki_path(container.project)
|
||||
when 'Bid'
|
||||
bid_path(container)
|
||||
else
|
||||
Rails.logger.error "ERROR: StoresHelper#attachUrl unkown type ==> #{container}"
|
||||
'#'
|
||||
end
|
||||
end
|
||||
|
||||
def result_come_from attachment
|
||||
come_from_local(attachment).join(" > ").html_safe
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
WORD_LIMIT = 100
|
||||
def come_from_local attachment
|
||||
|
||||
container = attachment.container
|
||||
case container.class.to_s
|
||||
when 'Message'
|
||||
# '项目 > zzz > 论坛 > 帖子xxx'
|
||||
# topic_str = container.project.project_type == 0 ? l(:label_board) : l(:label_new_course)
|
||||
topic_list = link_to l(:label_board), project_boards_path(container.project)
|
||||
topic_item = link_to container.subject.truncate(WORD_LIMIT, omission: '...'), board_message_path(container.board, container), title: container.subject
|
||||
project_link(container.project).push(topic_list, topic_item)
|
||||
when 'Issue'
|
||||
# '项目 > zzz > 缺陷 > 问题xxx'
|
||||
issue_list = link_to l(:label_project_issues), project_issues_path(container.project)
|
||||
issue_item = link_to container.subject.truncate(WORD_LIMIT, omission: '...'), issue_path(container), title: container.subject
|
||||
project_link(container.project).push(issue_list, issue_item)
|
||||
when 'Document'
|
||||
# '项目 > zzz > 文档 > 文档xxx'
|
||||
doc_list = link_to l(:label_document), project_documents_path(container.project)
|
||||
doc_item = link_to container.title.truncate(WORD_LIMIT, omission: '...'), document_path(container), title: container.title
|
||||
project_link(container.project).push(doc_list, doc_item)
|
||||
when 'News'
|
||||
# '课程 > zzz > 新闻 > 新闻xxx'
|
||||
news_str = container.project.project_type == 0 ? l(:label_news) : l(:label_course_news)
|
||||
news_list = link_to news_str, project_news_index_path(container.project)
|
||||
news_item = link_to container.title.truncate(WORD_LIMIT, omission: '...'), news_path(container), title: container.title
|
||||
project_link(container.project).push(news_list, news_item)
|
||||
when 'Project'
|
||||
# '项目 > zzz '
|
||||
file_str = container.project.project_type == 0 ? l(:project_module_files) : l(:label_course_file)
|
||||
files_list = link_to file_str, project_files_path(container.project)
|
||||
project_link(container).push(files_list)
|
||||
when 'Version'
|
||||
# '项目 > zzz > 里程碑 > xxx'
|
||||
ver_list = link_to l(:label_roadmap), project_roadmap_path(container.project)
|
||||
files_list = link_to l(:label_course_file), project_files_path(container.project)
|
||||
ver_item = link_to container.name.truncate(WORD_LIMIT, omission: '...'), version_path(container), title: container.name
|
||||
project_link(container.project).push(ver_list, files_list, ver_item)
|
||||
when 'WikiPage'
|
||||
# '项目 > zzz > 维基 > xxx' 有点问题
|
||||
wiki_list = link_to l(:label_wiki), project_wiki_path(container.project)
|
||||
project_link(container.project).push(wiki_list)
|
||||
when 'HomeworkAttach'
|
||||
# '课程 > zzz > 作业 > 作业xxx'
|
||||
bid_link(container.bid)
|
||||
when 'Memo'
|
||||
# '贴吧 > 讨论区 > 帖子 xxx'
|
||||
return [link_to(attachment.id, '#')] if container.forum.nil?
|
||||
forums_list = link_to l(:label_forum), forums_path
|
||||
memo_list = link_to container.forum.name, forum_path(container.forum)
|
||||
memo_item = link_to container.subject, forum_memo_path(container.forum, container)
|
||||
[forums_list, memo_list, memo_item]
|
||||
when 'Bid'
|
||||
# '竞赛 > xxx '
|
||||
bid_link(container)
|
||||
else
|
||||
Rails.logger.error "ERROR: attachment type unkown"
|
||||
[link_to('unkown', '')]
|
||||
end
|
||||
end
|
||||
|
||||
def project_link project
|
||||
if project.nil?
|
||||
Rails.logger.error "ERROR: attachment type unkown #project_link project.nil?"
|
||||
return [link_to('unkown', '')]
|
||||
end
|
||||
project_list = nil
|
||||
if project.project_type == 0
|
||||
project_list = link_to l(:label_project_plural), projects_path
|
||||
else
|
||||
project_list = link_to l(:label_new_course), course_path
|
||||
end
|
||||
project_item = link_to project.to_s, project_path(project)
|
||||
[project_list, project_item]
|
||||
end
|
||||
|
||||
def bid_link bid
|
||||
bid_list = nil
|
||||
bid_item = nil
|
||||
case bid.reward_type
|
||||
when 1 # 众包
|
||||
bid_list = link_to l(:label_requirement_enterprise_list), calls_path
|
||||
bid_item = link_to bid.name, respond_path(bid)
|
||||
when 2 # 竞赛
|
||||
bid_list = link_to l(:label_contest_list), contest_path
|
||||
bid_item = link_to bid.name, respond_path(bid)
|
||||
when 3 # 作业
|
||||
if bid.courses.first.nil?
|
||||
Rails.logger.error "ERROR: attachment type unkown #bid_link/when 3"
|
||||
return [link_to('unkown', '#')]
|
||||
end
|
||||
bid_list = link_to l(:label_homework), project_homework_path(bid.courses.first)
|
||||
bid_item = link_to bid.name, respond_path(bid)
|
||||
return project_link(bid.courses.first).push(bid_list, bid_item)
|
||||
else
|
||||
xxx
|
||||
end
|
||||
[bid_list, bid_item]
|
||||
end
|
||||
end
|
@ -0,0 +1,80 @@
|
||||
<style type="text/css">
|
||||
|
||||
</style>
|
||||
<% content_for :top_field do%>
|
||||
<div style="margin: 10px 5%;">
|
||||
<%= form_tag( search_stores_path, method: 'post') do %>
|
||||
<%= text_field_tag 'name', nil, size:"100", placeholder:'请输入要搜索的关键字', :value => params[:name] , :class => 'blueinputbar', :required => true %>
|
||||
<%= submit_tag l(:label_search), :class => "enterprise"%>
|
||||
<% end %>
|
||||
</div>
|
||||
<% end %>
|
||||
|
||||
<% @searched_attach.each do |result| %>
|
||||
|
||||
<table border=0 cellSpacing=0 cellPadding=0>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td class="r1">
|
||||
<div class="cb">
|
||||
<span style=""><%= result.filename %></span>
|
||||
<span style="margin-left: 4px;">
|
||||
<%= link_to_attachment result, {:text => image_tag("/images/button/dl.png", width: "70px", alt: l(:button_download), :class => 'download_icon')}%>
|
||||
</span>
|
||||
</div>
|
||||
<%= result.description %>
|
||||
<div class="c9 gray-color"> 所属分类:<%=result_come_from result%> </div>
|
||||
<span class="gray blue-color">
|
||||
下载:<%= result.downloads%>|
|
||||
大小:<%= number_to_human_size(result.filesize) %>|
|
||||
共享者:<a class="gray" ><%= link_to result.author, user_path(result.author), target: "_blank"%></a>|
|
||||
上传时间:<%= format_time(result.created_on) %>
|
||||
</span>
|
||||
<div style="display: none"></div>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<% end %>
|
||||
<div class="pagination"><%= pagination_links_full @obj_pages, @obj_count, :per_page_links => false %></div>
|
||||
<script type='text/javascript'>
|
||||
jQuery.fn.highlight = function(pat) {
|
||||
function innerHighlight(node, pat) {
|
||||
var skip = 0;
|
||||
if (node.nodeType == 3) {
|
||||
var pos = node.data.toUpperCase().indexOf(pat);
|
||||
if (pos >= 0) {
|
||||
var spannode = document.createElement('span');
|
||||
spannode.className = 'highlight';
|
||||
var middlebit = node.splitText(pos);
|
||||
var endbit = middlebit.splitText(pat.length);
|
||||
var middleclone = middlebit.cloneNode(true);
|
||||
spannode.appendChild(middleclone);
|
||||
middlebit.parentNode.replaceChild(spannode, middlebit);
|
||||
skip = 1;
|
||||
}
|
||||
}
|
||||
else if (node.nodeType == 1 && node.childNodes && !/(script|style)/i.test(node.tagName)) {
|
||||
for (var i = 0; i < node.childNodes.length; ++i) {
|
||||
i += innerHighlight(node.childNodes[i], pat);
|
||||
}
|
||||
}
|
||||
return skip;
|
||||
}
|
||||
return this.each(function() {
|
||||
innerHighlight(this, pat.toUpperCase());
|
||||
});
|
||||
};
|
||||
$(document).ready(function($) {
|
||||
$('.cb span').highlight('<%=params[:name]%>');
|
||||
|
||||
$('.a_download_icon').each(function(){
|
||||
$(this).mouseenter(function(event) {
|
||||
$(this).attr("src", "/images/button/download_focus.png")
|
||||
});
|
||||
$(this).mouseleave(function(event) {
|
||||
$(this).attr("src", "/images/button/download.png")
|
||||
});
|
||||
});
|
||||
});
|
||||
</script>
|
After Width: | Height: | Size: 4.4 KiB |
After Width: | Height: | Size: 41 KiB |
After Width: | Height: | Size: 41 KiB |
Loading…
Reference in new issue