Merge remote-tracking branch 'remotes/origin/szzh' into develop
This commit is contained in:
commit
b655f0c7b0
|
@ -1,3 +1,4 @@
|
||||||
|
# -*coding:utf-8 -*-
|
||||||
# Redmine - project management software
|
# Redmine - project management software
|
||||||
# Copyright (C) 2006-2013 Jean-Philippe Lang
|
# Copyright (C) 2006-2013 Jean-Philippe Lang
|
||||||
#
|
#
|
||||||
|
@ -14,6 +15,7 @@
|
||||||
# You should have received a copy of the GNU General Public License
|
# You should have received a copy of the GNU General Public License
|
||||||
# along with this program; if not, write to the Free Software
|
# along with this program; if not, write to the Free Software
|
||||||
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||||
|
|
||||||
class MembersController < ApplicationController
|
class MembersController < ApplicationController
|
||||||
model_object Member
|
model_object Member
|
||||||
before_filter :find_model_object, :except => [:index, :create, :autocomplete]
|
before_filter :find_model_object, :except => [:index, :create, :autocomplete]
|
||||||
|
@ -124,7 +126,13 @@ class MembersController < ApplicationController
|
||||||
attrs = params[:membership].dup
|
attrs = params[:membership].dup
|
||||||
user_ids = attrs.delete(:user_ids)
|
user_ids = attrs.delete(:user_ids)
|
||||||
user_ids.each do |user_id|
|
user_ids.each do |user_id|
|
||||||
members << Member.new(:role_ids => params[:membership][:role_ids], :user_id => user_id)
|
member = Member.new(:role_ids => params[:membership][:role_ids], :user_id => user_id)
|
||||||
|
role = Role.find_by_id(params[:membership][:role_ids])
|
||||||
|
# 这里的判断只能通过角色名,可以弄成常量
|
||||||
|
if role.name == "学生"
|
||||||
|
StudentsForCourse.create(:student_id => user_id, :course_id =>@course.id)
|
||||||
|
end
|
||||||
|
members << member
|
||||||
#user_grades << UserGrade.new(:user_id => user_id, :course_id => @course.id)
|
#user_grades << UserGrade.new(:user_id => user_id, :course_id => @course.id)
|
||||||
if (params[:membership][:role_ids])
|
if (params[:membership][:role_ids])
|
||||||
role = Role.find(params[:membership][:role_ids][0])
|
role = Role.find(params[:membership][:role_ids][0])
|
||||||
|
@ -201,6 +209,15 @@ class MembersController < ApplicationController
|
||||||
|
|
||||||
if (params[:membership][:role_ids])
|
if (params[:membership][:role_ids])
|
||||||
role = Role.find(params[:membership][:role_ids][0])
|
role = Role.find(params[:membership][:role_ids][0])
|
||||||
|
# 这里的判断只能通过角色名,可以弄成常量
|
||||||
|
if role.name == "学生"
|
||||||
|
StudentsForCourse.create(:student_id => @member.user_id, :course_id =>@course.id)
|
||||||
|
else
|
||||||
|
joined = StudentsForCourse.where('student_id = ? and course_id = ?', @member.user_id,@course.id)
|
||||||
|
joined.each do |join|
|
||||||
|
join.delete
|
||||||
|
end
|
||||||
|
end
|
||||||
if role.allowed_to?(:is_manager)
|
if role.allowed_to?(:is_manager)
|
||||||
@courseInfo = CourseInfos.new(:user_id => @member.user_id, :course_id => @course.id)
|
@courseInfo = CourseInfos.new(:user_id => @member.user_id, :course_id => @course.id)
|
||||||
@courseInfo.save
|
@courseInfo.save
|
||||||
|
@ -271,6 +288,11 @@ class MembersController < ApplicationController
|
||||||
user.destroy
|
user.destroy
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
joined = StudentsForCourse.where('student_id = ? and course_id = ?', @member.user_id,@course.id)
|
||||||
|
joined.each do |join|
|
||||||
|
join.delete
|
||||||
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
respond_to do |format|
|
respond_to do |format|
|
||||||
format.html { redirect_to_settings_in_courses }
|
format.html { redirect_to_settings_in_courses }
|
||||||
|
|
|
@ -642,9 +642,9 @@ class UsersController < ApplicationController
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
if @obj.save
|
if @obj.save
|
||||||
## 执行成功的操作。
|
logger.debug "#{__FILE__}:#{__LINE__} ===> #{@obj.to_json}"
|
||||||
else
|
else
|
||||||
#捕获异常
|
logger.error "#{__FILE__}:#{__LINE__} ===> #{@obj.errors.try(:full_messages)}"
|
||||||
end
|
end
|
||||||
respond_to do |format|
|
respond_to do |format|
|
||||||
format.js
|
format.js
|
||||||
|
|
|
@ -474,11 +474,16 @@ module ApplicationHelper
|
||||||
def principals_check_box_tags_ex(name, principals)
|
def principals_check_box_tags_ex(name, principals)
|
||||||
s = ''
|
s = ''
|
||||||
principals.each do |principal|
|
principals.each do |principal|
|
||||||
if principal.has_attribute?(:userInfo)
|
s << "<label>#{ check_box_tag name, principal.id, false, :id => nil } #{h principal.userInfo }</label>\n"
|
||||||
s << "<label>#{ check_box_tag name, principal.id, false, :id => nil } #{h principal.userInfo }</label>\n"
|
end
|
||||||
else
|
s.html_safe
|
||||||
s << "<label>#{ check_box_tag name, principal.id, false, :id => nil } #{h principal}</label>\n"
|
end
|
||||||
end
|
|
||||||
|
#扩展的checkbox生成
|
||||||
|
def principals_radio_box_tags_ex(name, principals)
|
||||||
|
s = ''
|
||||||
|
principals.each do |principal|
|
||||||
|
s << "<label>#{ radio_button_tag name, principal.id, false, :id => nil } #{h principal.userInfo }</label>\n"
|
||||||
end
|
end
|
||||||
s.html_safe
|
s.html_safe
|
||||||
end
|
end
|
||||||
|
|
|
@ -114,7 +114,15 @@ module CoursesHelper
|
||||||
# 学生人数计算
|
# 学生人数计算
|
||||||
# add by nwb
|
# add by nwb
|
||||||
def studentCount course
|
def studentCount course
|
||||||
course.student.count
|
count = course.student.count
|
||||||
|
if count <= 5
|
||||||
|
result = count.to_s
|
||||||
|
elsif count < 10 && count > 5
|
||||||
|
result = "5+"
|
||||||
|
else
|
||||||
|
result = (count-count % 10).to_s + "+"
|
||||||
|
end
|
||||||
|
result
|
||||||
end
|
end
|
||||||
|
|
||||||
def eventToLanguageCourse event_type, course
|
def eventToLanguageCourse event_type, course
|
||||||
|
|
|
@ -42,7 +42,6 @@ module StoresHelper
|
||||||
container = attachment.container
|
container = attachment.container
|
||||||
case container.class.to_s
|
case container.class.to_s
|
||||||
when 'Message'
|
when 'Message'
|
||||||
# binding.pry
|
|
||||||
# '项目 > zzz > 论坛 > 帖子xxx'
|
# '项目 > zzz > 论坛 > 帖子xxx'
|
||||||
# topic_str = container.project.project_type == 0 ? l(:label_board) : l(:label_new_course)
|
# topic_str = container.project.project_type == 0 ? l(:label_board) : l(:label_new_course)
|
||||||
|
|
||||||
|
|
|
@ -36,7 +36,7 @@ class Course < ActiveRecord::Base
|
||||||
|
|
||||||
validates_presence_of :password, :term,:name
|
validates_presence_of :password, :term,:name
|
||||||
validates_format_of :class_period, :with =>/^[1-9]\d*$/
|
validates_format_of :class_period, :with =>/^[1-9]\d*$/
|
||||||
validates_format_of :name,:with =>/^[a-zA-Z0-9_\u4e00-\u9fa5]+$/
|
#validates_format_of :name,:with =>/^[a-zA-Z0-9_\u4e00-\u9fa5]+$/
|
||||||
|
|
||||||
before_save :self_validate
|
before_save :self_validate
|
||||||
after_create :create_board_sync
|
after_create :create_board_sync
|
||||||
|
|
|
@ -77,7 +77,7 @@
|
||||||
<%= stylesheet_link_tag 'scm' %>
|
<%= stylesheet_link_tag 'scm' %>
|
||||||
<% end %>
|
<% end %>
|
||||||
|
|
||||||
<% html_title(l(:label_news_plural)) -%>
|
<% html_title(l(:label_contest_notification)) -%>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<script type='text/javascript'>
|
<script type='text/javascript'>
|
||||||
|
|
|
@ -14,7 +14,7 @@
|
||||||
<% unless contest.author.nil? %>
|
<% unless contest.author.nil? %>
|
||||||
<%= link_to(contest.author, user_path(contest.author), :class => 'bid_user') %>:
|
<%= link_to(contest.author, user_path(contest.author), :class => 'bid_user') %>:
|
||||||
<% end %>
|
<% end %>
|
||||||
<%= link_to(contest.name, show_contest_contest_path(contest), :class => 'bid_path', :target => "_blank") %></strong></td>
|
<%= link_to(contest.name, contest_contestnotifications_path(contest), :class => 'bid_path', :target => "_blank") %></strong></td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td width="500">
|
<td width="500">
|
||||||
|
|
|
@ -32,7 +32,7 @@
|
||||||
|
|
||||||
<p>
|
<p>
|
||||||
<% roles.each do |role| %>
|
<% roles.each do |role| %>
|
||||||
<label><%= check_box_tag 'membership[role_ids][]', role.id, member.roles.include?(role),
|
<label><%= radio_button_tag 'membership[role_ids][]', role.id, member.roles.include?(role),
|
||||||
:disabled => member.member_roles.detect { |mr| mr.role_id == role.id && !mr.inherited_from.nil? } %> <%= h role %></label><br/>
|
:disabled => member.member_roles.detect { |mr| mr.role_id == role.id && !mr.inherited_from.nil? } %> <%= h role %></label><br/>
|
||||||
<% end %></p>
|
<% end %></p>
|
||||||
<%= hidden_field_tag 'membership[role_ids][]', '' %>
|
<%= hidden_field_tag 'membership[role_ids][]', '' %>
|
||||||
|
@ -82,7 +82,7 @@
|
||||||
<p style="padding-top: 5px"><%= l(:label_role_plural) %>:
|
<p style="padding-top: 5px"><%= l(:label_role_plural) %>:
|
||||||
<% roles.each do |role| %>
|
<% roles.each do |role| %>
|
||||||
|
|
||||||
<label><%= check_box_tag 'membership[role_ids][]', role.id %> <%= h role %></label>
|
<label><%= radio_button_tag 'membership[role_ids][]', role.id %> <%= h role %></label>
|
||||||
<% end %></p>
|
<% end %></p>
|
||||||
|
|
||||||
<p><%= submit_tag l(:button_add), :id => 'member-add-submit' %></p>
|
<p><%= submit_tag l(:button_add), :id => 'member-add-submit' %></p>
|
||||||
|
|
|
@ -215,10 +215,10 @@
|
||||||
<% if display_main_menu?(@contest) %>
|
<% if display_main_menu?(@contest) %>
|
||||||
<div class="tabs_new">
|
<div class="tabs_new">
|
||||||
<ul>
|
<ul>
|
||||||
<li ><%= link_to l(:label_contest_userresponse), show_contest_contest_path(@contest), :class => link_class(:respond) %></li>
|
<li><%= link_to l(:label_contest_notification), contest_contestnotifications_path(@contest), :class => link_class(:contestnotifications) %></li>
|
||||||
<li><%= link_to l(:label_contest_joincontest), show_attendingcontest_contest_path(@contest), :class => link_class(:attendingcontests) %></li>
|
<li><%= link_to l(:label_contest_joincontest), show_attendingcontest_contest_path(@contest), :class => link_class(:attendingcontests) %></li>
|
||||||
<li><%= link_to l(:label_contest_notification), contest_contestnotifications_path(@contest), :class => link_class(:contestnotifications) %></li>
|
<li><%= link_to l(:label_contest_userresponse), show_contest_contest_path(@contest), :class => link_class(:respond) %></li>
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
<% end %>
|
<% end %>
|
||||||
|
|
||||||
|
|
|
@ -97,7 +97,6 @@
|
||||||
<div class="pagination">
|
<div class="pagination">
|
||||||
<ul>
|
<ul>
|
||||||
<%= pagination_links_full @events_pages %>
|
<%= pagination_links_full @events_pages %>
|
||||||
<% #binding.pry %>
|
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
|
@ -157,7 +157,7 @@
|
||||||
|
|
||||||
<div style="float: left; margin-left: 12px; margin-top: 10px; margin-bottom: -4px; width: 380px;">
|
<div style="float: left; margin-left: 12px; margin-top: 10px; margin-bottom: -4px; width: 380px;">
|
||||||
<!-- <%= link_to(contest.name, contest.event_url, :class => "d-g-blue d-p-project-name", :title => "#{contest.name}", :target => "_blank") %> -->
|
<!-- <%= link_to(contest.name, contest.event_url, :class => "d-g-blue d-p-project-name", :title => "#{contest.name}", :target => "_blank") %> -->
|
||||||
<%= link_to(contest.name, show_contest_contest_path(contest.id), :class => "d-g-blue d-p-project-name", :title => "#{contest.name}", :target => "_blank") %>
|
<%= link_to(contest.name, contest_contestnotifications_path(contest.id), :class => "d-g-blue d-p-project-name", :title => "#{contest.name}", :target => "_blank") %>
|
||||||
<% if contest.id == 2 or contest.id == 3 or contest.id == 6 %>
|
<% if contest.id == 2 or contest.id == 3 or contest.id == 6 %>
|
||||||
<span class="font_lighter">(<span style="font-size: 13px"><%= link_to("#{contest.projects.where('is_public=1').count}"+l(:label_work_quantity), show_attendingcontest_contest_path(contest), :target => "_blank") %></span>)</span>
|
<span class="font_lighter">(<span style="font-size: 13px"><%= link_to("#{contest.projects.where('is_public=1').count}"+l(:label_work_quantity), show_attendingcontest_contest_path(contest), :target => "_blank") %></span>)</span>
|
||||||
<% else %>
|
<% else %>
|
||||||
|
|
|
@ -1776,7 +1776,7 @@ zh:
|
||||||
label_fork_homework_new: 选为作业
|
label_fork_homework_new: 选为作业
|
||||||
#wang
|
#wang
|
||||||
label_contest_userresponse: 用户留言
|
label_contest_userresponse: 用户留言
|
||||||
label_contest_joincontest: 参入竞赛
|
label_contest_joincontest: 参加竞赛
|
||||||
label_contest_notification: 竞赛通知
|
label_contest_notification: 竞赛通知
|
||||||
#end
|
#end
|
||||||
|
|
||||||
|
|
|
@ -124,3 +124,29 @@ courses_061:
|
||||||
rgt:
|
rgt:
|
||||||
is_public: 0
|
is_public: 0
|
||||||
inherit_members: 1
|
inherit_members: 1
|
||||||
|
course_trustie_074:
|
||||||
|
id: 74
|
||||||
|
tea_id: 698
|
||||||
|
name: 电路与电子学基础(软件工程专业)
|
||||||
|
state:
|
||||||
|
code:
|
||||||
|
time: 2014
|
||||||
|
extra: course2014-05-22_16-09-25
|
||||||
|
created_at: 2014-05-22 08:09:25.000000000 Z
|
||||||
|
updated_at: 2014-05-22 08:09:25.000000000 Z
|
||||||
|
location:
|
||||||
|
term: 春季学期
|
||||||
|
string:
|
||||||
|
password: '12345678'
|
||||||
|
setup_time:
|
||||||
|
endup_time:
|
||||||
|
class_period: '54'
|
||||||
|
school_id: 117
|
||||||
|
description: "电路与电子学基础,软件工程小班\\r\ 模拟电子技术部分\ "
|
||||||
|
status: 1
|
||||||
|
attachmenttype: 2
|
||||||
|
lft:
|
||||||
|
rgt:
|
||||||
|
is_public: 1
|
||||||
|
inherit_members: 1
|
||||||
|
|
||||||
|
|
|
@ -1,68 +1,26 @@
|
||||||
# encoding: utf-8
|
# encoding: utf-8
|
||||||
# Redmine - project management software
|
|
||||||
# Copyright (C) 2006-2013 Jean-Philippe Lang
|
|
||||||
#
|
|
||||||
# This program is free software; you can redistribute it and/or
|
|
||||||
# modify it under the terms of the GNU General Public License
|
|
||||||
# as published by the Free Software Foundation; either version 2
|
|
||||||
# of the License, or (at your option) any later version.
|
|
||||||
#
|
|
||||||
# This program is distributed in the hope that it will be useful,
|
|
||||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
# GNU General Public License for more details.
|
|
||||||
#
|
|
||||||
# You should have received a copy of the GNU General Public License
|
|
||||||
# along with this program; if not, write to the Free Software
|
|
||||||
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
|
||||||
|
|
||||||
require File.expand_path('../../test_helper', __FILE__)
|
require File.expand_path('../../test_helper', __FILE__)
|
||||||
|
|
||||||
class CourseTest < ActiveSupport::TestCase
|
class CourseTest < ActiveSupport::TestCase
|
||||||
|
fixtures :courses, :roles, :member_roles, :members, :boards, :messages, :news
|
||||||
def setup
|
def setup
|
||||||
@course_1 = Course.new
|
|
||||||
@course_1.id = 1
|
|
||||||
@course_1.tea_id = 1
|
|
||||||
@course_1.name = 'course1'
|
|
||||||
@course_1.state = 1234
|
|
||||||
@course_1.time = 2012
|
|
||||||
@course_1.term = '秋季学期'
|
|
||||||
@course_1.password = 1234
|
|
||||||
@course_1.class_period = 40
|
|
||||||
|
|
||||||
@course_2 = Course.new
|
|
||||||
@course_2.id = 2
|
|
||||||
@course_2.tea_id = 1
|
|
||||||
@course_2.name = 'course2'
|
|
||||||
@course_2.state = 1234
|
|
||||||
@course_2.time = 2013
|
|
||||||
@course_2.term = '秋季学期'
|
|
||||||
@course_2.password = 1234
|
|
||||||
@course_2.class_period = 40
|
|
||||||
|
|
||||||
@course_3 = Course.new
|
|
||||||
@course_3.id = 3
|
|
||||||
@course_3.tea_id = 1
|
|
||||||
@course_3.name = 'course3'
|
|
||||||
@course_3.state = 1234
|
|
||||||
@course_3.time = 2014
|
|
||||||
@course_3.term = '秋季学期'
|
|
||||||
@course_3.password = 1234
|
|
||||||
@course_3.class_period = 40
|
|
||||||
|
|
||||||
@course_now = Course.new
|
|
||||||
@course_now.id = 4
|
|
||||||
@course_now.tea_id = 1
|
|
||||||
@course_now.name = 'course4'
|
|
||||||
@course_now.state = 1234
|
|
||||||
@course_now.time = 2013
|
|
||||||
@course_now.term = '秋季学期'
|
|
||||||
@course_now.password = 1234
|
|
||||||
@course_now.class_period = 40
|
|
||||||
end
|
end
|
||||||
|
|
||||||
test 'test course whether out of date.' do
|
test 'name valid with CJK coding' do
|
||||||
true
|
course = Course.find_by_id(74)
|
||||||
|
name_quirk = '电路与电子学基础(软件工程专业)'
|
||||||
|
course.name = "test_course"
|
||||||
|
assert course.valid?
|
||||||
|
course.name = name_quirk
|
||||||
|
assert course.valid?
|
||||||
|
end
|
||||||
|
|
||||||
|
test 'description too long must be valid.' do
|
||||||
|
course = Course.find_by_id(8)
|
||||||
|
course.description = course.description * 100
|
||||||
|
course.valid?
|
||||||
|
assert_equal course.errors.full_messages.count, 0
|
||||||
|
assert course.valid?
|
||||||
end
|
end
|
||||||
|
|
||||||
def teardown
|
def teardown
|
||||||
|
|
Loading…
Reference in New Issue