Merge branch 'szzh' of http://repository.trustie.net/xianbo/trustie2 into szzh
This commit is contained in:
commit
768e06ea8a
2
Gemfile
2
Gemfile
|
@ -20,7 +20,7 @@ gem "builder", "3.0.0"
|
||||||
gem 'acts-as-taggable-on', '2.4.1'
|
gem 'acts-as-taggable-on', '2.4.1'
|
||||||
gem 'spreadsheet'
|
gem 'spreadsheet'
|
||||||
gem 'ruby-ole'
|
gem 'ruby-ole'
|
||||||
#gem 'email_verifier'
|
#gem 'email_verifier', path: 'lib/email_verifier'
|
||||||
|
|
||||||
group :development do
|
group :development do
|
||||||
gem 'grape-swagger'
|
gem 'grape-swagger'
|
||||||
|
|
|
@ -35,6 +35,11 @@ module Mobile
|
||||||
#作业状态 0:新建,1:已开启匿评,2:已关闭匿评
|
#作业状态 0:新建,1:已开启匿评,2:已关闭匿评
|
||||||
#只有作业启用了匿评功能且当前用户是课程老师且已提交的作品数量大于或等于2才能开启匿评
|
#只有作业启用了匿评功能且当前用户是课程老师且已提交的作品数量大于或等于2才能开启匿评
|
||||||
homework_expose :homework_state
|
homework_expose :homework_state
|
||||||
|
|
||||||
|
expose :homework_for_anonymous_comments,using: Mobile::Entities::HomeworkAttach do |f, opt|
|
||||||
|
f[:homework_for_anonymous_comments] if f.is_a?(Hash) && f.key?(:homework_for_anonymous_comments)
|
||||||
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
|
@ -101,13 +101,7 @@ class HomeworkAttachController < ApplicationController
|
||||||
#获取学生匿评列表
|
#获取学生匿评列表
|
||||||
def get_student_batch_homework
|
def get_student_batch_homework
|
||||||
@is_student_batch_homework = true
|
@is_student_batch_homework = true
|
||||||
all_homework_list = HomeworkAttach.eager_load(:attachments,:user,:rate_averages).find_by_sql("SELECT homework_attaches.*,
|
all_homework_list = get_student_batch_homework_list @bid,User.current
|
||||||
(SELECT stars FROM seems_rateable_rates WHERE rateable_type = 'HomeworkAttach' AND rateable_id = homework_attaches.id AND is_teacher_score = 1 AND stars IS NOT NULL ORDER BY updated_at DESC limit 0,1) AS t_score,
|
|
||||||
(SELECT AVG(stars) FROM seems_rateable_rates WHERE rateable_type = 'HomeworkAttach' AND rateable_id = homework_attaches.id AND is_teacher_score = 0) AS s_score,
|
|
||||||
(SELECT stars FROM seems_rateable_rates WHERE rateable_type = 'HomeworkAttach' AND rateable_id = homework_attaches.id AND rater_id = #{User.current.id} AND is_teacher_score = 0) AS m_score
|
|
||||||
FROM homework_attaches
|
|
||||||
INNER JOIN homework_evaluations ON homework_evaluations.homework_attach_id = homework_attaches.id
|
|
||||||
WHERE homework_attaches.bid_id = #{@bid.id} AND homework_evaluations.user_id = #{User.current.id} ORDER BY m_score DESC")
|
|
||||||
@cur_page = params[:page] || 1
|
@cur_page = params[:page] || 1
|
||||||
@cur_type = 4
|
@cur_type = 4
|
||||||
@homework_list = paginateHelper all_homework_list,10
|
@homework_list = paginateHelper all_homework_list,10
|
||||||
|
|
|
@ -119,4 +119,15 @@ module HomeworkAttachHelper
|
||||||
#end
|
#end
|
||||||
ary
|
ary
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def get_student_batch_homework_list bid,user
|
||||||
|
student_batch_homework_list = HomeworkAttach.eager_load(:attachments,:user,:rate_averages).find_by_sql("SELECT homework_attaches.*,
|
||||||
|
(SELECT stars FROM seems_rateable_rates WHERE rateable_type = 'HomeworkAttach' AND rateable_id = homework_attaches.id AND is_teacher_score = 1 AND stars IS NOT NULL ORDER BY updated_at DESC limit 0,1) AS t_score,
|
||||||
|
(SELECT AVG(stars) FROM seems_rateable_rates WHERE rateable_type = 'HomeworkAttach' AND rateable_id = homework_attaches.id AND is_teacher_score = 0) AS s_score,
|
||||||
|
(SELECT stars FROM seems_rateable_rates WHERE rateable_type = 'HomeworkAttach' AND rateable_id = homework_attaches.id AND rater_id = #{User.current.id} AND is_teacher_score = 0) AS m_score
|
||||||
|
FROM homework_attaches
|
||||||
|
INNER JOIN homework_evaluations ON homework_evaluations.homework_attach_id = homework_attaches.id
|
||||||
|
WHERE homework_attaches.bid_id = #{bid.id} AND homework_evaluations.user_id = #{user.id} ORDER BY m_score DESC")
|
||||||
|
student_batch_homework_list
|
||||||
|
end
|
||||||
end
|
end
|
|
@ -12,8 +12,7 @@ class CourseGroup < ActiveRecord::Base
|
||||||
before_destroy :set_member_nil
|
before_destroy :set_member_nil
|
||||||
|
|
||||||
attr_accessible :name
|
attr_accessible :name
|
||||||
validates :name, :presence => true, :length => {:maximum => 20}
|
validates :name, :presence => true, :length => {:maximum => 20}, :uniqueness => { :scope => :course_id}
|
||||||
validate :unique_name_and_course
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -22,10 +21,5 @@ class CourseGroup < ActiveRecord::Base
|
||||||
self.members.update_all("course_group_id = 0")
|
self.members.update_all("course_group_id = 0")
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
private
|
|
||||||
def unique_name_and_course
|
|
||||||
if CourseGroup.where("name=? and course_id=?", name, course_id).first
|
|
||||||
errors.add(:name, :groupname_repeat)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
class CoursesService
|
class CoursesService
|
||||||
include ApplicationHelper
|
include ApplicationHelper
|
||||||
include CoursesHelper
|
include CoursesHelper
|
||||||
|
include HomeworkAttachHelper
|
||||||
#TODO:尚未整合权限系统
|
#TODO:尚未整合权限系统
|
||||||
#参数school_id为0或不传时返回所有课程,否则返回对应学校的课程
|
#参数school_id为0或不传时返回所有课程,否则返回对应学校的课程
|
||||||
#参数per_page_count分页功能,每页显示的课程数
|
#参数per_page_count分页功能,每页显示的课程数
|
||||||
|
@ -306,10 +307,8 @@ class CoursesService
|
||||||
bids = course.homeworks.order('deadline DESC')
|
bids = course.homeworks.order('deadline DESC')
|
||||||
bids = bids.like(params[:name]) if params[:name].present?
|
bids = bids.like(params[:name]) if params[:name].present?
|
||||||
homeworks = []
|
homeworks = []
|
||||||
if is_course_teacher(current_user,course)
|
|
||||||
bids.each do |bid|
|
bids.each do |bid|
|
||||||
homeworks << show_homework_info(course,bid)
|
homeworks << show_homework_info(course,bid,current_user,is_course_teacher(current_user,course))
|
||||||
end
|
|
||||||
end
|
end
|
||||||
homeworks
|
homeworks
|
||||||
else
|
else
|
||||||
|
@ -318,7 +317,26 @@ class CoursesService
|
||||||
end
|
end
|
||||||
|
|
||||||
private
|
private
|
||||||
def show_homework_info course,bid
|
def show_homework_info course,bid,current_user,is_course_teacher
|
||||||
|
author = bid.author.lastname + bid.author.firstname
|
||||||
|
many_times = course.homeworks.index(bid) + 1
|
||||||
|
name = bid.name
|
||||||
|
homework_count = bid.homeworks.count #已提交的作业数量
|
||||||
|
student_questions_count = bid.commit.nil? ? 0 : bid.commit
|
||||||
|
description = bid.description
|
||||||
|
#if is_course_teacher(User.current, course) && @bid.open_anonymous_evaluation == 1 && @bid.homeworks.count >= 2
|
||||||
|
state = bid.comment_status
|
||||||
|
unless is_course_teacher
|
||||||
|
homework_for_anonymous_comments = get_student_batch_homework_list bid,current_user
|
||||||
|
end
|
||||||
|
#end
|
||||||
|
open_anonymous_evaluation = bid.open_anonymous_evaluation
|
||||||
|
{:course_name => course.name,:id => bid.id, :course_teacher => author, :homework_times => many_times, :homework_name => name, :homework_count => homework_count,:student_questions_count => student_questions_count,
|
||||||
|
:description => description, :homework_state => state,:open_anonymous_evaluation => open_anonymous_evaluation,:homework_for_anonymous_comments => homework_for_anonymous_comments}
|
||||||
|
end
|
||||||
|
|
||||||
|
#显示作业列表的同时显示分配给当前学生匿评的作业
|
||||||
|
def show_homework_info_with_batch course,bid
|
||||||
author = bid.author.lastname + bid.author.firstname
|
author = bid.author.lastname + bid.author.firstname
|
||||||
many_times = course.homeworks.index(bid) + 1
|
many_times = course.homeworks.index(bid) + 1
|
||||||
name = bid.name
|
name = bid.name
|
||||||
|
|
|
@ -90,7 +90,7 @@
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td class="font_lighter" style="float: right">
|
<td class="font_lighter" >
|
||||||
<%= l :label_create_time %>:
|
<%= l :label_create_time %>:
|
||||||
<%= format_time(@course.created_at) %>
|
<%= format_time(@course.created_at) %>
|
||||||
</table>
|
</table>
|
||||||
|
|
|
@ -22,4 +22,4 @@
|
||||||
<div class="school-index">
|
<div class="school-index">
|
||||||
<ul id="schoollist" style="line-height: 25px"></ul>
|
<ul id="schoollist" style="line-height: 25px"></ul>
|
||||||
</div>
|
</div>
|
||||||
<% html_title(l(:label_school_all)) -%>
|
<% html_title(l(:label_enterprise_all)) -%>
|
||||||
|
|
|
@ -22,9 +22,9 @@
|
||||||
<% end %>
|
<% end %>
|
||||||
|
|
||||||
<%if @is_teacher%>
|
<%if @is_teacher%>
|
||||||
<% if poll.polls_status == 1 || poll.polls_status == 3 %>
|
<% if poll.polls_status == 1%>
|
||||||
<li class="pollsbtn fl ml10 pollsbtn_grey">统计结果</li>
|
<li class="pollsbtn fl ml10 pollsbtn_grey">统计结果</li>
|
||||||
<% elsif poll.polls_status == 2%>
|
<% elsif poll.polls_status == 2 || poll.polls_status == 3 %>
|
||||||
<li>
|
<li>
|
||||||
<%= link_to l(:label_statistical_results), statistics_result_poll_path(poll.id), :class => "pollsbtn fl ml10"%>
|
<%= link_to l(:label_statistical_results), statistics_result_poll_path(poll.id), :class => "pollsbtn fl ml10"%>
|
||||||
</li>
|
</li>
|
||||||
|
|
|
@ -16,7 +16,7 @@ module RedmineApp
|
||||||
# Application configuration should go into files in config/initializers
|
# Application configuration should go into files in config/initializers
|
||||||
# -- all .rb files in that directory are automatically loaded.
|
# -- all .rb files in that directory are automatically loaded.
|
||||||
|
|
||||||
# verifier if email is real
|
#verifier if email is real
|
||||||
# EmailVerifier.config do |config|
|
# EmailVerifier.config do |config|
|
||||||
# config.verifier_email = "lizanle521@126.com"
|
# config.verifier_email = "lizanle521@126.com"
|
||||||
# end
|
# end
|
||||||
|
@ -74,5 +74,6 @@ module RedmineApp
|
||||||
if File.exists?(File.join(File.dirname(__FILE__), 'additional_environment.rb'))
|
if File.exists?(File.join(File.dirname(__FILE__), 'additional_environment.rb'))
|
||||||
instance_eval File.read(File.join(File.dirname(__FILE__), 'additional_environment.rb'))
|
instance_eval File.read(File.join(File.dirname(__FILE__), 'additional_environment.rb'))
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -2205,6 +2205,7 @@ zh:
|
||||||
label_course_practice: 课程实践
|
label_course_practice: 课程实践
|
||||||
label_forum_all: 公共贴吧
|
label_forum_all: 公共贴吧
|
||||||
label_school_all: 中国高校
|
label_school_all: 中国高校
|
||||||
|
:label_enterprise_all: 名企
|
||||||
label_contest_innovate: 创新竞赛
|
label_contest_innovate: 创新竞赛
|
||||||
label_software_user: 软件创客
|
label_software_user: 软件创客
|
||||||
label_requirement_enterprise: 软件众包
|
label_requirement_enterprise: 软件众包
|
||||||
|
|
|
@ -731,7 +731,7 @@ RedmineApp::Application.routes.draw do
|
||||||
match 'delete_avatar', :to => 'avatar#delete_image',:via => :post
|
match 'delete_avatar', :to => 'avatar#delete_image',:via => :post
|
||||||
# Endof Tao's code
|
# Endof Tao's code
|
||||||
get 'robots.txt', :to => 'welcome#robots'
|
get 'robots.txt', :to => 'welcome#robots'
|
||||||
match 'welcome/course', :to => 'welcome#course'
|
#match 'welcome/course', :to => 'welcome#course'
|
||||||
##############测试留言功能 fq
|
##############测试留言功能 fq
|
||||||
post 'words/new', :to => 'words#new'
|
post 'words/new', :to => 'words#new'
|
||||||
post 'words/create', :to => 'words#create'
|
post 'words/create', :to => 'words#create'
|
||||||
|
|
38
db/schema.rb
38
db/schema.rb
|
@ -1070,14 +1070,6 @@ ActiveRecord::Schema.define(:version => 20150128032421) do
|
||||||
t.string "description"
|
t.string "description"
|
||||||
end
|
end
|
||||||
|
|
||||||
create_table "social_groups", :force => true do |t|
|
|
||||||
t.string "name"
|
|
||||||
t.text "description"
|
|
||||||
t.integer "user_id"
|
|
||||||
t.datetime "created_at", :null => false
|
|
||||||
t.datetime "updated_at", :null => false
|
|
||||||
end
|
|
||||||
|
|
||||||
create_table "softapplications", :force => true do |t|
|
create_table "softapplications", :force => true do |t|
|
||||||
t.string "name"
|
t.string "name"
|
||||||
t.text "description"
|
t.text "description"
|
||||||
|
@ -1293,36 +1285,6 @@ ActiveRecord::Schema.define(:version => 20150128032421) do
|
||||||
add_index "versions", ["project_id"], :name => "versions_project_id"
|
add_index "versions", ["project_id"], :name => "versions_project_id"
|
||||||
add_index "versions", ["sharing"], :name => "index_versions_on_sharing"
|
add_index "versions", ["sharing"], :name => "index_versions_on_sharing"
|
||||||
|
|
||||||
create_table "voting_choices", :force => true do |t|
|
|
||||||
t.integer "poll_id", :null => false
|
|
||||||
t.string "text", :null => false
|
|
||||||
t.datetime "created_on", :null => false
|
|
||||||
t.integer "position", :default => 1
|
|
||||||
end
|
|
||||||
|
|
||||||
add_index "voting_choices", ["poll_id"], :name => "choices_poll_id"
|
|
||||||
|
|
||||||
create_table "voting_polls", :force => true do |t|
|
|
||||||
t.integer "project_id", :null => false
|
|
||||||
t.string "question", :null => false
|
|
||||||
t.datetime "created_on", :null => false
|
|
||||||
t.boolean "revote"
|
|
||||||
end
|
|
||||||
|
|
||||||
add_index "voting_polls", ["project_id"], :name => "polls_project_id"
|
|
||||||
|
|
||||||
create_table "voting_votes", :force => true do |t|
|
|
||||||
t.integer "user_id", :null => false
|
|
||||||
t.integer "poll_id", :null => false
|
|
||||||
t.integer "choice_id", :null => false
|
|
||||||
t.datetime "created_on", :null => false
|
|
||||||
end
|
|
||||||
|
|
||||||
add_index "voting_votes", ["choice_id"], :name => "votes_choice_id"
|
|
||||||
add_index "voting_votes", ["poll_id"], :name => "votes_poll_id"
|
|
||||||
add_index "voting_votes", ["user_id", "poll_id"], :name => "votes_user_poll_unique", :unique => true
|
|
||||||
add_index "voting_votes", ["user_id"], :name => "votes_user_id"
|
|
||||||
|
|
||||||
create_table "watchers", :force => true do |t|
|
create_table "watchers", :force => true do |t|
|
||||||
t.string "watchable_type", :default => "", :null => false
|
t.string "watchable_type", :default => "", :null => false
|
||||||
t.integer "watchable_id", :default => 0, :null => false
|
t.integer "watchable_id", :default => 0, :null => false
|
||||||
|
|
|
@ -0,0 +1 @@
|
||||||
|
Subproject commit 3cabcc643f36939939685e6f55273dfbf89da545
|
|
@ -1,5 +1,6 @@
|
||||||
/* CSS Document */
|
/* CSS Document */
|
||||||
#content{ font-size:12px !important; font-family:"微软雅黑","宋体" !important; line-height:1.9; background:#fff; font-style:normal;}
|
#content{ font-size:12px !important; font-family:"微软雅黑","宋体" !important; line-height:1.9; background:#fff; font-style:normal;}
|
||||||
|
#popbox{ font-size:12px !important; font-family:"微软雅黑","宋体" !important; line-height:1.9; background:#fff; font-style:normal;}
|
||||||
div,html,img,ul,li,p,body,h1,h2,h3,h4,p,a,table,tr,td,fieldset,input,span,textarea{ margin:0; padding:0;}
|
div,html,img,ul,li,p,body,h1,h2,h3,h4,p,a,table,tr,td,fieldset,input,span,textarea{ margin:0; padding:0;}
|
||||||
div,img,tr,td,textarea{ border:0;}
|
div,img,tr,td,textarea{ border:0;}
|
||||||
table,tr,td{border:0; cellspacing:0; cellpadding:0;}
|
table,tr,td{border:0; cellspacing:0; cellpadding:0;}
|
||||||
|
@ -79,7 +80,7 @@ a.wzan_visited{background:url(images/pic_zan.png) 0 0 no-repeat;}
|
||||||
.ping_con h2{ font-size:14px; color:#444443; margin-bottom:10px; }
|
.ping_con h2{ font-size:14px; color:#444443; margin-bottom:10px; }
|
||||||
.ping_con p{ color:#777777; font-size:12px; border-bottom:1px dashed #CCC; padding-bottom:5px;}
|
.ping_con p{ color:#777777; font-size:12px; border-bottom:1px dashed #CCC; padding-bottom:5px;}
|
||||||
.ping_con p span a{ color:#777777;}
|
.ping_con p span a{ color:#777777;}
|
||||||
.ping_star{ width:160px; color:#333; font-weight:bold; margin-bottom:5px;}
|
.ping_star{ width:165px; color:#333; font-weight:bold; margin-bottom:5px;}
|
||||||
.ping_star span a{ float:right; width:20px; height:20px; background:url(images/star.png);background-repeat: no-repeat; margin-right:3px;}
|
.ping_star span a{ float:right; width:20px; height:20px; background:url(images/star.png);background-repeat: no-repeat; margin-right:3px;}
|
||||||
.ping_con textarea{ height:76px; border:1px solid #15bccf; margin-bottom:5px; color:#666; font-size:12px;}
|
.ping_con textarea{ height:76px; border:1px solid #15bccf; margin-bottom:5px; color:#666; font-size:12px;}
|
||||||
a.ping_sub{ float:right; height:22px; width:60px; margin-right:20px; background:#15bccf; color:#fff; text-align:center;}
|
a.ping_sub{ float:right; height:22px; width:60px; margin-right:20px; background:#15bccf; color:#fff; text-align:center;}
|
||||||
|
|
Loading…
Reference in New Issue