Merge remote-tracking branch 'remotes/origin/szzh' into develop

competition
nwb 11 years ago
commit 3a7065bb2d

@ -498,10 +498,10 @@ class BidsController < ApplicationController
#增加作业按评分排序,
#@homework_list = @bid.homeworks.eager_load(:rate_averages, :user, :attachments).order('seems_rateable_cached_ratings.avg DESC').order("#{HomeworkAttach.table_name}.created_at ASC")
@homework_list = HomeworkAttach.eager_load(:attachments,:user,:rate_averages).find_by_sql("SELECT homework_attaches.*,
(SELECT AVG(stars) FROM seems_rateable_rates WHERE rateable_type = 'HomeworkAttach' AND rateable_id = homework_attaches.id AND rater_id = #{@bid.courses.first.teacher.id}) AS t_score,
(SELECT AVG(stars) FROM seems_rateable_rates WHERE rateable_type = 'HomeworkAttach' AND rateable_id = homework_attaches.id AND rater_id <> #{@bid.courses.first.teacher.id}) AS s_score
(SELECT AVG(stars) FROM seems_rateable_rates WHERE rateable_type = 'HomeworkAttach' AND rateable_id = homework_attaches.id AND rater_id = #{@bid.author_id}) AS t_score,
(SELECT AVG(stars) FROM seems_rateable_rates WHERE rateable_type = 'HomeworkAttach' AND rateable_id = homework_attaches.id AND rater_id <> #{@bid.author_id}) AS s_score
FROM homework_attaches WHERE bid_id = #{@bid.id} ORDER BY
(CASE WHEN t_score IS NULL THEN 0 ELSE t_score * 0.6 END + CASE WHEN s_score IS NULL THEN 0 ELSE s_score * 0.4 END) DESC,created_at ASC")
(CASE WHEN t_score IS NULL THEN 0 ELSE t_score * #{@bid.proportion * 1.0 / 100} END + CASE WHEN s_score IS NULL THEN 0 ELSE s_score * #{1 - @bid.proportion * 1.0 / 100} END) DESC,created_at ASC")
if params[:student_id].present?
@temp = []
@homework_list.each do |pro|
@ -788,6 +788,7 @@ class BidsController < ApplicationController
@bid.name = params[:bid][:name]
@bid.description = params[:bid][:description]
@bid.is_evaluation = params[:bid][:is_evaluation]
@bid.proportion = params[:bid][:proportion]
@bid.reward_type = 3
# @bid.budget = params[:bid][:budget]
@bid.deadline = params[:bid][:deadline]

@ -490,6 +490,7 @@ class CoursesController < ApplicationController
# 新建作业
def new_homework
@homework = Bid.new
@homework.proportion
@homework.safe_attributes = params[:bid]
if (User.current.logged? && User.current.member_of_course?(Course.find params[:id] ))
render :layout => 'base_courses'

@ -51,7 +51,10 @@ class MemosController < ApplicationController
@memo_new = @memo.dup
@memo = @memo.root # 取出楼主防止输入帖子id让回复作为主贴显示
@memo.update_column(:viewed_count, (@memo.viewed_count.to_i + 1))
unless @memo.new_record?
@memo.update_column(:viewed_count, (@memo.viewed_count.to_i + 1))
end
page = params[:page]
if params[:r] && page.nil?
@ -68,10 +71,14 @@ class MemosController < ApplicationController
limit(@reply_pages.per_page).
offset(@reply_pages.offset).
all
if @memo.new_record?
format.html { redirect_to back_url, error: "#{l :label_memo_create_fail}: #{@memo.errors.full_messages[0]}" }
else
format.html { render action: :show }#, error: "#{l :label_memo_create_fail}: #{@memo.errors.full_messages[0]}" }
# format.html { redirect_to back_memo_or_forum_url}#, error: "#{l :label_memo_create_fail}: #{@memo.errors.full_messages[0]}" }
format.json { render json: @memo.errors, status: :unprocessable_entity }
end
format.html { render action: :show }#, error: "#{l :label_memo_create_fail}: #{@memo.errors.full_messages[0]}" }
# format.html { redirect_to back_memo_or_forum_url}#, error: "#{l :label_memo_create_fail}: #{@memo.errors.full_messages[0]}" }
format.json { render json: @memo.errors, status: :unprocessable_entity }
end
end
end

@ -105,7 +105,7 @@ class SchoolController < ApplicationController
end
options = ""
@school.each do |s|
options << "<li style = 'width: 33%; float: left'><a id=#{s.id} onclick='test(this.id)'>#{s.name}</a></li>"
options << "<li style = 'width: 33%; float: left'> <a id=#{s.id} onclick='test(this.id)'>#{s.name}</a></li>"
end
render :text => options

@ -32,7 +32,7 @@ class WelcomeController < ApplicationController
def course
if params[:school_id]
@school_id = params[:school_id]
else
elsif User.current.logged? && User.current.user_extensions.school
@school_id = User.current.user_extensions.school.id
end
@logoLink ||= logolink()

@ -83,6 +83,19 @@ module CoursesHelper
type << option2
end
def proportion_option
type = []
i = 0
while i <= 100
option = []
option << i.to_s + "%"
option << i
type << option
i = i + 10
end
type
end
alias teacherCountOrigin teacherCount
def teacherCount project
@ -308,7 +321,7 @@ module CoursesHelper
#最终评分 = 学生评分的平均分 * 0.4 +教师评分 * 0.6
def score_for_homework homework
if homework.bid.is_evaluation == 1 || homework.bid.is_evaluation == nil
return format("%.2f",(teacher_score_for_homework(homework).to_f * 0.6 + student_score_for_homework(homework).to_f * 0.4))
return format("%.2f",(homework.bid.proportion * 1.0 / 100) * (teacher_score_for_homework(homework).to_f) + (1 - homework.bid.proportion * 1.0 / 100) * (student_score_for_homework(homework).to_f))
else
return teacher_score_for_homework homework
end
@ -332,7 +345,7 @@ module CoursesHelper
return format("%.2f",teacher_stars == nil ? 0 : teacher_stars.stars)
end
#获取指定作业的得分
#获取指定项目的得分
def project_score project
issue_count = project.issues.count
issue_journal_count = project.issue_changes.count

@ -233,8 +233,13 @@ module WelcomeHelper
def find_all_new_hot_course limit = 9 ,school_id = 0
#sort_project_by_hot_rails 1, 'course_ac_para DESC', limit
time_now = Time.new.strftime("%Y");
if school_id
courses = Course.visible.joins(:course_status).where("#{Course.table_name}.created_at like '%#{time_now}%' and #{Course.table_name}.school_id <>
?", school_id).order("course_ac_para DESC").limit(limit).all
else
courses = Course.visible.joins(:course_status).where("#{Course.table_name}.created_at like '%#{time_now}%' and #{Course.table_name}.school_id is not NULL
").order("course_ac_para DESC").limit(limit).all
end
courses
end

@ -38,6 +38,7 @@ class Course < ActiveRecord::Base
validates_format_of :class_period, :with =>/^[1-9]\d*$/
validates_format_of :name,:with =>/^[a-zA-Z0-9_\u4e00-\u9fa5]+$/
before_save :self_validate
after_save :create_board_sync
before_destroy :delete_all_members
@ -77,7 +78,7 @@ class Course < ActiveRecord::Base
where(nil)
else
pattern = "%#{arg.to_s.strip.downcase}%"
where("LOWER(extra) LIKE :p OR LOWER(name) LIKE :p ", :p => pattern)
where(" LOWER(name) LIKE :p ", :p => pattern)
end
}
@ -166,10 +167,8 @@ class Course < ActiveRecord::Base
end
#自定义验证
def validate
if !class_period.match([0-9])
errors.add_to_base("class period can only digital")
end
def self_validate
end
# 创建课程讨论区

@ -3,9 +3,9 @@ class Memo < ActiveRecord::Base
belongs_to :forum
belongs_to :author, :class_name => "User", :foreign_key => 'author_id'
validates_presence_of :author_id, :forum_id, :subject
validates_presence_of :author_id, :forum_id, :subject,:content
# 若是主题帖,则内容可以是空
validates :content, presence: true, if: Proc.new{|o| !o.parent_id.nil? }
#validates :content, presence: true, if: Proc.new{|o| !o.parent_id.nil? }
validates_length_of :subject, maximum: 50
validates_length_of :content, maximum: 3072
validate :cannot_reply_to_locked_topic, :on => :create

@ -113,6 +113,7 @@ class Project < ActiveRecord::Base
validates_presence_of :name, :identifier
validates_uniqueness_of :identifier
validates_uniqueness_of :name
validates_associated :repository, :wiki
# validates_length_of :description, :maximum => 255
validates_length_of :name, :maximum => 255

@ -164,7 +164,7 @@ class User < Principal
# Prevents unauthorized assignments
attr_protected :login, :admin, :password, :password_confirmation, :hashed_password
LOGIN_LENGTH_LIMIT = 60
LOGIN_LENGTH_LIMIT = 25
MAIL_LENGTH_LIMIT = 60
validates_presence_of :login, :firstname, :mail, :if => Proc.new { |user| !user.is_a?(AnonymousUser) }

@ -34,6 +34,8 @@
</p>
<p><%= f.select :is_evaluation, is_evaluation_option %>
</p>
<p><%= f.select :proportion, proportion_option %>
</p>
<p><%= hidden_field_tag 'course_id', @course.id %>
</p>
<fieldset><legend><%= l(:label_attachment_plural) %></legend>

@ -4,7 +4,7 @@
<div class="box ph10_5">
<!--[form:message]-->
<p><label for="message_subject"><%= l(:field_subject) %><span class="required"> *&nbsp;&nbsp;</span></label><br />
<%= f.text_field :subject,:size => 60, :style => "width: 99%;", :id => "message_subject" %><!--by young-->
<%= f.text_field :subject,:size => 60, :style => "width: 99%;", :id => "message_subject",:readonly=>true %><!--by young-->
</p>
<p>
<% unless replying %>
@ -30,9 +30,12 @@
<p>
<%= label_tag "message_content", l(:description_message_content), :class => "hidden-for-sighted" %>
<%= f.text_area :content, :cols => 80, :rows => 13, :class => 'wiki-edit', :id => 'message_content' %></p>
<%= wikitoolbar_for 'message_content' %>
<!--[eoform:message]-->
<p><%= l(:label_attachment_plural) %><br />
<%= render :partial => 'attachments/form', :locals => {:container => @message} %></p>
</div>
<%#= wikitoolbar_for 'message_content' %>

@ -5,7 +5,9 @@
<% end %>
<p><%= f.text_field :name, :required => true, :size => 60, :style => "width:490px;" %></p>
<p style="margin-left:-10px;padding-right: 20px;"><%= f.text_area :description, :rows => 8, :class => 'wiki-edit', :style => "font-size:small;width:490px;margin-left:10px;" %></p><!--by young-->
<p style="margin-left:-10px;padding-right: 20px;">
<%= f.text_area :description, :rows => 8, :class => 'wiki-edit', :style => "font-size:small;width:490px;margin-left:10px;" %>
</p><!--by young-->
<p><%= f.text_field :identifier, :required => true, :size => 60, :style => "width:488px;", :disabled => @project.identifier_frozen?, :maxlength => Project::IDENTIFIER_MAX_LENGTH %>
<% unless @project.identifier_frozen? %>
<em class="info"><%= l(:text_length_between, :min => 1, :max => Project::IDENTIFIER_MAX_LENGTH) %> <%= l(:text_project_identifier_info).html_safe %></em>
@ -24,44 +26,44 @@
<%= call_hook(:view_projects_form, :project => @project, :form => f) %>
<!-- <% if @project.new_record? %>
<fieldset class="box tabular"><legend><%= l(:label_module_plural) %></legend>
<% Redmine::AccessControl.available_project_modules.each do |m| %>
<!-- <%# if @project.new_record? %>
<fieldset class="box tabular"><legend><%#= l(:label_module_plural) %></legend>
<%# Redmine::AccessControl.available_project_modules.each do |m| %>
<label class="floating">
<%= check_box_tag 'project[enabled_module_names][]', m, @project.module_enabled?(m), :id => "project_enabled_module_names_#{m}" %>
<%= l_or_humanize(m, :prefix => "project_module_") %>
<%#= check_box_tag 'project[enabled_module_names][]', m, @project.module_enabled?(m), :id => "project_enabled_module_names_#{m}" %>
<%#= l_or_humanize(m, :prefix => "project_module_") %>
</label>
<% end %>
<%= hidden_field_tag 'project[enabled_module_names][]', '' %>
<%= javascript_tag 'observeProjectModules()' %>
<%# end %>
<%#= hidden_field_tag 'project[enabled_module_names][]', '' %>
<%#= javascript_tag 'observeProjectModules()' %>
</fieldset>
<% end %>
<%# end %>
<% if @project.new_record? || @project.module_enabled?('issue_tracking') %>
<% unless @trackers.empty? %>
<fieldset class="box tabular" id="project_trackers"><legend><%=l(:label_tracker_plural)%></legend>
<% @trackers.each do |tracker| %>
<%# if @project.new_record? || @project.module_enabled?('issue_tracking') %>
<%# unless @trackers.empty? %>
<fieldset class="box tabular" id="project_trackers"><legend><%#=l(:label_tracker_plural)%></legend>
<%# @trackers.each do |tracker| %>
<label class="floating">
<%= check_box_tag 'project[tracker_ids][]', tracker.id, @project.trackers.include?(tracker) %>
<%=h tracker %>
<%#= check_box_tag 'project[tracker_ids][]', tracker.id, @project.trackers.include?(tracker) %>
<%#=h tracker %>
</label>
<% end %>
<%= hidden_field_tag 'project[tracker_ids][]', '' %>
<%# end %>
<%#= hidden_field_tag 'project[tracker_ids][]', '' %>
</fieldset>
<% end %>
<%# end %>
<% unless @issue_custom_fields.empty? %>
<fieldset class="box tabular" id="project_issue_custom_fields"><legend><%=l(:label_custom_field_plural)%></legend>
<% @issue_custom_fields.each do |custom_field| %>
<%# unless @issue_custom_fields.empty? %>
<fieldset class="box tabular" id="project_issue_custom_fields"><legend><%#=l(:label_custom_field_plural)%></legend>
<%# @issue_custom_fields.each do |custom_field| %>
<label class="floating">
<%= check_box_tag 'project[issue_custom_field_ids][]', custom_field.id, (@project.all_issue_custom_fields.include? custom_field), (custom_field.is_for_all? ? {:disabled => "disabled"} : {}) %>
<%=h custom_field.name %>
<%#= check_box_tag 'project[issue_custom_field_ids][]', custom_field.id, (@project.all_issue_custom_fields.include? custom_field), (custom_field.is_for_all? ? {:disabled => "disabled"} : {}) %>
<%#=h custom_field.name %>
</label>
<% end %>
<%= hidden_field_tag 'project[issue_custom_field_ids][]', '' %>
<%# end %>
<%#= hidden_field_tag 'project[issue_custom_field_ids][]', '' %>
</fieldset>
<% end %>
<% end %> -->
<%# end %>
<%# end %> -->
<!--[eoform:project]-->
<% unless @project.identifier_frozen? %>

@ -43,9 +43,9 @@
<script type="text/javascript">
function test(id){
location.href = encodeURI('http://course.trustie.net<%=port%>?school_id='+id);
location.href = encodeURI('/course/'+id);
}
</script>
<script type="text/javascript">
function ssearch(){
@ -69,8 +69,9 @@
<div>
<p>
<a href="http://course.trustie.net<%=port%>?school_id=0">全部学校</a>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<a href="http://course.trustie.net<%=port%>">我的学校</a>
<%= link_to "全部学校",school_index_path %>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<%= link_to '我的学校',school_course_list_path(User.current.user_extensions.school) %>
</p>
<ul>
<li style="width: 40%; float: left">请选择省份:
@ -84,7 +85,7 @@
<div style="clear: both"></div>
<div>
<ul id="schoollist" style="line-height: 25px">
</ul>
</div>

File diff suppressed because it is too large Load Diff

@ -1574,6 +1574,7 @@ zh:
field_budget: 奖励
field_deadline: 截止日期
field_is_evaluation: 是否启动互评
field_proportion: 教师评分比例
label_tags_selected: 已选标签
label_tags_related: 相关标签
button_project_tags_add: 增加

@ -700,8 +700,8 @@ RedmineApp::Application.routes.draw do
#######confusing########
get 'welcome/search', to: 'welcome#search'
get 'school/index', to: 'school#index'
get 'course/:school_id', to: 'welcome#course'
get 'course/:school_id', to: 'welcome#course'
get 'course/:school_id', to: 'welcome#course', :as => 'school_course_list'
#get 'course/:school_id', to: 'welcome#course'
post 'school/get_options/:province', :to => 'school#get_options'
get 'school/get_options/:province', :to => 'school#get_options'

@ -0,0 +1,5 @@
class AddProportionToBid < ActiveRecord::Migration
def change
add_column :bids, :proportion, :integer, default: 60
end
end

@ -94,18 +94,19 @@ ActiveRecord::Schema.define(:version => 20140703085204) do
create_table "bids", :force => true do |t|
t.string "name"
t.string "budget", :null => false
t.string "budget", :null => false
t.integer "author_id"
t.date "deadline"
t.string "description"
t.datetime "created_on", :null => false
t.datetime "updated_on", :null => false
t.datetime "created_on", :null => false
t.datetime "updated_on", :null => false
t.integer "commit"
t.integer "reward_type"
t.integer "homework_type"
t.integer "parent_id"
t.string "password"
t.integer "is_evaluation"
t.integer "proportion", :default => 60
end
create_table "boards", :force => true do |t|
@ -793,7 +794,7 @@ ActiveRecord::Schema.define(:version => 20140703085204) do
end
create_table "relative_memos", :force => true do |t|
t.integer "osp_id"
t.integer "osp_id", :null => false
t.integer "parent_id"
t.string "subject", :null => false
t.text "content", :null => false

Binary file not shown.

@ -449,7 +449,7 @@ a.attachments_list_color {
font-size: 9pt;
}
.memo_activity span a{
color: gray;
/*color: gray;*/
}
/*帖子的最后回复人*/
.memo_activity .memo_last_person{

Loading…
Cancel
Save