This commit is contained in:
huang 2015-01-30 17:58:58 +08:00
commit 768e06ea8a
15 changed files with 55 additions and 67 deletions

View File

@ -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'

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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>

View File

@ -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)) -%>

View File

@ -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>

View File

@ -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

View File

@ -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: 软件众包

View File

@ -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'

View File

@ -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

1
lib/email_verifier Submodule

@ -0,0 +1 @@
Subproject commit 3cabcc643f36939939685e6f55273dfbf89da545

View File

@ -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;}