Merge branch 'szzh' into dev_zanle

Conflicts:
	app/views/projects/show.html.erb
This commit is contained in:
lizanle 2015-03-05 17:24:19 +08:00
commit 8d322edb90
145 changed files with 8746 additions and 1159 deletions

23
.gitignore vendored
View File

@ -1,23 +0,0 @@
*.swp
/.project
/.idea
/.bundle
*.swp
/config/database.yml
/config/configuration.yml
/files/*
/log/*
/public/tmp/*
/tmp/*
/public/cache/*
.gitignore
/config/newrelic.yml
/public/images/avatars/*
/Gemfile
/Gemfile.lock
/db/schema.rb
/Gemfile.lock
/lib/plugins/acts_as_versioned/test/debug.log
.rbenv-gemsets
.DS_Store
public/api_doc/

View File

@ -21,7 +21,8 @@ gem 'acts-as-taggable-on', '2.4.1'
gem 'spreadsheet'
gem 'ruby-ole'
#gem 'email_verifier', path: 'lib/email_verifier'
gem 'rufus-scheduler'
gem 'dalli', path: 'lib/dalli-2.7.2'
group :development do
gem 'grape-swagger'
gem 'grape-swagger-ui', git: 'https://github.com/guange2015/grape-swagger-ui.git'

View File

@ -1,348 +0,0 @@
GIT
remote: https://github.com/guange2015/grape-swagger-ui.git
revision: 4c33439f236c174ae0e774b3435ef2547995c21d
specs:
grape-swagger-ui (0.0.4)
railties (>= 3.1)
PATH
remote: lib/better_errors
specs:
better_errors (1.1.0)
coderay (>= 1.0.0)
erubis (>= 2.6.6)
PATH
remote: lib/rack-mini-profiler
specs:
rack-mini-profiler (0.9.1)
rack (>= 1.1.3)
PATH
remote: lib/seems_rateable
specs:
seems_rateable (1.0.13)
jquery-rails
rails
GEM
remote: http://rubygems.org/
remote: https://rubygems.org/
specs:
actionmailer (3.2.13)
actionpack (= 3.2.13)
mail (~> 2.5.3)
actionpack (3.2.13)
activemodel (= 3.2.13)
activesupport (= 3.2.13)
builder (~> 3.0.0)
erubis (~> 2.7.0)
journey (~> 1.0.4)
rack (~> 1.4.5)
rack-cache (~> 1.2)
rack-test (~> 0.6.1)
sprockets (~> 2.2.1)
activemodel (3.2.13)
activesupport (= 3.2.13)
builder (~> 3.0.0)
activerecord (3.2.13)
activemodel (= 3.2.13)
activesupport (= 3.2.13)
arel (~> 3.0.2)
tzinfo (~> 0.3.29)
activeresource (3.2.13)
activemodel (= 3.2.13)
activesupport (= 3.2.13)
activesupport (3.2.13)
i18n (= 0.6.1)
multi_json (~> 1.0)
acts-as-taggable-on (2.4.1)
rails (>= 3, < 5)
arel (3.0.3)
axiom-types (0.1.1)
descendants_tracker (~> 0.0.4)
ice_nine (~> 0.11.0)
thread_safe (~> 0.3, >= 0.3.1)
builder (3.0.0)
capybara (2.4.1)
mime-types (>= 1.16)
nokogiri (>= 1.3.3)
rack (>= 1.0.0)
rack-test (>= 0.5.4)
xpath (~> 2.0)
celluloid (0.16.0)
timers (~> 4.0.0)
childprocess (0.5.3)
ffi (~> 1.0, >= 1.0.11)
climate_control (0.0.3)
activesupport (>= 3.0)
cocaine (0.5.4)
climate_control (>= 0.0.3, < 1.0)
coderay (1.0.9)
coercible (1.0.0)
descendants_tracker (~> 0.0.1)
coffee-rails (3.2.2)
coffee-script (>= 2.2.0)
railties (~> 3.2.0)
coffee-script (2.3.0)
coffee-script-source
execjs
coffee-script-source (1.7.1)
descendants_tracker (0.0.4)
thread_safe (~> 0.3, >= 0.3.1)
diff-lcs (1.2.5)
equalizer (0.0.9)
erubis (2.7.0)
execjs (2.2.1)
factory_girl (4.4.0)
activesupport (>= 3.0.0)
faker (1.4.3)
i18n (~> 0.5)
fastercsv (1.5.5)
ffi (1.9.3)
ffi (1.9.3-x86-mingw32)
formatador (0.2.5)
grape (0.9.0)
activesupport
builder
hashie (>= 2.1.0)
multi_json (>= 1.3.2)
multi_xml (>= 0.5.2)
rack (>= 1.3.0)
rack-accept
rack-mount
virtus (>= 1.0.0)
grape-entity (0.4.4)
activesupport
multi_json (>= 1.3.2)
grape-swagger (0.8.0)
grape
grape-entity
guard (2.11.1)
formatador (>= 0.2.4)
listen (~> 2.7)
lumberjack (~> 1.0)
nenv (~> 0.1)
notiffany (~> 0.0)
pry (>= 0.9.12)
shellany (~> 0.0)
thor (>= 0.18.1)
guard-rspec (2.5.0)
guard (>= 1.1)
rspec (~> 2.11)
hashie (3.3.1)
hike (1.2.3)
hitimes (1.2.2)
hitimes (1.2.2-x86-mingw32)
htmlentities (4.3.2)
i18n (0.6.1)
ice_nine (0.11.0)
journey (1.0.4)
jquery-rails (2.0.3)
railties (>= 3.1.0, < 5.0)
thor (~> 0.14)
json (1.8.1)
kaminari (0.16.1)
actionpack (>= 3.0.0)
activesupport (>= 3.0.0)
libv8 (3.16.14.3)
listen (2.8.5)
celluloid (>= 0.15.2)
rb-fsevent (>= 0.9.3)
rb-inotify (>= 0.9)
lumberjack (1.0.9)
mail (2.5.4)
mime-types (~> 1.16)
treetop (~> 1.4.8)
metaclass (0.0.4)
method_source (0.8.2)
mime-types (1.25.1)
mini_portile (0.6.0)
mocha (1.1.0)
metaclass (~> 0.0.1)
multi_json (1.10.1)
multi_xml (0.5.5)
mysql2 (0.3.11)
mysql2 (0.3.11-x86-mingw32)
nenv (0.2.0)
net-ldap (0.3.1)
nokogiri (1.6.3)
mini_portile (= 0.6.0)
nokogiri (1.6.3-x86-mingw32)
mini_portile (= 0.6.0)
notiffany (0.0.3)
nenv (~> 0.1)
shellany (~> 0.0)
paperclip (3.5.4)
activemodel (>= 3.0.0)
activesupport (>= 3.0.0)
cocaine (~> 0.5.3)
mime-types
polyglot (0.3.5)
pry (0.9.12.6)
coderay (~> 1.0)
method_source (~> 0.8)
slop (~> 3.4)
pry (0.9.12.6-x86-mingw32)
coderay (~> 1.0)
method_source (~> 0.8)
slop (~> 3.4)
win32console (~> 1.3)
rack (1.4.5)
rack-accept (0.4.5)
rack (>= 0.4)
rack-cache (1.2)
rack (>= 0.4)
rack-mount (0.8.3)
rack (>= 1.0.0)
rack-openid (1.4.2)
rack (>= 1.1.0)
ruby-openid (>= 2.1.8)
rack-raw-upload (1.1.1)
multi_json
rack-ssl (1.3.4)
rack
rack-test (0.6.2)
rack (>= 1.0)
rails (3.2.13)
actionmailer (= 3.2.13)
actionpack (= 3.2.13)
activerecord (= 3.2.13)
activeresource (= 3.2.13)
activesupport (= 3.2.13)
bundler (~> 1.0)
railties (= 3.2.13)
railties (3.2.13)
actionpack (= 3.2.13)
activesupport (= 3.2.13)
rack-ssl (~> 1.3.2)
rake (>= 0.8.7)
rdoc (~> 3.4)
thor (>= 0.14.6, < 2.0)
rake (10.3.2)
rb-fsevent (0.9.4)
rb-inotify (0.9.5)
ffi (>= 0.5.0)
rdoc (3.12.2)
json (~> 1.4)
ref (1.0.5)
rich (1.4.6)
jquery-rails
kaminari
mime-types
paperclip
rack-raw-upload
rails (>= 3.2.0)
sass-rails
rspec (2.13.0)
rspec-core (~> 2.13.0)
rspec-expectations (~> 2.13.0)
rspec-mocks (~> 2.13.0)
rspec-core (2.13.1)
rspec-expectations (2.13.0)
diff-lcs (>= 1.1.3, < 2.0)
rspec-mocks (2.13.1)
rspec-rails (2.13.1)
actionpack (>= 3.0)
activesupport (>= 3.0)
railties (>= 3.0)
rspec-core (~> 2.13.0)
rspec-expectations (~> 2.13.0)
rspec-mocks (~> 2.13.0)
ruby-ole (1.2.11.7)
ruby-openid (2.1.8)
rubyzip (1.1.6)
sass (3.3.10)
sass-rails (3.2.6)
railties (~> 3.2.0)
sass (>= 3.1.10)
tilt (~> 1.3)
selenium-webdriver (2.42.0)
childprocess (>= 0.5.0)
multi_json (~> 1.0)
rubyzip (~> 1.0)
websocket (~> 1.0.4)
shellany (0.0.1)
shoulda (3.5.0)
shoulda-context (~> 1.0, >= 1.0.1)
shoulda-matchers (>= 1.4.1, < 3.0)
shoulda-context (1.2.1)
shoulda-matchers (2.6.1)
activesupport (>= 3.0.0)
slop (3.6.0)
spreadsheet (1.0.0)
ruby-ole (>= 1.0)
sprockets (2.2.2)
hike (~> 1.2)
multi_json (~> 1.0)
rack (~> 1.0)
tilt (~> 1.1, != 1.3.0)
therubyracer (0.12.1)
libv8 (~> 3.16.14.0)
ref
thor (0.19.1)
thread_safe (0.3.4)
tilt (1.4.1)
timers (4.0.1)
hitimes
treetop (1.4.15)
polyglot
polyglot (>= 0.3.1)
tzinfo (0.3.40)
uglifier (2.5.1)
execjs (>= 0.3.0)
json (>= 1.8.0)
virtus (1.0.3)
axiom-types (~> 0.1)
coercible (~> 1.0)
descendants_tracker (~> 0.0, >= 0.0.3)
equalizer (~> 0.0, >= 0.0.9)
websocket (1.0.7)
win32console (1.3.2-x86-mingw32)
xpath (2.0.0)
nokogiri (~> 1.3)
PLATFORMS
ruby
x86-mingw32
DEPENDENCIES
activerecord-jdbc-adapter (= 1.2.5)
activerecord-jdbcmysql-adapter
acts-as-taggable-on (= 2.4.1)
better_errors!
builder (= 3.0.0)
capybara (~> 2.4.1)
coderay (~> 1.0.6)
coffee-rails (~> 3.2.1)
factory_girl (~> 4.4.0)
faker
fastercsv (~> 1.5.0)
grape (~> 0.9.0)
grape-entity
grape-swagger
grape-swagger-ui!
guard-rspec (= 2.5.0)
htmlentities
i18n (~> 0.6.0)
jquery-rails (~> 2.0.2)
kaminari
mocha (~> 1.1.0)
mysql2 (= 0.3.11)
net-ldap (~> 0.3.1)
nokogiri (~> 1.6.3)
paperclip (~> 3.5.4)
rack-mini-profiler!
rack-openid
rails (= 3.2.13)
rich (= 1.4.6)
rspec-rails (= 2.13.1)
ruby-ole
ruby-openid (~> 2.1.4)
sass-rails (~> 3.2.3)
seems_rateable!
selenium-webdriver (~> 2.42.0)
shoulda (~> 3.5.0)
spreadsheet
therubyracer
uglifier (>= 1.0.3)

View File

@ -6,6 +6,7 @@ module Mobile
require_relative 'apis/watches'
require_relative 'apis/upgrade'
require_relative 'apis/homeworks'
require_relative 'apis/comments'
class API < Grape::API
version 'v1', using: :path
format :json
@ -37,6 +38,7 @@ module Mobile
mount Apis::Watches
mount Apis::Upgrade
mount Apis::Homeworks
mount Apis::Comments
#add_swagger_documentation ({api_version: 'v1', base_path: 'http://u06.shellinfo.cn/trustie/api'})
#add_swagger_documentation ({api_version: 'v1', base_path: '/api'}) if Rails.env.development?

View File

@ -0,0 +1,93 @@
#coding=utf-8
module Mobile
module Apis
class Comments < Grape::API
resource :comments do
desc '课程通知评论'
params do
requires :token, type: String
requires :comments, type: String
end
post ':id' do
cs = CommentService.new
cs_params = {
id: params[:id],
comment: params.reject{|k,v| [:id].include?(k)}}
comments = cs.news_comments cs_params,current_user
raise "create comments failed #{comments.errors.full_messages}" if comments.new_record?
present :data, comments, with: Mobile::Entities::Comment
present :status, 0
end
desc '作业留言(教师布置的作业)'
params do
requires :token, type: String
requires :message,type: String, desc: '留言'
#optional :reference_content, type: String ,desc: '引用的内容'
#optional :reference_user_id, type: Integer,desc: '被引用的人'
end
post ':id/create_homework_message' do
cs_params = {
id: params[:id],
token: params[:token],
reference_content: params[:reference_content],
bid_message: params.reject{|k,v| [:id,:token,:reference_content].include?(k)}}
cs = CommentService.new
message = cs.homework_message cs_params,current_user
present :data, message, with: Mobile::Entities::Jours
present :status, 0
end
desc '课程留言'
params do
requires :token, type: String
requires :course_message,type: String, desc: '留言'
end
post ':id/leave_course_message' do
cs_params = {
id: params[:id],
token: params[:token],
new_form: params.reject{|k,v| [:id,:token].include?(k)}}
cs = CommentService.new
message = cs.leave_course_message cs_params,current_user
present :data, message, with: Mobile::Entities::Jours
present :status, 0
end
desc '回复留言'
params do
requires :token, type: String
requires :reference_id, type: Integer,desc: '所属留言树的根留言id最顶层的非回复的留言,留言对象中的m_parent_id'
requires :reference_user_id,type: Integer ,desc: '被回复的留言的作者id'
#requires :reference_message_id,type: Integer,desc: '被回复的留言的id'
requires :user_notes,type: String,desc: '留言的内容'
requires :jour_type,type: String,desc: '等于父留言的jour_type'
requires :jour_id,type:Integer, desc: '等于父留言的jour_id'
end
post ':reference_message_id/create_reply'do
cs = CommentService.new
message = cs.create_reply params,current_user
raise "create reply failed #{message.errors.full_messages}" if message.new_record?
present :data, message, with: Mobile::Entities::Jours
present :status, 0
end
desc ' 意见反馈'
params do
requires :token, type: String
requires :subject,type: String,desc: '意见'
end
post do
cs_params = {
memo: {:subject => params[:subject],:content => '该贴来自手机App意见反馈'},
}
cs = CommentService.new
memo = cs.create_feedback cs_params, current_user
raise "commit failed #{memo.errors.full_messages}" if memo.new_record?
present :status, 0
end
end
end
end
end

View File

@ -8,10 +8,11 @@ module Mobile
optional :school_id, type: Integer, desc: '传入学校id,返回该学校课程列表'
requires :per_page_count, type: Integer, desc: '每页总数'
requires :page, type: Integer, desc: '当前页码'
optional :token, type: String
end
get do
cs = CoursesService.new
courses = cs.course_list(params)
courses = cs.course_list(params,current_user.nil? ? User.find(2):current_user)
present :data, courses, with: Mobile::Entities::Course
present :status, 0
end
@ -130,10 +131,11 @@ module Mobile
desc "搜索课程"
params do
requires :name, type: String, desc: "课程名"
optional :token, type: String
end
get 'search' do
cs = CoursesService.new
courses = cs.search_course(params)
courses = cs.search_course(params,current_user.nil? ? User.find(2):current_user)
present :data, courses, with: Mobile::Entities::Course
present :status, 0
end
@ -165,13 +167,15 @@ module Mobile
desc "返回单个课程"
params do
requires :id, type: Integer
optional :token, type: String
end
route_param :id do
get do
cs = CoursesService.new
course = cs.show_course(params,(current_user.nil? ? User.find(2):current_user))
#course = Course.find(params[:id])
{status: 0, data: course}
present :data, course, with: Mobile::Entities::Course
present :status, 0
end
end
@ -188,17 +192,18 @@ module Mobile
desc "课程通知列表"
params do
optional :token, type: String
end
get ":course_id/news" do
cs = CoursesService.new
news = cs.course_news_list params
news = cs.course_news_list params,current_user.nil? ? User.find(2):current_user
present :data, news, with: Mobile::Entities::News
present :status, 0
end
desc "显示课程通知"
params do
optional :token, type: String
end
get "news/:id" do
cs = CoursesService.new
@ -208,6 +213,16 @@ module Mobile
present :status, 0
end
desc '用户课程动态'
params do
requires :token, type: String
end
get "course_dynamic/:id" do
cs = CoursesService.new
count = cs.course_dynamic(params,current_user)
present :data, count, with: Mobile::Entities::CourseDynamic
present :status, 0
end
end
end

View File

@ -70,6 +70,32 @@ module Mobile
present :status, 0
end
desc "作品打分"
params do
requires :token, type: String
requires :is_teacher, type: String,desc: '是否为教师(匿评作品详情返回的结果中可获取此参数的值)'
requires :is_anonymous_comments, type: String, desc: '是否为匿评(匿评作品详情返回的结果中可获取此参数的值)'
optional :stars_value, type: Integer,desc: '用户给出的评分'
optional :cur_page,type: Integer,desc: '匿评作品详情返回的结果中可获取此参数的值'
optional :cur_type, type: Integer,desc: '匿评作品详情返回的结果中可获取此参数的值'
optional :user_message, type: String, desc: '用户评论'
end
post ':homework_id/scoring' do
cs_params = {
new_form: params.reject{|k,v| [:token,:is_teacher,:is_anonymous_comments,:stars_value,:cur_page,:cur_type,:homework_id].include?(k)},
token: params[:token],
is_teacher: params[:is_teacher],
is_anonymous_comments: params[:is_anonymous_comments],
stars_value: params[:stars_value],
cur_page: params[:cur_page],
cur_type: params[:cur_type],
homework_id: params[:homework_id]
}
Homeworks.get_service.add_score_and_jour cs_params,current_user
present :status, 0
end
end
end

View File

@ -22,13 +22,15 @@ module Mobile
desc "显示用户"
params do
requires :id, type: Integer
end
get ':id' do
us = UsersService.new
ue = us.show_user params
present :data, ue,with: Mobile::Entities::User
present :status, 0
route_param :id do
get do
us = UsersService.new
ue = us.show_user params
present :data, ue,with: Mobile::Entities::User
present :status, 0
end
end
desc "修改用户"
@ -77,11 +79,12 @@ module Mobile
present :status, 0
end
desc "用户搜索"
desc "用户搜索"
params do
requires :name, type: String, desc: '用户名关键字'
requires :search_by, type: String,desc: '搜索依据0 昵称1 用户名2 邮箱'
end
get 'search' do
get 'search/search_user' do
us = UsersService.new
user = us.search_user params
present :data, user, with: Mobile::Entities::User

View File

@ -15,6 +15,7 @@ module Mobile
anonymous_works_params_expose :m_score
anonymous_works_params_expose :is_anonymous_comments
anonymous_works_params_expose :cur_type
anonymous_works_params_expose :cur_page
expose :jours ,using: Mobile::Entities::Jours do |f, opt|
if f.is_a?(Hash) && f.key?(:jours)
f[:jours]

View File

@ -0,0 +1,30 @@
module Mobile
module Entities
class Comment < Grape::Entity
include Redmine::I18n
def self.comment_expose(field)
expose field do |f,opt|
if f.is_a?(Hash) && f.key?(field)
f[field]
elsif f.is_a?(::Comment)
if f.respond_to?(field)
if field == :created_on
format_time(f.send(field))
else
f.send(field)
end
end
end
end
end
comment_expose :id
expose :author, using: Mobile::Entities::User do |c, opt|
if c.is_a? ::Comment
c.author
end
end
comment_expose :comments
comment_expose :created_on
end
end
end

View File

@ -1,6 +1,7 @@
module Mobile
module Entities
class Course < Grape::Entity
include Redmine::I18n
def self.course_expose(field)
expose field do |f,opt|
c = nil
@ -9,9 +10,11 @@ module Mobile
else
c = f[:course]
end
if field == :img_url
if f.is_a?(Hash) && f.key?(field)
f[field] if f.is_a?(Hash) && f.key?(field)
#f.img_url if f.respond_to?(:img_url)
elsif field == :created_at || field == :updated_at
(format_time(c[field]) if (c.is_a?(Hash) && c.key?(field))) || (format_time(c.send(field)) if c.respond_to?(field))
else
(c[field] if (c.is_a?(Hash) && c.key?(field))) || (c.send(field) if c.respond_to?(field))
end
@ -50,9 +53,11 @@ module Mobile
c[:course].teacher
end
end
expose :my_homework,using: Mobile::Entities::HomeworkAttach do |f, opt|
expose :my_homework,using: Mobile::Entities::Homework do |f, opt|
f[:my_homework] if f.is_a?(Hash) && f.key?(:my_homework)
end
course_expose :current_user_is_member
course_expose :current_user_is_teacher
end
end
end

View File

@ -0,0 +1,16 @@
module Mobile
module Entities
class CourseDynamic < Grape::Entity
def self.course_dynamic_expose(field)
expose field do |c,opt|
c[field] if (c.is_a?(Hash) && c.key?(field))
end
end
course_dynamic_expose :type
course_dynamic_expose :count
course_dynamic_expose :course_name
course_dynamic_expose :course_id
course_dynamic_expose :course_img_url
end
end
end

View File

@ -1,10 +1,15 @@
module Mobile
module Entities
class Homework < Grape::Entity
include Redmine::I18n
def self.homework_expose(field)
expose field do |f,opt|
if f.is_a?(Hash) && f.key?(field)
f[field]
if field == :created_on
format_time(f[field])
else
f[field]
end
elsif f.is_a?(::Bid)
if f.respond_to?(field)
f.send(field)
@ -18,8 +23,16 @@ module Mobile
homework_expose :id
#课程名称
homework_expose :course_name
#课程老师
homework_expose :course_teacher
homework_expose :course_id
#作业发布者
expose :author,using: Mobile::Entities::User do |f, opt|
f[:author]
end
#作业发布者真名
homework_expose :author_real_name
#作业次数
homework_expose :homework_times
#作业名称
@ -36,6 +49,13 @@ module Mobile
#只有作业启用了匿评功能且当前用户是课程老师且已提交的作品数量大于或等于2才能开启匿评
homework_expose :homework_state
homework_expose :created_on
homework_expose :deadline
expose :jours,using: Mobile::Entities::Jours do |f, opt|
f[:jours] if f.is_a?(Hash) && f.key?(:jours)
end
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

View File

@ -17,6 +17,8 @@ module Mobile
case field
when :homework_times
f.bid.courses.first.homeworks.index(f.bid) + 1 unless (f.bid.nil? || f.bid.courses.nil? || f.bid.courses.first.nil?)
when :comment_status
f.bid.comment_status
end
end
end
@ -28,6 +30,8 @@ module Mobile
homework_attach_expose :homework_times
homework_attach_expose :description
homework_attach_expose :created_at
#comment_status 0:所属作业尚未开启匿评1匿评中 2匿评结束
homework_attach_expose :comment_status
expose :attachments,using: Mobile::Entities::Attachment do |f, opt|
if f.respond_to?(:attachments)
f.send(:attachments)

View File

@ -6,7 +6,11 @@ module Mobile
def self.homework_jours_expose(field)
expose field do |f,opt|
if f.is_a?(Hash) && f.key?(field)
f[field]
if field == :created_at
format_time(f[field])
else
f[field]
end
elsif f.is_a?(::SeemsRateableRates)
end

View File

@ -18,12 +18,15 @@ module Mobile
end
end
jours_expose :id
jours_expose :jour_type
jours_expose :jour_id
expose :user,using: Mobile::Entities::User do |f, opt|
f.user
end
jours_expose :created_on
jours_expose :notes
jours_expose :m_reply_id
jours_expose :m_parent_id
expose :reply_user,using: Mobile::Entities::User do |f, opt|
f.at_user
end

View File

@ -1,6 +1,7 @@
module Mobile
module Entities
class News < Grape::Entity
include Redmine::I18n
def self.news_expose(field)
expose field do |f,opt|
if f.is_a?(Hash) && f.key?(field)
@ -9,13 +10,18 @@ module Mobile
n = f[:news]
comments = f[:comments]
if n.is_a?(::News)
n.send(field) if n.respond_to?(field)
if field == :created_on
format_time(n.send(field)) if n.respond_to?(field)
else
n.send(field) if n.respond_to?(field)
end
end
end
end
end
news_expose :id
#新闻标题
news_expose :title
@ -34,7 +40,11 @@ module Mobile
#评论数量
news_expose :comments_count
#评论
news_expose :comments
expose :comments, using: Mobile::Entities::Comment do |f, opt|
if f.is_a?(Hash) && f.key?(:comments)
f[:comments]
end
end
end

View File

@ -315,7 +315,7 @@ class AccountController < ApplicationController
code = /\d*/
#根据home_url生产正则表达式
eval("code = " + "/^" + home_url.gsub(/\//,"\\\/") + "\\\/*(welcome)?\\\/*(\\\/index\\\/*.*)?\$/")
if code=~params[:back_url] && last_login_on != ''
if (code=~params[:back_url] || params[:back_url].to_s.include?('lost_password')) && last_login_on != ''
redirect_to user_activities_path(user)
else
if last_login_on == ''

View File

@ -9,7 +9,7 @@ class BidsController < ApplicationController
menu_item :homework_statistics, :only => :homework_statistics
menu_item :edit, :only => :edit
before_filter :auth_login1, :only => [:show_courseEx]
before_filter :can_show_course,only: []
before_filter :can_show_contest,only: []

View File

@ -5,6 +5,7 @@ class CoursesController < ApplicationController
helper :members
helper :words
before_filter :auth_login1, :only => [:show, :feedback]
menu_item :overview
menu_item :feedback, :only => :feedback
menu_item :homework, :only => :homework
@ -98,7 +99,8 @@ class CoursesController < ApplicationController
#更新课程信息
def update
cs = CoursesService.new
@course = cs.edit_course params,@course,User.current
c = cs.edit_course params,@course,User.current
@course = c[:course]
if @course.errors.full_messages.count <= 0
respond_to do |format|
format.html {
@ -254,8 +256,8 @@ class CoursesController < ApplicationController
end
@is_remote = true
@result_count = @results.count
@results = paginateHelper @results
@results = paginateHelper @results, 10
@search_name = q
end
def addgroups
@ -428,17 +430,34 @@ class CoursesController < ApplicationController
# @results = paginateHelper @results@score_sort_by = "desc"
@is_remote = true
@score_sort_by = params[:sort_by] if params[:sort_by]
@search_name = params[:search_name] if params[:search_name]
group_id = params[:group_id]
if group_id == '0'
page = params[:page].nil? ? 0 : (params['page'].to_i - 1)
@results = student_homework_score(0,page, 10,@score_sort_by)
if !@search_name.nil?
if group_id == '0'
page = params[:page].nil? ? 0 : (params['page'].to_i - 1)
@results = paginateHelper_for_members @results, 10
@results = searchmember_by_name(student_homework_score(0,0,0,@score_sort_by), @search_name)
@result_count = @results.count
@results = paginateHelper @results, 10
else
@group = CourseGroup.find(group_id)
@results = searchmember_by_name(student_homework_score(group_id, 0, 0,@score_sort_by),@search_name)
@result_count = @results.count
@results = paginateHelper @results, 10
end
else
@group = CourseGroup.find(group_id)
@results = student_homework_score(group_id, 0, 0,@score_sort_by)
@results = paginateHelper @results, 10
if group_id == '0'
page = params[:page].nil? ? 0 : (params['page'].to_i - 1)
@results = student_homework_score(0,page, 10,@score_sort_by)
@results = paginateHelper_for_members @results, 10
else
@group = CourseGroup.find(group_id)
@results = student_homework_score(group_id, 0, 0,@score_sort_by)
@results = paginateHelper @results, 10
end
end
end
# 显示每个学生的作业评分详情
def show_member_score
@ -481,7 +500,7 @@ class CoursesController < ApplicationController
def create
cs = CoursesService.new
@course = cs.create_course params,User.current
@course = cs.create_course(params,User.current)[:course]
if @course.new_record?
respond_to do |format|
format.html { render :action => 'new', :layout => 'base' } #Added by young
@ -938,10 +957,34 @@ class CoursesController < ApplicationController
else
render_403
end
end
#根据已有课程复制课程
#param id:已有课程ID
def copy_course
if @course
@new_course = Course.new @course.attributes
@new_course.tea_id = User.current.id
@new_course.created_at = DateTime.now
@new_course.updated_at = DateTime.now
@new_course.endup_time = nil
if @new_course.save
r = Role.givable.find_by_id(Setting.new_project_user_role_id.to_i) || Role.givable.first
m = Member.new(:user => User.current, :roles => [r])
m.project_id = -1
course = CourseInfos.new(:user_id => User.current.id, :course_id => @new_course.id)
#user_grades = UserGrade.create(:user_id => User.current.id, :course_id => @course.id)
if @new_course.is_public == 1
course_status = CourseStatus.create(:course_id => @new_course.id, :watchers_count => 0, :changesets_count => 0, :grade => 0, :course_type => 1)
end
@new_course.members << m
@new_course.course_infos << course
redirect_to settings_course_url @new_course
end
else
render_404
end
end
private

View File

@ -20,7 +20,7 @@ class FilesController < ApplicationController
layout 'base_projects' #by young
menu_item :files
before_filter :auth_login1, :only => [:index]
before_filter :find_project_by_project_id#, :except => [:getattachtype]
before_filter :authorize, :except => [:getattachtype,:quote_resource_show,:search]

View File

@ -15,12 +15,14 @@ class ForumsController < ApplicationController
PageLimit = 20
def create_feedback
if User.current.logged?
@memo = Memo.new(params[:memo])
@memo.forum_id = "1"
@memo.author_id = User.current.id
#@memo = Memo.new(params[:memo])
#@memo.forum_id = "1"
#@memo.author_id = User.current.id
#@forum = @memo.forum
cs = CommentService.new
@memo = cs.create_feedback params,User.current
respond_to do |format|
if @memo.save
if !@memo.new_record?
format.html { redirect_to forum_path(@memo.forum) }
else
sort_init 'updated_at', 'desc'

View File

@ -17,6 +17,7 @@
class MessagesController < ApplicationController
include ApplicationHelper
before_filter :authorize1, :only => [:show]
menu_item :boards
default_search_scope :messages
before_filter :find_board, :only => [:new, :preview,:edit]

View File

@ -17,6 +17,7 @@
class NewsController < ApplicationController
layout 'base_projects'# by young
before_filter :authorize1, :only => [:show]
default_search_scope :news
model_object News
before_filter :find_model_object, :except => [:new, :create, :index]

View File

@ -23,6 +23,10 @@ class PollController < ApplicationController
def show
@poll = Poll.find params[:id]
if @poll.polls_status != 2 && !User.current.allowed_to?(:as_teacher,@course)
render_403
return
end
#已提交问卷的用户不能再访问该界面
if has_commit_poll?(@poll.id,User.current.id) && (!User.current.admin?)
render_403

View File

@ -19,12 +19,13 @@
# Description 封装代码,简化代码,格式化代码,
class ProjectsController < ApplicationController
layout :select_project_layout
menu_item :overview
before_filter :authorize1, :only => [:show]
menu_item :overview, :only => :show
menu_item :roadmap, :only => :roadmap
menu_item :settings, :only => :settings
menu_item :homework, :only => [:homework, :new_homework]
menu_item :feedback, :only => :feedback
menu_item :share, :only => :share
before_filter :find_project, :except => [ :index, :search,:list, :new, :create, :copy, :statistics, :new_join,
:course, :enterprise_course, :course_enterprise,:view_homework_attaches]
@ -249,6 +250,17 @@ class ProjectsController < ApplicationController
def show
=begin
# 试图跳转到请求的按钮
if params[:login]
login = params[:login]
login = login.sub(/%40/,'@')
mail = params[:login]
password = params[:password]
us = UsersService.new
user = us.register_auto(login,mail, password)
Member.create(:role_ids => [4], :user_id => user.id,:project_id => @project.id)
UserGrade.create(:user_id => user.id, :project_id => @project.id)
User.current = user unless User.current.nil?
end
if params[:jump] && redirect_to_project_menu_item(@project, params[:jump])
return
end

View File

@ -18,7 +18,7 @@ class UsersController < ApplicationController
layout :setting_layout
#Added by young
before_filter :auth_login1, :only => [:show, :user_activities]
before_filter :auth_login1, :only => [:show, :user_activities, :user_newfeedback]
menu_item :activity
menu_item :user_information, :only => :info
menu_item :user_course, :only => :user_courses

View File

@ -25,22 +25,30 @@ class WelcomeController < ApplicationController
before_filter :entry_select, :only => [:index]
def index
unless params[:project].nil?
@cur_projects = Project.find(params[:project])
@organization = @cur_projects.enterprise_name
@organization_projects = Project.find_by_sql(["select * from projects where enterprise_name =? ", @organization])
# 企业版定制: params[:project]为传过来的参数
unless params[:organization].nil?
@cur_projects = Project.find(params[:organization])
@organization = @cur_projects.enterprise_name
@organization_projects = (current_user.admin? || User.current.member_of?(@cur_projects)) ? Project.where("enterprise_name =? ", @organization) : Project.all_public.where("enterprise_name =? ", @organization)
@e_count = @organization_projects.count
@part_projects = []
# 取十个
@organization_projects.each do |obj|
break if(@organization_projects[10] == obj)
@part_projects << Project.visible.find_by_id("#{obj.id}") unless obj.id.nil?
end
# 不够十个的用最火项目替代
@e_count < 9 ? @part_projects = find_miracle_project( 9 - @e_count, 3,"score desc") : @part_projects
# 配置文件首页定制
@enterprise_page = FirstPage.find_by_page_type('enterprise')
if @enterprise_page.nil?
@enterprise_page = FirstPage.new
@enterprise_page.page_type = 'enterprise'
end
if @e_count < 9
part_count = 9 - @e_count
# @part_projects = find_all_hot_project part_count, order
@part_projects = find_miracle_project(part_count, 3,"score desc")
end
# 主页配置部分结束
end
# end 企业版定制结束
if @first_page.nil? || @first_page.sort_type.nil?
@projects = find_miracle_project(10, 3,"score desc")
else
@ -76,7 +84,7 @@ class WelcomeController < ApplicationController
def course
@course_page = FirstPage.find_by_page_type('course')
@school_id = params[:school_id] || User.current.user_extensions.school.try(:id)
@school_id = params[:school_id] || User.current.user_extensions.school.try(:id) || 117
@logoLink ||= logolink()
##3-8月份为查找春季课程9-2月份为查找秋季课程

View File

@ -37,4 +37,27 @@ module ApiHelper
end
result
end
#########################################################
#sw
#获取课程未匿评数量
#param: user => "用户", course_id => "查询的课程ID"
#return: 作业的数量
#########################################################
def get_course_anonymous_evaluation user,course
count = 0
if course
is_teacher = is_course_teacher user,course
if is_teacher #如果是老师,显示学生提交的作业数
course.homeworks.each do |bid|
count += bid.homeworks.count
end
else #如果是学生,显示未匿评的数量
course.homeworks.each do |bid|
count += get_student_not_batch_homework_list bid,user
end
end
end
[count,is_teacher]
end
end

View File

@ -130,4 +130,20 @@ module HomeworkAttachHelper
WHERE homework_attaches.bid_id = #{bid.id} AND homework_evaluations.user_id = #{user.id} ORDER BY m_score DESC")
student_batch_homework_list
end
#########################################################
#sw
#获取学生未进行匿评的数量
#param: bid => 作业 user => 用户
#return 指定用户未进行匿评的作业的数量
#user必须是学生用户
#######################################################
def get_student_not_batch_homework_list bid,user
HomeworkAttach.find_by_sql("SELECT * FROM(SELECT homework_attaches.*,
(SELECT stars FROM seems_rateable_rates WHERE rateable_type = 'HomeworkAttach' AND rateable_id = homework_attaches.id AND rater_id = #{user.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}) AS table1
WHERE table1.m_score IS NULL").count
end
end

View File

@ -314,28 +314,28 @@ module WelcomeHelper
str = '&nbsp;'.html_safe
case event.event_type
when 'news'
str << content_tag("span", l(:field_user_active_published)) <<
str << content_tag("span", l('user.active.published')) <<
content_tag("span", find_all_event_type(event)) <<
':&nbsp;'.html_safe <<
link_to(strip_tags(event.event_description).gsub(/&nbsp;/,''), event.event_url, {:title => event.event_description})
when 'issue', 'message' , 'bid' , 'wiki-page' , 'document'
str << content_tag("span", l(:field_user_active_published)) <<
str << content_tag("span", l('user.active.published')) <<
content_tag("span", find_all_event_type(event)) <<
':&nbsp;'.html_safe <<
link_to(event.event_title, event.event_url, {:title => event.event_title})
when 'reply' ,'Reply', 'Memo'
str << content_tag("span", l(:field_user_active_published)) <<
str << content_tag("span", l('user.active.published')) <<
content_tag("span", find_all_event_type(event)) <<
':&nbsp;'.html_safe <<
link_to(strip_tags(event.event_description).gsub(/&nbsp;/,''), event.event_url, {:title => event.event_description})
when 'attachment'
str << content_tag('span', l(:field_user_active_uploaded)) <<
str << content_tag('span', l('user.active.uploaded')) <<
content_tag('span', find_all_event_type(event)) <<
':&nbsp;'.html_safe <<
link_to(event.event_title, event.event_url, {:title => event.event_title}) <<
link_to(('&nbsp;['.html_safe+l(:label_downloads_list).to_s << ']'), project_files_path(event.container.project), :class => "attachments_list_color")
else
str << content_tag("span", l(:field_user_active_updated)) <<
str << content_tag("span", l('user.active.updated')) <<
content_tag("span", find_all_event_type(event)) <<
':&nbsp;'.html_safe << link_to(event.event_title, event.event_url, {:title => event.event_title})
end

View File

@ -86,7 +86,9 @@ class Bid < ActiveRecord::Base
# 'deadline'
def add_jour(user, notes, reference_user_id = 0, options = {})
if options.count == 0
self.journals_for_messages << JournalsForMessage.new(:user_id => user.id, :notes => notes, :reply_id => reference_user_id)
jfm = JournalsForMessage.new(:user_id => user.id, :notes => notes, :reply_id => reference_user_id)
self.journals_for_messages << jfm
jfm
else
jfm = self.journals_for_messages.build(options)
jfm.save

View File

@ -18,7 +18,7 @@ class Forum < ActiveRecord::Base
acts_as_taggable
scope :by_join_date, order("created_at DESC")
after_create :send_email
#after_create :send_email
def reset_counters!
self.class.reset_counters!(id)
end

View File

@ -1,8 +1,8 @@
class ForumObserver < ActiveRecord::Observer
def after_create(forum)
Thread.start do
Mailer.forum_add(forum).deliver if Setting.notified_events.include?('forum_add')
end
end
# def after_create(forum)
# Thread.start do
# Mailer.forum_add(forum).deliver if Setting.notified_events.include?('forum_add')
# end
#
# end
end

View File

@ -21,8 +21,8 @@ class JournalsForMessage < ActiveRecord::Base
:foreign_key => 'jour_id',
:conditions => "#{self.table_name}.jour_type = 'Project' "
belongs_to :course,
:foreign_key => 'jour_id',
:conditions => "#{self.table_name}.jour_type = 'Course' "
:foreign_key => 'jour_id'
belongs_to :jour, :polymorphic => true
belongs_to :user

View File

@ -27,21 +27,104 @@ class Mailer < ActionMailer::Base
{ :host => Setting.host_name, :protocol => Setting.protocol }
end
# 贴吧新建贴吧发送邮件
# example Mailer.forum(forum).deliver
def forum_add(forum)
# author: alan
# 发送邀请未注册用户加入项目邮件
# 功能: 在加入项目的同时自动注册用户
def send_invite_in_project(email, project, invitor)
@subject = "#{invitor.name} #{l(:label_invite_project)} #{project.name} "
password = newpass(6)
@project_url = url_for(:controller => 'projects', :action => 'show', :id => project.id,
:password => password, :login => email)
mail :to => email, :subject => @subject
end
redmine_headers 'Forum' => forum.id
@forum = forum
@author = forum.creator
recipients = forum.creator.mail
# cc = wiki_content.page.wiki.watcher_recipients - recipients
@issue_author_url = url_for(user_activities_url(@author))
@forum_url = url_for(:controller => 'forums', :action => 'show', :id => forum.id)
mail :to => recipients,:subject => "[ #{l(:label_forum)} : #{forum.name} #{l(:notice_successful_create)}]"
# author: alan
# 根据用户选择发送个人日报或周报
# 发送内容: 项目【缺陷,讨论区,新闻】,课程【通知,留言,新闻】, 贴吧, 个人留言
def send_for_user_activities(user, date_to, days)
date_from = date_to - days.days
# 生成token用于直接点击登录
@user = user
token = Token.new(:user =>user , :action => 'autologin')
token.save
@token = token
@user_url = url_for(my_account_url(user,:token => @token.value))
# 查询user参加的项目及课程
projects = user.projects
courses = user.courses
project_ids = projects.map{|project| project.id}.join(",")
course_ids = courses.map {|course| course.id}.join(",")
# 查询user的缺陷包括发布的跟踪的以及被指派的缺陷
@issues = Issue.find_by_sql("select DISTINCT i.* from issues i, watchers w
where (i.assigned_to_id = #{user.id} or i.author_id = #{user.id}
or (w.watchable_type = 'Issue' and w.watchable_id = i.id and w.user_id = #{user.id}))
and (i.created_on between '#{date_from}' and '#{date_to}') order by i.created_on desc")
# @bids 查询课程作业包括老师发布的作业以及user提交作业
# @attachments查询课程课件更新
@attachments ||= []
@bids ||= [] # 老师发布的作业
unless courses.first.nil?
count = courses.count
count = count - 1
for i in 0..count do
bids = courses[i].homeworks.where("bids.created_on between '#{date_from}' and '#{date_to}'").order("bids.created_on desc")
attachments = courses[i].attachments.where("attachments.created_on between '#{date_from}' and '#{date_to}'").order('attachments.created_on DESC')
@bids += bids if bids.count > 0
@attachments += attachments if attachments.count > 0
end
end
# user 提交的作业
@homeworks = HomeworkAttach.where("user_id=#{user.id} and (created_at between '#{date_from}' and '#{date_to}')").order("created_at desc")
# 查询user在课程。项目中发布的讨论帖子
messages = Message.find_by_sql("select DISTINCT * from messages where author_id = #{user.id} and (created_on between '#{date_from}' and '#{date_to}') order by created_on desc")
@course_messages ||= []
@project_messages ||= []
unless messages.first.nil?
messages.each do |msg|
if msg.project
@project_messages << msg
elsif msg.course
@course_messages << msg
end
end
end
# 查询user在课程中发布的通知项目中发的新闻
@course_news = News.find_by_sql("select DISTINCT n.* from news n
where n.course_id in (#{course_ids})
and (created_on between '#{date_from}' and '#{date_to}') order by created_on desc")
@project_news = News.find_by_sql("select DISTINCT n.* from news n where n.project_id in (#{project_ids})
and (created_on between '#{date_from}' and '#{date_to}') order by created_on desc")
# 查询user在课程及个人中留言
@course_journal_messages = JournalsForMessage.find_by_sql("select DISTINCT * from journals_for_messages where
jour_type='Course' and user_id = #{user.id}
and (created_on between '#{date_from}' and '#{date_to}') order by created_on desc")
@user_journal_messages = user.journals_for_messages.where("m_parent_id IS NULL and (created_on between '#{date_from}' and '#{date_to}')").order('created_on DESC')
# 查询user新建贴吧或发布帖子
@forums = Forum.find_by_sql("select DISTINCT * from forums where creator_id = #{user.id} and (created_at between '#{date_from}' and '#{date_to}') order by created_at desc")
@memos = Memo.find_by_sql("select DISTINCT m.* from memos m, forums f where (m.author_id = #{user.id} or (m.forum_id = f.id and f.creator_id = #{user.id}))
and (m.created_at between '#{date_from}' and '#{date_to}') order by m.created_at desc")
if days == 1
subject = "[ #{user.show_name} : #{l(:label_day_mail)}]"
@subject = " #{user.show_name} : #{date_to - 1.days} #{l(:label_day_mail)}"
else
subject = "[ #{user.show_name} : #{l(:label_week_mail)}]"
@subject = "#{user.show_name} : #{l(:label_week_mail)}"
end
mail :to => user.mail,:subject => subject
end
def forum_message_added(memo)
@memo = memo
redmine_headers 'Memo' => memo.id
@ -50,9 +133,11 @@ class Mailer < ActionMailer::Base
@forum_url = url_for(:controller => 'forums', :action => 'show', :id => @forum.id)
@issue_author_url = url_for(user_activities_url(@author))
recipients ||= []
mems = memo.self_and_siblings
mems.each do |mem|
recipients << mem.author.mail unless recipients.include? mem.author.mail
if @forum.author.mail_notification != 'day' && @forum.author.mail_notification != 'week'
recipients << @forum.creator.mail
end
if @author.mail_notification != 'day' && @author.mail_notification != 'week'
recipients << @author.mail
end
# cc = wiki_content.page.wiki.watcher_recipients - recipients
@ -88,6 +173,17 @@ class Mailer < ActionMailer::Base
Rails.logger.error "[Builds a Mail::Message ERROR] journalsForMessage's jour is unkown type, journalsForMessage.id = #{journals_for_message.id}"
return -1
end
# 验证用户的收取邮件的方式
recipients ||= []
recipients1 ||= []
if @mail.mail_notification != 'week' && @mail.mail_notification != 'day'
recipients1 = @mail.mail
end
if journals_for_message.jour.author.mail_notification != 'week' && journals_for_message.jour.author.mail_notification != 'day'
recipients = journals_for_message.jour.author.mail
end
# modify by nwb
#如果是直接留言并且留言对象是课程
if !journals_for_message.at_user && journals_for_message.jour.class.to_s.to_sym == :Course
@ -98,10 +194,9 @@ class Mailer < ActionMailer::Base
#收件人邮箱
@recipients ||= []
@members.each do |teacher|
if teacher.user.mail_notification != 'week' && teacher.user.mail_notification != 'day'
@recipients << teacher.user.mail
end
end
mail :to => @recipients,
:subject => "#{l(:label_your_course)}#{journals_for_message.jour.name}#{l(:label_have_message)} "
@ -109,14 +204,15 @@ class Mailer < ActionMailer::Base
if !journals_for_message.jour.author.notify_about? journals_for_message
return -1
end
mail :to => journals_for_message.jour.author.mail, :subject => @title
mail :to => recipients, :subject => @title
elsif journals_for_message.jour.class.to_s.to_sym == :Contest
if !journals_for_message.jour.author.notify_about? journals_for_message
return -1
end
mail :to => journals_for_message.jour.author.mail, :subject => @title
mail :to => recipients, :subject => @title
else
mail :to => @mail.mail, :subject => @title
mail :to => recipients1, :subject => @title
end
@ -138,7 +234,6 @@ class Mailer < ActionMailer::Base
@author = issue.author
@issue = issue
user = User.find_by_mail(recipients)
token = Token.new(:user =>user , :action => 'autologin')
token.save
@token = token
@ -194,12 +289,6 @@ class Mailer < ActionMailer::Base
@user_url = url_for(my_account_url(user,:token => @token.value))
@issue_url = url_for(:controller => 'issues', :action => 'show', :id => issue.id, :anchor => "change-#{journal.id}", :token => @token.value)
s = "[#{issue.project.name} - #{issue.tracker.name} ##{issue_id}] "
s << "(#{issue.status.name}) " if journal.new_value_for('status_id')
s << issue.subject
@ -750,4 +839,13 @@ class Mailer < ActionMailer::Base
end
end
end
# author: alan
# 功能: 生成len位随机字符串
def newpass(len)
chars = ("a".."z").to_a + ("A".."Z").to_a + ("0".."9").to_a
newpass = ""
1.upto(len) { |i| newpass << chars[rand(chars.size-1)] }
return newpass
end
end

View File

@ -42,7 +42,7 @@ class Memo < ActiveRecord::Base
"parent_id",
"replies_count"
after_create :add_author_as_watcher, :reset_counters!, :sendmail#,:be_user_score -- 公共区发帖暂不计入得分
after_create :add_author_as_watcher, :reset_counters! #, :sendmail#,:be_user_score -- 公共区发帖暂不计入得分
# after_update :update_memos_forum
after_destroy :reset_counters!#,:down_user_score -- 公共区发帖暂不计入得分
# after_create :send_notification

View File

@ -24,7 +24,7 @@ class User < Principal
DEVELOPER = 3
include Redmine::SafeAttributes
seems_rateable_rater
# Different ways of displaying/sorting users
USER_FORMATS = {
:firstname_lastname => {
@ -66,10 +66,8 @@ class User < Principal
MAIL_NOTIFICATION_OPTIONS = [
['all', :label_user_mail_option_all],
['selected', :label_user_mail_option_selected],
['only_my_events', :label_user_mail_option_only_my_events],
['only_assigned', :label_user_mail_option_only_assigned],
['only_owner', :label_user_mail_option_only_owner],
['week', :label_user_mail_option_week],
['day', :label_user_mail_option_day],
['none', :label_user_mail_option_none]
]
@ -149,7 +147,7 @@ class User < Principal
scope :by_join_date, order("created_on DESC")
############################# added by liuping 关注
acts_as_watchable
seems_rateable_rater
has_one :user_extensions,:dependent => :destroy
## end
@ -188,7 +186,7 @@ class User < Principal
validates_confirmation_of :password, :allow_nil => true
validates_inclusion_of :mail_notification, :in => MAIL_NOTIFICATION_OPTIONS.collect(&:first), :allow_blank => true
validate :validate_password_length
#validates_email_realness_of :mail
# validates_email_realness_of :mail
before_create :set_mail_notification
before_save :update_hashed_password
before_destroy :remove_references_before_destroy

View File

@ -0,0 +1,90 @@
class CommentService
#评论
def news_comments params,current_user
@news = News.find(params[:id])
@course = @news.course
if @course.nil?
raise 'news in unknown course'
end
raise Unauthorized unless @news.commentable?(current_user)
if current_user.nil? || !(current_user.admin? || @course.is_public == 1 || (@course.is_public == 0 && current_user.member_of_course?(@course)))
raise '403'
end
@comment = Comment.new
@comment.send(:safe_attributes=,params[:comment],current_user)
@comment.author = current_user
@news.comments << @comment
@comment
end
#作业留言
def homework_message params,current_user
@bid = Bid.find(params[:id], :include => [{:homeworks => :user}])
if params[:bid_message][:message].size>0
if params[:reference_content]
message = params[:bid_message][:message] + "\n" + params[:reference_content]
else
message = params[:bid_message][:message]
@m = message
end
refer_user_id = params[:bid_message][:reference_user_id].to_i
jfm = @bid.add_jour(current_user, message, refer_user_id)
end
#@user = @bid.author
#@jours = @bid.journals_for_messages.where('m_parent_id IS NULL').order('created_on DESC')
#@jour = paginateHelper @jours,10
@bid.set_commit(@feedback_count)
jfm
end
#课程留言接口
def leave_course_message params,current_user
message = params[:new_form][:course_message]
feedback = Course.add_new_jour(current_user, message, params[:id])
feedback
end
#回复留言接口
def create_reply params,current_user
# 这里是创建回复所使用的方法,此方法只针对回复,每一个新的留言并不在此方法管理范围内。
# 由于多个地方用到了留言而之前的表设计也有jour_type/jour_id这类信息
# 所以在方法 add_reply_adapter 中判断所有调用此方法的来源页面,
# 为了保证兼容以往所有的代码,保证以往的方法可以调用,在返回页面中都做了各式各样的判断。
# 页面保证 render new_respond/journal_reply
# 修改 add_reply_adapter 中可以确保留言创建成功
# 删除留言功能要调用destroy也记得在destroy.js中修改
# deny api. api useless
parent_id = params[:reference_id]
author_id = current_user.id
reply_user_id = params[:reference_user_id]
reply_id = params[:reference_message_id] # 暂时不实现
content = params[:user_notes]
jour_type = params[:jour_type]
jour_id = params[:jour_id]
@show_name = params[:show_name] == "true"
options = {
:jour_id => jour_id,
:jour_type => jour_type,
:user_id => author_id,
:status => true,
:m_parent_id => parent_id,
:m_reply_id => reply_id,
:reply_id => reply_user_id,
:notes => content,
:is_readed => false}
@jfm = ::JournalsForMessage.new(options)
#@save_succ = true if @jfm.errors.empty?
@jfm.save
@jfm
end
#发贴,用于意见反馈
def create_feedback params,current_user
@memo = Memo.new(params[:memo])
@memo.forum_id = "1"
@memo.author_id = current_user.id
@memo.save
@memo
end
end

View File

@ -2,11 +2,12 @@ class CoursesService
include ApplicationHelper
include CoursesHelper
include HomeworkAttachHelper
#TODO:尚未整合权限系统
include ApiHelper
#参数school_id为0或不传时返回所有课程否则返回对应学校的课程
#参数per_page_count分页功能每页显示的课程数
#参数page分页功能当前页码
def course_list params
def course_list params,current_user
@school_id = params[:school_id]
per_page_option = params[:per_page_count] || 10
page_no = params[:page] || 1
@ -24,13 +25,13 @@ class CoursesService
@courses = @courses.offset(@course_pages.offset).limit(@course_pages.per_page)
course_list = []
@courses.each do |course|
course_list << {:course => course,:img_url => url_to_avatar(course)}
course_list << {:course => course,:img_url => url_to_avatar(course),:current_user_is_member => current_user.member_of_course?(course),:current_user_is_teacher => is_course_teacher(current_user,course)}
end
course_list
end
#搜索课程
def search_course params
def search_course params,current_user
courses_all = Course.all_course
name = params[:name]
if name.blank?
@ -43,6 +44,11 @@ class CoursesService
@courses_all = @courses;
end
@courses_all
course_list = []
@courses_all.each do |course|
course_list << {:course => course,:img_url => url_to_avatar(course),:current_user_is_member => current_user.member_of_course?(course),:current_user_is_teacher => is_course_teacher(current_user,course)}
end
course_list
end
#获取头像
@ -106,14 +112,17 @@ class CoursesService
end
#课程通知列表
def course_news_list params
def course_news_list params,current_user
if params[:course_id] && @course==nil
@course = Course.find(params[:course_id])
end
scope = @course ? @course.news.course_visible : News.course_visible
if current_user.nil? || !(current_user.admin? || @course.is_public == 1 || (@course.is_public == 0 && current_user.member_of_course?(@course)))
raise '403'
end
scope = @course ? @course.news.course_visible(current_user) : News.course_visible(current_user)
news = []
scope.each do |n|
news << {:title => n.title,:author_name => n.author.name,:author_id => n.author.id, :description => n.description,:created_on => format_time(n.created_on),:comments_count => n.comments_count}
news << {:id => n.id,:title => n.title,:author_name => n.author.name,:author_id => n.author.id, :description => n.description,:created_on => format_time(n.created_on),:comments_count => n.comments_count}
end
news
end
@ -128,9 +137,16 @@ class CoursesService
#显示课程通知(包括评论) 需验证权限
def show_course_news params,current_user
@news = News.find(params[:id])
@course = @news.course
if @course
if current_user.nil? || !(current_user.admin? || @course.is_public == 1 || (@course.is_public == 0 && current_user.member_of_course?(@course)))
raise '403'
end
end
@comments = @news.comments
@comments.reverse! if current_user.wants_comments_in_reverse_order?
{:news => @news,:comments => @comments}
#comments = []
#@comments.each do |comment|
# comments << {:author_id => comment.author_id,:author_name => comment.author.name,:commont_content => comment.comments,:time => format_time(comment.created_on)}
@ -147,7 +163,7 @@ class CoursesService
unless (course.is_public == 1 || currnet_user.member_of_course?(@course)|| currnet_user.admin?)
raise '403'
end
course
{:course => course,:img_url => url_to_avatar(course),:current_user_is_member => current_user.member_of_course?(course),:current_user_is_teacher => is_course_teacher(current_user,course)}
end
#创建课程
@ -195,7 +211,7 @@ class CoursesService
@course.members << m
@course.course_infos << course
end
@course
{:course => @course,:img_url => url_to_avatar(@course),:current_user_is_member => current_user.member_of_course?(@course),:current_user_is_teacher => is_course_teacher(current_user,@course)}
end
#验证编辑课程的权限
@ -232,7 +248,7 @@ class CoursesService
course_status = CourseStatus.create(:course_id => course.id, :grade => 0)
end
end
course
{:course => course,:img_url => url_to_avatar(course),:current_user_is_member => current_user.member_of_course?(course),:current_user_is_teacher => is_course_teacher(current_user,course)}
end
#退出课程
@ -316,9 +332,45 @@ class CoursesService
end
end
def course_dynamic(params,current_user)
@user = User.find(params[:id])
if !current_user.admin? && !@user.active?
raise '404'
return
end
if current_user == @user || current_user.admin?
membership = @user.coursememberships.all
else
membership = @user.coursememberships.all(:conditions => Course.visible_condition(current_user))
end
membership.sort! {|older, newer| newer.created_on <=> older.created_on }
result = []
membership.each do |mp|
course = mp.course
unless current_user.nil? || !(current_user.admin? || course.is_public == 1 || (course.is_public == 0 && current_user.member_of_course?(course)))
count,is_teacher = get_course_anonymous_evaluation current_user,course
if is_teacher
student_commit_number = count
else
need_anonymous_comments_count = count
end
news_count = course.news.count
message_count = course.journals_for_messages.count
result << {:course_name => course.name,:course_id => course.id,:course_img_url => url_to_avatar(course),:type => 1,:count => message_count}
result << {:course_name => course.name,:course_id => course.id,:course_img_url => url_to_avatar(course),:type => 2,:count => need_anonymous_comments_count}
result << {:course_name => course.name,:course_id => course.id,:course_img_url => url_to_avatar(course),:type => 3,:count => student_commit_number}
result << {:course_name => course.name,:course_id => course.id,:course_img_url => url_to_avatar(course),:type => 4,:count => news_count}
#{:course_name => course.name,:need_anonymous_comments_count=>need_anonymous_comments_count,:student_commit_number=>student_commit_number,:news_count=> news_count,:message_count=>message_count}
end
end
result
end
private
def show_homework_info course,bid,current_user,is_course_teacher
author = bid.author.lastname + bid.author.firstname
author_real_name = bid.author.lastname + bid.author.firstname
many_times = course.homeworks.index(bid) + 1
name = bid.name
homework_count = bid.homeworks.count #已提交的作业数量
@ -331,8 +383,9 @@ class CoursesService
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}
{:course_name => course.name,:course_id => course.id,:id => bid.id, :author => bid.author,:author_real_name => author_real_name, :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,:created_on => bid.created_on,:deadline => bid.deadline}
end
#显示作业列表的同时显示分配给当前学生匿评的作业
@ -351,4 +404,6 @@ class CoursesService
:description => description, :homework_state => state,:open_anonymous_evaluation => open_anonymous_evaluation}
end
end

View File

@ -6,6 +6,7 @@ class HomeworkService
include WordsHelper
include ApiHelper
include HomeworkAttachHelper
include CoursesHelper
# 作业详情(老师才显示启动匿评,学生不显示
# many_times 第几次(作业)
@ -25,8 +26,9 @@ class HomeworkService
state = @bid.comment_status
#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}
jours = @bid.journals_for_messages.where('m_parent_id IS NULL').order('created_on DESC')
{:course_name => course.name,:course_id => course.id,:id => @bid.id, :author => @bid.author,:author_real_name =>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,:created_on => @bid.created_on,:deadline => @bid.deadline,:jours => jours}
end
# 启动作业匿评前提示信息
@ -115,7 +117,7 @@ class HomeworkService
@is_anonymous_comments = @bid.comment_status == 1 && !@homework.users.include?(current_user) && @homework.user != current_user && !@is_teacher #判断是不是匿评(开启匿评,当前用户不是作业的创建者或者参与者,不是老师)
jours = @homework.journals_for_messages.where("is_comprehensive_evaluation = 3 or is_comprehensive_evaluation is null").order("created_on DESC")#jours留言 is null条件用以兼容历史数据
#@jour = paginateHelper jours,5 #留言
#@cur_page = params[:cur_page] || 1
@cur_page = params[:cur_page] || 1
@cur_type = params[:cur_type] || 5
teacher_stars_json_like = stars_to_json_like(@teacher_stars,true,@homework,true)
student_stars_json_like = stars_to_json_like(@student_stars,false,@homework,(false || @is_teacher))
@ -124,7 +126,7 @@ class HomeworkService
end
[@homework,{:is_teacher => @is_teacher,:m_score => @m_score,:jours => jours,:teacher_stars => teacher_stars_json_like,
:student_stars => student_stars_json_like,:is_anonymous_comments => @is_anonymous_comments,:cur_type => @cur_type}]
:student_stars => student_stars_json_like,:is_anonymous_comments => @is_anonymous_comments,:cur_type => @cur_type,:cur_page => @cur_page}]
#name = @homework.name
#desc = @homework.description
#datetime = @homework.created_at
@ -141,16 +143,51 @@ class HomeworkService
end
#作品打分/留言
def add_score_and_jour params
def add_score_and_jour params,current_user
@is_teacher,@is_anonymous_comments,@m_score = params[:is_teacher]=="true",params[:is_anonymous_comments]=="true",params[:stars_value]
@cur_page,@cur_type = params[:cur_page] || 1,params[:cur_type] || 5
@homework = HomeworkAttach.find(params[:homework_id])
comment_status = @homework.bid.comment_status
if @is_anonymous_comments && comment_status == 0
raise '尚未开启匿评!'
end
if @is_anonymous_comments && ((@m_score.nil? || @m_score.blank?) || !(params[:new_form] && params[:new_form][:user_message] && params[:new_form][:user_message] != ""))
raise '您尚未打分或评论!'
end
#保存评分
@homework.rate(@m_score.to_i,User.current.id,:quality) if @m_score
homework = @homework
is_teacher = @is_teacher ? 1 : 0
#保存评分@homework.rate(@m_score.to_i,User.current.id,:quality, (@is_teacher ? 1 : 0))
if @m_score
rate = @homework.rates(:quality).where(:rater_id => current_user.id, :is_teacher_score => is_teacher).first
if rate
rate.stars = @m_score
rate.save!
else
@homework.rates(:quality).new(:stars => @m_score, :rater_id => current_user.id, :is_teacher_score => is_teacher).save!
end
if homework.is_teacher_score == 0
if is_teacher == 1
homework.score = @m_score
homework.is_teacher_score = 1
else
sql = "SELECT AVG(stars) as stars FROM seems_rateable_rates WHERE rateable_type = 'HomeworkAttach' AND rateable_id = #{homework.id}"
score= HomeworkAttach.find_by_sql(sql).first.stars
homework.score = score
end
else
if is_teacher == 1
homework.score = @m_score
homework.is_teacher_score = 1
end
end
homework.save!
end
#保存评论
@is_comprehensive_evaluation = @is_teacher ? 1 : (@is_anonymous_comments ? 2 : 3) #判断当前评论是老师评论?匿评?留言
if params[:new_form] && params[:new_form][:user_message] && params[:new_form][:user_message] != "" #有没有留言
@homework.addjours User.current.id, params[:new_form][:user_message],0,@is_comprehensive_evaluation
@homework.addjours current_user.id, params[:new_form][:user_message],0,@is_comprehensive_evaluation
end
end
@ -238,10 +275,26 @@ class HomeworkService
membership.each do |mp|
my_homeworks = []
mp.course.homeworks.each do |bid|
hw = bid.homeworks.where("user_id = #{current_user.id}")
my_homeworks << hw[0] unless (hw.nil? || hw[0].nil?)
#hw = bid.homeworks.where("user_id = #{current_user.id}")
@bid = bid
course = @bid.courses.first
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
#end
open_anonymous_evaluation = @bid.open_anonymous_evaluation
my_homeworks << {:course_name => course.name,:id => @bid.id, :author => @bid.author,:author_real_name =>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}
end
if mp.course.homeworks.count != 0
course_list << {:course => mp.course,:img_url => url_to_avatar(mp.course),:my_homework => my_homeworks,:current_user_is_member => current_user.member_of_course?(mp.course),:current_user_is_teacher => is_course_teacher(current_user,mp.course)}
end
course_list << {:course => mp.course,:img_url => url_to_avatar(mp.course),:my_homework => my_homeworks}
end
course_list
end

View File

@ -44,7 +44,31 @@ class UsersService
#location = get_user_location @user
#{:id => @user.id, :img_url => img_url, :nickname => @user.login, :gender => gender, :work_unit => work_unit, :mail => @user.mail, :location => location, :brief_introduction => @user.user_extensions.brief_introduction}
end
def register_auto(login,mail,password)
@user = User.new
@user.admin = false
@user.register
@user.login = login
@user.mail =mail
password_confirmation = password
should_confirmation_password = true
if !password.blank? && !password_confirmation.blank? && should_confirmation_password
@user.password, @user.password_confirmation = password, password_confirmation
elsif !password.blank? && !should_confirmation_password
@user.password = password
else
@user.password = ""
end
@user = automatically_register(@user)
if @user.id != nil
ue = @user.user_extensions ||= UserExtensions.new
ue.user_id = @user.id
ue.save
end
@user
end
#显示用户
#id用户id
def show_user(params)
@ -134,7 +158,7 @@ class UsersService
membership.sort! {|older, newer| newer.created_on <=> older.created_on }
course_list = []
membership.each do |mp|
course_list << {:course => mp.course,:img_url => url_to_avatar(mp.course)}
course_list << {:course => mp.course,:img_url => url_to_avatar(mp.course),:current_user_is_member => current_user.member_of_course?(mp.course),:current_user_is_teacher => is_course_teacher(current_user,mp.course)}
end
course_list
end

View File

@ -1,7 +1,12 @@
#coding=utf-8
class WatchesService
def watch params
@current_user = User.find(params[:current_user_id])
if params[:object_type] == 'user' && params[:current_user_id] == params[:object_id]
raise '不能关注自己!'
end
@watchables = find_watchables params
if @watchables.nil?
raise '404'
end

View File

@ -1,14 +1,21 @@
<div class="attachments" style="font-weight:normal;">
<% is_float ||= false %>
<% for attachment in attachments %>
<p style="width: 100%;white-space: nowrap;overflow: hidden;text-overflow: ellipsis;">
<span title="<%= attachment.filename%>" id = "attachment_">
<% if options[:length] %>
<%= link_to_short_attachment attachment, :class => 'icon icon-attachment', :download => true,:length => options[:length] -%>
<% else %>
<%= link_to_short_attachment attachment, :class => 'icon icon-attachment', :download => true -%>
<% end %>
<%if is_float%>
<div style="max-width:55%;white-space: nowrap; overflow: hidden; text-overflow: ellipsis;float: left;">
<% end%>
<span title="<%= attachment.filename%>" id = "attachment_">
<% if options[:length] %>
<%= link_to_attachment attachment, :class => 'icon icon-attachment', :download => true,:length => options[:length] -%>
<% else %>
<%= link_to_attachment attachment, :class => 'icon icon-attachment', :download => true -%>
<% end %>
</span>
<%if is_float%>
</div>
<% end%>
</span>
<% if attachment.is_text? %>
<%= link_to image_tag('magnifier.png'),
:controller => 'attachments',
@ -19,8 +26,9 @@
<span title="<%= attachment.description%>">
<%= h(truncate(" - #{attachment.description}", length: options[:length] ? options[:length]:15, omission: '...')) unless attachment.description.blank? %>
</span>
<span class="size">(<%= number_to_human_size attachment.filesize %>)</span>
<span class="size">(
<%= number_to_human_size attachment.filesize %>)
</span>
<% if options[:deletable] %>
<% if attachment.container_type == 'HomeworkAttach' %>
<%= link_to image_tag('delete.png'), {:controller => 'attachments', :action => 'delete_homework', :id => attachment.id},
@ -39,8 +47,8 @@
<% end %>
<% end %>
<% if options[:wrap] %>
<br/>
&nbsp;
<br/>
&nbsp;
<% end %>
<% if options[:author] %>
<span class="author" title="<%= attachment.author%>">

View File

@ -25,7 +25,7 @@
<div class="st_box">
<ul class="st_box_top" style="margin-left: 17px;">
<% if @subPage_title == l(:label_student_list) %>
<li class="ml358"><%= link_to '作业积分', member_score_sort_course_path(:sort_by => (@score_sort_by == "desc" ? "asc" : "desc"), :group_id => (@group ? @group.id : 0)) ,:result => members,method: 'get', remote: true%>
<li class="ml358"><%= link_to '作业积分', member_score_sort_course_path(:sort_by => (@score_sort_by == "desc" ? "asc" : "desc"), :group_id => (@group ? @group.id : 0),:search_name => (@search_name ? @search_name : nil)) ,:result => members,method: 'get', remote: true%>
<% if @score_sort_by == 'desc' %>
<a id="pic" href="#" class= "st_down"></a>
<% else %>

View File

@ -96,21 +96,20 @@
<%= image_tag(url_to_avatar(@project), :class => 'avatar2') %>
</td>
<td>
<div class="info-course">
<%= link_to @project.name, project_path(@project)%>
</div>
<div>
<% if @project.project_type == 0 %>
<%= l(:label_project_grade)%> :
<%= link_to(format("%.2f" ,project_scores(@project) ).to_i, {:controller => 'projects',
:action => 'show_projects_score',
:remote => true,
:id => @project.id
}, :style => "color: #EC6300;")%>
<% end %>
<!-- end -->
</div>
<% project_score = format("%.2f" ,project_scores(@project)).to_i%>
<div class="info-course">
<%= link_to @project.name, project_path(@project)%>
</div>
<div>
<% if @project.project_type == 0 && project_score != 0 %>
<%= l(:label_project_grade)%> :
<%= link_to(project_score, {:controller => 'projects',
:action => 'show_projects_score',
:remote => true,
:id => @project.id}, :style => "color: #EC6300;")%>
<% end %>
<!-- end -->
</div>
<div id="join_exit_project_div">
<%= render 'layouts/join_exit_project' %>
</div>
@ -134,7 +133,7 @@
</td>
<!-- 项目sidebar栏显示问题数目为项目总问题数排除已关闭和已解决的项目问题数即排除3已解决5已关闭的 项目问题数 !-->
<td class="font_index">
<%=link_to "#{@project.issues.where('status_id in (1,2,4,6)').count}", project_issues_path(@project) %>
<%=link_to "#{@project.issues.where('status_id in (1,2,4,6)').count}/#{@project.issues.count}", project_issues_path(@project) %>
</td>
</tr>
<tr class="font_aram">

View File

@ -68,7 +68,7 @@
</tr>
<tr>
<td>
<%=link_to "主页", home_path %> >
<%=link_to l(:field_homepage), home_path %> >
<span>
<%=link_to @user.name, user_path %>
</span>
@ -343,7 +343,7 @@
<% if @user.user_extensions.identity == 2 %>
<%= render_menu :user_enterprise_menu %>
<% else %>
<%= render_menu :user_menu,@user %>
<%= render_menu :user_menu, @user %>
<% end %>
</div>

View File

@ -0,0 +1,373 @@
<div class="content">
<h4 class="wmail_h4" style="color:#474646; font-size:14px; margin-bottom:5px;" >
<%= @subject %>
</h4>
<% if @attachments.first || @course_news.first || @bids.first ||
@homeworks.first || @course_journal_messages.first|| @course_messages.first %>
<div class="wmail_main" style="padding:20px 10px 0px;">
<h2 class="wmail_h2" style="color:#15bccf; "><%= l(:label_course_overview)%></h2>
<% unless @course_news.first.nil? %>
<ul class="wmail_ul" style=" list-style-type:none;clear: both;margin-left:10px; border-bottom:1px dashed #cfcfcf; padding-bottom:15px; width:720px; margin-bottom:15px;">
<h4 class="wmail_h4" style="color:#474646; font-size:14px; margin-bottom:5px;" >
<%= l(:label_course_news) %>
<span class="wmail_num" style="color:#fe3f0c; margin-left:5px; font-weight:normal;">(<%= @course_news.count %>)</span>
</h4>
<% @course_news.each do |course_new|%>
<li style="clear: both; list-style: none;">
<span class="wmail_dis" style="float:left; color:#000000; margin-right:5px;">▪</span>
<span class="wmail_b" style="color:#1b55a7; font-weight:bold; float:left;">[</span>
<%= link_to truncate(course_new.course.name,length: 30,omission: '...'), course_url(course_new.course, :token => @token.value),
:class=> "wmail_column",
:style=> " font-weight: bold; display:block; float:left; color:#1b55a7;overflow:hidden; white-space: nowrap; text-overflow:ellipsis;" %>
<span class="wmail_b" style="color:#1b55a7; font-weight:bold; float:left;">]</span>
<%= link_to course_new.author, user_activities_url(course_new.author,:token => @token.value), :class => "wmail_name",
:style => "color:#fe5722; float:left;display:block; margin-right:5px; margin-left:5px; overflow:hidden; white-space: nowrap; text-overflow:ellipsis;"%>
<span class="wmail_txt" style="float:left; margin-right:5px;color:#6e6e6e;"><%= l(:label_project_notice) %></span>
<%= link_to truncate(course_new.title,length: 30,omission: '...'), news_url(course_new,:token => @token.value),
:class => 'wmail_info',
:style => "color:#5a5a5a; float:left; margin-right:5px; display:block;color:#1b55a7;overflow:hidden; white-space: nowrap; text-overflow:ellipsis;"
%>
<span class="wmail_date" style="color:#6e6e6e; float:right;display:block; margin-left:10px;"><%= format_time(course_new.created_on) %></span>
</li>
<% end %>
<div class="cl"></div>
</ul><!--课程动态 end-->
<% end %>
<% if !@bids.first.nil? || !@homeworks.first.nil? %>
<ul class="wmail_ul" style="clear: both;margin-left:10px; border-bottom:1px dashed #cfcfcf; padding-bottom:15px; width:720px; margin-bottom:15px;">
<h4 class="wmail_h4" style="color:#474646; font-size:14px; margin-bottom:5px;"><%= l(:label_homework_overview) %><span class="wmail_num" style="color:#fe3f0c; margin-left:5px; font-weight:normal;">(<%= @bids.count %>)</span></h4>
<% unless @bids.first.nil?%>
<% @bids.each do |bid| %>
<li style="clear: both; list-style: none;">
<span class="wmail_dis" style="float:left; color:#000000; margin-right:5px;">▪</span>
<span class="wmail_b" style="color:#1b55a7; font-weight:bold; float:left;">[</span>
<%= link_to truncate(bid.courses.first.name,length: 30,omission: '...'), course_url(bid.courses.first, :token => @token.value),
:class=> "wmail_column",
:style=> " font-weight: bold; display:block; float:left; color:#1b55a7;overflow:hidden; white-space: nowrap; text-overflow:ellipsis;" %>
<span class="wmail_b" style="color:#1b55a7; font-weight:bold; float:left;">]</span>
<%= link_to bid.author, user_activities_url(bid.author,:token => @token.value), :class => "wmail_name",
:style => "color:#fe5722; float:left;display:block; margin-right:5px; margin-left:5px; overflow:hidden; white-space: nowrap; text-overflow:ellipsis;"%>
<span class="wmail_txt" style="float:left; margin-right:5px;color:#6e6e6e;"><%= l(:label_course_homework) %></span>
<%= link_to truncate(bid.name,length: 30,omission: '...'), course_for_bid_url(:id => bid.id,:token => @token.value),
:class => 'wmail_info',
:style => "color:#5a5a5a; float:left; margin-right:5px; display:block;color:#1b55a7;overflow:hidden; white-space: nowrap; text-overflow:ellipsis;"
%>
<span class="wmail_date" style="color:#6e6e6e; float:right;display:block; margin-left:10px;"><%= format_time(bid.created_on) %></span>
</li>
<% end %>
<% end %>
<% unless @homeworks.first.nil? %>
<% @homeworks.each do |homework| %>
<li style="clear: both; list-style: none;">
<span class="wmail_dis" style="float:left; color:#000000; margin-right:5px;">▪</span>
<span class="wmail_b" style="color:#1b55a7; font-weight:bold; float:left;">[</span>
<%= link_to truncate(homework.bid.courses.first.name,length: 30,omission: '...'), course_url(homework.bid.courses.first, :token => @token.value),
:class=> "wmail_column",
:style=> " font-weight: bold; display:block; float:left; color:#1b55a7;overflow:hidden; white-space: nowrap; text-overflow:ellipsis;" %>
<span class="wmail_b" style="color:#1b55a7; font-weight:bold; float:left;">]</span>
<%= link_to homework.user, user_activities_url(homework.user,:token => @token.value), :class => "wmail_name",
:style => "color:#fe5722; float:left;display:block; margin-right:5px; margin-left:5px; overflow:hidden; white-space: nowrap; text-overflow:ellipsis;"%>
<span class="wmail_txt" style="float:left; margin-right:5px;color:#6e6e6e;"><%= l(:label_course_submit_homework) %></span>
<%= link_to truncate(homework.name,length: 30,omission: '...'), course_for_bid_url(:id => homework.bid.id,:token => @token.value),
:class => 'wmail_info',
:style => "color:#5a5a5a; float:left; margin-right:5px; display:block;color:#1b55a7;overflow:hidden; white-space: nowrap; text-overflow:ellipsis;"
%>
<span class="wmail_date" style="color:#6e6e6e; float:right;display:block; margin-left:10px;"><%= format_time(homework.created_on) %></span>
</li>
<% end %>
<% end %>
<div class="cl"></div>
</ul><!--作业动态 end-->
<% end %>
<% unless @course_journal_messages.first.nil? %>
<ul class="wmail_ul" style="clear: both;margin-left:10px; border-bottom:1px dashed #cfcfcf; padding-bottom:15px; width:720px; margin-bottom:15px;">
<h4 class="wmail_h4" style="color:#474646; font-size:14px; margin-bottom:5px;" >
<%= l(:view_course_journals_for_messages) %>
<span class="wmail_num" style="color:#fe3f0c; margin-left:5px; font-weight:normal;">(<%= @course_journal_messages.count %>)</span>
</h4>
<% @course_journal_messages.each do |course_journal_message|%>
<li style="clear: both; list-style: none;">
<span class="wmail_dis" style="float:left; color:#000000; margin-right:5px;">▪</span>
<span class="wmail_b" style="color:#1b55a7; font-weight:bold; float:left;">[</span>
<%= link_to truncate(course_journal_message.course.name,length: 30,omission: '...'), course_url(course_journal_message.course, :token => @token.value),
:class=> "wmail_column",
:style=> " font-weight: bold; display:block; float:left; color:#1b55a7;overflow:hidden; white-space: nowrap; text-overflow:ellipsis;" %>
<span class="wmail_b" style="color:#1b55a7; font-weight:bold; float:left;">]</span>
<%= link_to course_journal_message.user, user_activities_url(course_journal_message.user,:token => @token.value), :class => "wmail_name",
:style => "color:#fe5722; float:left;display:block; margin-right:5px; margin-left:5px; overflow:hidden; white-space: nowrap; text-overflow:ellipsis;"%>
<span class="wmail_txt" style="float:left; margin-right:5px;color:#6e6e6e;"><%= l(:label_send_course_journals_for_messages) %></span>
<%= link_to truncate(course_journal_message.notes,length: 30,omission: '...'), course_feedback_url(course_journal_message.course,:token => @token.value),
:class => 'wmail_info',
:style => "color:#5a5a5a; float:left; margin-right:5px; display:block;color:#1b55a7;overflow:hidden; white-space: nowrap; text-overflow:ellipsis;"
%>
<span class="wmail_date" style="color:#6e6e6e; float:right;display:block; margin-left:10px;"><%= format_time(course_journal_message.created_on) %></span>
</li>
<% end %>
<div class="cl"></div>
</ul><!--课程留言 end-->
<% end %>
<% unless @course_messages.first.nil? %>
<ul class="wmail_ul" style="margin-left:10px; border-bottom:1px dashed #cfcfcf; padding-bottom:15px; width:720px; margin-bottom:15px;">
<h4 class="wmail_h4" style="color:#474646; font-size:14px; margin-bottom:5px;" >
<%= l(:view_borad_course) %>
<span class="wmail_num" style="color:#fe3f0c; margin-left:5px; font-weight:normal;">(<%= @course_journal_messages.count %>)</span>
</h4>
<% @course_messages.each do |course_message|%>
<li style="clear: both; list-style: none;">
<span class="wmail_dis" style="float:left; color:#000000; margin-right:5px;">▪</span>
<span class="wmail_b" style="color:#1b55a7; font-weight:bold; float:left;">[</span>
<%= link_to truncate(course_message.course.name,length: 30,omission: '...'), course_url(course_message.course.id, :token => @token.value),
:class=> "wmail_column",
:style=> " font-weight: bold; display:block; float:left; color:#1b55a7;overflow:hidden; white-space: nowrap; text-overflow:ellipsis;" %>
<span class="wmail_b" style="color:#1b55a7; font-weight:bold; float:left;">]</span>
<%= link_to course_message.author, user_activities_url(course_message.author,:token => @token.value), :class => "wmail_name",
:style => "color:#fe5722; float:left;display:block; margin-right:5px; margin-left:5px; overflow:hidden; white-space: nowrap; text-overflow:ellipsis;"%>
<span class="wmail_txt" style="float:left; margin-right:5px;color:#6e6e6e;"><%= l(:label_send_course_messages) %></span>
<%= link_to truncate(course_message.subject,length: 30,omission: '...'),board_message_url(course_message, :board_id => course_message.board_id,:token => @token.value),
:class => 'wmail_info',
:style => "color:#5a5a5a; float:left; margin-right:5px; display:block;color:#1b55a7;overflow:hidden; white-space: nowrap; text-overflow:ellipsis;"
%>
<span class="wmail_date" style="color:#6e6e6e; float:right;display:block; margin-left:10px;"><%= format_time(course_message.created_on) %></span>
</li>
<% end %>
<div class="cl"></div>
</ul><!--课程讨论 end-->
<% end %>
<% unless @attachments.first.nil? %>
<ul class="wmail_ul" style="margin-left:10px; border-bottom:1px dashed #cfcfcf; padding-bottom:15px; width:720px; margin-bottom:15px;">
<h4 class="wmail_h4" style="color:#474646; font-size:14px; margin-bottom:5px;" >
<%= l(:label_course_attendingcontestwork_download) %>
<span class="wmail_num" style="color:#fe3f0c; margin-left:5px; font-weight:normal;">(<%= @attachments.count %>)</span>
</h4>
<% @attachments.each do |attachment|%>
<li style="clear: both; list-style: none;">
<span class="wmail_dis" style="float:left; color:#000000; margin-right:5px;">▪</span>
<span class="wmail_b" style="color:#1b55a7; font-weight:bold; float:left;">[</span>
<%= link_to truncate(attachment.course.name,length: 30,omission: '...'), course_url(attachment.course, :token => @token.value),
:class=> "wmail_column",
:style=> " font-weight: bold; display:block; float:left; color:#1b55a7;overflow:hidden; white-space: nowrap; text-overflow:ellipsis;" %>
<span class="wmail_b" style="color:#1b55a7; font-weight:bold; float:left;">]</span>
<%= link_to attachment.author, user_activities_url(attachment.author,:token => @token.value), :class => "wmail_name",
:style => "color:#fe5722; float:left;display:block; margin-right:5px; margin-left:5px; overflow:hidden; white-space: nowrap; text-overflow:ellipsis;"%>
<span class="wmail_txt" style="float:left; margin-right:5px;color:#6e6e6e;"><%= l(:label_course_file_upload) %></span>
<%= link_to truncate(attachment.filename,length: 30,omission: '...'),course_files_url(attachment.course,:token => @token.value),
:class => 'wmail_info',
:style => "color:#5a5a5a; float:left; margin-right:5px; display:block;color:#1b55a7;overflow:hidden; white-space: nowrap; text-overflow:ellipsis;"
%>
<span class="wmail_date" style="color:#6e6e6e; float:right;display:block; margin-left:10px;"><%= format_time(attachment.created_on) %></span>
</li>
<% end %>
<div class="cl"></div>
</ul><!--课件下载 end-->
<% end %>
</div><!--课程动态 end-->
<% end %>
<% if @issues.first || @project_messages.first %>
<div class="wmail_main" style="padding:20px 10px 0px;">
<h2 class="wmail_h2" style="color:#15bccf; "><%= l(:label_project_overview_new)%></h2>
<% unless @issues.first.nil? %>
<ul class="wmail_ul" style="margin-left:10px; border-bottom:1px dashed #cfcfcf; padding-bottom:15px; width:720px; margin-bottom:15px;">
<h4 class="wmail_h4" style="color:#474646; font-size:14px; margin-bottom:5px;" >
<%= l(:label_issue_tracking) %>
<span class="wmail_num" style="color:#fe3f0c; margin-left:5px; font-weight:normal;">(<%= @issues.count %>)</span>
</h4>
<% @issues.each do |issue|%>
<li style="clear: both; list-style: none;">
<span class="wmail_dis" style="float:left; color:#000000; margin-right:5px;">▪</span>
<span class="wmail_b" style="color:#1b55a7; font-weight:bold; float:left;">[</span>
<%= link_to truncate(issue.project.name,length: 30,omission: '...'), project_url(issue.project, :token => @token.value),
:class=> "wmail_column",
:style=> " font-weight: bold; display:block; float:left; color:#1b55a7;overflow:hidden; white-space: nowrap; text-overflow:ellipsis;" %>
<span class="wmail_b" style="color:#1b55a7; font-weight:bold; float:left;">]</span>
<%= link_to issue.author, user_activities_url(issue.author,:token => @token.value), :class => "wmail_name",
:style => "color:#fe5722; float:left;display:block; margin-right:5px; margin-left:5px; overflow:hidden; white-space: nowrap; text-overflow:ellipsis;"%>
<span class="wmail_txt" style="float:left; margin-right:5px;color:#6e6e6e;"><%= l(:label_project_issue) %></span>
<%= link_to truncate(issue.subject,length: 30,omission: '...'),issue_url(issue, :token => @token.value),
:class => 'wmail_info',
:style => "color:#5a5a5a; float:left; margin-right:5px; display:block;color:#1b55a7;overflow:hidden; white-space: nowrap; text-overflow:ellipsis;"
%>
<span class="wmail_date" style="color:#6e6e6e; float:right;display:block; margin-left:10px;"><%= format_time(issue.created_on) %></span>
</li>
<% end %>
<div class="cl"></div>
</ul><!--问题跟踪 end-->
<% end %>
<% unless @project_messages.first.nil? %>
<ul class="wmail_ul" style="margin-left:10px; border-bottom:1px dashed #cfcfcf; padding-bottom:15px; width:720px; margin-bottom:15px;">
<h4 class="wmail_h4" style="color:#474646; font-size:14px; margin-bottom:5px;" >
<%= l(:project_moule_boards_show) %>
<span class="wmail_num" style="color:#fe3f0c; margin-left:5px; font-weight:normal;">(<%= @project_messages.count %>)</span>
</h4>
<% @project_messages.each do |project_message|%>
<li style="clear: both; list-style: none;">
<span class="wmail_dis" style="float:left; color:#000000; margin-right:5px;">▪</span>
<span class="wmail_b" style="color:#1b55a7; font-weight:bold; float:left;">[</span>
<%= link_to truncate(project_message.project.name,length: 30,omission: '...'), project_url(project_message.project, :token => @token.value),
:class=> "wmail_column",
:style=> " font-weight: bold; display:block; float:left; color:#1b55a7;overflow:hidden; white-space: nowrap; text-overflow:ellipsis;" %>
<span class="wmail_b" style="color:#1b55a7; font-weight:bold; float:left;">]</span>
<%= link_to project_message.author, user_activities_url(project_message.author,:token => @token.value), :class => "wmail_name",
:style => "color:#fe5722; float:left;display:block; margin-right:5px; margin-left:5px; overflow:hidden; white-space: nowrap; text-overflow:ellipsis;"%>
<span class="wmail_txt" style="float:left; margin-right:5px;color:#6e6e6e;"><%= l(:label_send_course_messages) %></span>
<%= link_to truncate(project_message.subject,length: 30,omission: '...'),board_message_url(project_message, :board_id => project_message.board_id,:token => @token.value),
:class => 'wmail_info',
:style => "color:#5a5a5a; float:left; margin-right:5px; display:block;color:#1b55a7;overflow:hidden; white-space: nowrap; text-overflow:ellipsis;"
%>
<span class="wmail_date" style="color:#6e6e6e; float:right;display:block; margin-left:10px;"><%= format_time(project_message.created_on) %></span>
</li>
<% end %>
<div class="cl"></div>
</ul><!--项目论坛 end-->
<% end %>
</div><!--项目动态 end-->
<% end %>
<% unless @user_journal_messages.first.nil? %>
<div class="wmail_main" style="padding:20px 10px 0px;">
<h2 class="wmail_h2" style="color:#15bccf; "><%= l(:label_activities) %></h2>
<ul class="wmail_ul" style="margin-left:10px; border-bottom:1px dashed #cfcfcf; padding-bottom:15px; width:720px; margin-bottom:15px;">
<h4 class="wmail_h4" style="color:#474646; font-size:14px; margin-bottom:5px;" >
<%= l(:label_user_message) %>
<span class="wmail_num" style="color:#fe3f0c; margin-left:5px; font-weight:normal;">(<%= @user_journal_messages.count %>)</span>
</h4>
<% @user_journal_messages.each do |user_journal_message|%>
<li style="clear: both; list-style: none;">
<span class="wmail_dis" style="float:left; color:#000000; margin-right:5px;">▪</span>
<%= link_to user_journal_message.user, user_activities_url(user_journal_message.user,:token => @token.value),
:class => "wmail_name",
:style => "color:#fe5722; float:left;display:block; margin-right:5px; margin-left:5px; overflow:hidden; white-space: nowrap; text-overflow:ellipsis;" %>
<span class="wmail_txt" style="float:left; margin-right:5px;color:#6e6e6e;"><%= l(:label_show_your_message) %></span>
<%= link_to truncate(user_journal_message.notes,length: 30,omission: '...'),feedback_url(@user,:token => @token.value),
:class => 'wmail_info',
:style => "color:#5a5a5a; float:left; margin-right:5px; display:block;color:#1b55a7;overflow:hidden; white-space: nowrap; text-overflow:ellipsis;"
%>
<span class="wmail_date" style="color:#6e6e6e; float:right;display:block; margin-left:10px;"><%= format_time(user_journal_message.created_on) %></span></li>
<% end %>
<div class="cl"></div>
</ul><!--课程动态 end-->
</div><!--个人动态 end-->
<% end %>
<% if @forums.first || @memos.first %>
<div class="wmail_main" style="padding:20px 10px 0px;">
<h2 class="wmail_h2" style="color:#15bccf; "><%= l(:lable_bar_active) %></h2>
<% unless @forums.first.nil? %>
<ul class="wmail_ul" style="margin-left:10px; border-bottom:1px dashed #cfcfcf; padding-bottom:15px; width:720px; margin-bottom:15px;">
<h4 class="wmail_h4" style="color:#474646; font-size:14px; margin-bottom:5px;" >
<%= l(:label_user_forum) %>
<span class="wmail_num" style="color:#fe3f0c; margin-left:5px; font-weight:normal;">(<%= @forums.count %>)</span>
</h4>
<% @forums.each do |forum|%>
<li style="clear: both; list-style: none;">
<span class="wmail_dis" style="float:left; color:#000000; margin-right:5px;">▪</span>
<%= link_to forum.creator, user_activities_url(forum.creator,:token => @token.value),
:class => "wmail_name",
:style => "color:#fe5722; float:left;display:block; margin-right:5px; margin-left:5px; overflow:hidden; white-space: nowrap; text-overflow:ellipsis;" %>
<span class="wmail_txt" style="float:left; margin-right:5px;color:#6e6e6e;"><%= l(:label_forum_new) %></span>
<%= link_to truncate(forum.name,length: 30,omission: '...'),forum_url(forum,:token => @token.value),
:class => 'wmail_info',
:style => "color:#5a5a5a; float:left; margin-right:5px; display:block;color:#1b55a7;overflow:hidden; white-space: nowrap; text-overflow:ellipsis;"
%>
<span class="wmail_date" style="color:#6e6e6e; float:right;display:block; margin-left:10px;"><%= format_time(forum.created_at) %></span></li>
<% end %>
<div class="cl"></div>
</ul><!-- 新建贴吧 end-->
<% end %>
<% unless @memos.first.nil? %>
<ul class="wmail_ul" style="margin-left:10px; border-bottom:1px dashed #cfcfcf; padding-bottom:15px; width:720px; margin-bottom:15px;">
<h4 class="wmail_h4" style="color:#474646; font-size:14px; margin-bottom:5px;" >
<%= l(:label_user_message_forum) %>
<span class="wmail_num" style="color:#fe3f0c; margin-left:5px; font-weight:normal;">(<%= @memos.count %>)</span>
</h4>
<% @memos.each do |memo|%>
<li style="clear: both; list-style: none;">
<span class="wmail_dis" style="float:left; color:#000000; margin-right:5px;">▪</span>
<%= link_to memo.author, user_activities_url(memo.author,:token => @token.value),
:class => "wmail_name",
:style => "color:#fe5722; float:left;display:block; margin-right:5px; margin-left:5px; overflow:hidden; white-space: nowrap; text-overflow:ellipsis;" %>
<span class="wmail_txt" style="float:left; margin-right:5px;color:#6e6e6e;"><%= memo.parent_id.nil? ? l(:label_memo_new_from_forum) : l(:label_reply) %></span>
<%= link_to truncate(memo.subject,length: 30,omission: '...'),forum_memo_url(memo.forum, (memo.parent_id.nil? ? memo : memo.parent_id)),
:class => 'wmail_info',
:style => "color:#5a5a5a; float:left; margin-right:5px; display:block;color:#1b55a7;overflow:hidden; white-space: nowrap; text-overflow:ellipsis;"
%>
<span class="wmail_date" style="color:#6e6e6e; float:right;display:block; margin-left:10px;"><%= format_time(memo.created_at) %></span></li>
<% end %>
<div class="cl"></div>
</ul><!-- 新建贴吧 end-->
<% end %>
</div><!--贴吧动态 end-->
<% end %>
<div class="wmail_foot" style="margin-top:20px;color:#2775d2; margin-left:10px;">
<%= link_to l(:mail_footer), @user_url, :style => "margin-top:20px;color:#2775d2; margin-left:10px;" %>
</div>
</div>

View File

@ -0,0 +1,296 @@
<%= @subject %>
<% if @attachments.first || @course_news.first || @bids.first ||
@homeworks.first || @course_journal_messages.first|| @course_messages.first %>
<%= l(:label_course_overview)%>
<% unless @course_news.first.nil? %>
<%= l(:label_course_news) %>
(<%= @course_news.count %>)
<% @course_news.each do |course_new|%>
[
<%= link_to truncate(course_new.course.name,length: 30,omission: '...'), course_url(course_new.course, :token => @token.value)%>
]
<%= link_to course_new.author, user_activities_url(course_new.author,:token => @token.value)
%>
<%= l(:label_project_notice) %>
<%= link_to truncate(course_new.title,length: 30,omission: '...'), news_url(course_new,:token => @token.value)
%> <%= format_time(course_new.created_on) %>
<% end %>
<% end %>
<% if !@bids.first.nil? || !@homeworks.first.nil? %>
<%= l(:label_homework_overview) %><%= @bids.count %>
<% unless @bids.first.nil?%>
<% @bids.each do |bid| %>
[
<%= link_to truncate(bid.courses.first.name,length: 30,omission: '...'),course_url(bid.courses.first, :token => @token.value)
%>
]
<%= link_to bid.author, user_activities_url(bid.author,:token => @token.value)
%>
<%= l(:label_course_homework) %>
<%= link_to truncate(bid.name,length: 30,omission: '...'), course_for_bid_url(bid,:token => @token.value)
%>
<%= format_time(bid.created_on) %>
<% end %>
<% end %>
<% unless @homeworks.first.nil? %>
<% @homeworks.each do |homework| %>
▪[
<%= link_to truncate(homework.bid.courses.first.name,length: 30,omission: '...'), course_url(homework.bid.courses.first, :token => @token.value)
%>
]
<%= link_to homework.user, user_activities_url(homework.user,:token => @token.value)
%>
<%= l(:label_course_submit_homework) %>
<%= link_to truncate(homework.name,length: 30,omission: '...'), course_for_bid_url(homework.bid,:token => @token.value)
%>
<%= format_time(homework.created_at) %>
<% end %>
<% end %>
<!--作业动态 end-->
<% end %>
<% unless @course_journal_messages.first.nil? %>
<%= l(:view_course_journals_for_messages) %> (<%= @course_journal_messages.count %>)
<% @course_journal_messages.each do |course_journal_message|%>
[
<%= link_to truncate(course_journal_message.course.name,length: 30,omission: '...'), course_url(course_journal_message.course, :token => @token.value)
%>
]
<%= link_to course_journal_message.user, user_activities_url(course_journal_message.user,:token => @token.value)
%>
<%= l(:label_send_course_journals_for_messages) %>
<%= link_to truncate(course_journal_message.notes,length: 30,omission: '...'), course_feedback_url(course_journal_message.course,:token => @token.value)
%>
<%= format_time(course_journal_message.created_on) %>
<% end %>
<% end %>
<% unless @course_messages.first.nil? %>
<%= l(:view_borad_course) %>
(<%= @course_journal_messages.count %>)
<% @course_messages.each do |course_message|%>
[
<%= link_to truncate(course_message.course.name,length: 30,omission: '...'), course_url(course_message.course, :token => @token.value)
%>
]
<%= link_to course_message.author, user_activities_url(course_message.author,:token => @token.value)
%>
<%= l(:label_send_course_messages) %>
<%= link_to truncate(course_message.subject,length: 30,omission: '...'),board_message_url(course_message, :board_id => course_message.board_id,:token => @token.value)
%>
<%= format_time(course_message.created_on) %>
<% end %>
<% end %>
<% unless @attachments.first.nil? %>
<%= l(:label_course_attendingcontestwork_download) %>
(<%= @attachments.count %>)
<% @attachments.each do |attachment|%>
▪[
<%= link_to truncate(attachment.course.name,length: 30,omission: '...'), course_url(attachment.course, :token => @token.value)
%>
]
<%= link_to attachment.author, user_activities_url(attachment.author,:token => @token.value)
%>
<%= l(:label_course_file_upload) %>
<%= link_to truncate(attachment.filename,length: 30,omission: '...'),course_files_url(attachment.course,:token => @token.value)
%>
<%= format_time(attachment.created_on) %>
</li>
<% end %>
</ul><!--课件下载 end-->
<% end %>
<% end %><!--课程动态 end-->
<% @issues.first || @project_messages.first %>
<%= l(:label_project_overview_new)%>
<% unless @issues.first.nil? %>
<%= l(:label_issue_tracking) %>
(<%= @issues.count %>)
<% @issues.each do |issue|%>
[
<%= link_to truncate(issue.project.name,length: 30,omission: '...'), project_url(issue.project, :token => @token.value)
%>
]
<%= link_to issue.author, user_activities_url(issue.author,:token => @token.value)
%>
<%= l(:label_project_issue) %>
<%= link_to truncate(issue. subject,length: 30,omission: '...'),issue_url(issue, :token => @token.value)
%>
<%= format_time(issue.created_on) %>
<% end %>
<% end %>
<% unless @project_messages.first.nil? %>
<%= l(:project_moule_boards_show) %>
(<%= @project_messages.count %>)
<% @project_messages.each do |project_message|%>
▪[
<%= link_to truncate(project_message.project.name,length: 30,omission: '...'), project_url(project_message.project, :token => @token.value)
%>
]
<%= link_to project_message.author, board_message_url(project_message, :board_id => project_message.board_id,:token => @token.value)
%>
<%= l(:label_send_course_messages) %>
<%= link_to truncate(project_message. subject,length: 30,omission: '...'),board_message_url(project_message, :board_id => project_message.board_id,:token => @token.value)
%>
<%= format_time(project_message.created_on) %>
<% end %>
<% end %>
<% unless @user_journal_messages.first.nil? %>
<%= l(:label_activities) %>
<%= l(:label_user_message) %>
(<%= @user_journal_messages.count %>)
<% @user_journal_messages.each do |user_journal_message|%>
<%= link_to user_journal_message.user, user_activities_url(user_journal_message.user,:token => @token.value)
%>
<%= l(:label_show_your_message) %>
<%= link_to truncate(user_journal_message.notes,length: 30,omission: '...'), feedback_url(@user,:token => @token.value)
%>
<%= format_time(user_journal_message.created_on) %>
<% end %>
<% end %>
<% if @forums.first || @memos.first %>
<%= l(:lable_bar_active) %>
<% unless @forums.first.nil? %>
<%= l(:label_user_forum) %>
(<%= @forums.count %>)
<% @forums.each do |forum|%>
<%= link_to forum.creator, user_activities_url(forum.creator,:token => @token.value) %>
<%= l(:label_forum_new) %>
<%= link_to truncate(forum.name,length: 30,omission: '...'),forum_url(forum,:token => @token.value)
%>
<%= format_time(forum.created_at) %>
<% end %>
<!-- 新建贴吧 end-->
<% end %>
<% unless @memos.first.nil? %>
<%= l(:label_user_message_forum) %>
(<%= @memos.count %>)
<% @memos.each do |memo|%>
<%= link_to memo.author, user_activities_url(memo.author,:token => @token.value)%>
<%= memo.parent_id.nil? ? l(:label_memo_new_from_forum) : l(:label_reply) %>
<%= link_to truncate(memo.subject,length: 30,omission: '...'),forum_memo_url(memo.forum, (memo.parent_id.nil? ? memo : memo.parent_id))
%>
<%= format_time(memo.created_at) %>
<% end %>
<!-- 新建贴吧 end-->
<% end %>
<!--贴吧动态 end-->
<% end %>
<%= link_to l(:mail_footer), @user_url, :style => "margin-top:20px;color:#2775d2; margin-left:10px;" %>

View File

@ -0,0 +1,17 @@
<div class="mail_box" style="border:1px solid #c8c8c8; width:570px; height: auto; padding:15px; margin-top:10px; margin-bottom:10px;">
<ul style="list-style-type:none; margin:0; padding:0;">
<li style="list-style-type:none; margin:0; padding:0;"><span style="float: left;"><strong><%= l(:mail_issue_content)%></strong></span>
<span style="float: left; width: 526px">
<p><%= @subject %> </p>
<p> <%= link_to @project_url, @project_url%></p>
</span>
</li>
</ul>
<div class="cl" style="margin-top: 30px; clear:both; overflow:hidden;"></div>
</div>

View File

@ -0,0 +1,2 @@
<%= @subject %>
<%= link_to @project_url, @project_url%>

View File

@ -67,7 +67,7 @@
<p>
<% if @memo.attachments.any?%>
<% options = {:author => true, :deletable => @memo.deleted_attach_able_by?(User.current) } %>
<%= render :partial => 'attachments/links', :locals => {:attachments => @memo.attachments, :options => options} %>
<%= render :partial => 'attachments/links', :locals => {:attachments => @memo.attachments, :options => options, :is_float => true} %>
<% end %>
</p>
<div class="clearfix"></div>
@ -136,7 +136,7 @@
<p>
<% if reply.attachments.any?%>
<% options = {:author => true, :deletable => reply.deleted_attach_able_by?(User.current) } %>
<%= render :partial => 'attachments/links', :locals => {:attachments => reply.attachments, :options => options} %>
<%= render :partial => 'attachments/links', :locals => {:attachments => reply.attachments, :options => options, :is_float => true} %>
<% end %>
</p>
</td>

View File

@ -151,9 +151,9 @@
<!-- modified by fq -->
<% if !User.current.user_extensions.nil? && !User.current.user_extensions.student_id.nil? %>
<%= text_field_tag :no, User.current.user_extensions.student_id, :placeholder => "请输入学号" %>
<%= text_field_tag :no, User.current.user_extensions.student_id, :placeholder => l(:label_account_identity_studentID) %>
<% else %>
<%= text_field_tag :no, nil, :placeholder => "请输入学号" %></span>
<%= text_field_tag :no, nil, :placeholder => l(:label_account_identity_studentID) %></span>
<% end %>
<!-- end -->
@ -217,18 +217,18 @@
<label for="occupation_name"><%= l(:field_occupation) %></label>
<span class="required">&nbsp;</span>
<% if User.current.user_extensions.nil? %>
<input id="province" name="province" style="display: none" type="text" value="请单击选择省份及学校" readonly>
<input id="province" name="province" style="display: none" type="text" value=<%= l(:field_occupation_click) %> readonly>
<input id="occupation" name="occupation" style="display: none" type="text" value="" />
<input id="occupation_name" type="text" style="display: none" readonly/>
<% else %>
<% if User.current.user_extensions.identity == 3 || User.current.user_extensions.identity == 2 %>
<input id="province" name="province" style="display: none" type="text" value="请单击选择省份及学校" readonly>
<input id="province" name="province" style="display: none" type="text" value=<%= l(:field_occupation_click) %> readonly>
<input id="occupation" name="occupation" style="display: none" type="text" value="<%= @user.user_extensions.occupation %>" />
<input id="occupation_name" type="text" style="display: none" readonly/>
<% elsif User.current.user_extensions.school.nil? %>
<input id="province" name="province" style="display: none" type="text" value="请单击选择省份及学校" readonly>
<input id="province" name="province" style="display: none" type="text" value=<%= l(:field_occupation_click) %> readonly>
<input id="occupation" name="occupation" style="display: none" type="text" />
<input id="occupation_name" type="text" style="display: none" readonly/>
<% else %>

View File

@ -5,11 +5,11 @@
<% if @projects.count == 0 %>
<h3><%= l(:label_enterprise_nil) %></h3>
<% else %>
<% @projects.each do |project| %>
<% unless project.enterprise_name.blank? %>
<% @projects.each do |organization| %>
<% unless organization.enterprise_name.blank? %>
<ul>
<li ><img src="/images/organization_logo.jpg" width="30" height="30" alt="#{project.enterprise_name}" />
<%= link_to project.enterprise_name, home_path(:project => project) %></li>
<%= link_to organization.enterprise_name, home_path(:organization => organization) %></li>
</ul>
<% end %>
<% end %>

View File

@ -0,0 +1,27 @@
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<script type="text/javascript">
function close_alert_form(){hideModal("#alert_form");}
</script>
</head>
<body>
<div id="alert_form">
<div class="upload_con">
<div class="polls_alert_upload_box">
<p class="polls_alert_box_p">
<%= message%>
</p>
<div class="polls_alert_btn_box">
<a class="upload_btn" onclick="close_alert_form();">
确&nbsp;&nbsp;定
</a>
</div>
<div class="cl"></div>
</div>
</div>
</div>
</body>
</html>

View File

@ -46,7 +46,7 @@
</a>
</li>
<% else%>
<li class="pollsbtn fl ml10 pollsbtn_grey">
<li class="pollsbtn fl ml10 pollsbtn_grey" style="margin-left: 5px;" >
发布问卷
</li>
<% end%>

View File

@ -1,2 +1,10 @@
$("#polls_<%= @poll.id %>").html("<%= escape_javascript(render :partial => 'poll',:locals => {:poll => @poll}) %>");
alert("发布成功");
$('#ajax-modal').html("<%= escape_javascript(render :partial => 'alert', locals: { :message => l(:label_memo_create_succ)}) %>");
showModal('ajax-modal', '180px');
$('#ajax-modal').css('height','111px');
$('#ajax-modal').siblings().remove();
$('#ajax-modal').before("<span style='float: right;cursor:pointer;'>" +
"<a href='#' onclick='close_alert_form();'><img src='/images/bid/close.png' width='26px' height='26px' /></a></span>");
$('#ajax-modal').parent().removeClass("alert_praise");
$('#ajax-modal').parent().css("top","").css("left","");
$('#ajax-modal').parent().addClass("poll_alert_form");

View File

@ -1,2 +1,10 @@
$("#polls_<%= @poll.id %>").html("<%= escape_javascript(render :partial => 'poll',:locals => {:poll => @poll}) %>");
alert("取消成功");
$('#ajax-modal').html("<%= escape_javascript(render :partial => 'alert', locals: { :message => l(:label_poll_republish_success)}) %>");
showModal('ajax-modal', '180px');
$('#ajax-modal').css('height','80px');
$('#ajax-modal').siblings().remove();
$('#ajax-modal').before("<span style='float: right;cursor:pointer;'>" +
"<a href='#' onclick='close_alert_form();'><img src='/images/bid/close.png' width='26px' height='26px' /></a></span>");
$('#ajax-modal').parent().removeClass("alert_praise");
$('#ajax-modal').parent().css("top","").css("left","");
$('#ajax-modal').parent().addClass("poll_alert_form");

View File

@ -1,7 +1,7 @@
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>快速进入项目通道</title>
<title><%= l('project.join.title')%></title>
<style>
#popbox{ font-size:12px; font-family:"微软雅黑","宋体"; line-height:1.9; background:#fff; font-style:normal;}
#popbox div,html,img,ul,li,p,body,h1,h2,h3,h4,p,a,table,tr,td,fieldset,input,span{ margin:0; padding:0;}
@ -47,8 +47,8 @@
<div id="popbox">
<div class="C" >
<div class="C_top">
<h2>快速进入项目通道</h2>
<p>只要持有项目的ID就可快速申请加入所在项目。项目页面搜索不到的私有项目只能从此通道进入哦</p>
<h2><%= l('project.join.title')%></h2>
<p><%= l('project.join.description')%></p>
</div>
<div class="C_form">
<%= form_tag({:controller => 'applied_project',
@ -58,13 +58,13 @@
:id => 'new-watcher-form') do %>
<ul>
<li style="padding-top: 15px;">
<span class="tips">项&nbsp;目&nbsp;ID</span>
<span class="tips"><%= l('project.join.id.label')%></span>
<input type="hidden" name="project_join" value="1">
<input type="hidden" name="user_id" value="<%= User.current.id%>">
<input class=" width190" name="project_id" id="project_id" type="text" value="" >
<input type="text" style="display: none"/>
</li>
<li class="mB5">项目ID是所在项目网址中显示的序号</li>
<li class="mB5"><%= l('project.join.id.tips')%></li>
<li>
<a href="#" class="btn" style="margin-left: 50px;" onclick="submit_form(this);">
<%= l(:label_apply_project) %>

View File

@ -15,12 +15,12 @@
</span>
</div>
<strong><%= l(:field_description) %></strong>:&nbsp;&nbsp;<%= file.description %>
<div class="c9 gray-color"> 所属分类:<%=result_come_from file%> </div>
<div class="c9 gray-color"> <%= l('attachment.category')%><%=result_come_from file%> </div>
<span class="gray blue-color">
下载:<%= file.downloads%>|
大小:<%= number_to_human_size(file.filesize) %>|
共享者:<a class="gray" ><%= link_to file.author, user_path(file.author), target: "_blank" unless file.author.blank? %></a>|
上传时间:<%= format_time(file.created_on) %>
<%= l('attachment.download_num')%><%= file.downloads%>|
<%= l('attachment.size')%><%= number_to_human_size(file.filesize) %>|
<%= l('attachment.sharer')%><a class="gray" ><%= link_to file.author, user_path(file.author), target: "_blank" unless file.author.blank? %></a>|
<%= l('attachment.upload_time')%><%= format_time(file.created_on) %>
</span>
<div style="display: none"></div>
</td>

View File

@ -3,7 +3,7 @@
<hr />
<% contests_results.each do |contest| %>
<p class="font_description2">
<strong><%= l(:label_tags_contest) %>:<%= link_to "#{contest.name}",
<strong><%= l(:label_tags_contest_name) %>:<%= link_to "#{contest.name}",
:controller => "contests",:action => "show_contest",:id => contest.id %></strong>
<br />
<strong><%= l(:label_tags_contest_description) %>:</strong><%= textilizable contest.description %>

View File

@ -3,7 +3,7 @@
<hr />
<% courses_results.each do |course| %>
<p class="font_description2">
<strong><%= l(:label_course) %>:<%= link_to "#{course.name}",course_path(course) %></strong>
<strong><%= l(:label_tags_course_name) %>:<%= link_to "#{course.name}",course_path(course) %></strong>
<br />
<strong><%= l(:label_new_course_description) %>:</strong><%= textilizable course.description %>
<%= course.updated_at %>

View File

@ -1,4 +1,4 @@
<%= link_to '+ 添加标签', 'javascript:void(0);',
<%= link_to l(:label_add_tag), 'javascript:void(0);',
:class => "yellowBtn f_l",
:onclick=>"$('#add_tag_#{obj.id}').slideToggle();" if User.current.logged? %> <!-- $('#put-tag-form-#{obj.class}-#{obj.id}').toggle(); readmore(this); -->

View File

@ -23,7 +23,7 @@
<%= l(:label_user_plural) %>(<%= @users_tags_num %>) |
<%= l(:label_tags_call)%>(<%= @bids_tags_num %>) |
<%= l(:field_filename)%>(<%= @attachments_tags_num %>) |
开源项目(<%= @open_source_projects_num %>) |
<%= l(:label_tags_opensource)%>(<%= @open_source_projects_num %>) |
<%= l(:label_tags_contest)%>(<%= @contests_tags_num %>) |
</div>
<div id="show_results">

View File

@ -1,5 +1,5 @@
<% content_for :content do %>
<h3 style="color: red;">总标签数:<%= @tags.size %>个</h3>
<h3 style="color: red;"><%= l(:label_tags_count) %><%= @tags.size %>个</h3>
<hr />
<% i = 0 %>
<div id="show_all_tags">

View File

@ -16,8 +16,8 @@
<div class="menu">
<%= link_to "#{l(:label_course_new)}", new_course_path, class: 'icon icon-add' if @user == User.current %>
<ul>
<li mode='doing' class="on">进行中</li>
<li mode='end'>已完结</li>
<li mode='doing' class="on"><%= l('user.courses.doing')%></li>
<li mode='end'><%= l('user.courses.done')%></li>
</ul>
</div>

View File

@ -2,7 +2,7 @@
<div class="menu-div">
<div class="menu">
<span style="color: #000; font-weight: bold;">
<%= "#{@user.name}的动态" %>
<%= l(:label_user_activity, :value => @user.name) %>
</span>
<ul><%#链接绑定在页面最下方的jQuery%>
<li mode='all' class="<%= "on" if @state.eql?(0) %>">
@ -158,14 +158,14 @@
<%= (l(:label_update_time).to_s << ':' << format_time(e.act.created_on)).to_s %>
</span>
</div>
<div style="display: inline-block; float: right; margin-top: 0px">
<span>
<%= link_to l(:label_find_all_comments), respond_path(e.act_id) %>
</span>
<a class="font_lighter">
<%= l(:label_comments_count, :count => e.act.commit) %>
</a>
</div>
<!--<div style="display: inline-block; float: right; margin-top: 0px">-->
<!--<span>-->
<!--<%#= link_to l(:label_find_all_comments), respond_path(e.act_id) %>-->
<!--</span>-->
<!--<a class="font_lighter">-->
<!--<%#= l(:label_comments_count, :count => e.act.commit) %>-->
<!--</a>-->
<!--</div>-->
</td>
</tr>
<% when 'Journal' %>

View File

@ -1,47 +1,63 @@
<h3><%= l(:label_user_watcher)%></h3>
<div class="inf_user_image">
<% for user in User.watched_by(@user.id) %>
<ul class="list_watch"><li>
<table width="660px" border="0" align="center">
<tr>
<td colspan="2" valign="top" width="50" ><%= link_to image_tag(url_to_avatar(user), :class => "avatar"), user_path(user), :title => "#{user.name}" %></td>
<td><table width="580px" border="0">
<tr> <!-- modified by bai 增加了关注人的名字全称-->
<td colspan="2" valign="top"><strong><%= content_tag "div", link_to(user.name,user_path(user)), :class => "project_avatar_name" %></strong>
</td>
</tr>
<tr> <!-- modified by bai 区别了“关注”里个人参与的项目与课程-->
<td colspan="2" width="580px" ><p class="font_description">
<%# unless user.memberships.empty? %>
<% cond = Project.visible_condition(User.current) + " AND projects.project_type <> 1" %>
<% memberships = user.memberships.all(:conditions => cond) %>
<%= l(:label_x_contribute_to, :count => memberships.count) %>
<% for member in memberships %>
<%= link_to_project(member.project) %><%= (user.memberships.last == member) ? '' : '' %>
<% end %>
<%# end %>
</p>
<p class="font_description">
<%# unless user.memberships.empty? %>
<% user_courses = user_courses_list(user) %>
<%= l(:label_x_course_contribute_to, :count => user_courses.count) %>
<% for course in user_courses %>
<%# if course.name != nil %>
<%= link_to course.name,{:controller => 'courses',:action => 'show',id:course.id, host: Setting.course_domain} %><%= (user_courses.last == course) ? '' : '' %>
<%# end %>
<% end %>
<%# end %>
</p>
</td>
</tr>
<!-- end -->
<tr>
<td width="200" align="right" class="font_lighter"><%= l(:label_user_joinin) %><%= format_date(user.created_on) %>
</td>
</tr>
</table></td>
</tr>
</table></li></ul>
<ul class="list_watch">
<li>
<table width="660px" border="0" align="center">
<tr>
<td colspan="2" valign="top" width="50" >
<%= link_to image_tag(url_to_avatar(user), :class => "avatar"), user_path(user), :title => "#{user.name}" %>
</td>
<td>
<table width="580px" border="0">
<tr> <!-- modified by bai 增加了关注人的名字全称-->
<td colspan="2" valign="top">
<strong>
<%= content_tag "div", link_to(user.name,user_path(user)), :class => "project_avatar_name" %>
</strong>
</td>
</tr>
<tr> <!-- modified by bai 区别了“关注”里个人参与的项目与课程-->
<td colspan="2" width="580px" >
<p class="font_description">
<%# unless user.memberships.empty? %>
<% cond = Project.visible_condition(User.current) + " AND projects.project_type <> 1" %>
<% memberships = user.memberships.all(:conditions => cond) %>
<%= l(:label_x_contribute_to, :count => memberships.count) %>
<%= "" unless memberships.empty? %>
<% for member in memberships %>
<%= link_to_project(member.project) %>
<%= (user.memberships.last == member) ? '' : '' %>
<% end %>
<%# end %>
</p>
<p class="font_description">
<%# unless user.memberships.empty? %>
<% user_courses = user_courses_list(user) %>
<%= l(:label_x_course_contribute_to, :count => user_courses.count) %>
<%= "" unless user_courses.empty? %>
<% for course in user_courses %>
<%# if course.name != nil %>
<%= link_to course.name,{:controller => 'courses',:action => 'show',id:course.id, host: Setting.course_domain} %><%= (user_courses.last == course) ? '' : '' %>
<%# end %>
<% end %>
<%# end %>
</p>
</td>
</tr>
<!-- end -->
<tr>
<td width="200" align="right" class="font_lighter">
<%= l(:label_user_joinin) %>
<%= format_date(user.created_on) %>
</td>
</tr>
</table>
</td>
</tr>
</table>
</li>
</ul>
<% end %>
</div>

View File

@ -1,8 +1,8 @@
<%
select_option = []
(select_option << [l(:label_select_project), 'projects']) if project_type == Project::ProjectType_project
(select_option << [l(:label_select_course), 'courses']) if project_type == Project::ProjectType_course
select_option << [l(:label_select_user), 'users']
(select_option << [l('welcome.search.select.project'), 'projects']) if project_type == Project::ProjectType_project
(select_option << [l('welcome.search.select.course'), 'courses']) if project_type == Project::ProjectType_course
select_option << [l('welcome.search.select.user'), 'users']
#select_option << ['教师', 'users_teacher'],
#select_option << ['学生', 'users_student']
%>
@ -49,7 +49,7 @@ form #search_type{
<%= form_tag({controller: :welcome, action: :search }, method: :get) do %>
<div class="project-search" style="float: right">
<div class='search_widget'>
<%= text_field_tag :q, nil, :placeholder => l(:label_search_information), :size => 27, style: "float:left" %>
<%= text_field_tag :q, nil, :placeholder => l('welcome.search.information'), :size => 27, style: "float:left" %>
<%= select_tag(:search_type, options_for_select(select_option), :style => "float:right" ) %>
</div>
<%#= hidden_field_tag 'project_type', project_type %>

View File

@ -1,8 +1,8 @@
<%
select_option = []
(select_option << [l(:label_select_project), 'projects']) if project_type == Project::ProjectType_project
(select_option << [l(:label_select_course), 'courses']) if project_type == Project::ProjectType_course
select_option << [l(:label_select_user), 'users']
(select_option << [l('welcome.search.select.project'), 'projects']) if project_type == Project::ProjectType_project
(select_option << [l('welcome.search.select.course'), 'courses']) if project_type == Project::ProjectType_course
select_option << [l('welcome.search.select.user'), 'users']
%>
<style type="text/css">
form #q, form #search_type{
@ -90,10 +90,10 @@ form #search_by
<div class="project-search" style="float: right">
<%= submit_tag l(:label_search), :class => "enterprise", :name => nil,:style =>"float: right; margin-left:3px;margin-top:2px" %>
<div class='search_widget' >
<%= text_field_tag :q, nil, :placeholder => l(:label_search_information), style:"float:left;" %>
<%= text_field_tag :q, nil, :placeholder => l('welcome.search.information'), style:"float:left;" %>
<input type="text" name="search_by_input" style="display: none" id="search_by_input" value="0">
<%= select_tag(:search_type, options_for_select(select_option), :onchange => "searchTypeChange();", :style => "float:right" ) %>
<%= select_tag(:search_by,options_for_select([[l(:label_select_user_nickname),"0"],[l(:label_select_user_showname),"1"],[l(:label_select_user_email),"2"]]), :onchange => "searchByChange();",:style => "float:right" ) %>
<%= select_tag(:search_by,options_for_select([[l('welcome.search.select.userinfo.nickname'),"0"],[l('welcome.search.select.userinfo.showname'),"1"],[l('welcome.search.select.userinfo.email'),"2"]]), :onchange => "searchByChange();",:style => "float:right" ) %>
</div>
<%#= hidden_field_tag 'project_type', project_type %>
</div>

View File

@ -140,7 +140,7 @@
<!--搜索框-->
<div id="J_Slide" class="d-p-index-box d-p-index-hotproject" style="float: right;">
<%= form_tag({controller: :welcome, action: :search }, method: :get) do %>
<%= text_field_tag 'name', params[:name], :placeholder => l(:label_search_information), name: "name", :class => 'blueinputbar', :style => 'width:240px; padding-right:50px;'%>
<%= text_field_tag 'name', params[:name], :placeholder => l('welcome.search.information'), name: "name", :class => 'blueinputbar', :style => 'width:240px; padding-right:50px;'%>
&nbsp;
<%= hidden_field_tag 'project_type', params[:project_type] %>
<%= submit_tag l(:label_search), :class => "enterprise", :name => "contests_search" %>

View File

@ -96,11 +96,11 @@
year_now -= 1
course_term = "秋季学期"
elsif month_now < 9
course_term = "季学期"
course_term = "季学期"
end
%>
<%# (month_now >= 3 && month_now < 9) ? course_term = "春季学期" : course_term = "秋季学期" %>
<% @school_id.nil? ? cur_school_course = [] : cur_school_course = find_miracle_course(10,7,@school_id, year_now, course_term) %>
<% cur_school_course = @school_id.nil? ? [] : find_miracle_course(10,7,@school_id, year_now, course_term) %>
<% if cur_school_course.count == 0 %>
<span>
@ -108,12 +108,13 @@
</span>
<div class="d-p-projectlist-box">
<ul class="d-p-projectlist">
<% if User.current.logged? %>
<%# if User.current.logged? %>
<li>
<%= render :partial => 'no_course_title', :locals => {:course_title => l(:label_school_no_course)} %>
</li>
<% end %>
<% User.current.logged? ? course_count = 9 : course_count = 10 %>
<%# end %>
<%# User.current.logged? ? course_count = 9 : course_count = 10 %>
<% course_count = 9 %>
<% all_new_hot_course = find_all_new_hot_course(course_count, @school_id, year_now, course_term)%>
<% while all_new_hot_course.count < course_count%>
<% if course_term == "春季学期"

View File

@ -48,7 +48,7 @@
<% end %>
<% else %>
<span class="font_welcome_school" style="color: #E8770D">
<%= link_to @organization, options={:action => 'index', :enterprise => @organization}, html_options={ :method => 'get', :style => "color: #E8770D"} %>
<%= @organization %>
</span>
<br/>
<span class="font_welcome_trustie">
@ -87,7 +87,7 @@
<!-- 企业版项目 -->
<% else %>
<% if @e_count == 0 %>
<p id="errorExplanation"><%= l(:label_enterprise_tips) %></p>
<div id="flash_notice" class="flash notice"><%= l(:label_enterprise_tips) %></div>
<% @projects.map do |project| %>
<%= render :partial => 'hot_projects_list', :locals => {:project => project} %>
<% end %>
@ -95,7 +95,7 @@
<% @organization_projects.map do |project| %>
<%= render :partial => 'hot_projects_list', :locals => {:project => project} %>
<% end %>
<p id="errorExplanation"><%= l(:label_part_enterprise_tips) %></p>
<div id="flash_notice" class="flash notice"><%= l(:label_part_enterprise_tips) %></div>
<% @part_projects.map do |project| %>
<%= render :partial => 'hot_projects_list', :locals => {:project => project} %>
<% end %>

View File

@ -17,9 +17,7 @@ module RedmineApp
# -- all .rb files in that directory are automatically loaded.
#verifier if email is real
# EmailVerifier.config do |config|
# config.verifier_email = "lizanle521@126.com"
# end
config.generators do |g|
g.test_framework :rspec,
@ -39,7 +37,8 @@ module RedmineApp
# config.plugins = [ :exception_notification, :ssl_requirement, :all ]
# Activate observers that should always be running.
config.active_record.observers = :journals_for_message_observer, :message_observer, :issue_observer, :journal_observer, :news_observer, :document_observer, :wiki_content_observer, :comment_observer
config.active_record.observers = :journals_for_message_observer, :message_observer, :issue_observer, :journal_observer, :news_observer,
:document_observer, :wiki_content_observer, :comment_observer, :forum_observer, :memo_observer
config.active_record.store_full_sti_class = true
config.active_record.default_timezone = :local

View File

@ -1,52 +0,0 @@
# Default setup is given for MySQL with ruby1.9. If you're running Redmine
# with MySQL and ruby1.8, replace the adapter name with `mysql`.
# Examples for PostgreSQL, SQLite3 and SQL Server can be found at the end.
# Line indentation must be 2 spaces (no tabs).
production:
adapter: mysql2
database: redmine
host: localhost
username: root
password: ""
encoding: utf8
development:
adapter: mysql2
database: redmine_development
host: 10.107.17.20
username: root
password: "1234"
encoding: utf8
# Warning: The database defined as "test" will be erased and
# re-generated from your development database when you run "rake".
# Do not set this db to the same as development or production.
test:
adapter: mysql2
database: redmine_test
host: 10.107.17.20
username: root
password: "1234"
encoding: utf8
# PostgreSQL configuration example
#production:
# adapter: postgresql
# database: redmine
# host: localhost
# username: postgres
# password: "postgres"
# SQLite3 configuration example
#production:
# adapter: sqlite3
# database: db/redmine.sqlite3
# SQL Server configuration example
#production:
# adapter: sqlserver
# database: redmine
# host: localhost
# username: jenkins
# password: jenkins

View File

@ -0,0 +1,27 @@
#!/usr/bin/env ruby
require 'rubygems'
require 'rufus-scheduler'
#users = User.where("mail_notification = 'week' or mail_notification = 'day'")
scheduler = Rufus::Scheduler.new
scheduler.cron('0 0 * * 1') do
users = User.where("mail_notification = 'week'")
users.each do |user|
#Rails.logger.info "send mail to #{user.show_name}(#{user.mail}) at #{Time.now}"
Thread.start do
Mailer.send_for_user_activities(user, Date.today, 7).deliver
end
end
end
scheduler.cron('0 0 * * *') do
users = User.where("mail_notification = 'day'")
users.each do |user|
#Rails.logger.info "send mail to #{user.show_name}(#{user.mail}) at #{Time.now}"
Thread.start do
Mailer.send_for_user_activities(user, Date.today, 1).deliver
end
end
end

View File

@ -0,0 +1 @@
Rails.application.config.session_store ActionDispatch::Session::CacheStore, :expire_after => 20.minutes

View File

@ -0,0 +1,90 @@
en:
# Text direction: Left-to-Right (ltr) or Right-to-Left (rtl)
direction: ltr
#
# Trustie账户模块
#
# 公共变量
#
label_max_number: "Trustie username is your public identity displayed on Trustie website, only for letters and numbers."
field_login: Account/Email
field_password: Password
text_caracters_minimum: "Must be at least %{count} characters long."
field_password_confirmation: Confirmation
field_new_password: New password
notice_account_wrong_password: Wrong password
notice_account_password_updated: "Password was successfully updated."
notice_can_t_change_password: "This account uses an external authentication source. Impossible to change the password."
field_mail: Email
field_identity_url: OpenID URL
button_submit: Submit
#
# Trustie账户模块
#
# 登陆
#
lable_user_name: Username
label_login_prompt: Email/Trustie account
label_stay_logged_in: "Keep me signed in"
label_password_lost: "Forget password"
button_login: Login
# account_controller中判断用户名或密码输入有误的提示信息
notice_account_invalid_creditentials: "Invalid user or password."
# account_controller中判断未激活的提示信息
notice_account_invalid_creditentials_new: "Please check your email to activate your account."
#
# Trustie账户模块
#
# 注册
#
label_register: Sign up
label_login_with_open_id_option: or login with OpenID
label_mail_attention: "QQ-mail may not receive this e-mail, if other mailboxes not received, probably in spam."
label_mail_attention1: "Activation email sent for Gmail and Edu-mail which sometimes slower, please be patient."
# register中js判断密码设置是否合法提示信息
setting_password_min_length_limit: "Password length greater than at least %{count} characters."
setting_password_error: "Password length inadequate or password inconsistent."
setting_password_success: "Password set successfully."
# account_controller中register方法判断注册成功的提示信息
notice_account_register_done: "Successful account creation, please use the link in the registration confirmation email to activate your account, if our messages are not in your inbox, it could in the spam box, please check it carefully."
#
# Trustie账户模块
#
# 忘记密码
#
label_password_forget: Forget password
notice_account_unknown_email: Unknown user
# account_controller中lost_password方法判断的邮件发送提示信息
notice_account_lost_email_sent: "An email with a temporary login link will be sent to that email address, which you can use to login and configure a new password."
#
# Trustie账户模块
#
# 登出
#
label_logout: Logout
#
# Trustie账户模块
#
# 激活
#
label_regiter_account: Registering for an account
label_email_valid: E-mail activation
notice_email_register_time: "Please click on the link in the email to continue to complete the registration within 24 hours"
notice_email_arrival: "An activation email has been sent to the email address you register."
label_check_email: "Now check your email"
label_mail_resend: "Resend the activation email"
notice_account_activated: "Your Trustie account has been activated. You can now sign in."

View File

@ -0,0 +1,92 @@
# Chinese (China) translations for Ruby on Rails
# by tsechingho (http://github.com/tsechingho)
zh:
# Text direction: Left-to-Right (ltr) or Right-to-Left (rtl)
direction: ltr
#
# Trustie账户模块
#
# 公共变量
#
label_max_number: "登录名是在网站中显示的您的公开标识,只能为英文和数字。"
field_login: 登录名
field_password: 密码
text_caracters_minimum: "至少需要 %{count} 个字符。"
field_password_confirmation: 密码确认
field_new_password: 新密码
notice_account_wrong_password: 密码错误
notice_account_password_updated: 密码更新成功
notice_can_t_change_password: 该帐号使用了外部认证,因此无法更改密码。
field_mail: 邮件地址
field_identity_url: OpenID URL
button_submit: 提交
#
# Trustie账户模块
#
# 登陆
#
lable_user_name: 登录名
label_login_prompt: 邮箱/登录名
label_stay_logged_in: "保持登录状态"
label_password_lost: "忘记密码?"
button_login: 登录
# account_controller中判断用户名或密码输入有误的提示信息
notice_account_invalid_creditentials: "无效的用户名或密码"
# account_controller中判断未激活的提示信息
notice_account_invalid_creditentials_new: "您还未到邮箱激活"
#
# Trustie账户模块
#
# 注册
#
label_register: 注册
label_login_with_open_id_option: 或使用OpenID登录
label_mail_attention: "qq邮箱可能收不到此邮件其他邮箱如果没有收到可能在垃圾邮件中"
label_mail_attention1: "其中gmail与教育网邮箱的激活邮件有时比较慢请耐心等待。"
# register中js判断密码设置是否合法提示信息
setting_password_min_length_limit: "密码长度至少大于 %{count} 个字符。"
setting_password_error: "密码长度不够或密码不一致"
setting_password_success: "密码设置成功"
# account_controller中register方法判断注册成功的提示信息
notice_account_register_done: "帐号创建成功,请使用注册确认邮件中的链接来激活您的帐号,如果您的邮件没有在收件箱中可能在垃圾箱中,请您注意查收。"
#
# Trustie账户模块
#
# 忘记密码
#
label_password_forget: 忘记密码
notice_account_unknown_email: 未知用户
# account_controller中lost_password方法判断的邮件发送提示信息
notice_account_lost_email_sent: 系统已将引导您设置新密码的邮件发送给您。
#
# Trustie账户模块
#
# 登出
#
label_logout: 退出
#
# Trustie账户模块
#
# 激活
#
label_regiter_account: 注册帐号
label_email_valid: 邮箱激活
notice_email_register_time: 请在24小时内点击邮件中的链接继续完成注册
notice_email_arrival: 邮件已发送到邮箱
label_check_email: 立即查收邮件
label_mail_resend: 重新发送激活邮件
notice_account_activated: 您的帐号已被激活。

View File

@ -0,0 +1,13 @@
en:
# Text direction: Left-to-Right (ltr) or Right-to-Left (rtl)
direction: ltr
#
# Trustie管理员模块
#
# 管理员设置账号激活通知方式
#
label_registration_activation_by_email: account activation by email
label_registration_manual_activation: manual account activation
label_registration_automatic_activation: automatic account activation

View File

@ -0,0 +1,16 @@
# Chinese (China) translations for Ruby on Rails
# by tsechingho (http://github.com/tsechingho)
zh:
# Text direction: Left-to-Right (ltr) or Right-to-Left (rtl)
direction: ltr
#
# Trustie管理员模块
#
# 管理员设置账号激活通知方式
#
label_registration_activation_by_email: 通过邮件认证激活帐号
label_registration_manual_activation: 手动激活帐号
label_registration_automatic_activation: 自动激活帐号

View File

@ -0,0 +1,264 @@
en:
# Text direction: Left-to-Right (ltr) or Right-to-Left (rtl)
direction: ltr
date:
formats:
# Use the strftime parameters for formats.
# When no format has been given, it uses default.
# You can provide other formats here if you like!
default: "%m/%d/%Y"
short: "%b %d"
long: "%B %d, %Y"
day_names: [Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday]
abbr_day_names: [Sun, Mon, Tue, Wed, Thu, Fri, Sat]
# Don't forget the nil at the beginning; there's no such thing as a 0th month
month_names: [~, January, February, March, April, May, June, July, August, September, October, November, December]
abbr_month_names: [~, Jan, Feb, Mar, Apr, May, Jun, Jul, Aug, Sep, Oct, Nov, Dec]
# Used in date_select and datime_select.
order:
- :year
- :month
- :day
time:
formats:
default: "%m/%d/%Y %I:%M %p"
time: "%I:%M %p"
short: "%d %b %H:%M"
long: "%B %d, %Y %H:%M"
am: "am"
pm: "pm"
datetime:
distance_in_words:
half_a_minute: "half a minute"
less_than_x_seconds:
one: "less than 1 second"
other: "less than %{count} seconds"
x_seconds:
one: "1 second"
other: "%{count} seconds"
less_than_x_minutes:
one: "less than a minute"
other: "less than %{count} minutes"
x_minutes:
one: "1 minute"
other: "%{count} minutes"
about_x_hours:
one: "about 1 hour"
other: "about %{count} hours"
x_hours:
one: "1 hour"
other: "%{count} hours"
x_days:
one: "1 day"
other: "%{count} days"
about_x_months:
one: "about 1 month"
other: "about %{count} months"
x_months:
one: "1 month"
other: "%{count} months"
about_x_years:
one: "about 1 year"
other: "about %{count} years"
over_x_years:
one: "over 1 year"
other: "over %{count} years"
almost_x_years:
one: "almost 1 year"
other: "almost %{count} years"
errors:
messages:
email_verifier:
email_not_real: must point to a real mail account
out_of_mail_server: appears to point to dead mail server
no_mail_server: appears to point to domain which doesn't handle e-mail
failure: could not be checked if is real
exception: could not be sent
number:
format:
separator: "."
delimiter: ""
precision: 3
human:
format:
delimiter: ""
precision: 3
storage_units:
format: "%n %u"
units:
byte:
one: "Byte"
other: "Bytes"
kb: "KB"
mb: "MB"
gb: "GB"
tb: "TB"
# Used in array.to_sentence.
support:
array:
sentence_connector: "and"
skip_last_comma: false
activerecord:
errors:
template:
header:
one: "1 error prohibited this %{model} from being saved"
other: "%{count} errors prohibited this %{model} from being saved"
messages:
inclusion: "is not included in the list"
exclusion: "is reserved"
invalid: "is invalid"
confirmation: "doesn't match confirmation"
accepted: "must be accepted"
empty: "can't be empty"
blank: "can't be blank"
too_long: "is too long (maximum is %{count} characters)"
too_short: "is too short (minimum is %{count} characters)"
wrong_length: "is the wrong length (should be %{count} characters)"
taken: "has already been taken"
not_a_number: "is not a number"
not_a_date: "is not a valid date"
greater_than: "must be greater than %{count}"
greater_than_or_equal_to: "must be greater than or equal to %{count}"
equal_to: "must be equal to %{count}"
less_than: "must be less than %{count}"
less_than_or_equal_to: "must be less than or equal to %{count}"
odd: "must be odd"
even: "must be even"
greater_than_start_date: "must be greater than start date"
not_same_project: "doesn't belong to the same project"
circular_dependency: "This relation would create a circular dependency"
cant_link_an_issue_with_a_descendant: "An issue cannot be linked to one of its subtasks"
attachment_all: "All"
attachment_browse: "Attachment Content Browse"
attachment_sufix_browse: "Attachment Type Browse"
attachment_type: "Attachment Type"
general_text_No: 'No'
general_text_Yes: 'Yes'
general_text_no: 'no'
general_text_yes: 'yes'
general_lang_name: 'English'
general_csv_separator: ','
general_csv_decimal_separator: '.'
general_csv_encoding: ISO-8859-1
general_pdf_encoding: UTF-8
general_first_day_of_week: '7'
actionview_instancetag_blank_option: Please select
label_user: User
label_project: Project
label_issue: Issue
label_requirement: Calls
label_forum: Forum
label_issue_plural: Issues Tracking
label_project_plural: Projects
label_user_plural: Users
field_filename: File
field_description: Description
label_loading: Loading...
#
# Trustie按钮类
#
#
#
label_button_ok: Ok
button_save: Save
button_back: Back
button_cancel: Cancel
label_submit: Submit
button_project_tags_add: Add
label_more: More
button_download: Download
#
# Trustie上传头像模块
#
#
#
button_upload_photo: Upload photo
button_delete_file: delete
text_are_you_sure: Are you sure?
error_attachment_too_big: "This file cannot be uploaded because it exceeds the maximum allowed file size (%{max_size})"
error_pic_type: "Only supports the following image formats:"
#
# Trustie标签模块
#
# 标签
#
label_tag: Tag
label_tags_no: no tags now
label_more_tags: More
label_add_tag: '+ Add tags'
label_tags_count: "The total number of tags"
label_tags_selected: Selected Tags
label_tags_related: Related Tags
label_tags_search_result: Search Results
label_tags_numbers: "Tag numbers"
label_tags_call: Calls
label_tags_contest: Competition tag
label_tags_opensource: Open source projects
label_tags_all_objects: all objects
label_tags_bid: Call name
label_tags_bid_description: call description
label_tags_course_name: Course Title
label_new_course_description: Description
label_tags_issue: "issue"
label_tags_issue_description: issue description
label_tags_project_name: "Project name"
label_tags_project_description: "Project description"
label_tags_user_mail: "User E-mail"
label_tags_user_name: "User Name"
label_tags_contest_name: Contest name
label_tags_contest_description: Contest description
label_tags_forum_description: Forum description
label_tags_forum: Call forum
label_attachment: Files
attachment:
category: "From"
download_num: "Downloads:"
size: "Size:"
sharer: "Sharer"
upload_time: "Upload time:"
#
# Trustie
#
#
#

View File

@ -0,0 +1,267 @@
# Chinese (China) translations for Ruby on Rails
# by tsechingho (http://github.com/tsechingho)
zh:
# Text direction: Left-to-Right (ltr) or Right-to-Left (rtl)
direction: ltr
jquery:
locale: "zh-CN"
date:
formats:
# Use the strftime parameters for formats.
# When no format has been given, it uses default.
# You can provide other formats here if you like!
default: "%Y-%m-%d"
short: "%b%d日"
long: "%Y年%b%d日"
zh_date:
formats:
default: "%Y年%m月%d日"
day_names: [星期天, 星期一, 星期二, 星期三, 星期四, 星期五, 星期六]
abbr_day_names: [日, 一, 二, 三, 四, 五, 六]
# Don't forget the nil at the beginning; there's no such thing as a 0th month
month_names: [~, 一月, 二月, 三月, 四月, 五月, 六月, 七月, 八月, 九月, 十月, 十一月, 十二月]
abbr_month_names: [~, 1月, 2月, 3月, 4月, 5月, 6月, 7月, 8月, 9月, 10月, 11月, 12月]
# Used in date_select and datime_select.
order:
- :year
- :month
- :day
errors:
messages:
email_verifier:
email_not_real: 必须指定一个真实的邮箱地址
out_of_mail_server: 指向了一个已停用的邮箱服务器
no_mail_server: 域名地址没有邮件功能
failure: 邮箱地址不能被验证
exception: 邮箱不能发送成功
time:
formats:
default: "%Y年%b%d日 %A %H:%M:%S"
time: "%H:%M"
short: "%b%d日 %H:%M"
long: "%Y年%b%d日 %H:%M"
am: "上午"
pm: "下午"
datetime:
distance_in_words:
half_a_minute: "半分钟"
less_than_x_seconds:
one: "1秒内"
other: "少于 %{count} 秒"
x_seconds:
one: "1秒"
other: "%{count} 秒"
less_than_x_minutes:
one: "1分钟内"
other: "少于 %{count} 分钟"
x_minutes:
one: "1分钟"
other: "%{count} 分钟"
about_x_hours:
one: "大约1小时"
other: "大约 %{count} 小时"
x_hours:
one: "1 小时"
other: "%{count} 小时"
x_days:
one: "1天"
other: "%{count} 天"
about_x_months:
one: "大约1个月"
other: "大约 %{count} 个月"
x_months:
one: "1个月"
other: "%{count} 个月"
about_x_years:
one: "大约1年"
other: "大约 %{count} 年"
over_x_years:
one: "超过1年"
other: "超过 %{count} 年"
almost_x_years:
one: "将近 1 年"
other: "将近 %{count} 年"
number:
# Default format for numbers
format:
separator: "."
delimiter: ""
precision: 3
human:
format:
delimiter: ""
precision: 3
storage_units:
format: "%n %u"
units:
byte:
one: "Byte"
other: "Bytes"
kb: "KB"
mb: "MB"
gb: "GB"
tb: "TB"
# Used in array.to_sentence.
support:
array:
sentence_connector: "和"
skip_last_comma: false
activerecord:
errors:
template:
header:
one: "由于发生了一个错误 %{model} 无法保存"
other: "%{count} 个错误使得 %{model} 无法保存"
messages:
inclusion: "不包含于列表中"
exclusion: "是保留关键字"
invalid: "是无效的"
confirmation: "与确认值不匹配"
accepted: "必须是可被接受的"
empty: "不能留空"
blank: "不能为空字符"
too_long: "过长(最长为 %{count} 个字符)"
too_short: "过短(最短为 %{count} 个字符)"
wrong_length: "长度非法(必须为 %{count} 个字符)"
taken: "已经被使用"
not_a_number: "不是数字"
not_a_date: "不是合法日期"
greater_than: "必须大于 %{count}"
greater_than_or_equal_to: "必须大于或等于 %{count}"
equal_to: "必须等于 %{count}"
less_than: "必须小于 %{count}"
less_than_or_equal_to: "必须小于或等于 %{count}"
odd: "必须为单数"
even: "必须为双数"
greater_than_start_date: "必须在起始日期之后"
not_same_project: "不属于同一个项目"
circular_dependency: "此关联将导致循环依赖"
cant_link_an_issue_with_a_descendant: "问题不能关联到它的子任务"
groupname_repeat: "该班名已存在"
attachment_all: "全部"
attachment_sufix_browse: "文件类型"
attachment_browse: "内容类型"
attachment_type: '分类'
general_text_No: '否'
general_text_Yes: '是'
general_text_no: '否'
general_text_yes: '是'
general_lang_name: 'Simplified Chinese (简体中文)'
general_csv_separator: ','
general_csv_decimal_separator: '.'
general_csv_encoding: gb18030
general_pdf_encoding: gb18030
general_first_day_of_week: '7'
actionview_instancetag_blank_option: 请选择
label_user: 用户
label_project: 项目
label_issue: 问题
label_requirement: 需求
label_forum: 公共贴吧
field_description: 描述
label_loading: 载入中...
#
# Trustie按钮类
#
#
#
label_button_ok: 确定
button_save: 保存
button_back: 返回
button_cancel: 取消
label_submit: 提交
button_project_tags_add: 增加
label_more: 更多>>
button_download: 下载
#
# Trustie上传头像模块
#
#
#
button_upload_photo: 上传图片
button_delete_file: 删除
text_are_you_sure: 您确定要删除吗?
error_attachment_too_big: 该文件无法上传。超过文件大小限制 (%{max_size})
error_pic_type: "仅支持如下图片格式:"
#
# Trustie标签模块
#
# 标签
#
label_tag: 标签
label_tags_no: 暂无标签!
label_more_tags: 更多
label_add_tag: "+ 添加标签"
label_tags_count: "总标签数:"
label_tags_selected: 已选标签
label_tags_related: 相关标签
label_tags_search_result: 搜索结果
label_tags_numbers: "Tag统计"
label_issue_plural: 问题跟踪
label_project_plural: 项目列表
label_user_plural: 用户列表
label_tags_call: 需求
field_filename: 文件
label_tags_contest: 竞赛标签
label_tags_opensource: 开源项目
label_tags_all_objects: 所有
label_tags_bid: 需求名称
label_tags_bid_description: 需求描述
label_tags_course_name: 课程名称
label_new_course_description: 课程描述
label_tags_issue: "问题名称:"
label_tags_issue_description: 问题描述
label_tags_project_name: "项目名称:"
label_tags_project_description: "项目描述:"
label_tags_user_mail: "用户邮箱:"
label_tags_user_name: "用户名:"
label_tags_contest_name: 竞赛名称
label_tags_contest_description: 竞赛描述
label_tags_forum_description: 贴吧描述
label_tags_forum: 贴吧名称
label_attachment: 文件
attachment:
category: "所属分类:"
download_num: "下载:"
size: "大小:"
sharer: "共享者:"
upload_time: "上传时间:"

View File

@ -0,0 +1,3 @@
en:
# Text direction: Left-to-Right (ltr) or Right-to-Left (rtl)
direction: ltr

View File

@ -0,0 +1,22 @@
# Chinese (China) translations for Ruby on Rails
# by tsechingho (http://github.com/tsechingho)
zh:
# Text direction: Left-to-Right (ltr) or Right-to-Left (rtl)
direction: ltr
#
# Trustie按钮类
#
# 底部承办单位等信息
#
label_hosted_organization: 主办单位
label_hosted_by: 国防科学技术大学并行与分布处理国家重点实验室
label_sponsor: 计算机科学与技术系
label_co_organizer_NUDT: 国防科学技术大学计算机学院
label_co_organizer_EECS: 北京大学信息科学技术学院软件研究所
label_co_organizer_BHU: 北京航空航天大学计算机学院
label_co_organizer_CAS: 中国科学院软件研究所
label_co_organizer_InforS: 山东中创软件商用中间件股份有限公司
label_rights_reserved: 版权©2007~2014
label_contact_us: 联系我们
label_license: 湘ICP备09019772

View File

@ -0,0 +1,4 @@
en:
# Text direction: Left-to-Right (ltr) or Right-to-Left (rtl)
direction: ltr

View File

@ -0,0 +1,6 @@
# Chinese (China) translations for Ruby on Rails
# by tsechingho (http://github.com/tsechingho)
zh:
# Text direction: Left-to-Right (ltr) or Right-to-Left (rtl)
direction: ltr

View File

@ -0,0 +1,4 @@
en:
# Text direction: Left-to-Right (ltr) or Right-to-Left (rtl)
direction: ltr

View File

@ -0,0 +1,17 @@
# Chinese (China) translations for Ruby on Rails
# by tsechingho (http://github.com/tsechingho)
zh:
# Text direction: Left-to-Right (ltr) or Right-to-Left (rtl)
direction: ltr
#
# 课程托管平台
#
# 课程资源上传
#
label_file_upload: 资源文件
label_file_upload_error_messages: "上传出现错误,请您检查您的网络环境,并刷新页面重新上传。"
button_confirm: 确认

View File

@ -1,174 +1,5 @@
en:
# Text direction: Left-to-Right (ltr) or Right-to-Left (rtl)
direction: ltr
date:
formats:
# Use the strftime parameters for formats.
# When no format has been given, it uses default.
# You can provide other formats here if you like!
default: "%m/%d/%Y"
short: "%b %d"
long: "%B %d, %Y"
day_names: [Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday]
abbr_day_names: [Sun, Mon, Tue, Wed, Thu, Fri, Sat]
# Don't forget the nil at the beginning; there's no such thing as a 0th month
month_names: [~, January, February, March, April, May, June, July, August, September, October, November, December]
abbr_month_names: [~, Jan, Feb, Mar, Apr, May, Jun, Jul, Aug, Sep, Oct, Nov, Dec]
# Used in date_select and datime_select.
order:
- :year
- :month
- :day
time:
formats:
default: "%m/%d/%Y %I:%M %p"
time: "%I:%M %p"
short: "%d %b %H:%M"
long: "%B %d, %Y %H:%M"
am: "am"
pm: "pm"
datetime:
distance_in_words:
half_a_minute: "half a minute"
less_than_x_seconds:
one: "less than 1 second"
other: "less than %{count} seconds"
x_seconds:
one: "1 second"
other: "%{count} seconds"
less_than_x_minutes:
one: "less than a minute"
other: "less than %{count} minutes"
x_minutes:
one: "1 minute"
other: "%{count} minutes"
about_x_hours:
one: "about 1 hour"
other: "about %{count} hours"
x_hours:
one: "1 hour"
other: "%{count} hours"
x_days:
one: "1 day"
other: "%{count} days"
about_x_months:
one: "about 1 month"
other: "about %{count} months"
x_months:
one: "1 month"
other: "%{count} months"
about_x_years:
one: "about 1 year"
other: "about %{count} years"
over_x_years:
one: "over 1 year"
other: "over %{count} years"
almost_x_years:
one: "almost 1 year"
other: "almost %{count} years"
errors:
messages:
email_verifier:
email_not_real: must point to a real mail account
out_of_mail_server: appears to point to dead mail server
no_mail_server: appears to point to domain which doesn't handle e-mail
failure: could not be checked if is real
exception: could not be sent
number:
format:
separator: "."
delimiter: ""
precision: 3
human:
format:
delimiter: ""
precision: 3
storage_units:
format: "%n %u"
units:
byte:
one: "Byte"
other: "Bytes"
kb: "KB"
mb: "MB"
gb: "GB"
tb: "TB"
# Used in array.to_sentence.
support:
array:
sentence_connector: "and"
skip_last_comma: false
activerecord:
errors:
template:
header:
one: "1 error prohibited this %{model} from being saved"
other: "%{count} errors prohibited this %{model} from being saved"
messages:
inclusion: "is not included in the list"
exclusion: "is reserved"
invalid: "is invalid"
confirmation: "doesn't match confirmation"
accepted: "must be accepted"
empty: "can't be empty"
blank: "can't be blank"
too_long: "is too long (maximum is %{count} characters)"
too_short: "is too short (minimum is %{count} characters)"
wrong_length: "is the wrong length (should be %{count} characters)"
taken: "has already been taken"
not_a_number: "is not a number"
not_a_date: "is not a valid date"
greater_than: "must be greater than %{count}"
greater_than_or_equal_to: "must be greater than or equal to %{count}"
equal_to: "must be equal to %{count}"
less_than: "must be less than %{count}"
less_than_or_equal_to: "must be less than or equal to %{count}"
odd: "must be odd"
even: "must be even"
greater_than_start_date: "must be greater than start date"
not_same_project: "doesn't belong to the same project"
circular_dependency: "This relation would create a circular dependency"
cant_link_an_issue_with_a_descendant: "An issue cannot be linked to one of its subtasks"
actionview_instancetag_blank_option: Please select
attachment_all: "All"
attachment_browse: "Attachment Content Browse"
attachment_sufix_browse: "Attachment Type Browse"
attachment_type: "Attachment Type"
general_text_No: 'No'
general_text_Yes: 'Yes'
general_text_no: 'no'
general_text_yes: 'yes'
general_lang_name: 'English'
general_csv_separator: ','
general_csv_decimal_separator: '.'
general_csv_encoding: ISO-8859-1
general_pdf_encoding: UTF-8
general_first_day_of_week: '7'
label_approve: Approve
label_refusal: Refusal
notice_account_updated: Account was successfully updated.
notice_account_invalid_creditentials: Invalid user or password
notice_account_password_updated: Password was successfully updated.
notice_account_wrong_password: Wrong password
notice_account_register_done: Account was successfully created. To activate your account, click on the link that was emailed to you.
notice_account_unknown_email: Unknown user.
notice_can_t_change_password: This account uses an external authentication source. Impossible to change the password.
notice_account_lost_email_sent: An email with instructions to choose a new password has been sent to you.
notice_account_activated: Your account has been activated. You can now log in.
notice_successful_create: Successful creation.
notice_successful_update: Successful update.
notice_successful_delete: Successful deletion.
@ -180,8 +11,7 @@ en:
notice_not_authorized_archived_project: The project you're trying to access has been archived.
notice_email_sent: "An email was sent to %{value}"
notice_email_error: "An error occurred while sending mail (%{value})"
notice_feeds_access_key_reseted: Your RSS access key was reset.
notice_api_access_key_reseted: Your API access key was reset.
notice_failed_to_save_issues: "Failed to save %{count} issue(s) on %{total} selected: %{ids}."
notice_failed_to_save_time_entries: "Failed to save %{count} time entrie(s) on %{total} selected: %{ids}."
notice_failed_to_save_members: "Failed to save member(s): %{errors}."
@ -217,7 +47,7 @@ en:
error_workflow_copy_target: 'Please select target tracker(s) and role(s)'
error_unable_delete_issue_status: 'Unable to delete issue status'
error_unable_to_connect: "Unable to connect (%{value})"
error_attachment_too_big: "This file cannot be uploaded because it exceeds the maximum allowed file size (%{max_size})"
error_session_expired: "Your session has expired. Please login again."
warning_attachments_not_saved: "%{count} file(s) could not be saved."
@ -238,12 +68,8 @@ en:
field_name: Name
field_description: Description
field_summary: Summary
field_is_required: Required
field_firstname: Name
field_lastname: Last name
field_mail: Email
field_job_category: Job category # added by bai
field_filename: File
field_file_dense: File Dense
@ -279,14 +105,10 @@ en:
field_homepage: Homepage
field_parent: Subproject of
field_is_in_roadmap: Issues displayed in roadmap
field_login: Account/Email
field_mail_notification: Email notifications
field_admin: Administrator
field_last_login_on: Last connection
field_language: Language
field_effective_date: Date
field_new_password: New password
field_password_confirmation: Confirmation
field_version: Version
field_type: Type
field_host: Host
@ -521,7 +343,6 @@ en:
# edit by meng
lable_hot_course: Hot Courses
lable_user_active: User Movements
label_course_join_student: Join a course
label_contest_modify_settings: Configuration
bale_news_notice: Add a notification
@ -534,9 +355,9 @@ en:
label_relation_files: Select an existing resource
# Personal signature tips
label_my_brief_introduction: How are feeling today? Leave your footprints ~
label_submit: Submit
# create course and course info
label_tags_course_name: Course Title
label_new_course_password: Password
label_new_course_description: Description
field_open_student: Student list is public?
@ -571,11 +392,9 @@ en:
label_technical_support: Support
label_feedback: Feedback
#end
label_user: User
label_user_plural: Users
label_user_new: New user
label_user_anonymous: Anonymous
label_project: Project
label_activity_project: 'Project: ' #added by bai
label_project_plural: Projects
@ -602,7 +421,6 @@ en:
other: "%{count} projects"
label_project_all: All Projects
label_project_latest: Latest projects
label_issue: Issue
label_issue_new: New issue
label_issue_plural: Issues Tracking
label_issue_view_all: View all issues
@ -616,8 +434,8 @@ en:
label_document_new: New document
label_document_plural: Documents
label_document_added: Document added
label_forum_message_added: Message added
label_forum_add: Forum added
label_forum_message_added: Forum's message added
#label_forum_add: Forum added
label_document_public_info: "If you don't choose public, only the project's members can see the document."
label_role: Role
label_role_plural: Roles
@ -646,22 +464,17 @@ en:
label_information: Information
label_information_plural: Information
label_please_login: Please log in
label_login_with_open_id_option: or login with OpenID
label_home: Home
label_my_page: My page
label_my_account: My account
label_my_message: Msgs
label_my_projects: My projects
label_my_page_block: My page block
label_administration: Administration
label_login: Login
# edit by meng
# Logout
label_logout: Logout
# end
label_help: Help
label_reported_issues: Reported issues
label_assigned_to_me_issues: Issues assigned to me
label_last_login: Last connection
label_registered_on: Registered on
label_activity: Activities
@ -812,7 +625,6 @@ en:
label_repository_plural: Repositories
label_browse: Browse
label_branch: Branch
label_tag: Tag
label_revision: Revision
label_revision_plural: Revisions
label_revision_id: "Revision %{value}"
@ -850,7 +662,7 @@ en:
label_feed_plural: Feeds
label_changes_details: Details of all changes
label_issue_tracking: Issue tracking
label_spent_time: Spent time
label_overall_spent_time: Overall spent time
label_f_hour: "%{value} hour"
label_f_hour_plural: "%{value} hours"
@ -869,7 +681,7 @@ en:
label_watched_issues: Watched issues
label_related_issues: Related issues
label_applied_status: Applied status
label_loading: Loading...
label_relation_new: New relation
label_relation_delete: Delete relation
label_relates_to: Related to
@ -928,16 +740,8 @@ en:
label_theme: Theme
label_default: Default
label_search_titles_only: Search titles only
label_user_mail_option_all: "For any event on all my projects"
label_user_mail_option_selected: "For any event on the selected projects only..."
label_user_mail_option_none: "No events"
label_user_mail_option_only_my_events: "Only for things I watch or I'm involved in"
label_user_mail_option_only_assigned: "Only for things I am assigned to"
label_user_mail_option_only_owner: "Only for things I am the owner of"
label_user_mail_no_self_notified: "I don't want to be notified of changes that I make myself"
label_registration_activation_by_email: account activation by email
label_registration_manual_activation: manual account activation
label_registration_automatic_activation: automatic account activation
label_display_per_page: "Per page: %{value}"
label_age: Age
label_change_properties: Change properties
@ -1018,8 +822,6 @@ en:
label_gantt_progress_line: Progress line
label_files_filter: Files Filter
button_submit: Submit
button_save: Save
button_check_all: Check all
button_uncheck_all: Uncheck all
button_collapse_all: Collapse all
@ -1035,13 +837,11 @@ en:
button_clear: Cancel query
button_lock: Lock
button_unlock: Unlock
button_download: Download
button_list: List
button_view: View
button_move: Move
button_move_and_follow: Move and follow
button_back: Back
button_cancel: Cancel
button_activate: Activate
button_sort: Sort
button_log_time: Log time
@ -1053,7 +853,7 @@ en:
button_unarchive: Unarchive
button_reset: Reset
button_rename: Rename
button_change_password: Change password
button_copy: Copy
button_copy_and_follow: Copy and follow
button_annotate: Annotate
@ -1089,7 +889,7 @@ en:
text_project_destroy_confirmation: Are you sure you want to delete this project and related data?
text_subprojects_destroy_warning: "Its subproject(s): %{value} will be also deleted."
text_workflow_edit: Select a role and a tracker to edit the workflow
text_are_you_sure: Are you sure?
text_journal_changed: "%{label} changed from %{old} to %{new}"
text_journal_changed_no_detail: "%{label} updated"
text_journal_set_to: "%{label} set to %{value}"
@ -1099,7 +899,6 @@ en:
text_tip_issue_end_day: issue ending this day
text_tip_issue_begin_end_day: issue beginning and ending this day
text_caracters_maximum: "%{count} characters maximum."
text_caracters_minimum: "Must be at least %{count} characters long."
text_length_between: "Length between %{min} and %{max} characters."
text_tracker_no_workflow: No workflow defined for this tracker
text_unallowed_characters: Unallowed characters
@ -1194,7 +993,7 @@ en:
description_message_content: Message content
description_query_sort_criteria_attribute: Sort attribute
description_query_sort_criteria_direction: Sort direction
description_user_mail_notification: Mail notification settings
description_available_columns: Available Columns
description_selected_columns: Selected Columns
description_all_columns: All Columns
@ -1208,7 +1007,7 @@ en:
#modify by mkz
#by young
label_requirement: Calls
label_requirement_focus: Calls # modified by bai
label_developer: Users
label_investor: Investor
@ -1221,7 +1020,6 @@ en:
label_version_display_settings: Display settings
label_versions_progress: Complete schedule
label_versions_description: Versions description
label_my_photo: My photo
label_documents_sort: Order setting
label_activities_settings: Display settings
#end
@ -1235,7 +1033,7 @@ en:
label_user_edit: "Edit information"
label_my_course: "My Course"
label_user_info: "User information" #huang 添加
label_user_watcher: "Following" # huang添加的 # modified by bai
label_user_watcher: "Followers" # huang添加的 # modified by bai
label_user_fans: "Followed by" # modified by bai
# modify by men
@ -1258,20 +1056,14 @@ en:
label_project_newother: "See other comments"
label_project_newshare: "has shared"
label_project_newadd: "added"
label_project_unadd: "No project,go to creat it!"
label_project_un: "You haven't joined any project!"
#end by huang
#added by liuping
button_unfollow: Unfollow
button_follow: Follow
label_delete_confirm: Confirm delete
label_more_tags: More
label_tags_bid: Call name
label_tags_bid_description: call description
label_tags_issue_description: issue description
label_tags_all_objects: all objects
label_apply_project: Apply Project
label_exit_project: Exit Project
label_apply_project_waiting: "Application has been submitted, please wait for administrator review."
label_unapply_project: Unsubscribe
@ -1375,7 +1167,7 @@ en:
label_requirement_bargain_money: type in your rewards(ex. money, reward, grade)
label_wrong_budget: The error format of money
label_wrong_date: wrong date format, input right date yyyy-mm-dd
button_upload_photo: Upload photo
label_leave_me_message: left a message to me
label_leave_others_message: leave message to him/her
label_leave_a_message: Leave him/her a message
@ -1432,13 +1224,7 @@ en:
label_project_no_activity: The project has no activities now
label_follow_no_requirement: You don't have followed any requirements
label_no_user_respond_you: There is no respond for you
label_tags_issue: issue
label_tags_project_name: Project name
label_tags_project_description: Project description
label_tags_user_mail: User E-mail
label_tags_user_name: User Name
label_tags_numbers: Tag numbers
label_max_number: Open label nickname is displayed on the web site of your,Must be at most 25 characters long.
label_all_revisions: All revisions
label_repository_name: Repository name
label_upassword_info: The password can be shared in the group
@ -1452,21 +1238,20 @@ en:
label_issue_tread_over: Treaded over
label_issue_appraise_over: Appraised over
label_welcome_my_respond: Please leave your comments and suggestions here
label_no_current_fans: the user has no fans now
label_no_current_watchers: the user hasn't watched others
label_no_current_fans: The user has no fans now
label_no_current_watchers: The user hasn't watched others
label_project_tool_response: Response
label_course_feedback: Feedback
label_tags_search_result: Search Results
label_active_call: call
label_tags_call: Calls
label_user_extensions: Other information
label_boy: Man
label_girl: Woman
field_gender: Gender
field_birthday: Birthday
field_brief_introduction: Info
field_location: Location
field_occupation: Position
field_work_experience: Work experience(year)
field_zip_code: Zip code
label_reward: reward
@ -1478,15 +1263,12 @@ en:
label_bids_credit_number: points
field_budget: reward
field_deadline: deadline
label_tags_selected: Selected Tags
label_tags_related: Related Tags
button_project_tags_add: Add
label_issue_query_condition: Query condition
label_homework_source: Task
label_issue_query: Query
label_issue_cancel_query: Cancel query
field_reward_type: The type of reward
label_tags_no: no tags now
label_bid_publish: published
label_bid_project: projects
label_project_no_follow: The project hasn't been followed now
@ -1508,24 +1290,20 @@ en:
#end
label_bids_published: published
label_bids_published_ago: ago
label_welcome_trustie: Trustie
label_welcome_trustie_project: Online projects hosting platform
label_welcome_trustie_course: Online Courses practice platform
label_welcome_trustie_contest: Online Contests practice platform
label_welcome_trustie_project_description: Software for Chinese college students and practitioners to provide social-oriented project management, code hosting, resource sharing, cooperation and exchange.
label_welcome_trustie_course_description: Teachers and Students for Chinese universities to provide social-oriented curriculum management, resource sharing, cooperation achieved, collaborative research.
label_welcome_trustie_contest_description: Software for Chinese college students and practitioners to provide social-oriented contest management, code hosting, resource sharing, cooperation and exchange.
label_welcome_trustie_description: a socialized collaboration platform for project management, collaborative research, software development and software crowdsourcing for creative university students and entrepreneurs.
label_user_project: Projects
# label_welcome_trustie: Trustie
# label_welcome_trustie_project: Online projects hosting platform
# label_welcome_trustie_course: Online Courses practice platform
# label_welcome_trustie_contest: Online Contests practice platform
# label_welcome_trustie_project_description: Software for Chinese college students and practitioners to provide social-oriented project management, code hosting, resource sharing, cooperation and exchange.
# label_welcome_trustie_course_description: Teachers and Students for Chinese universities to provide social-oriented curriculum management, resource sharing, cooperation achieved, collaborative research.
# label_welcome_trustie_contest_description: Software for Chinese college students and practitioners to provide social-oriented contest management, code hosting, resource sharing, cooperation and exchange.
# label_welcome_trustie_description: a socialized collaboration platform for project management, collaborative research, software development and software crowdsourcing for creative university students and entrepreneurs.
label_bid_respond_quote: Respond
label_bid_if_agreement: If you like me, please press me #bai
label_bid_respond_delete: Delete
label_newfeedback_message: messages
label_newfeedback_quote: Respond
label_newfeedback_delete: Delete
label_user_all_activity: All activities
label_user_activity_myself: About me
label_user_all_respond: All replies
label_layouts_feedback: Messages
label_have_feedback: Have
label_of_feedback: Of
@ -1554,9 +1332,8 @@ en:
label_school_all: Schools
label_school_not_fount: Not found by your input query condition.
label_other: Other
label_gender: Gender
label_gender_male: male
label_gender_female: female
label_location: Location
#end
label_course: Course
@ -1589,11 +1366,6 @@ en:
label_technicl_title_associate_professor: Associate professor
label_technicl_title_lecturer: Lecturer
label_technicl_title_teaching_assistant: Teaching assistant
label_account_identity_teacher: Teacher
label_account_identity_student: Student
label_account_identity_developer: Developer
label_account_identity_enterprise: Enterprise
label_account_identity_choose: --Please choose your identity--
label_enter_college: College Entrance
lable_enter_enterprise: Enterprise Entrance
label_homework_info: Status
@ -1602,8 +1374,7 @@ en:
label_my_question: Please raise your questions here
label_teacher_homework: "Teacher's name"
label_course_homework: Corresponding courses
label_course_done: finished courses
label_course_doing: Doing course
label_limit_time: Deadline
label_commit_homework: Submitted Task
label_no_course_project: No submitted work
@ -1632,7 +1403,6 @@ en:
zero: Task
one: Task
other: Tasks
label_project_course_unadd: You have no course,creat one now
label_my_create_honework_no_homework: no task now
label_my_homework_no_homework: no task now
label_x_member:
@ -1697,7 +1467,7 @@ en:
label_in_course: in course
label_assign_homework: assigned homewok
label_noawards: No awards
label_user_location: Location
label_requirement_enterprise: Requirements
label_requirement_enterprise_list: Requirements List
label_contest_innovate: Competition community
@ -1719,9 +1489,7 @@ en:
label_memo_new: new memo
label_memo_edit: edit memo
label_project_module_forums: Forums
label_forum: Forum
label_tags_forum_description: Forum description
label_tags_forum: Call forum
label_memo_locked: 'Topic is locked'
label_downloads_list: enter file list.
label_sumbit_empty: search bar need container.
@ -1734,7 +1502,6 @@ en:
label_your_course: your course
label_have_message : have a new message
label_login_prompt: Email/NickName
:lable_not_receive_mail: Click here don't receive email form site
#added by linchun as competition#
@ -1752,21 +1519,29 @@ en:
# Trustie账户
# edit by meng
# Trustie账户> 登陆
lable_user_name: Username
field_password: Password
field_identity_url: OpenID URL
label_stay_logged_in: Keep me signed in
label_password_lost: Forget password
button_login: Login
# Trustie账户> 注册
label_register: Sign up
#
# Trustie个人主页
#
# Trustie个人主页>
# 动态栏
label_user_activity: "%{name} Activities"
label_user_all_activity: All activities
label_user_activity_myself: About me
label_user_all_respond: All replies
# 项目栏
label_project_unadd: "No project, go to creat it!"
label_project_un: "You haven't joined any project yet!"
label_has_watched_project: The projects of attention
label_project_take: The projects of participation
# 托管平台主页
# edit by meng
# 托管平台主页> 顶部菜单
@ -1781,14 +1556,17 @@ en:
label_stores_index: Resource search
# 托管平台主页 > 搜索提示信息
label_search_information: Please input the keywords!
# 托管平台主页 > 下拉列表
label_select_project: project
label_select_course: course
label_select_user: user
label_select_user_nickname: nickname
label_select_user_showname: name
label_select_user_email: email
welcome:
search:
information: "Please input the keywords!" # 搜索提示信息
select: # 下拉列表
project: project
course: course
user: user
userinfo:
nickname: nickname
showname: name
email: email
# 托管平台主页 > 下方托管平台链接
label_projects_management_platform: Projects-platform
@ -1807,18 +1585,18 @@ en:
label_rights_reserved: ©2007~2014
label_contact_us: Contact
# 英文版不需要显示国内许可证 ,需要页面做判断
#label_license: 湘ICP备09019772
# label_license: 湘ICP备09019772
# 项目托管平台
# 项目托管平台主页 >主旨
label_project_trustie:
label_project_trustie_theme:
# 项目托管平台主页 > 主旨
label_welcome_trustie_project: Trustie online projects hosting platform
label_welcome_trustie_project_description: "Software for Chinese college students and practitioners to provide social-oriented project management, code hosting, resource sharing, cooperation and exchange."
# 项目托管平台主页 >热门项目栏
# 项目托管平台主页 > 热门项目栏
lable_hot_projects: Hot Projects
label_project_new: New project
label_join_project: Join a project
@ -1827,12 +1605,15 @@ en:
label_project_score_tips: "Considering all activities of the project, project's score reflects the activity level of project"
label_project_score: Score
# 项目托管平台主页 >用户动态栏
lable_user_active: User Movements
field_user_active_published: released
field_user_active_uploaded: uploaded
field_user_active_updated: updated
field_user_active_unknow: Unknown content
# 项目托管平台主页 > 用户动态栏
lable_user_active: Recent Activities
user:
active:
published: released
uploaded: uploaded
updated: updated
unknow: Unknown content
field_user_active_news: ' news'
field_user_active_issue: ' issue'
@ -1854,17 +1635,16 @@ en:
# "缺陷 #1869 (已解决):subject"
# tracker.name和status在数据库中以中文字段形式存储
# 项目托管平台主页 >贴吧动态栏
lable_bar_active: Bar Posts
# 项目托管平台主页 > 贴吧动态栏
lable_bar_active: Recent Posts
label_my_question: My-question
label_my_feedback: My-feedback
label_more: More
label_updated_time: "Updated %{value} ago"
label_question_sponsor: Sponsor
label_final_reply: Last-reply
# 项目托管平台 >新建项目
# 项目托管平台 > 新建项目
label_project_new_description: "A project can be used to do anything that requires distributed collaboration."
field_name: Name
field_description: Description
@ -1876,27 +1656,36 @@ en:
button_create: Create
# 项目托管平台 >加入项目
# 项目托管平台 > 加入项目
project:
join:
title: 快速进入项目通道
description: "只要持有项目的ID就可快速申请加入所在项目。项目页面搜索不到的私有项目只能从此通道进入哦"
id:
label: "Project ID:"
tips: "Project ID is the number within the project's url"
# 公共
label_apply_project: Apply Project
# 课程托管平台主页
# 课程托管平台主页 >主旨
label_course_trustie:
label_course_trustie_theme:
# 课程托管平台主页 >
# 课程托管平台主页 > 主旨
label_welcome_trustie_course: Trustie online courses practice platform
label_welcome_trustie_course_description: Teachers and Students for Chinese universities to provide social-oriented curriculum management, resource sharing, cooperation achieved, collaborative research.
# 课程托管平台主页 >
# 竞赛托管平台主页
# 竞赛托管平台主页 >主旨
label_contest_trustie:
label_contest_trustie_theme:
# 竞赛托管平台主页 >
# 竞赛托管平台主页 > 主旨
label_welcome_trustie_contest: Trustie online contests practice platform
label_welcome_trustie_contest_description: Software for Chinese college students and practitioners to provide social-oriented contest management, code hosting, resource sharing, cooperation and exchange.
# 竞赛托管平台主页 >
# edit by meng
@ -1985,11 +1774,10 @@ en:
label_user_login_attending_contest: You are not logged in, please log in and then join the competition!
label_contest_description_no: No description
label_no_contest_softapplication: No application
label_button_ok: Ok
label_tags_contest: Competition tag
label_final_scores: Final scores
label_rating_person_amount: Rating person
label_tags_contest_description: Contest description
label_release_add_contest_succeed: The application succeed released and added!
label_add_contest_succeed_fail: Added fails, the application has been joined the competition!
label_no_ftapplication: No application
@ -2061,8 +1849,7 @@ en:
# ajax异步验证
modal_valid_passing: can be used.
label_company_name: Company Name
notice_account_invalid_creditentials_new: You have not to the mailbox activation
label_school_no_course: The school did not offer any courses, you can view other school curriculum
label_school_less_course: The school offers courses in less, you can view other school curriculum
label_file_not_found: Sorry, the file can't be downloaded now!
@ -2076,9 +1863,8 @@ en:
label_my_school: My school
label_all_schol: All school
label_select_province: Please select the provinces
label_search_conditions_not_null: The search conditions can not be empty
lable_school_list: List of schools
button_delete_file: delete
label_search_conditions_not_null: The search conditions cannot be blank
label_attachment: attachment
label_max_length: A maximum of 250 characters
label_create_person: Create personnel
@ -2089,4 +1875,4 @@ en:
label_anonymous: Anonymous
label_submit_comments: Submit_comments
label_course_empty_select: You have not selected course
label_enterprise_page_made: enterprise_page
label_enterprise_page_made: enterprise_page

View File

@ -0,0 +1,4 @@
en:
# Text direction: Left-to-Right (ltr) or Right-to-Left (rtl)
direction: ltr

View File

@ -0,0 +1,23 @@
# Chinese (China) translations for Ruby on Rails
# by tsechingho (http://github.com/tsechingho)
zh:
# Text direction: Left-to-Right (ltr) or Right-to-Left (rtl)
direction: ltr
#
# 邮件模块
#
# 项目问题跟踪邮件
#
mail_issue_greetings: "亲爱的Trustie用户您好"
mail_issue_footer: "退订该邮件!"
mail_issue_title_userin: "在"
mail_issue_title_active: "中有了一个与您相关的最新活动,请您关注!"
mail_issue_subject: "标题:"
mail_issue_content: "内容:"
mail_issue_sent_from: "来源:"
mail_issue_from_project: "项目问题跟踪"
mail_issue_attachments: "附件:"
mail_issue_reply: "我要回复"

91
config/locales/my/en.yml Normal file
View File

@ -0,0 +1,91 @@
en:
# Text direction: Left-to-Right (ltr) or Right-to-Left (rtl)
direction: ltr
#
# Trustie个人模块
#
# 修改资料
#
label_my_account: My account
label_my_photo: My photo
label_information_plural: Information
label_account_identity_teacher: Teacher
label_account_identity_student: Student
label_account_identity_developer: Developer
label_account_identity_enterprise: Enterprise
label_account_identity_choose: "--Please choose your identity--"
label_account_identity_studentID: "Please enter the student ID"
field_is_required: Required
field_firstname: Name
firstname_empty: "Name cannot be blank"
field_firstname_eg: "(egJack Chen请填写[Jack])"
field_lastname: Lastname
lastname_empty: Lastname cannot be blank
enterprise_empty: The enterprise name cannot be blank
field_lastname_eg: "(egJack Chen请填写[Chen])"
label_company_name: Company Name
label_gender: Gender
label_gender_male: male
label_gender_female: female
field_occupation: Position
field_occupation_click: "Click to select provinces and schools"
lable_school_list: List of schools
field_language: Language
location: #地区信息在JS中都是中文信息需要全部翻译
labelname: 地区
select:
click: --请选择省份--
field_mail_notification: Email notifications
description_user_mail_notification: Mail notification settings
label_user_mail_option_all: "For any event on all my projects"
label_user_mail_option_selected: "For any event on the selected projects only..."
label_user_mail_option_none: "No events"
label_user_mail_option_only_my_events: "Only for things I watch or I'm involved in"
label_user_mail_option_only_assigned: "Only for things I am assigned to"
label_user_mail_option_only_owner: "Only for things I am the owner of"
label_user_mail_no_self_notified: "I don't want to be notified of changes that I make myself"
label_user_extensions: Other information
notice_account_updated: Account was successfully updated.
#
# Trustie个人模块
#
# 修改密码
#
button_change_password: Change password
#
# Trustie个人账户模块
#
# 可否删除?
#
label_reported_issues: Reported issues
label_assigned_to_me_issues: Issues assigned to me
label_watched_issues: Watched issues
label_news_latest: Latest news
label_calendar: Calendar
label_document_plural: Documents
label_spent_time: Spent time
#
# Trustie个人账户模块
#
# 可否删除?
#
notice_account_deleted: "Your account has been permanently deleted."
notice_feeds_access_key_reseted: Your RSS access key was reset.
notice_api_access_key_reseted: Your API access key was reset.

101
config/locales/my/zh.yml Normal file
View File

@ -0,0 +1,101 @@
# Chinese (China) translations for Ruby on Rails
# by tsechingho (http://github.com/tsechingho)
zh:
#
# Trustie个人账户模块
#
# 公共类
#
field_occupation: 工作单位
label_company_name: 组织名
label_location: 位置
label_identity: 身份
#
# Trustie个人账户模块
#
# 修改资料
#
label_my_account: 我的帐号
label_my_photo: 我的头像
label_information_plural: 信息
label_account_identity_choose: --请选择身份--
label_account_identity_teacher: 教师
label_account_identity_student: 学生
label_account_identity_developer: 开发者
label_account_identity_enterprise: 组织
label_account_identity_studentID: 请输入学号
field_is_required: 必填
field_firstname: 名字
firstname_empty: 名字不能为空
field_firstname_eg: '(例:张三丰,请填写[三丰])'
field_lastname: 姓氏
lastname_empty: 姓氏不能为空
enterprise_empty: 企业名不能为空
field_lastname_eg: '(例:张三丰,请填写[张])'
label_gender: 性别
label_gender_male:
label_gender_female:
field_occupation_click: 请单击选择省份及学校
lable_school_list: 学校列表
field_language: 语言
location: #地区信息在JS中都是中文信息需要全部翻译
labelname: 地区
select:
click: --请选择省份--
field_mail_notification: 邮件通知
description_user_mail_notification: 邮件通知设置
label_user_mail_option_selected: "收取选中项目的所有通知..."
label_user_mail_option_none: "不收取任何通知"
label_user_mail_option_only_my_events: "只收取我跟踪或参与的项目的通知"
label_user_mail_option_only_assigned: "只收取分配给我的"
label_user_mail_option_only_owner: 只收取由我创建的
label_user_mail_no_self_notified: "不要发送对我自己提交的修改的通知"
label_user_extensions: 其他信息
notice_account_updated: 帐号更新成功
#
# Trustie个人账户模块
#
# 修改密码
#
button_change_password: 修改密码
#
# Trustie个人账户模块
#
# 可否删除?
#
label_assigned_to_me_issues: 指派给我的问题
label_reported_issues: 已报告的问题
label_watched_issues: 跟踪的问题
label_news_latest: 最近的新闻
label_calendar: 日历
label_document_plural: 文档
label_spent_time: 耗时
#
# Trustie个人账户模块
#
# 可否删除?
#
notice_account_deleted: 您的账号已被永久删除(账号已无法恢复)
notice_feeds_access_key_reseted: 您的RSS存取键已被重置。
notice_api_access_key_reseted: 您的API访问键已被重置。

View File

@ -0,0 +1,8 @@
en:
# Text direction: Left-to-Right (ltr) or Right-to-Left (rtl)
direction: ltr
label_user_location: Location

View File

@ -0,0 +1,81 @@
# Chinese (China) translations for Ruby on Rails
# by tsechingho (http://github.com/tsechingho)
zh:
# Text direction: Left-to-Right (ltr) or Right-to-Left (rtl)
direction: ltr
#
# Trustie平台导航
#
# 顶部菜单
#
field_homepage: 主页
label_project_deposit: 项目托管
label_course_practice: 课程实践
label_forum_all: 公共贴吧
label_school_all: 中国高校
label_contest_innovate: 创新竞赛
label_software_user: 软件创客
label_requirement_enterprise: 软件众包
label_stores_index: 资源搜索
label_login: 登录
#
# 项目托管平台主
#
# 主旨
#
label_welcome_trustie_project: Trustie在线项目托管平台
label_welcome_trustie_project_description: "面向中国大学生与软件从业者,提供社交化的项目管理、代码托管、资源共享、合作交流。"
#
# 课程托管平台
#
# 主旨
#
label_welcome_trustie_course: Trustie在线课程实践平台
label_welcome_trustie_course_description: "面向中国高校教师与大学生,提供社交化的课程管理、资源共享、合作实验、协同研究。"
#
# 竞赛托管平台
#
# 主旨
#
label_welcome_trustie_contest: Trustie在线竞赛实战平台
label_welcome_trustie_contest_description: "面向中国大学生与编程爱好者,提供社交化的竞赛管理、应用管理、代码托管、合作交流。"
#
# Trustie平台导航
#
# 搜索
#
welcome:
search:
information: 请输入要搜索的关键字 # 搜索提示信息
select: # 下拉列表
project: 项目
course: 课程
user: 用户
userinfo:
nickname: 昵称
showname: 姓名
email: 邮箱
#
# Trustie平台导航
#
# 下方托管平台链接
#
label_projects_management_platform: 项目托管平台
label_courses_management_platform: 课程实践平台
label_contests_management_platform: 竞赛托管平台
#
# Trustie平台导航
#
# 各模块内导航
#
label_user_location: 当前位置

View File

@ -0,0 +1,6 @@
en:
# Text direction: Left-to-Right (ltr) or Right-to-Left (rtl)
direction: ltr
label_approve: Approve
label_refusal: Refusal

View File

@ -0,0 +1,60 @@
# Chinese (China) translations for Ruby on Rails
# by tsechingho (http://github.com/tsechingho)
zh:
# Text direction: Left-to-Right (ltr) or Right-to-Left (rtl)
direction: ltr
#
# 项目托管平台主页
#
# 热门项目栏
#
lable_hot_projects: 热门项目
label_project_new: 新建项目
label_join_project: 加入项目
label_private: 私有
label_project_member_amount: "%{count}人"
label_project_score_tips: 项目得分,综合考虑了项目的各项活动,反映了该项目的活跃程度
label_project_score: 项目评分
#
# 项目托管平台
#
# 新建项目
#
label_project_new_description: '项目可以是软件开发项目,也可以是协作研究项目。'
field_name: 名称
field_description: 描述
field_identifier: 标识
text_length_between: "长度必须在 %{min} 到 %{max} 个字符之间。"
text_project_identifier_info: "小写字母a-z、数字、破折号-和下划线_可以使用。<br />一旦保存,标识无法修改。"
field_is_public: 公开
field_hidden_repo: 隐藏代码库
button_create: 提交
#
# 项目托管平台
#
# 加入项目
#
project:
join:
title: 快速进入项目通道
description: "只要持有项目的ID就可快速申请加入所在项目。项目页面搜索不到的私有项目只能从此通道进入哦"
id:
label: "项目ID"
tips: "项目ID是所在项目网址中显示的序号"
# 公共
label_apply_project: 申请加入
#
# 项目托管平台
#
# 项目配置
#
label_approve: 批准
label_refusal: 拒绝

View File

@ -0,0 +1,19 @@
en:
# Text direction: Left-to-Right (ltr) or Right-to-Left (rtl)
direction: ltr
#
# Trustie账户模块
#
# 公共变量
#
label_project_course_un: "The user is not enrolled in any course yet. "
label_project_course_unadd: "You have no course,creat one now!"
label_project_cousre_studentun: "You have not joined any course, come and join now!"
user:
courses:
doing: Strating
done: Finished

139
config/locales/users/zh.yml Normal file
View File

@ -0,0 +1,139 @@
# Chinese (China) translations for Ruby on Rails
# by tsechingho (http://github.com/tsechingho)
zh:
# Text direction: Left-to-Right (ltr) or Right-to-Left (rtl)
direction: ltr
#
# 项目托管平台主页
#
# 用户动态栏
#
lable_user_active: 用户动态
user:
active:
published: 发表了
uploaded: 上传了
updated: 更新了
field_user_active_unknow: 未知内容
field_user_active_news: 新闻
field_user_active_issue: 问题
field_user_active_attachment: 附件
field_user_active_message: 主题
field_user_active_reply: 回复
field_user_active_bid: 作业
field_user_active_memo: 主题
field_user_active_document: 文件
field_user_active_changeset: 版本库
field_user_active_issue_note: 问题说明
field_updated_on: 更新于
field_time_ago:
field_active_reply: "回复("
# 用户动态中event.title和event.description
# 通过act_as_event方法的option配置
# "#{o.tracker.name} ##{o.id} (#{o.status}): #{o.subject}"
# "缺陷 #1869 (已解决):subject"
# 而tracker.name和status在数据库中以中文字段形式存储
#
# Trustie用户主页
#
# top-content
#
label_user_home: 创客空间
#
# Trustie用户主页
#
# 左边栏
#
label_user_edit: "修改资料"
label_user_score: 个人综合得分
label_user_score_of_topic: 帖子得分
label_user_score_of_project: 项目得分
label_user_score_of_activity: 活跃度得分
label_user_score_of_influence: 影响力得分
label_user_score_of_collaboration: 协同得分
label_user_score_of_skill: 技术得分
label_user_score_of_active: 项目贡献得分
label_user_info: "个人简介" #huang 添加
label_user_watcher: "关注" # huang添加的
label_user_fans: "粉丝"
label_x_user_fans:
zero: 粉丝
one: 粉丝
other: 粉丝
label_brief_introduction: 个性签名
label_my_brief_introduction: 今天的心情如何?留下你的脚印吧~
label_user_joinin: "加入时间"
label_user_login: "最后登录"
label_technical_title: 职称
label_bidding_user_studentcode: 学号
label_account_developer: 开发者
label_account_student: 学生
#
# Trustie用户主页
#
# 菜单栏
#
label_activity: 动态
label_user_course: 课程
label_user_project: 项目
label_user_newfeedback: 留言
#
# Trustie个人主页
#
# Trustie个人主页>
# 动态栏
label_user_activity: "%{name}的动态"
label_user_all_activity: 所有动态
label_user_activity_myself: 我的动态
label_user_all_respond: 所有反馈
label_i_new_activity: 有了新活动在
label_have_feedback: 有了
label_of_feedback:
label_layouts_feedback: 留言
label_new_activity: 有了最新动态
# 项目栏
label_project_unadd: "暂无项目,赶快去创建吧!"
label_project_un: "该用户暂未参与任何项目!"
label_has_watched_project: 关注的项目
label_project_take: 参与的项目
#
# Trustie用户主页
#
# 课程栏
#
label_project_course_un: "该用户暂未加入任何课程!"
label_project_course_unadd: "你还未创建课程,赶快去创建吧!"
label_project_cousre_studentun: "你还未加入任何课程,赶快加入吧!"
user:
courses:
doing: 进行中的课程
done: 已结束的课程
#
# Trustie用户主页
#
# 留言栏
#

Some files were not shown because too many files have changed in this diff Show More