Merge branch 'szzh' of http://repository.trustie.net/xianbo/trustie2 into szzh
Conflicts: app/controllers/projects_controller.rb app/views/issues/show.html.erb app/views/layouts/base_projects.html.erb app/views/projects/_form.html.erb app/views/projects/new.html.erb app/views/projects/show.html.erb
This commit is contained in:
commit
c159bb2c48
3
Gemfile
3
Gemfile
|
@ -21,7 +21,8 @@ gem 'acts-as-taggable-on', '2.4.1'
|
||||||
gem 'spreadsheet'
|
gem 'spreadsheet'
|
||||||
gem 'ruby-ole'
|
gem 'ruby-ole'
|
||||||
#gem 'email_verifier', path: 'lib/email_verifier'
|
#gem 'email_verifier', path: 'lib/email_verifier'
|
||||||
|
gem 'rufus-scheduler'
|
||||||
|
gem 'dalli', path: 'lib/dalli-2.7.2'
|
||||||
group :development do
|
group :development do
|
||||||
gem 'grape-swagger'
|
gem 'grape-swagger'
|
||||||
gem 'grape-swagger-ui', git: 'https://github.com/guange2015/grape-swagger-ui.git'
|
gem 'grape-swagger-ui', git: 'https://github.com/guange2015/grape-swagger-ui.git'
|
||||||
|
|
348
Gemfile.lock
348
Gemfile.lock
|
@ -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)
|
|
|
@ -6,6 +6,7 @@ module Mobile
|
||||||
require_relative 'apis/watches'
|
require_relative 'apis/watches'
|
||||||
require_relative 'apis/upgrade'
|
require_relative 'apis/upgrade'
|
||||||
require_relative 'apis/homeworks'
|
require_relative 'apis/homeworks'
|
||||||
|
require_relative 'apis/comments'
|
||||||
class API < Grape::API
|
class API < Grape::API
|
||||||
version 'v1', using: :path
|
version 'v1', using: :path
|
||||||
format :json
|
format :json
|
||||||
|
@ -37,6 +38,7 @@ module Mobile
|
||||||
mount Apis::Watches
|
mount Apis::Watches
|
||||||
mount Apis::Upgrade
|
mount Apis::Upgrade
|
||||||
mount Apis::Homeworks
|
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: 'http://u06.shellinfo.cn/trustie/api'})
|
||||||
#add_swagger_documentation ({api_version: 'v1', base_path: '/api'}) if Rails.env.development?
|
#add_swagger_documentation ({api_version: 'v1', base_path: '/api'}) if Rails.env.development?
|
||||||
|
|
|
@ -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
|
|
@ -8,10 +8,11 @@ module Mobile
|
||||||
optional :school_id, type: Integer, desc: '传入学校id,返回该学校课程列表'
|
optional :school_id, type: Integer, desc: '传入学校id,返回该学校课程列表'
|
||||||
requires :per_page_count, type: Integer, desc: '每页总数'
|
requires :per_page_count, type: Integer, desc: '每页总数'
|
||||||
requires :page, type: Integer, desc: '当前页码'
|
requires :page, type: Integer, desc: '当前页码'
|
||||||
|
optional :token, type: String
|
||||||
end
|
end
|
||||||
get do
|
get do
|
||||||
cs = CoursesService.new
|
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 :data, courses, with: Mobile::Entities::Course
|
||||||
present :status, 0
|
present :status, 0
|
||||||
end
|
end
|
||||||
|
@ -130,10 +131,11 @@ module Mobile
|
||||||
desc "搜索课程"
|
desc "搜索课程"
|
||||||
params do
|
params do
|
||||||
requires :name, type: String, desc: "课程名"
|
requires :name, type: String, desc: "课程名"
|
||||||
|
optional :token, type: String
|
||||||
end
|
end
|
||||||
get 'search' do
|
get 'search' do
|
||||||
cs = CoursesService.new
|
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 :data, courses, with: Mobile::Entities::Course
|
||||||
present :status, 0
|
present :status, 0
|
||||||
end
|
end
|
||||||
|
@ -165,13 +167,15 @@ module Mobile
|
||||||
desc "返回单个课程"
|
desc "返回单个课程"
|
||||||
params do
|
params do
|
||||||
requires :id, type: Integer
|
requires :id, type: Integer
|
||||||
|
optional :token, type: String
|
||||||
end
|
end
|
||||||
route_param :id do
|
route_param :id do
|
||||||
get do
|
get do
|
||||||
cs = CoursesService.new
|
cs = CoursesService.new
|
||||||
course = cs.show_course(params,(current_user.nil? ? User.find(2):current_user))
|
course = cs.show_course(params,(current_user.nil? ? User.find(2):current_user))
|
||||||
#course = Course.find(params[:id])
|
#course = Course.find(params[:id])
|
||||||
{status: 0, data: course}
|
present :data, course, with: Mobile::Entities::Course
|
||||||
|
present :status, 0
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -188,17 +192,18 @@ module Mobile
|
||||||
|
|
||||||
desc "课程通知列表"
|
desc "课程通知列表"
|
||||||
params do
|
params do
|
||||||
|
optional :token, type: String
|
||||||
end
|
end
|
||||||
get ":course_id/news" do
|
get ":course_id/news" do
|
||||||
cs = CoursesService.new
|
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 :data, news, with: Mobile::Entities::News
|
||||||
present :status, 0
|
present :status, 0
|
||||||
end
|
end
|
||||||
|
|
||||||
desc "显示课程通知"
|
desc "显示课程通知"
|
||||||
params do
|
params do
|
||||||
|
optional :token, type: String
|
||||||
end
|
end
|
||||||
get "news/:id" do
|
get "news/:id" do
|
||||||
cs = CoursesService.new
|
cs = CoursesService.new
|
||||||
|
@ -208,6 +213,16 @@ module Mobile
|
||||||
present :status, 0
|
present :status, 0
|
||||||
end
|
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
|
||||||
end
|
end
|
||||||
|
|
|
@ -70,6 +70,32 @@ module Mobile
|
||||||
present :status, 0
|
present :status, 0
|
||||||
end
|
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
|
||||||
end
|
end
|
||||||
|
|
|
@ -22,13 +22,15 @@ module Mobile
|
||||||
|
|
||||||
desc "显示用户"
|
desc "显示用户"
|
||||||
params do
|
params do
|
||||||
|
requires :id, type: Integer
|
||||||
end
|
end
|
||||||
get ':id' do
|
route_param :id do
|
||||||
us = UsersService.new
|
get do
|
||||||
ue = us.show_user params
|
us = UsersService.new
|
||||||
present :data, ue,with: Mobile::Entities::User
|
ue = us.show_user params
|
||||||
present :status, 0
|
present :data, ue,with: Mobile::Entities::User
|
||||||
|
present :status, 0
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
desc "修改用户"
|
desc "修改用户"
|
||||||
|
@ -77,11 +79,12 @@ module Mobile
|
||||||
present :status, 0
|
present :status, 0
|
||||||
end
|
end
|
||||||
|
|
||||||
desc "用户搜索"
|
desc "用户搜索"
|
||||||
params do
|
params do
|
||||||
requires :name, type: String, desc: '用户名关键字'
|
requires :name, type: String, desc: '用户名关键字'
|
||||||
|
requires :search_by, type: String,desc: '搜索依据:0 昵称,1 用户名,2 邮箱'
|
||||||
end
|
end
|
||||||
get 'search' do
|
get 'search/search_user' do
|
||||||
us = UsersService.new
|
us = UsersService.new
|
||||||
user = us.search_user params
|
user = us.search_user params
|
||||||
present :data, user, with: Mobile::Entities::User
|
present :data, user, with: Mobile::Entities::User
|
||||||
|
|
|
@ -15,6 +15,7 @@ module Mobile
|
||||||
anonymous_works_params_expose :m_score
|
anonymous_works_params_expose :m_score
|
||||||
anonymous_works_params_expose :is_anonymous_comments
|
anonymous_works_params_expose :is_anonymous_comments
|
||||||
anonymous_works_params_expose :cur_type
|
anonymous_works_params_expose :cur_type
|
||||||
|
anonymous_works_params_expose :cur_page
|
||||||
expose :jours ,using: Mobile::Entities::Jours do |f, opt|
|
expose :jours ,using: Mobile::Entities::Jours do |f, opt|
|
||||||
if f.is_a?(Hash) && f.key?(:jours)
|
if f.is_a?(Hash) && f.key?(:jours)
|
||||||
f[:jours]
|
f[:jours]
|
||||||
|
|
|
@ -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
|
|
@ -1,6 +1,7 @@
|
||||||
module Mobile
|
module Mobile
|
||||||
module Entities
|
module Entities
|
||||||
class Course < Grape::Entity
|
class Course < Grape::Entity
|
||||||
|
include Redmine::I18n
|
||||||
def self.course_expose(field)
|
def self.course_expose(field)
|
||||||
expose field do |f,opt|
|
expose field do |f,opt|
|
||||||
c = nil
|
c = nil
|
||||||
|
@ -9,9 +10,11 @@ module Mobile
|
||||||
else
|
else
|
||||||
c = f[:course]
|
c = f[:course]
|
||||||
end
|
end
|
||||||
if field == :img_url
|
if f.is_a?(Hash) && f.key?(field)
|
||||||
f[field] 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)
|
#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
|
else
|
||||||
(c[field] if (c.is_a?(Hash) && c.key?(field))) || (c.send(field) if c.respond_to?(field))
|
(c[field] if (c.is_a?(Hash) && c.key?(field))) || (c.send(field) if c.respond_to?(field))
|
||||||
end
|
end
|
||||||
|
@ -50,9 +53,11 @@ module Mobile
|
||||||
c[:course].teacher
|
c[:course].teacher
|
||||||
end
|
end
|
||||||
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)
|
f[:my_homework] if f.is_a?(Hash) && f.key?(:my_homework)
|
||||||
end
|
end
|
||||||
|
course_expose :current_user_is_member
|
||||||
|
course_expose :current_user_is_teacher
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -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
|
|
@ -1,10 +1,15 @@
|
||||||
module Mobile
|
module Mobile
|
||||||
module Entities
|
module Entities
|
||||||
class Homework < Grape::Entity
|
class Homework < Grape::Entity
|
||||||
|
include Redmine::I18n
|
||||||
def self.homework_expose(field)
|
def self.homework_expose(field)
|
||||||
expose field do |f,opt|
|
expose field do |f,opt|
|
||||||
if f.is_a?(Hash) && f.key?(field)
|
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)
|
elsif f.is_a?(::Bid)
|
||||||
if f.respond_to?(field)
|
if f.respond_to?(field)
|
||||||
f.send(field)
|
f.send(field)
|
||||||
|
@ -18,8 +23,16 @@ module Mobile
|
||||||
homework_expose :id
|
homework_expose :id
|
||||||
#课程名称
|
#课程名称
|
||||||
homework_expose :course_name
|
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
|
homework_expose :homework_times
|
||||||
#作业名称
|
#作业名称
|
||||||
|
@ -36,6 +49,13 @@ module Mobile
|
||||||
#只有作业启用了匿评功能且当前用户是课程老师且已提交的作品数量大于或等于2才能开启匿评
|
#只有作业启用了匿评功能且当前用户是课程老师且已提交的作品数量大于或等于2才能开启匿评
|
||||||
homework_expose :homework_state
|
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|
|
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)
|
f[:homework_for_anonymous_comments] if f.is_a?(Hash) && f.key?(:homework_for_anonymous_comments)
|
||||||
end
|
end
|
||||||
|
|
|
@ -17,6 +17,8 @@ module Mobile
|
||||||
case field
|
case field
|
||||||
when :homework_times
|
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?)
|
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
|
end
|
||||||
end
|
end
|
||||||
|
@ -28,6 +30,8 @@ module Mobile
|
||||||
homework_attach_expose :homework_times
|
homework_attach_expose :homework_times
|
||||||
homework_attach_expose :description
|
homework_attach_expose :description
|
||||||
homework_attach_expose :created_at
|
homework_attach_expose :created_at
|
||||||
|
#comment_status 0:所属作业尚未开启匿评,1:匿评中 2:匿评结束
|
||||||
|
homework_attach_expose :comment_status
|
||||||
expose :attachments,using: Mobile::Entities::Attachment do |f, opt|
|
expose :attachments,using: Mobile::Entities::Attachment do |f, opt|
|
||||||
if f.respond_to?(:attachments)
|
if f.respond_to?(:attachments)
|
||||||
f.send(:attachments)
|
f.send(:attachments)
|
||||||
|
|
|
@ -6,7 +6,11 @@ module Mobile
|
||||||
def self.homework_jours_expose(field)
|
def self.homework_jours_expose(field)
|
||||||
expose field do |f,opt|
|
expose field do |f,opt|
|
||||||
if f.is_a?(Hash) && f.key?(field)
|
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)
|
elsif f.is_a?(::SeemsRateableRates)
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
|
@ -18,12 +18,15 @@ module Mobile
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
jours_expose :id
|
jours_expose :id
|
||||||
|
jours_expose :jour_type
|
||||||
|
jours_expose :jour_id
|
||||||
expose :user,using: Mobile::Entities::User do |f, opt|
|
expose :user,using: Mobile::Entities::User do |f, opt|
|
||||||
f.user
|
f.user
|
||||||
end
|
end
|
||||||
jours_expose :created_on
|
jours_expose :created_on
|
||||||
jours_expose :notes
|
jours_expose :notes
|
||||||
jours_expose :m_reply_id
|
jours_expose :m_reply_id
|
||||||
|
jours_expose :m_parent_id
|
||||||
expose :reply_user,using: Mobile::Entities::User do |f, opt|
|
expose :reply_user,using: Mobile::Entities::User do |f, opt|
|
||||||
f.at_user
|
f.at_user
|
||||||
end
|
end
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
module Mobile
|
module Mobile
|
||||||
module Entities
|
module Entities
|
||||||
class News < Grape::Entity
|
class News < Grape::Entity
|
||||||
|
include Redmine::I18n
|
||||||
def self.news_expose(field)
|
def self.news_expose(field)
|
||||||
expose field do |f,opt|
|
expose field do |f,opt|
|
||||||
if f.is_a?(Hash) && f.key?(field)
|
if f.is_a?(Hash) && f.key?(field)
|
||||||
|
@ -9,13 +10,18 @@ module Mobile
|
||||||
n = f[:news]
|
n = f[:news]
|
||||||
comments = f[:comments]
|
comments = f[:comments]
|
||||||
if n.is_a?(::News)
|
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
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
news_expose :id
|
||||||
#新闻标题
|
#新闻标题
|
||||||
news_expose :title
|
news_expose :title
|
||||||
|
|
||||||
|
@ -34,7 +40,11 @@ module Mobile
|
||||||
#评论数量
|
#评论数量
|
||||||
news_expose :comments_count
|
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
|
end
|
||||||
|
|
|
@ -315,7 +315,7 @@ class AccountController < ApplicationController
|
||||||
code = /\d*/
|
code = /\d*/
|
||||||
#根据home_url生产正则表达式
|
#根据home_url生产正则表达式
|
||||||
eval("code = " + "/^" + home_url.gsub(/\//,"\\\/") + "\\\/*(welcome)?\\\/*(\\\/index\\\/*.*)?\$/")
|
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)
|
redirect_to user_activities_path(user)
|
||||||
else
|
else
|
||||||
if last_login_on == ''
|
if last_login_on == ''
|
||||||
|
|
|
@ -322,4 +322,11 @@ class AdminController < ApplicationController
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
#组织
|
||||||
|
def organization
|
||||||
|
@organizations = Organization.all
|
||||||
|
respond_to do |format|
|
||||||
|
format.html
|
||||||
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -186,6 +186,10 @@ class AttachmentsController < ApplicationController
|
||||||
|
|
||||||
@attachment = Attachment.new(:file => request.raw_post)
|
@attachment = Attachment.new(:file => request.raw_post)
|
||||||
@attachment.author = User.current
|
@attachment.author = User.current
|
||||||
|
if !params[:project].nil?
|
||||||
|
@attachment.container_type = 'Project'
|
||||||
|
@attachment.container_id = params[:project].split("?")[0]
|
||||||
|
end
|
||||||
@attachment.filename = params[:filename].presence || Redmine::Utils.random_hex(16)
|
@attachment.filename = params[:filename].presence || Redmine::Utils.random_hex(16)
|
||||||
saved = @attachment.save
|
saved = @attachment.save
|
||||||
|
|
||||||
|
|
|
@ -9,7 +9,7 @@ class BidsController < ApplicationController
|
||||||
menu_item :homework_statistics, :only => :homework_statistics
|
menu_item :homework_statistics, :only => :homework_statistics
|
||||||
menu_item :edit, :only => :edit
|
menu_item :edit, :only => :edit
|
||||||
|
|
||||||
|
before_filter :auth_login1, :only => [:show_courseEx]
|
||||||
|
|
||||||
before_filter :can_show_course,only: []
|
before_filter :can_show_course,only: []
|
||||||
before_filter :can_show_contest,only: []
|
before_filter :can_show_contest,only: []
|
||||||
|
|
|
@ -5,6 +5,7 @@ class CoursesController < ApplicationController
|
||||||
helper :members
|
helper :members
|
||||||
helper :words
|
helper :words
|
||||||
|
|
||||||
|
before_filter :auth_login1, :only => [:show, :feedback]
|
||||||
menu_item :overview
|
menu_item :overview
|
||||||
menu_item :feedback, :only => :feedback
|
menu_item :feedback, :only => :feedback
|
||||||
menu_item :homework, :only => :homework
|
menu_item :homework, :only => :homework
|
||||||
|
@ -98,7 +99,8 @@ class CoursesController < ApplicationController
|
||||||
#更新课程信息
|
#更新课程信息
|
||||||
def update
|
def update
|
||||||
cs = CoursesService.new
|
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
|
if @course.errors.full_messages.count <= 0
|
||||||
respond_to do |format|
|
respond_to do |format|
|
||||||
format.html {
|
format.html {
|
||||||
|
@ -498,7 +500,7 @@ class CoursesController < ApplicationController
|
||||||
|
|
||||||
def create
|
def create
|
||||||
cs = CoursesService.new
|
cs = CoursesService.new
|
||||||
@course = cs.create_course params,User.current
|
@course = cs.create_course(params,User.current)[:course]
|
||||||
if @course.new_record?
|
if @course.new_record?
|
||||||
respond_to do |format|
|
respond_to do |format|
|
||||||
format.html { render :action => 'new', :layout => 'base' } #Added by young
|
format.html { render :action => 'new', :layout => 'base' } #Added by young
|
||||||
|
@ -955,10 +957,34 @@ class CoursesController < ApplicationController
|
||||||
else
|
else
|
||||||
render_403
|
render_403
|
||||||
end
|
end
|
||||||
|
|
||||||
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
|
private
|
||||||
|
|
||||||
|
|
|
@ -20,7 +20,7 @@ class FilesController < ApplicationController
|
||||||
layout 'base_projects' #by young
|
layout 'base_projects' #by young
|
||||||
|
|
||||||
menu_item :files
|
menu_item :files
|
||||||
|
before_filter :auth_login1, :only => [:index]
|
||||||
before_filter :find_project_by_project_id#, :except => [:getattachtype]
|
before_filter :find_project_by_project_id#, :except => [:getattachtype]
|
||||||
before_filter :authorize, :except => [:getattachtype,:quote_resource_show,:search]
|
before_filter :authorize, :except => [:getattachtype,:quote_resource_show,:search]
|
||||||
|
|
||||||
|
|
|
@ -15,12 +15,14 @@ class ForumsController < ApplicationController
|
||||||
PageLimit = 20
|
PageLimit = 20
|
||||||
def create_feedback
|
def create_feedback
|
||||||
if User.current.logged?
|
if User.current.logged?
|
||||||
@memo = Memo.new(params[:memo])
|
#@memo = Memo.new(params[:memo])
|
||||||
@memo.forum_id = "1"
|
#@memo.forum_id = "1"
|
||||||
@memo.author_id = User.current.id
|
#@memo.author_id = User.current.id
|
||||||
#@forum = @memo.forum
|
#@forum = @memo.forum
|
||||||
|
cs = CommentService.new
|
||||||
|
@memo = cs.create_feedback params,User.current
|
||||||
respond_to do |format|
|
respond_to do |format|
|
||||||
if @memo.save
|
if !@memo.new_record?
|
||||||
format.html { redirect_to forum_path(@memo.forum) }
|
format.html { redirect_to forum_path(@memo.forum) }
|
||||||
else
|
else
|
||||||
sort_init 'updated_at', 'desc'
|
sort_init 'updated_at', 'desc'
|
||||||
|
|
|
@ -155,6 +155,8 @@ class IssuesController < ApplicationController
|
||||||
def create
|
def create
|
||||||
call_hook(:controller_issues_new_before_save, { :params => params, :issue => @issue })
|
call_hook(:controller_issues_new_before_save, { :params => params, :issue => @issue })
|
||||||
@issue.save_attachments(params[:attachments] || (params[:issue] && params[:issue][:uploads]))
|
@issue.save_attachments(params[:attachments] || (params[:issue] && params[:issue][:uploads]))
|
||||||
|
# 给该issue在它所在的项目中所有的issues中所在的位置给一个序号
|
||||||
|
@issue.project_issues_index = @issue.project.issues.last.project_issues_index + 1
|
||||||
if @issue.save
|
if @issue.save
|
||||||
call_hook(:controller_issues_new_after_save, { :params => params, :issue => @issue})
|
call_hook(:controller_issues_new_after_save, { :params => params, :issue => @issue})
|
||||||
respond_to do |format|
|
respond_to do |format|
|
||||||
|
|
|
@ -17,6 +17,7 @@
|
||||||
|
|
||||||
class MessagesController < ApplicationController
|
class MessagesController < ApplicationController
|
||||||
include ApplicationHelper
|
include ApplicationHelper
|
||||||
|
before_filter :authorize1, :only => [:show]
|
||||||
menu_item :boards
|
menu_item :boards
|
||||||
default_search_scope :messages
|
default_search_scope :messages
|
||||||
before_filter :find_board, :only => [:new, :preview,:edit]
|
before_filter :find_board, :only => [:new, :preview,:edit]
|
||||||
|
|
|
@ -17,6 +17,7 @@
|
||||||
|
|
||||||
class NewsController < ApplicationController
|
class NewsController < ApplicationController
|
||||||
layout 'base_projects'# by young
|
layout 'base_projects'# by young
|
||||||
|
before_filter :authorize1, :only => [:show]
|
||||||
default_search_scope :news
|
default_search_scope :news
|
||||||
model_object News
|
model_object News
|
||||||
before_filter :find_model_object, :except => [:new, :create, :index]
|
before_filter :find_model_object, :except => [:new, :create, :index]
|
||||||
|
|
|
@ -0,0 +1,55 @@
|
||||||
|
class OrganizationController < ApplicationController
|
||||||
|
layout 'project_base'
|
||||||
|
before_filter :require_admin, :except => [:index]
|
||||||
|
|
||||||
|
def index
|
||||||
|
#@projects = Project.find_by_sql("SELECT * FROM projects WHERE id IN (select MAX(id) from projects GROUP BY enterprise_name)")
|
||||||
|
@organizations = Organization.all
|
||||||
|
respond_to do |format|
|
||||||
|
format.html
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
def new
|
||||||
|
@organizations = Organization.new
|
||||||
|
respond_to do |format|
|
||||||
|
format.html
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
def create
|
||||||
|
@organizations = Organization.new
|
||||||
|
@organizations.name = params[:organization][:name]
|
||||||
|
if @organizations.save
|
||||||
|
redirect_to admin_organization_url
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
def edit
|
||||||
|
@organization = Organization.find params[:id]
|
||||||
|
respond_to do |format|
|
||||||
|
format.html
|
||||||
|
end
|
||||||
|
rescue Exception => e
|
||||||
|
render_404
|
||||||
|
end
|
||||||
|
|
||||||
|
def update
|
||||||
|
@organization = Organization.find params[:id]
|
||||||
|
@organization.name = params[:organization][:name]
|
||||||
|
if @organization.save
|
||||||
|
redirect_to admin_organization_url
|
||||||
|
end
|
||||||
|
rescue Exception => e
|
||||||
|
render_404
|
||||||
|
end
|
||||||
|
|
||||||
|
def destroy
|
||||||
|
@organization = Organization.find params[:id]
|
||||||
|
if @organization.destroy
|
||||||
|
redirect_to admin_organization_url
|
||||||
|
end
|
||||||
|
rescue Exception => e
|
||||||
|
render_404
|
||||||
|
end
|
||||||
|
end
|
|
@ -1,6 +0,0 @@
|
||||||
class OrganizationsController < ApplicationController
|
|
||||||
layout 'project_base'
|
|
||||||
def index
|
|
||||||
@projects = Project.find_by_sql("SELECT * FROM projects WHERE id IN (select MAX(id) from projects GROUP BY enterprise_name)")
|
|
||||||
end
|
|
||||||
end
|
|
|
@ -23,6 +23,10 @@ class PollController < ApplicationController
|
||||||
|
|
||||||
def show
|
def show
|
||||||
@poll = Poll.find params[:id]
|
@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?)
|
if has_commit_poll?(@poll.id,User.current.id) && (!User.current.admin?)
|
||||||
render_403
|
render_403
|
||||||
|
|
|
@ -19,7 +19,7 @@
|
||||||
# Description 封装代码,简化代码,格式化代码,
|
# Description 封装代码,简化代码,格式化代码,
|
||||||
class ProjectsController < ApplicationController
|
class ProjectsController < ApplicationController
|
||||||
layout :select_project_layout
|
layout :select_project_layout
|
||||||
|
before_filter :authorize1, :only => [:show]
|
||||||
menu_item :overview, :only => :show
|
menu_item :overview, :only => :show
|
||||||
menu_item :roadmap, :only => :roadmap
|
menu_item :roadmap, :only => :roadmap
|
||||||
menu_item :settings, :only => :settings
|
menu_item :settings, :only => :settings
|
||||||
|
@ -179,6 +179,7 @@ class ProjectsController < ApplicationController
|
||||||
@trackers = Tracker.sorted.all
|
@trackers = Tracker.sorted.all
|
||||||
@project = Project.new
|
@project = Project.new
|
||||||
@project.safe_attributes = params[:project]
|
@project.safe_attributes = params[:project]
|
||||||
|
@project.organization_id = params[:organization_id]
|
||||||
if validate_parent_id && @project.save
|
if validate_parent_id && @project.save
|
||||||
@project.set_allowed_parent!(params[:project]['parent_id']) if params[:project].has_key?('parent_id')
|
@project.set_allowed_parent!(params[:project]['parent_id']) if params[:project].has_key?('parent_id')
|
||||||
# Add current user as a project member if he is not admin
|
# Add current user as a project member if he is not admin
|
||||||
|
@ -248,7 +249,19 @@ class ProjectsController < ApplicationController
|
||||||
# Author lizanle
|
# Author lizanle
|
||||||
# Description 项目动态展示方法,删除了不必要的代码
|
# Description 项目动态展示方法,删除了不必要的代码
|
||||||
def show
|
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])
|
if params[:jump] && redirect_to_project_menu_item(@project, params[:jump])
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
|
@ -271,30 +284,36 @@ class ProjectsController < ApplicationController
|
||||||
# 时间跨度不能太大,不然很慢,所以删掉了-1.years
|
# 时间跨度不能太大,不然很慢,所以删掉了-1.years
|
||||||
@date_from = @date_to - @days
|
@date_from = @date_to - @days
|
||||||
@with_subprojects = params[:with_subprojects].nil? ? Setting.display_subprojects_issues? : (params[:with_subprojects] == '1')
|
@with_subprojects = params[:with_subprojects].nil? ? Setting.display_subprojects_issues? : (params[:with_subprojects] == '1')
|
||||||
|
=end
|
||||||
|
|
||||||
@author = params[:user_id].blank? ? nil : User.active.find(params[:user_id])
|
@author = params[:user_id].blank? ? nil : User.active.find(params[:user_id])
|
||||||
# 决定显示所用用户或单个用户活动
|
# 决定显示所用用户或单个用户活动
|
||||||
|
=begin
|
||||||
@activity = Redmine::Activity::Fetcher.new(User.current,
|
@activity = Redmine::Activity::Fetcher.new(User.current,
|
||||||
:project => @project,
|
:project => @project,
|
||||||
:with_subprojects => @with_subprojects,
|
:with_subprojects => @with_subprojects,
|
||||||
:author => @author)
|
:author => @author)
|
||||||
@activity.scope_select {|t| !has["show_#{t}"].nil?}
|
@activity.scope_select {|t| !has["show_#{t}"].nil?}
|
||||||
|
=end
|
||||||
|
|
||||||
# 根据私密性,取出符合条件的所有数据
|
# 根据私密性,取出符合条件的所有数据
|
||||||
if User.current.member_of?(@project) || User.current.admin?
|
if User.current.member_of?(@project) || User.current.admin?
|
||||||
events = @activity.events(@date_from, @date_to)
|
@events_pages = ForgeActivity.where("project_id = ?",@project).order("created_at desc").page(params['page'|| 1]).per(20);
|
||||||
|
#events = @activity.events(@date_from, @date_to)
|
||||||
else
|
else
|
||||||
events = @activity.events(@date_from, @date_to, :is_public => 1)
|
@events_pages = ForgeActivity.includes(:project).where("forge_activities.project_id = ? and projects.is_public
|
||||||
|
= ?",@project,1).order("created_at desc")
|
||||||
|
.page(params['page'|| 1]).per(10);
|
||||||
|
# @events = @activity.events(@date_from, @date_to, :is_public => 1)
|
||||||
end
|
end
|
||||||
|
|
||||||
@offset, @limit = api_offset_and_limit({:limit => 10})
|
=begin
|
||||||
@events_count = events.count
|
@events_pages = Paginator.new events.count, 10, params['page']
|
||||||
@events_pages = Paginator.new @events_count, @limit, params['page']
|
|
||||||
@offset ||= @events_pages.offset
|
|
||||||
# 总的数据中取出某一页
|
# 总的数据中取出某一页
|
||||||
events = events.slice(@offset,@limit)
|
events = events.slice(@events_pages.offset,10)
|
||||||
# 按天分组
|
# 按天分组
|
||||||
@events_by_day = events.group_by {|event| User.current.time_to_date(event.event_datetime)}
|
@events_by_day = events.group_by {|event| User.current.time_to_date(event.event_datetime)}
|
||||||
# 获取讨论区总数
|
=end
|
||||||
boards = @project.boards.includes(:last_message => :author).all
|
boards = @project.boards.includes(:last_message => :author).all
|
||||||
@topic_count = @project.boards.count
|
@topic_count = @project.boards.count
|
||||||
# 根据对应的请求,返回对应的数据
|
# 根据对应的请求,返回对应的数据
|
||||||
|
@ -409,6 +428,7 @@ class ProjectsController < ApplicationController
|
||||||
|
|
||||||
def update
|
def update
|
||||||
@project.safe_attributes = params[:project]
|
@project.safe_attributes = params[:project]
|
||||||
|
@project.organization_id = params[:organization_id]
|
||||||
#@project.dts_test = params[:project][:dts_test]
|
#@project.dts_test = params[:project][:dts_test]
|
||||||
if validate_parent_id && @project.save
|
if validate_parent_id && @project.save
|
||||||
@course = Course.find_by_extra(@project.identifier)
|
@course = Course.find_by_extra(@project.identifier)
|
||||||
|
|
|
@ -18,7 +18,7 @@ class UsersController < ApplicationController
|
||||||
|
|
||||||
layout :setting_layout
|
layout :setting_layout
|
||||||
#Added by young
|
#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 :activity
|
||||||
menu_item :user_information, :only => :info
|
menu_item :user_information, :only => :info
|
||||||
menu_item :user_course, :only => :user_courses
|
menu_item :user_course, :only => :user_courses
|
||||||
|
@ -408,6 +408,9 @@ class UsersController < ApplicationController
|
||||||
|
|
||||||
def show
|
def show
|
||||||
pre_count = 10 #limit
|
pre_count = 10 #limit
|
||||||
|
# Time 2015-02-04 11:46:34
|
||||||
|
# Author lizanle
|
||||||
|
# Description type 1 :所有动态包括我关注的人 type 2:我的动态 type 3:关于我的回复
|
||||||
case params[:type]
|
case params[:type]
|
||||||
when "1"
|
when "1"
|
||||||
if @user == User.current
|
if @user == User.current
|
||||||
|
@ -428,26 +431,27 @@ class UsersController < ApplicationController
|
||||||
messages = message.sort {|x,y| y.created_on <=> x.created_on }
|
messages = message.sort {|x,y| y.created_on <=> x.created_on }
|
||||||
@message = messages[@info_pages.offset, @info_pages.per_page]
|
@message = messages[@info_pages.offset, @info_pages.per_page]
|
||||||
@state = 2
|
@state = 2
|
||||||
else
|
else
|
||||||
|
# Time 2015-02-04 10:50:49
|
||||||
|
# Author lizanle
|
||||||
|
# Description 所有动态
|
||||||
where_condition = nil;
|
where_condition = nil;
|
||||||
# where_condition = "act_type <> 'JournalsForMessage'"
|
# where_condition = "act_type <> 'JournalsForMessage'"
|
||||||
if @user == User.current
|
if @user == User.current
|
||||||
watcher = User.watched_by(@user)
|
watcher = User.watched_by(@user)
|
||||||
watcher.push(User.current)
|
watcher.push(User.current)
|
||||||
activity = Activity.where(where_condition).where('user_id in (?)', watcher).order('id desc')
|
activity = Activity.where(where_condition).where('user_id in (?)', watcher).order('id desc')
|
||||||
else
|
else
|
||||||
activity = Activity.where(where_condition).where('user_id = ?', @user.id).order('id desc')
|
activity = Activity.where(where_condition).where('user_id = ?', @user.id).order('id desc')
|
||||||
end
|
end
|
||||||
|
|
||||||
@activity_count = activity.count
|
@activity_count = activity.count
|
||||||
@activity_pages = Paginator.new @activity_count, pre_count, params['page']
|
@activity_pages = Paginator.new @activity_count, pre_count, params['page']
|
||||||
activity_page = activity.slice(@activity_pages.offset,@activity_pages.per_page * 2)
|
@activity = activity.slice(@activity_pages.offset,@activity_pages.per_page )
|
||||||
activity_page = activity_page.reject { |e|
|
@activity = @activity.reject { |e|
|
||||||
((e.act_type=="Issue") && ( !e.act.visible?(User.current))) ||
|
((e.act_type=="Issue") && ( !e.act.visible?(User.current))) ||
|
||||||
((e.act_type == "Journal") && (!e.act.project.visible?(User.current))) ||
|
((e.act_type == "Journal") && (!e.act.project.visible?(User.current))) ||
|
||||||
((e.act_type == "Bid") && ((!User.current.member_of_course?(e.act.courses.first) || !User.current.admin?)))
|
((e.act_type == "Bid") && ((!User.current.member_of_course?(e.act.courses.first) || !User.current.admin?)))
|
||||||
}
|
}
|
||||||
@activity = activity.slice(0,@activity_pages.per_page)
|
|
||||||
@state = 0
|
@state = 0
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -27,28 +27,31 @@ class WelcomeController < ApplicationController
|
||||||
def index
|
def index
|
||||||
# 企业版定制: params[:project]为传过来的参数
|
# 企业版定制: params[:project]为传过来的参数
|
||||||
unless params[:organization].nil?
|
unless params[:organization].nil?
|
||||||
@cur_projects = Project.find(params[:organization])
|
@organization = Organization.find params[:organization]
|
||||||
@organization = @cur_projects.enterprise_name
|
@organization_projects = Project.visible.joins(:project_status).joins("LEFT JOIN project_scores ON projects.id = project_scores.project_id").where("projects.organization_id = ?", @organization.id).order("score DESC").limit(10).all
|
||||||
@organization_projects = (current_user.admin? || User.current.member_of?(@cur_projects)) ? Project.where("enterprise_name =? ", @organization) : Project.all_public.where("enterprise_name =? ", @organization)
|
@part_projects = @organization_projects.count < 9 ? find_miracle_project( 9 - @organization_projects.count, 3,"score desc") : []
|
||||||
@e_count = @organization_projects.count
|
# @cur_projects = Project.find(params[:organization])
|
||||||
@part_projects = []
|
# @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)
|
||||||
@organization_projects.each do |obj|
|
# @e_count = @organization_projects.count
|
||||||
break if(@organization_projects[10] == obj)
|
# @part_projects = []
|
||||||
@part_projects << Project.visible.find_by_id("#{obj.id}") unless obj.id.nil?
|
# # 取十个
|
||||||
end
|
# @organization_projects.each do |obj|
|
||||||
# 不够十个的用最火项目替代
|
# break if(@organization_projects[10] == obj)
|
||||||
@e_count < 9 ? @part_projects = find_miracle_project( 9 - @e_count, 3,"score desc") : @part_projects
|
# @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')
|
@enterprise_page = FirstPage.find_by_page_type('enterprise')
|
||||||
if @enterprise_page.nil?
|
if @enterprise_page.nil?
|
||||||
@enterprise_page = FirstPage.new
|
@enterprise_page = FirstPage.new
|
||||||
@enterprise_page.page_type = 'enterprise'
|
@enterprise_page.page_type = 'enterprise'
|
||||||
end
|
end
|
||||||
# 主页配置部分结束
|
# 主页配置部分结束
|
||||||
|
|
||||||
end
|
end
|
||||||
# end 企业版定制结束
|
# end 企业版定制结束
|
||||||
|
|
||||||
if @first_page.nil? || @first_page.sort_type.nil?
|
if @first_page.nil? || @first_page.sort_type.nil?
|
||||||
@projects = find_miracle_project(10, 3,"score desc")
|
@projects = find_miracle_project(10, 3,"score desc")
|
||||||
else
|
else
|
||||||
|
@ -74,7 +77,8 @@ class WelcomeController < ApplicationController
|
||||||
@projects = @projects_all.order("score desc")
|
@projects = @projects_all.order("score desc")
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
rescue Exception => e
|
||||||
|
render_404
|
||||||
end
|
end
|
||||||
|
|
||||||
def robots
|
def robots
|
||||||
|
@ -84,7 +88,7 @@ class WelcomeController < ApplicationController
|
||||||
|
|
||||||
def course
|
def course
|
||||||
@course_page = FirstPage.find_by_page_type('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()
|
@logoLink ||= logolink()
|
||||||
|
|
||||||
##3-8月份为查找春季课程,9-2月份为查找秋季课程
|
##3-8月份为查找春季课程,9-2月份为查找秋季课程
|
||||||
|
|
|
@ -37,4 +37,27 @@ module ApiHelper
|
||||||
end
|
end
|
||||||
result
|
result
|
||||||
end
|
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
|
end
|
|
@ -1,16 +0,0 @@
|
||||||
module ExpireHelper
|
|
||||||
#index.html 中 “projects”塊 緩存過期
|
|
||||||
def expire_project_cache
|
|
||||||
ActionController::Base.new.expire_fragment('projects')
|
|
||||||
end
|
|
||||||
|
|
||||||
#index.html 中 “activities”塊 緩存過期
|
|
||||||
def expire_activitie_cache
|
|
||||||
ActionController::Base.new.expire_fragment('activities')
|
|
||||||
end
|
|
||||||
|
|
||||||
#welcome/index.html 中 “forums”塊 緩存過期
|
|
||||||
def expire_forum_cache
|
|
||||||
ActionController::Base.new.expire_fragment('forums')
|
|
||||||
end
|
|
||||||
end
|
|
|
@ -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")
|
WHERE homework_attaches.bid_id = #{bid.id} AND homework_evaluations.user_id = #{user.id} ORDER BY m_score DESC")
|
||||||
student_batch_homework_list
|
student_batch_homework_list
|
||||||
end
|
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
|
end
|
|
@ -371,4 +371,19 @@ module ProjectsHelper
|
||||||
|
|
||||||
return projects
|
return projects
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def project_organizations_id_option
|
||||||
|
type = []
|
||||||
|
option1 = []
|
||||||
|
option1 << l(:label_organization_choose)
|
||||||
|
option1 << 0
|
||||||
|
type << option1
|
||||||
|
Organization.all.each do |org|
|
||||||
|
option = []
|
||||||
|
option << org.name
|
||||||
|
option << org.id
|
||||||
|
type << option
|
||||||
|
end
|
||||||
|
type
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -314,28 +314,28 @@ module WelcomeHelper
|
||||||
str = ' '.html_safe
|
str = ' '.html_safe
|
||||||
case event.event_type
|
case event.event_type
|
||||||
when 'news'
|
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)) <<
|
content_tag("span", find_all_event_type(event)) <<
|
||||||
': '.html_safe <<
|
': '.html_safe <<
|
||||||
link_to(strip_tags(event.event_description).gsub(/ /,''), event.event_url, {:title => event.event_description})
|
link_to(strip_tags(event.event_description).gsub(/ /,''), event.event_url, {:title => event.event_description})
|
||||||
when 'issue', 'message' , 'bid' , 'wiki-page' , 'document'
|
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)) <<
|
content_tag("span", find_all_event_type(event)) <<
|
||||||
': '.html_safe <<
|
': '.html_safe <<
|
||||||
link_to(event.event_title, event.event_url, {:title => event.event_title})
|
link_to(event.event_title, event.event_url, {:title => event.event_title})
|
||||||
when 'reply' ,'Reply', 'Memo'
|
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)) <<
|
content_tag("span", find_all_event_type(event)) <<
|
||||||
': '.html_safe <<
|
': '.html_safe <<
|
||||||
link_to(strip_tags(event.event_description).gsub(/ /,''), event.event_url, {:title => event.event_description})
|
link_to(strip_tags(event.event_description).gsub(/ /,''), event.event_url, {:title => event.event_description})
|
||||||
when 'attachment'
|
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)) <<
|
content_tag('span', find_all_event_type(event)) <<
|
||||||
': '.html_safe <<
|
': '.html_safe <<
|
||||||
link_to(event.event_title, event.event_url, {:title => event.event_title}) <<
|
link_to(event.event_title, event.event_url, {:title => event.event_title}) <<
|
||||||
link_to((' ['.html_safe+l(:label_downloads_list).to_s << ']'), project_files_path(event.container.project), :class => "attachments_list_color")
|
link_to((' ['.html_safe+l(:label_downloads_list).to_s << ']'), project_files_path(event.container.project), :class => "attachments_list_color")
|
||||||
else
|
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)) <<
|
content_tag("span", find_all_event_type(event)) <<
|
||||||
': '.html_safe << link_to(event.event_title, event.event_url, {:title => event.event_title})
|
': '.html_safe << link_to(event.event_title, event.event_url, {:title => event.event_title})
|
||||||
end
|
end
|
||||||
|
|
|
@ -25,7 +25,9 @@ class Attachment < ActiveRecord::Base
|
||||||
belongs_to :softapplication, foreign_key: 'container_id', conditions: "attachments.container_type = 'Softapplication'"
|
belongs_to :softapplication, foreign_key: 'container_id', conditions: "attachments.container_type = 'Softapplication'"
|
||||||
belongs_to :author, :class_name => "User", :foreign_key => "author_id"
|
belongs_to :author, :class_name => "User", :foreign_key => "author_id"
|
||||||
belongs_to :attachmentstype, :foreign_key => "attachtype",:primary_key => "id"
|
belongs_to :attachmentstype, :foreign_key => "attachtype",:primary_key => "id"
|
||||||
|
# 被ForgeActivity虚拟关联
|
||||||
|
has_many :forge_acts, :class_name => 'ForgeActivity',:as =>:forge_act ,:dependent => :destroy
|
||||||
|
# end
|
||||||
include UserScoreHelper
|
include UserScoreHelper
|
||||||
|
|
||||||
validates :filename, presence: true, length: {maximum: 254}
|
validates :filename, presence: true, length: {maximum: 254}
|
||||||
|
@ -70,7 +72,7 @@ class Attachment < ActiveRecord::Base
|
||||||
@@thumbnails_storage_path = File.join(Rails.root, "tmp", "thumbnails")
|
@@thumbnails_storage_path = File.join(Rails.root, "tmp", "thumbnails")
|
||||||
|
|
||||||
before_save :files_to_final_location
|
before_save :files_to_final_location
|
||||||
after_create :be_user_score # user_score
|
after_create :be_user_score ,:act_as_forge_activity# user_score
|
||||||
after_update :be_user_score
|
after_update :be_user_score
|
||||||
after_destroy :delete_from_disk,:down_user_score
|
after_destroy :delete_from_disk,:down_user_score
|
||||||
|
|
||||||
|
@ -529,4 +531,14 @@ class Attachment < ActiveRecord::Base
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
# Time 2015-03-02 17:42:48
|
||||||
|
# Author lizanle
|
||||||
|
# Description 上传该项目的文档资料也要保存一份在公共表中
|
||||||
|
def act_as_forge_activity
|
||||||
|
if self.container_type == 'Project'
|
||||||
|
self.forge_acts << ForgeActivity.new(:user_id => self.author_id,
|
||||||
|
:project_id => self.container_id)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
|
@ -17,7 +17,6 @@ class Bid < ActiveRecord::Base
|
||||||
HomeworkProject = 2
|
HomeworkProject = 2
|
||||||
attr_accessible :author_id, :budget, :deadline, :name, :description, :homework_type, :password
|
attr_accessible :author_id, :budget, :deadline, :name, :description, :homework_type, :password
|
||||||
include Redmine::SafeAttributes
|
include Redmine::SafeAttributes
|
||||||
include ExpireHelper
|
|
||||||
|
|
||||||
belongs_to :author, :class_name => 'User', :foreign_key => :author_id
|
belongs_to :author, :class_name => 'User', :foreign_key => :author_id
|
||||||
belongs_to :course
|
belongs_to :course
|
||||||
|
@ -33,12 +32,6 @@ class Bid < ActiveRecord::Base
|
||||||
has_many :join_in_contests, :dependent => :destroy
|
has_many :join_in_contests, :dependent => :destroy
|
||||||
has_many :praise_tread, as: :praise_tread_object, dependent: :destroy
|
has_many :praise_tread, as: :praise_tread_object, dependent: :destroy
|
||||||
# has_many :fork_homework, :class_name => 'Bid', :conditions => "#{Bid.table_name}.parent_id = #{id}"
|
# has_many :fork_homework, :class_name => 'Bid', :conditions => "#{Bid.table_name}.parent_id = #{id}"
|
||||||
|
|
||||||
|
|
||||||
after_create :expire_activitie_cache
|
|
||||||
after_update :expire_activitie_cache
|
|
||||||
before_destroy :expire_activitie_cache
|
|
||||||
|
|
||||||
acts_as_attachable
|
acts_as_attachable
|
||||||
|
|
||||||
NAME_LENGTH_LIMIT = 60
|
NAME_LENGTH_LIMIT = 60
|
||||||
|
@ -93,7 +86,9 @@ class Bid < ActiveRecord::Base
|
||||||
# 'deadline'
|
# 'deadline'
|
||||||
def add_jour(user, notes, reference_user_id = 0, options = {})
|
def add_jour(user, notes, reference_user_id = 0, options = {})
|
||||||
if options.count == 0
|
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
|
else
|
||||||
jfm = self.journals_for_messages.build(options)
|
jfm = self.journals_for_messages.build(options)
|
||||||
jfm.save
|
jfm.save
|
||||||
|
|
|
@ -16,7 +16,6 @@
|
||||||
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||||
|
|
||||||
class Changeset < ActiveRecord::Base
|
class Changeset < ActiveRecord::Base
|
||||||
include ExpireHelper
|
|
||||||
belongs_to :repository
|
belongs_to :repository
|
||||||
belongs_to :user
|
belongs_to :user
|
||||||
include UserScoreHelper
|
include UserScoreHelper
|
||||||
|
@ -65,9 +64,8 @@ class Changeset < ActiveRecord::Base
|
||||||
includes(:repository => :project).where(Project.allowed_to_condition(args.shift || User.current, :view_changesets, *args))
|
includes(:repository => :project).where(Project.allowed_to_condition(args.shift || User.current, :view_changesets, *args))
|
||||||
}
|
}
|
||||||
|
|
||||||
after_create :scan_for_issues,:refresh_changests,:expire_activitie_cache#:be_user_score # user_score
|
after_create :scan_for_issues,:refresh_changests#:be_user_score # user_score
|
||||||
after_update :be_user_score,:expire_activitie_cache
|
after_update :be_user_score
|
||||||
before_destroy :expire_activitie_cache
|
|
||||||
after_destroy :down_user_score
|
after_destroy :down_user_score
|
||||||
before_create :before_create_cs
|
before_create :before_create_cs
|
||||||
|
|
||||||
|
|
|
@ -1,10 +1,6 @@
|
||||||
class ContestNotification < ActiveRecord::Base
|
class ContestNotification < ActiveRecord::Base
|
||||||
include ExpireHelper
|
|
||||||
attr_accessible :content, :title
|
attr_accessible :content, :title
|
||||||
validates :title, length: {maximum: 30}
|
validates :title, length: {maximum: 30}
|
||||||
after_create :expire_forum_cache
|
|
||||||
after_update :expire_forum_cache
|
|
||||||
before_destroy :expire_forum_cache
|
|
||||||
|
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
|
@ -17,18 +17,16 @@
|
||||||
|
|
||||||
class Document < ActiveRecord::Base
|
class Document < ActiveRecord::Base
|
||||||
include Redmine::SafeAttributes
|
include Redmine::SafeAttributes
|
||||||
include ExpireHelper
|
|
||||||
belongs_to :project
|
belongs_to :project
|
||||||
belongs_to :user
|
belongs_to :user
|
||||||
belongs_to :category, :class_name => "DocumentCategory", :foreign_key => "category_id"
|
belongs_to :category, :class_name => "DocumentCategory", :foreign_key => "category_id"
|
||||||
include UserScoreHelper
|
include UserScoreHelper
|
||||||
after_save :be_user_score # user_score
|
after_save :be_user_score # user_score
|
||||||
after_destroy :down_user_score
|
after_destroy :down_user_score
|
||||||
after_create :expire_activitie_cache
|
|
||||||
after_update :expire_activitie_cache
|
|
||||||
before_destroy :expire_activitie_cache
|
|
||||||
acts_as_attachable :delete_permission => :delete_documents
|
acts_as_attachable :delete_permission => :delete_documents
|
||||||
|
# 被ForgeActivity虚拟关联
|
||||||
|
has_many :forge_acts, :class_name => 'ForgeActivity',:as =>:forge_act ,:dependent => :destroy
|
||||||
|
# end
|
||||||
acts_as_searchable :columns => ['title', "#{table_name}.description"], :include => :project
|
acts_as_searchable :columns => ['title', "#{table_name}.description"], :include => :project
|
||||||
acts_as_event :title => Proc.new {|o| "#{l(:label_document)}: #{o.title}"},
|
acts_as_event :title => Proc.new {|o| "#{l(:label_document)}: #{o.title}"},
|
||||||
#:author => Proc.new {|o| o.attachments.reorder("#{Attachment.table_name}.created_on ASC").first.try(:author) },
|
#:author => Proc.new {|o| o.attachments.reorder("#{Attachment.table_name}.created_on ASC").first.try(:author) },
|
||||||
|
@ -39,7 +37,7 @@ class Document < ActiveRecord::Base
|
||||||
|
|
||||||
validates_presence_of :project, :title, :category
|
validates_presence_of :project, :title, :category
|
||||||
validates_length_of :title, :maximum => 60
|
validates_length_of :title, :maximum => 60
|
||||||
|
after_create :act_as_forge_activity
|
||||||
scope :visible, lambda {|*args|
|
scope :visible, lambda {|*args|
|
||||||
includes(:project).where(Project.allowed_to_condition(args.shift || User.current, :view_documents, *args))
|
includes(:project).where(Project.allowed_to_condition(args.shift || User.current, :view_documents, *args))
|
||||||
}
|
}
|
||||||
|
@ -81,5 +79,12 @@ class Document < ActiveRecord::Base
|
||||||
update_document(self.user,2,self.project)
|
update_document(self.user,2,self.project)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
# Time 2015-03-02 10:51:16
|
||||||
|
# Author lizanle
|
||||||
|
# Description 新创建的document要在公共表ForgeActivity中记录
|
||||||
|
def act_as_forge_activity
|
||||||
|
self.forge_acts << ForgeActivity.new(:user_id => self.user_id,
|
||||||
|
:project_id => self.project_id)
|
||||||
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
|
@ -0,0 +1,22 @@
|
||||||
|
# Time 2015-02-06 10:42:34
|
||||||
|
# Author lizanle
|
||||||
|
# Description 这是保存Project相关的动态的公共表
|
||||||
|
class ForgeActivity < ActiveRecord::Base
|
||||||
|
# 公共表中活动类型,命名规则:TYPE_OF_{类名}_ACT
|
||||||
|
TYPE_OF_ISSUE_ACT = "Issue"
|
||||||
|
TYPE_OF_MESSAGE_ACT = "Message"
|
||||||
|
TYPE_OF_ATTACHMENT_ACT = "Attachment"
|
||||||
|
TYPE_OF_DOCUMENT_ACT = "Document"
|
||||||
|
TYPE_OF_JOURNAL_ACT = "Journal"
|
||||||
|
TYPE_OF_WIKI_ACT = "Wiki"
|
||||||
|
TYPE_OF_NEWS_ACT = "News"
|
||||||
|
attr_accessible :forge_act_id, :forge_act_type,:project_id,:user_id,:org_id
|
||||||
|
# 虚拟关联
|
||||||
|
belongs_to :forge_act ,:polymorphic => true
|
||||||
|
belongs_to :project
|
||||||
|
belongs_to :user
|
||||||
|
validates :user_id,presence: true
|
||||||
|
validates :project_id,presence: true
|
||||||
|
validates :forge_act_id,presence: true
|
||||||
|
validates :forge_act_type, presence: true
|
||||||
|
end
|
|
@ -1,13 +1,8 @@
|
||||||
class Forum < ActiveRecord::Base
|
class Forum < ActiveRecord::Base
|
||||||
include Redmine::SafeAttributes
|
include Redmine::SafeAttributes
|
||||||
include ExpireHelper
|
|
||||||
has_many :topics, :class_name => 'Memo', :conditions => "#{Memo.table_name}.parent_id IS NULL", :order => "#{Memo.table_name}.created_at DESC", :dependent => :destroy
|
has_many :topics, :class_name => 'Memo', :conditions => "#{Memo.table_name}.parent_id IS NULL", :order => "#{Memo.table_name}.created_at DESC", :dependent => :destroy
|
||||||
has_many :memos, :dependent => :destroy, conditions: "parent_id IS NULL"
|
has_many :memos, :dependent => :destroy, conditions: "parent_id IS NULL"
|
||||||
belongs_to :creator, :class_name => "User", :foreign_key => 'creator_id'
|
belongs_to :creator, :class_name => "User", :foreign_key => 'creator_id'
|
||||||
|
|
||||||
after_create :expire_forum_cache
|
|
||||||
after_update :expire_forum_cache
|
|
||||||
before_destroy :expire_forum_cache
|
|
||||||
safe_attributes 'name',
|
safe_attributes 'name',
|
||||||
'description',
|
'description',
|
||||||
'topic_count',
|
'topic_count',
|
||||||
|
|
|
@ -1,8 +1,8 @@
|
||||||
class ForumObserver < ActiveRecord::Observer
|
class ForumObserver < ActiveRecord::Observer
|
||||||
def after_create(forum)
|
# def after_create(forum)
|
||||||
Thread.start do
|
# Thread.start do
|
||||||
Mailer.forum_add(forum).deliver if Setting.notified_events.include?('forum_add')
|
# Mailer.forum_add(forum).deliver if Setting.notified_events.include?('forum_add')
|
||||||
end
|
# end
|
||||||
|
#
|
||||||
end
|
# end
|
||||||
end
|
end
|
||||||
|
|
|
@ -19,7 +19,6 @@ class Issue < ActiveRecord::Base
|
||||||
include Redmine::SafeAttributes
|
include Redmine::SafeAttributes
|
||||||
include Redmine::Utils::DateCalculation
|
include Redmine::Utils::DateCalculation
|
||||||
include UserScoreHelper
|
include UserScoreHelper
|
||||||
include ExpireHelper
|
|
||||||
belongs_to :project
|
belongs_to :project
|
||||||
belongs_to :tracker
|
belongs_to :tracker
|
||||||
belongs_to :status, :class_name => 'IssueStatus', :foreign_key => 'status_id'
|
belongs_to :status, :class_name => 'IssueStatus', :foreign_key => 'status_id'
|
||||||
|
@ -46,6 +45,8 @@ class Issue < ActiveRecord::Base
|
||||||
|
|
||||||
# added by fq
|
# added by fq
|
||||||
has_many :acts, :class_name => 'Activity', :as => :act, :dependent => :destroy
|
has_many :acts, :class_name => 'Activity', :as => :act, :dependent => :destroy
|
||||||
|
# 被ForgeActivity虚拟关联
|
||||||
|
has_many :forge_acts, :class_name => 'ForgeActivity',:as =>:forge_act ,:dependent => :destroy
|
||||||
# end
|
# end
|
||||||
has_many :praise_tread, as: :praise_tread_object, dependent: :destroy
|
has_many :praise_tread, as: :praise_tread_object, dependent: :destroy
|
||||||
|
|
||||||
|
@ -64,7 +65,9 @@ class Issue < ActiveRecord::Base
|
||||||
},
|
},
|
||||||
:url => Proc.new {|o| {:controller => 'issues', :action => 'show', :id => o}},
|
:url => Proc.new {|o| {:controller => 'issues', :action => 'show', :id => o}},
|
||||||
:type => Proc.new {|o| 'issue' + (o.closed? ? ' closed' : '') }
|
:type => Proc.new {|o| 'issue' + (o.closed? ? ' closed' : '') }
|
||||||
|
# Time 2015-01-31 13:52:53
|
||||||
|
# Author lizanle
|
||||||
|
# Description 将hash传进去
|
||||||
acts_as_activity_provider :find_options => {:include => [:project, :author, :tracker]},
|
acts_as_activity_provider :find_options => {:include => [:project, :author, :tracker]},
|
||||||
:author_key => :author_id
|
:author_key => :author_id
|
||||||
|
|
||||||
|
@ -77,12 +80,9 @@ class Issue < ActiveRecord::Base
|
||||||
attr_reader :current_journal
|
attr_reader :current_journal
|
||||||
|
|
||||||
# fq
|
# fq
|
||||||
after_create :act_as_activity,:be_user_score_new_issue
|
after_create :act_as_activity,:be_user_score_new_issue,:act_as_forge_activity
|
||||||
after_update :be_user_score
|
after_update :be_user_score
|
||||||
after_destroy :down_user_score
|
after_destroy :down_user_score
|
||||||
after_create :expire_activitie_cache
|
|
||||||
after_update :expire_activitie_cache
|
|
||||||
before_destroy :expire_activitie_cache
|
|
||||||
# after_create :be_user_score
|
# after_create :be_user_score
|
||||||
# end
|
# end
|
||||||
|
|
||||||
|
@ -129,7 +129,15 @@ class Issue < ActiveRecord::Base
|
||||||
self.acts << Activity.new(:user_id => self.author_id)
|
self.acts << Activity.new(:user_id => self.author_id)
|
||||||
end
|
end
|
||||||
# end
|
# end
|
||||||
|
|
||||||
|
# Time 2015-02-26 10:51:16
|
||||||
|
# Author lizanle
|
||||||
|
# Description 新创建的issue要在公共表ForgeActivity中记录
|
||||||
|
def act_as_forge_activity
|
||||||
|
self.forge_acts << ForgeActivity.new(:user_id => self.author_id,
|
||||||
|
:project_id => self.project_id)
|
||||||
|
end
|
||||||
|
# end
|
||||||
|
|
||||||
|
|
||||||
# Returns a SQL conditions string used to find all issues visible by the specified user
|
# Returns a SQL conditions string used to find all issues visible by the specified user
|
||||||
|
@ -1168,13 +1176,13 @@ class Issue < ActiveRecord::Base
|
||||||
|
|
||||||
# back string obj which is belong to project.
|
# back string obj which is belong to project.
|
||||||
def source_from
|
def source_from
|
||||||
"" << self.project.name.to_s <<
|
"" << self.project.name.to_s
|
||||||
"#" << project_index
|
|
||||||
end
|
end
|
||||||
|
|
||||||
def project_index
|
def project_index
|
||||||
if self.project.issues.include?(self)
|
if self.project.issues.include?(self)
|
||||||
(self.project.issues.index(self).to_i + 1).to_s
|
(self.project.issues.index(self).to_i + 1).to_s
|
||||||
|
|
||||||
else
|
else
|
||||||
issue_index = 1
|
issue_index = 1
|
||||||
self.project.issues.each do |issue|
|
self.project.issues.each do |issue|
|
||||||
|
@ -1185,8 +1193,10 @@ class Issue < ActiveRecord::Base
|
||||||
issue_index = issue_index+1
|
issue_index = issue_index+1
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
issue_index.to_s
|
issue_index.to_s
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
private
|
private
|
||||||
|
|
|
@ -27,6 +27,8 @@ class Journal < ActiveRecord::Base
|
||||||
# added by fq
|
# added by fq
|
||||||
has_one :journal_reply
|
has_one :journal_reply
|
||||||
has_many :acts, :class_name => 'Activity', :as => :act, :dependent => :destroy
|
has_many :acts, :class_name => 'Activity', :as => :act, :dependent => :destroy
|
||||||
|
# 被ForgeActivity虚拟关联
|
||||||
|
has_many :forge_acts, :class_name => 'ForgeActivity',:as =>:forge_act ,:dependent => :destroy
|
||||||
# end
|
# end
|
||||||
attr_accessor :indice
|
attr_accessor :indice
|
||||||
|
|
||||||
|
@ -46,7 +48,7 @@ class Journal < ActiveRecord::Base
|
||||||
before_create :split_private_notes
|
before_create :split_private_notes
|
||||||
|
|
||||||
# fq
|
# fq
|
||||||
after_save :act_as_activity,:be_user_score
|
after_save :act_as_activity,:be_user_score,:act_as_forge_activity
|
||||||
# end
|
# end
|
||||||
#after_destroy :down_user_score
|
#after_destroy :down_user_score
|
||||||
#before_save :be_user_score
|
#before_save :be_user_score
|
||||||
|
@ -156,6 +158,15 @@ class Journal < ActiveRecord::Base
|
||||||
end
|
end
|
||||||
# end
|
# end
|
||||||
|
|
||||||
|
# Time 2015-02-27 13:30:19
|
||||||
|
# Author lizanle
|
||||||
|
# Description 公共表中需要保存一份该记录
|
||||||
|
def act_as_forge_activity
|
||||||
|
self.forge_acts << ForgeActivity.new(:user_id => self.user_id,
|
||||||
|
:project_id => self.issue.project.id)
|
||||||
|
|
||||||
|
end
|
||||||
|
|
||||||
# 更新用户分数 -by zjc
|
# 更新用户分数 -by zjc
|
||||||
def be_user_score
|
def be_user_score
|
||||||
#新建了缺陷留言且留言不为空,不为空白
|
#新建了缺陷留言且留言不为空,不为空白
|
||||||
|
|
|
@ -4,7 +4,6 @@
|
||||||
class JournalsForMessage < ActiveRecord::Base
|
class JournalsForMessage < ActiveRecord::Base
|
||||||
include Redmine::SafeAttributes
|
include Redmine::SafeAttributes
|
||||||
include UserScoreHelper
|
include UserScoreHelper
|
||||||
include ExpireHelper
|
|
||||||
safe_attributes "jour_type", # 留言所属类型
|
safe_attributes "jour_type", # 留言所属类型
|
||||||
"jour_id", # 留言所属类型的id
|
"jour_id", # 留言所属类型的id
|
||||||
"notes", # 留言内容
|
"notes", # 留言内容
|
||||||
|
@ -22,8 +21,8 @@ class JournalsForMessage < ActiveRecord::Base
|
||||||
:foreign_key => 'jour_id',
|
:foreign_key => 'jour_id',
|
||||||
:conditions => "#{self.table_name}.jour_type = 'Project' "
|
:conditions => "#{self.table_name}.jour_type = 'Project' "
|
||||||
belongs_to :course,
|
belongs_to :course,
|
||||||
:foreign_key => 'jour_id',
|
:foreign_key => 'jour_id'
|
||||||
:conditions => "#{self.table_name}.jour_type = 'Course' "
|
|
||||||
|
|
||||||
belongs_to :jour, :polymorphic => true
|
belongs_to :jour, :polymorphic => true
|
||||||
belongs_to :user
|
belongs_to :user
|
||||||
|
@ -55,9 +54,7 @@ class JournalsForMessage < ActiveRecord::Base
|
||||||
has_many :acts, :class_name => 'Activity', :as => :act, :dependent => :destroy
|
has_many :acts, :class_name => 'Activity', :as => :act, :dependent => :destroy
|
||||||
|
|
||||||
validates :notes, presence: true
|
validates :notes, presence: true
|
||||||
after_create :act_as_activity ,:expire_activitie_cache#huang
|
after_create :act_as_activity #huang
|
||||||
after_update :expire_activitie_cache
|
|
||||||
before_destroy :expire_activitie_cache
|
|
||||||
after_create :reset_counters!
|
after_create :reset_counters!
|
||||||
after_destroy :reset_counters!
|
after_destroy :reset_counters!
|
||||||
after_save :be_user_score
|
after_save :be_user_score
|
||||||
|
|
|
@ -27,21 +27,104 @@ class Mailer < ActionMailer::Base
|
||||||
{ :host => Setting.host_name, :protocol => Setting.protocol }
|
{ :host => Setting.host_name, :protocol => Setting.protocol }
|
||||||
end
|
end
|
||||||
|
|
||||||
# 贴吧新建贴吧发送邮件
|
# author: alan
|
||||||
# example Mailer.forum(forum).deliver
|
# 发送邀请未注册用户加入项目邮件
|
||||||
def forum_add(forum)
|
# 功能: 在加入项目的同时自动注册用户
|
||||||
|
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
|
# author: alan
|
||||||
@forum = forum
|
# 根据用户选择发送个人日报或周报
|
||||||
@author = forum.creator
|
# 发送内容: 项目【缺陷,讨论区,新闻】,课程【通知,留言,新闻】, 贴吧, 个人留言
|
||||||
recipients = forum.creator.mail
|
def send_for_user_activities(user, date_to, days)
|
||||||
# cc = wiki_content.page.wiki.watcher_recipients - recipients
|
date_from = date_to - days.days
|
||||||
@issue_author_url = url_for(user_activities_url(@author))
|
|
||||||
@forum_url = url_for(:controller => 'forums', :action => 'show', :id => forum.id)
|
# 生成token用于直接点击登录
|
||||||
mail :to => recipients,:subject => "[ #{l(:label_forum)} : #{forum.name} #{l(:notice_successful_create)}]"
|
@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
|
end
|
||||||
|
|
||||||
|
|
||||||
def forum_message_added(memo)
|
def forum_message_added(memo)
|
||||||
@memo = memo
|
@memo = memo
|
||||||
redmine_headers 'Memo' => memo.id
|
redmine_headers 'Memo' => memo.id
|
||||||
|
@ -50,15 +133,12 @@ class Mailer < ActionMailer::Base
|
||||||
@forum_url = url_for(:controller => 'forums', :action => 'show', :id => @forum.id)
|
@forum_url = url_for(:controller => 'forums', :action => 'show', :id => @forum.id)
|
||||||
@issue_author_url = url_for(user_activities_url(@author))
|
@issue_author_url = url_for(user_activities_url(@author))
|
||||||
recipients ||= []
|
recipients ||= []
|
||||||
# if !memo.parent_id.nil?
|
if @forum.author.mail_notification != 'day' && @forum.author.mail_notification != 'week'
|
||||||
# mems = memo.self_and_siblings
|
recipients << @forum.creator.mail
|
||||||
# mems.each do |mem|
|
end
|
||||||
# recipients << mem.author.mail unless recipients.include? mem.author.mail
|
if @author.mail_notification != 'day' && @author.mail_notification != 'week'
|
||||||
# end
|
recipients << @author.mail
|
||||||
# else
|
end
|
||||||
# recipients << memo.author.mail
|
|
||||||
# end
|
|
||||||
recipients << @author.mail
|
|
||||||
# cc = wiki_content.page.wiki.watcher_recipients - recipients
|
# cc = wiki_content.page.wiki.watcher_recipients - recipients
|
||||||
|
|
||||||
@memo_url = url_for(forum_memo_url(@forum, (@memo.parent_id.nil? ? @memo : @memo.parent_id)))
|
@memo_url = url_for(forum_memo_url(@forum, (@memo.parent_id.nil? ? @memo : @memo.parent_id)))
|
||||||
|
@ -93,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}"
|
Rails.logger.error "[Builds a Mail::Message ERROR] journalsForMessage's jour is unkown type, journalsForMessage.id = #{journals_for_message.id}"
|
||||||
return -1
|
return -1
|
||||||
end
|
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
|
# modify by nwb
|
||||||
#如果是直接留言并且留言对象是课程
|
#如果是直接留言并且留言对象是课程
|
||||||
if !journals_for_message.at_user && journals_for_message.jour.class.to_s.to_sym == :Course
|
if !journals_for_message.at_user && journals_for_message.jour.class.to_s.to_sym == :Course
|
||||||
|
@ -103,7 +194,9 @@ class Mailer < ActionMailer::Base
|
||||||
#收件人邮箱
|
#收件人邮箱
|
||||||
@recipients ||= []
|
@recipients ||= []
|
||||||
@members.each do |teacher|
|
@members.each do |teacher|
|
||||||
|
if teacher.user.mail_notification != 'week' && teacher.user.mail_notification != 'day'
|
||||||
@recipients << teacher.user.mail
|
@recipients << teacher.user.mail
|
||||||
|
end
|
||||||
end
|
end
|
||||||
mail :to => @recipients,
|
mail :to => @recipients,
|
||||||
:subject => "#{l(:label_your_course)}#{journals_for_message.jour.name}#{l(:label_have_message)} "
|
:subject => "#{l(:label_your_course)}#{journals_for_message.jour.name}#{l(:label_have_message)} "
|
||||||
|
@ -111,14 +204,15 @@ class Mailer < ActionMailer::Base
|
||||||
if !journals_for_message.jour.author.notify_about? journals_for_message
|
if !journals_for_message.jour.author.notify_about? journals_for_message
|
||||||
return -1
|
return -1
|
||||||
end
|
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
|
elsif journals_for_message.jour.class.to_s.to_sym == :Contest
|
||||||
if !journals_for_message.jour.author.notify_about? journals_for_message
|
if !journals_for_message.jour.author.notify_about? journals_for_message
|
||||||
return -1
|
return -1
|
||||||
end
|
end
|
||||||
mail :to => journals_for_message.jour.author.mail, :subject => @title
|
mail :to => recipients, :subject => @title
|
||||||
else
|
else
|
||||||
mail :to => @mail.mail, :subject => @title
|
mail :to => recipients1, :subject => @title
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
|
@ -140,7 +234,6 @@ class Mailer < ActionMailer::Base
|
||||||
@author = issue.author
|
@author = issue.author
|
||||||
@issue = issue
|
@issue = issue
|
||||||
user = User.find_by_mail(recipients)
|
user = User.find_by_mail(recipients)
|
||||||
|
|
||||||
token = Token.new(:user =>user , :action => 'autologin')
|
token = Token.new(:user =>user , :action => 'autologin')
|
||||||
token.save
|
token.save
|
||||||
@token = token
|
@token = token
|
||||||
|
@ -196,12 +289,6 @@ class Mailer < ActionMailer::Base
|
||||||
@user_url = url_for(my_account_url(user,:token => @token.value))
|
@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)
|
@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.project.name} - #{issue.tracker.name} ##{issue_id}] "
|
||||||
s << "(#{issue.status.name}) " if journal.new_value_for('status_id')
|
s << "(#{issue.status.name}) " if journal.new_value_for('status_id')
|
||||||
s << issue.subject
|
s << issue.subject
|
||||||
|
@ -752,4 +839,13 @@ class Mailer < ActionMailer::Base
|
||||||
end
|
end
|
||||||
end
|
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
|
end
|
||||||
|
|
|
@ -1,13 +1,8 @@
|
||||||
class Memo < ActiveRecord::Base
|
class Memo < ActiveRecord::Base
|
||||||
include Redmine::SafeAttributes
|
include Redmine::SafeAttributes
|
||||||
include UserScoreHelper
|
include UserScoreHelper
|
||||||
include ExpireHelper
|
|
||||||
belongs_to :forum
|
belongs_to :forum
|
||||||
belongs_to :author, :class_name => "User", :foreign_key => 'author_id'
|
belongs_to :author, :class_name => "User", :foreign_key => 'author_id'
|
||||||
|
|
||||||
after_create :expire_cache
|
|
||||||
after_update :expire_cache
|
|
||||||
before_destroy :expire_cache
|
|
||||||
validates_presence_of :author_id, :forum_id, :subject,:content
|
validates_presence_of :author_id, :forum_id, :subject,:content
|
||||||
# 若是主题帖,则内容可以是空
|
# 若是主题帖,则内容可以是空
|
||||||
#validates :content, presence: true, if: Proc.new{|o| !o.parent_id.nil? }
|
#validates :content, presence: true, if: Proc.new{|o| !o.parent_id.nil? }
|
||||||
|
@ -174,8 +169,5 @@ class Memo < ActiveRecord::Base
|
||||||
update_memo_number(User.current,1)
|
update_memo_number(User.current,1)
|
||||||
update_replay_for_memo(User.current,1)
|
update_replay_for_memo(User.current,1)
|
||||||
end
|
end
|
||||||
def expire_cache
|
|
||||||
expire_forum_cache
|
|
||||||
expire_activitie_cache
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
|
|
@ -18,7 +18,6 @@
|
||||||
class Message < ActiveRecord::Base
|
class Message < ActiveRecord::Base
|
||||||
include Redmine::SafeAttributes
|
include Redmine::SafeAttributes
|
||||||
include UserScoreHelper
|
include UserScoreHelper
|
||||||
include ExpireHelper
|
|
||||||
belongs_to :board
|
belongs_to :board
|
||||||
belongs_to :author, :class_name => 'User', :foreign_key => 'author_id'
|
belongs_to :author, :class_name => 'User', :foreign_key => 'author_id'
|
||||||
has_many :praise_tread, as: :praise_tread_object, dependent: :destroy
|
has_many :praise_tread, as: :praise_tread_object, dependent: :destroy
|
||||||
|
@ -29,6 +28,8 @@ class Message < ActiveRecord::Base
|
||||||
|
|
||||||
# added by fq
|
# added by fq
|
||||||
has_many :acts, :class_name => 'Activity', :as => :act, :dependent => :destroy
|
has_many :acts, :class_name => 'Activity', :as => :act, :dependent => :destroy
|
||||||
|
# 被ForgeActivity虚拟关联
|
||||||
|
has_many :forge_acts, :class_name => 'ForgeActivity',:as =>:forge_act ,:dependent => :destroy
|
||||||
# end
|
# end
|
||||||
|
|
||||||
acts_as_searchable :columns => ['subject', 'content'],
|
acts_as_searchable :columns => ['subject', 'content'],
|
||||||
|
@ -59,13 +60,12 @@ class Message < ActiveRecord::Base
|
||||||
validates_length_of :subject, :maximum => 255
|
validates_length_of :subject, :maximum => 255
|
||||||
validate :cannot_reply_to_locked_topic, :on => :create
|
validate :cannot_reply_to_locked_topic, :on => :create
|
||||||
|
|
||||||
after_create :add_author_as_watcher, :reset_counters!,:expire_activitie_cache
|
after_create :add_author_as_watcher, :reset_counters!
|
||||||
after_update :update_messages_board,:expire_activitie_cache
|
after_update :update_messages_board
|
||||||
before_destroy :expire_activitie_cache
|
|
||||||
after_destroy :reset_counters!,:down_user_score
|
after_destroy :reset_counters!,:down_user_score
|
||||||
|
|
||||||
# fq
|
# fq
|
||||||
after_create :act_as_activity,:be_user_score
|
after_create :act_as_activity,:be_user_score,:act_as_forge_activity
|
||||||
#before_save :be_user_score
|
#before_save :be_user_score
|
||||||
# end
|
# end
|
||||||
|
|
||||||
|
@ -160,6 +160,14 @@ class Message < ActiveRecord::Base
|
||||||
end
|
end
|
||||||
# end
|
# end
|
||||||
|
|
||||||
|
# Time 2015-02-27 14:32:25
|
||||||
|
# Author lizanle
|
||||||
|
# Description
|
||||||
|
def act_as_forge_activity
|
||||||
|
self.forge_acts << ForgeActivity.new(:user_id => self.author_id,
|
||||||
|
:project_id => self.board.project.id)
|
||||||
|
end
|
||||||
|
|
||||||
#更新用户分数 -by zjc
|
#更新用户分数 -by zjc
|
||||||
def be_user_score
|
def be_user_score
|
||||||
#新建message且无parent的为发帖
|
#新建message且无parent的为发帖
|
||||||
|
|
|
@ -17,7 +17,6 @@
|
||||||
|
|
||||||
class News < ActiveRecord::Base
|
class News < ActiveRecord::Base
|
||||||
include Redmine::SafeAttributes
|
include Redmine::SafeAttributes
|
||||||
include ExpireHelper
|
|
||||||
belongs_to :project
|
belongs_to :project
|
||||||
#added by nwb
|
#added by nwb
|
||||||
belongs_to :course
|
belongs_to :course
|
||||||
|
@ -25,7 +24,9 @@ class News < ActiveRecord::Base
|
||||||
has_many :comments, :as => :commented, :dependent => :delete_all, :order => "created_on"
|
has_many :comments, :as => :commented, :dependent => :delete_all, :order => "created_on"
|
||||||
# fq
|
# fq
|
||||||
has_many :acts, :class_name => 'Activity', :as => :act, :dependent => :destroy
|
has_many :acts, :class_name => 'Activity', :as => :act, :dependent => :destroy
|
||||||
#end
|
# 被ForgeActivity虚拟关联
|
||||||
|
has_many :forge_acts, :class_name => 'ForgeActivity',:as =>:forge_act ,:dependent => :destroy
|
||||||
|
# end
|
||||||
|
|
||||||
validates_presence_of :title, :description
|
validates_presence_of :title, :description
|
||||||
validates_length_of :title, :maximum => 60
|
validates_length_of :title, :maximum => 60
|
||||||
|
@ -46,11 +47,8 @@ class News < ActiveRecord::Base
|
||||||
|
|
||||||
after_create :add_author_as_watcher
|
after_create :add_author_as_watcher
|
||||||
# fq
|
# fq
|
||||||
after_create :act_as_activity
|
after_create :act_as_activity,:act_as_forge_activity
|
||||||
# end
|
# end
|
||||||
after_create :expire_activitie_cache
|
|
||||||
after_update :expire_activitie_cache
|
|
||||||
before_destroy :expire_activitie_cache
|
|
||||||
|
|
||||||
scope :visible, lambda {|*args|
|
scope :visible, lambda {|*args|
|
||||||
includes(:project).where(Project.allowed_to_condition(args.shift || User.current, :view_news, *args))
|
includes(:project).where(Project.allowed_to_condition(args.shift || User.current, :view_news, *args))
|
||||||
|
@ -96,5 +94,12 @@ class News < ActiveRecord::Base
|
||||||
self.acts << Activity.new(:user_id => self.author_id)
|
self.acts << Activity.new(:user_id => self.author_id)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
# Time 2015-02-27 15:48:17
|
||||||
|
# Author lizanle
|
||||||
|
# Description 公用表中也要记录
|
||||||
|
def act_as_forge_activity
|
||||||
|
self.forge_acts << ForgeActivity.new(:user_id => self.author_id,
|
||||||
|
:project_id => self.project.id)
|
||||||
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
|
@ -0,0 +1,5 @@
|
||||||
|
class Organization < ActiveRecord::Base
|
||||||
|
attr_accessible :logo_link, :name
|
||||||
|
|
||||||
|
has_many :projects
|
||||||
|
end
|
|
@ -17,7 +17,6 @@
|
||||||
|
|
||||||
class Project < ActiveRecord::Base
|
class Project < ActiveRecord::Base
|
||||||
include Redmine::SafeAttributes
|
include Redmine::SafeAttributes
|
||||||
include ExpireHelper
|
|
||||||
ProjectType_project = 0
|
ProjectType_project = 0
|
||||||
ProjectType_course = 1
|
ProjectType_course = 1
|
||||||
|
|
||||||
|
@ -90,7 +89,9 @@ class Project < ActiveRecord::Base
|
||||||
:association_foreign_key => 'custom_field_id'
|
:association_foreign_key => 'custom_field_id'
|
||||||
|
|
||||||
has_many :tags, :through => :project_tags, :class_name => 'Tag'
|
has_many :tags, :through => :project_tags, :class_name => 'Tag'
|
||||||
has_many :project_tags, :class_name => 'ProjectTags'
|
has_many :project_tags, :class_name => 'ProjectTags'
|
||||||
|
|
||||||
|
belongs_to :organization
|
||||||
|
|
||||||
# has_many :journals
|
# has_many :journals
|
||||||
|
|
||||||
|
@ -130,9 +131,8 @@ class Project < ActiveRecord::Base
|
||||||
#ActiveModel::Dirty 这里有一个changed方法。对任何对象都可以用
|
#ActiveModel::Dirty 这里有一个changed方法。对任何对象都可以用
|
||||||
after_save :update_inherited_members, :if => Proc.new {|project| project.inherit_members_changed?}
|
after_save :update_inherited_members, :if => Proc.new {|project| project.inherit_members_changed?}
|
||||||
# 创建project之后默认创建一个board,之后的board去掉了board的概念
|
# 创建project之后默认创建一个board,之后的board去掉了board的概念
|
||||||
after_create :create_board_sync,:expire_project_cache
|
after_create :create_board_sync
|
||||||
after_update :expire_project_cache
|
before_destroy :delete_all_members
|
||||||
before_destroy :delete_all_members,:expire_project_cache
|
|
||||||
def remove_references_before_destroy
|
def remove_references_before_destroy
|
||||||
return if self.id.nil?
|
return if self.id.nil?
|
||||||
Watcher.delete_all ['watchable_id = ?', id]
|
Watcher.delete_all ['watchable_id = ?', id]
|
||||||
|
|
|
@ -16,7 +16,9 @@
|
||||||
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||||
|
|
||||||
class Tracker < ActiveRecord::Base
|
class Tracker < ActiveRecord::Base
|
||||||
|
# Time 2015-02-6 09:34:44
|
||||||
|
# Author lizanle
|
||||||
|
# Description freeze方法让字符串不可变
|
||||||
CORE_FIELDS_UNDISABLABLE = %w(project_id tracker_id subject description priority_id is_private).freeze
|
CORE_FIELDS_UNDISABLABLE = %w(project_id tracker_id subject description priority_id is_private).freeze
|
||||||
# Fields that can be disabled
|
# Fields that can be disabled
|
||||||
# Other (future) fields should be appended, not inserted!
|
# Other (future) fields should be appended, not inserted!
|
||||||
|
|
|
@ -24,7 +24,7 @@ class User < Principal
|
||||||
DEVELOPER = 3
|
DEVELOPER = 3
|
||||||
|
|
||||||
include Redmine::SafeAttributes
|
include Redmine::SafeAttributes
|
||||||
|
seems_rateable_rater
|
||||||
# Different ways of displaying/sorting users
|
# Different ways of displaying/sorting users
|
||||||
USER_FORMATS = {
|
USER_FORMATS = {
|
||||||
:firstname_lastname => {
|
:firstname_lastname => {
|
||||||
|
@ -66,10 +66,8 @@ class User < Principal
|
||||||
|
|
||||||
MAIL_NOTIFICATION_OPTIONS = [
|
MAIL_NOTIFICATION_OPTIONS = [
|
||||||
['all', :label_user_mail_option_all],
|
['all', :label_user_mail_option_all],
|
||||||
['selected', :label_user_mail_option_selected],
|
['week', :label_user_mail_option_week],
|
||||||
['only_my_events', :label_user_mail_option_only_my_events],
|
['day', :label_user_mail_option_day],
|
||||||
['only_assigned', :label_user_mail_option_only_assigned],
|
|
||||||
['only_owner', :label_user_mail_option_only_owner],
|
|
||||||
['none', :label_user_mail_option_none]
|
['none', :label_user_mail_option_none]
|
||||||
]
|
]
|
||||||
|
|
||||||
|
@ -149,7 +147,7 @@ class User < Principal
|
||||||
scope :by_join_date, order("created_on DESC")
|
scope :by_join_date, order("created_on DESC")
|
||||||
############################# added by liuping 关注
|
############################# added by liuping 关注
|
||||||
acts_as_watchable
|
acts_as_watchable
|
||||||
seems_rateable_rater
|
|
||||||
has_one :user_extensions,:dependent => :destroy
|
has_one :user_extensions,:dependent => :destroy
|
||||||
## end
|
## end
|
||||||
|
|
||||||
|
@ -188,7 +186,7 @@ class User < Principal
|
||||||
validates_confirmation_of :password, :allow_nil => true
|
validates_confirmation_of :password, :allow_nil => true
|
||||||
validates_inclusion_of :mail_notification, :in => MAIL_NOTIFICATION_OPTIONS.collect(&:first), :allow_blank => true
|
validates_inclusion_of :mail_notification, :in => MAIL_NOTIFICATION_OPTIONS.collect(&:first), :allow_blank => true
|
||||||
validate :validate_password_length
|
validate :validate_password_length
|
||||||
#validates_email_realness_of :mail
|
# validates_email_realness_of :mail
|
||||||
before_create :set_mail_notification
|
before_create :set_mail_notification
|
||||||
before_save :update_hashed_password
|
before_save :update_hashed_password
|
||||||
before_destroy :remove_references_before_destroy
|
before_destroy :remove_references_before_destroy
|
||||||
|
|
|
@ -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
|
|
@ -2,11 +2,12 @@ class CoursesService
|
||||||
include ApplicationHelper
|
include ApplicationHelper
|
||||||
include CoursesHelper
|
include CoursesHelper
|
||||||
include HomeworkAttachHelper
|
include HomeworkAttachHelper
|
||||||
#TODO:尚未整合权限系统
|
include ApiHelper
|
||||||
|
|
||||||
#参数school_id为0或不传时返回所有课程,否则返回对应学校的课程
|
#参数school_id为0或不传时返回所有课程,否则返回对应学校的课程
|
||||||
#参数per_page_count分页功能,每页显示的课程数
|
#参数per_page_count分页功能,每页显示的课程数
|
||||||
#参数page分页功能,当前页码
|
#参数page分页功能,当前页码
|
||||||
def course_list params
|
def course_list params,current_user
|
||||||
@school_id = params[:school_id]
|
@school_id = params[:school_id]
|
||||||
per_page_option = params[:per_page_count] || 10
|
per_page_option = params[:per_page_count] || 10
|
||||||
page_no = params[:page] || 1
|
page_no = params[:page] || 1
|
||||||
|
@ -24,13 +25,13 @@ class CoursesService
|
||||||
@courses = @courses.offset(@course_pages.offset).limit(@course_pages.per_page)
|
@courses = @courses.offset(@course_pages.offset).limit(@course_pages.per_page)
|
||||||
course_list = []
|
course_list = []
|
||||||
@courses.each do |course|
|
@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
|
end
|
||||||
course_list
|
course_list
|
||||||
end
|
end
|
||||||
|
|
||||||
#搜索课程
|
#搜索课程
|
||||||
def search_course params
|
def search_course params,current_user
|
||||||
courses_all = Course.all_course
|
courses_all = Course.all_course
|
||||||
name = params[:name]
|
name = params[:name]
|
||||||
if name.blank?
|
if name.blank?
|
||||||
|
@ -43,6 +44,11 @@ class CoursesService
|
||||||
@courses_all = @courses;
|
@courses_all = @courses;
|
||||||
end
|
end
|
||||||
@courses_all
|
@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
|
end
|
||||||
|
|
||||||
#获取头像
|
#获取头像
|
||||||
|
@ -106,14 +112,17 @@ class CoursesService
|
||||||
end
|
end
|
||||||
|
|
||||||
#课程通知列表
|
#课程通知列表
|
||||||
def course_news_list params
|
def course_news_list params,current_user
|
||||||
if params[:course_id] && @course==nil
|
if params[:course_id] && @course==nil
|
||||||
@course = Course.find(params[:course_id])
|
@course = Course.find(params[:course_id])
|
||||||
end
|
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 = []
|
news = []
|
||||||
scope.each do |n|
|
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
|
end
|
||||||
news
|
news
|
||||||
end
|
end
|
||||||
|
@ -128,9 +137,16 @@ class CoursesService
|
||||||
#显示课程通知(包括评论) 需验证权限
|
#显示课程通知(包括评论) 需验证权限
|
||||||
def show_course_news params,current_user
|
def show_course_news params,current_user
|
||||||
@news = News.find(params[:id])
|
@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 = @news.comments
|
||||||
@comments.reverse! if current_user.wants_comments_in_reverse_order?
|
@comments.reverse! if current_user.wants_comments_in_reverse_order?
|
||||||
{:news => @news,:comments => @comments}
|
{:news => @news,:comments => @comments}
|
||||||
|
|
||||||
#comments = []
|
#comments = []
|
||||||
#@comments.each do |comment|
|
#@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)}
|
# 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?)
|
unless (course.is_public == 1 || currnet_user.member_of_course?(@course)|| currnet_user.admin?)
|
||||||
raise '403'
|
raise '403'
|
||||||
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
|
end
|
||||||
|
|
||||||
#创建课程
|
#创建课程
|
||||||
|
@ -195,7 +211,7 @@ class CoursesService
|
||||||
@course.members << m
|
@course.members << m
|
||||||
@course.course_infos << course
|
@course.course_infos << course
|
||||||
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
|
end
|
||||||
|
|
||||||
#验证编辑课程的权限
|
#验证编辑课程的权限
|
||||||
|
@ -232,7 +248,7 @@ class CoursesService
|
||||||
course_status = CourseStatus.create(:course_id => course.id, :grade => 0)
|
course_status = CourseStatus.create(:course_id => course.id, :grade => 0)
|
||||||
end
|
end
|
||||||
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
|
end
|
||||||
|
|
||||||
#退出课程
|
#退出课程
|
||||||
|
@ -316,9 +332,45 @@ class CoursesService
|
||||||
end
|
end
|
||||||
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
|
private
|
||||||
def show_homework_info course,bid,current_user,is_course_teacher
|
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
|
many_times = course.homeworks.index(bid) + 1
|
||||||
name = bid.name
|
name = bid.name
|
||||||
homework_count = bid.homeworks.count #已提交的作业数量
|
homework_count = bid.homeworks.count #已提交的作业数量
|
||||||
|
@ -331,8 +383,9 @@ class CoursesService
|
||||||
end
|
end
|
||||||
#end
|
#end
|
||||||
open_anonymous_evaluation = bid.open_anonymous_evaluation
|
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,
|
{: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}
|
: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
|
end
|
||||||
|
|
||||||
#显示作业列表的同时显示分配给当前学生匿评的作业
|
#显示作业列表的同时显示分配给当前学生匿评的作业
|
||||||
|
@ -351,4 +404,6 @@ class CoursesService
|
||||||
:description => description, :homework_state => state,:open_anonymous_evaluation => open_anonymous_evaluation}
|
:description => description, :homework_state => state,:open_anonymous_evaluation => open_anonymous_evaluation}
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
end
|
end
|
|
@ -6,6 +6,7 @@ class HomeworkService
|
||||||
include WordsHelper
|
include WordsHelper
|
||||||
include ApiHelper
|
include ApiHelper
|
||||||
include HomeworkAttachHelper
|
include HomeworkAttachHelper
|
||||||
|
include CoursesHelper
|
||||||
|
|
||||||
# 作业详情(老师才显示启动匿评,学生不显示 )
|
# 作业详情(老师才显示启动匿评,学生不显示 )
|
||||||
# many_times 第几次(作业)
|
# many_times 第几次(作业)
|
||||||
|
@ -25,8 +26,9 @@ class HomeworkService
|
||||||
state = @bid.comment_status
|
state = @bid.comment_status
|
||||||
#end
|
#end
|
||||||
open_anonymous_evaluation = @bid.open_anonymous_evaluation
|
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,
|
jours = @bid.journals_for_messages.where('m_parent_id IS NULL').order('created_on DESC')
|
||||||
:description => description, :homework_state => state,:open_anonymous_evaluation => open_anonymous_evaluation}
|
{: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
|
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 #判断是不是匿评(开启匿评,当前用户不是作业的创建者或者参与者,不是老师)
|
@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条件用以兼容历史数据
|
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 #留言
|
#@jour = paginateHelper jours,5 #留言
|
||||||
#@cur_page = params[:cur_page] || 1
|
@cur_page = params[:cur_page] || 1
|
||||||
@cur_type = params[:cur_type] || 5
|
@cur_type = params[:cur_type] || 5
|
||||||
teacher_stars_json_like = stars_to_json_like(@teacher_stars,true,@homework,true)
|
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))
|
student_stars_json_like = stars_to_json_like(@student_stars,false,@homework,(false || @is_teacher))
|
||||||
|
@ -124,7 +126,7 @@ class HomeworkService
|
||||||
end
|
end
|
||||||
|
|
||||||
[@homework,{:is_teacher => @is_teacher,:m_score => @m_score,:jours => jours,:teacher_stars => teacher_stars_json_like,
|
[@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
|
#name = @homework.name
|
||||||
#desc = @homework.description
|
#desc = @homework.description
|
||||||
#datetime = @homework.created_at
|
#datetime = @homework.created_at
|
||||||
|
@ -141,16 +143,51 @@ class HomeworkService
|
||||||
end
|
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]
|
@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
|
@cur_page,@cur_type = params[:cur_page] || 1,params[:cur_type] || 5
|
||||||
@homework = HomeworkAttach.find(params[:homework_id])
|
@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) #判断当前评论是老师评论?匿评?留言
|
@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] != "" #有没有留言
|
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
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -238,10 +275,26 @@ class HomeworkService
|
||||||
membership.each do |mp|
|
membership.each do |mp|
|
||||||
my_homeworks = []
|
my_homeworks = []
|
||||||
mp.course.homeworks.each do |bid|
|
mp.course.homeworks.each do |bid|
|
||||||
hw = bid.homeworks.where("user_id = #{current_user.id}")
|
#hw = bid.homeworks.where("user_id = #{current_user.id}")
|
||||||
my_homeworks << hw[0] unless (hw.nil? || hw[0].nil?)
|
@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
|
end
|
||||||
course_list << {:course => mp.course,:img_url => url_to_avatar(mp.course),:my_homework => my_homeworks}
|
|
||||||
end
|
end
|
||||||
course_list
|
course_list
|
||||||
end
|
end
|
||||||
|
|
|
@ -44,7 +44,31 @@ class UsersService
|
||||||
#location = get_user_location @user
|
#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}
|
#{: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
|
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
|
#id用户id
|
||||||
def show_user(params)
|
def show_user(params)
|
||||||
|
@ -134,7 +158,7 @@ class UsersService
|
||||||
membership.sort! {|older, newer| newer.created_on <=> older.created_on }
|
membership.sort! {|older, newer| newer.created_on <=> older.created_on }
|
||||||
course_list = []
|
course_list = []
|
||||||
membership.each do |mp|
|
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
|
end
|
||||||
course_list
|
course_list
|
||||||
end
|
end
|
||||||
|
|
|
@ -1,7 +1,12 @@
|
||||||
|
#coding=utf-8
|
||||||
class WatchesService
|
class WatchesService
|
||||||
def watch params
|
def watch params
|
||||||
@current_user = User.find(params[:current_user_id])
|
@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
|
@watchables = find_watchables params
|
||||||
|
|
||||||
if @watchables.nil?
|
if @watchables.nil?
|
||||||
raise '404'
|
raise '404'
|
||||||
end
|
end
|
||||||
|
|
|
@ -0,0 +1,43 @@
|
||||||
|
<div class="contextual">
|
||||||
|
<%= link_to l(:label_organization_new), new_organization_path, :class => 'icon icon-add' %>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<h3>
|
||||||
|
<%=l(:label_organization_list)%>
|
||||||
|
</h3>
|
||||||
|
|
||||||
|
<div class="autoscroll">
|
||||||
|
<table class="list" style="width: 100%;table-layout: fixed">
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th>
|
||||||
|
<%=l(:label_organization)%>
|
||||||
|
</th>
|
||||||
|
<th>
|
||||||
|
<%=l(:field_created_on)%>
|
||||||
|
</th>
|
||||||
|
<th></th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
<% @organizations.each do |org|%>
|
||||||
|
<tr class="<%= cycle("odd", "even") %>">
|
||||||
|
<td style="text-align:center;white-space: nowrap;overflow: hidden;text-overflow: ellipsis;" class="name" title='<%=org.name%>'>
|
||||||
|
<span>
|
||||||
|
<%= link_to org.name,home_path(:organization => org.id) %>
|
||||||
|
</span>
|
||||||
|
</td>
|
||||||
|
<td align="center">
|
||||||
|
<%= format_date(org.created_at) %>
|
||||||
|
</td>
|
||||||
|
<td class="buttons">
|
||||||
|
<%= link_to(l(:button_change), edit_organization_path(org.id), :class => 'icon icon-copy') %>
|
||||||
|
<%= link_to(l(:button_delete), organization_path(org.id), :method => :delete,:confirm => l(:text_are_you_sure), :class => 'icon icon-del') %>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<% end%>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<% html_title(l(:label_project_plural)) -%>
|
|
@ -2,16 +2,25 @@
|
||||||
<%= link_to l(:label_project_new), {:controller => 'projects', :action => 'new'}, :class => 'icon icon-add' %>
|
<%= link_to l(:label_project_new), {:controller => 'projects', :action => 'new'}, :class => 'icon icon-add' %>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<h3><%=l(:label_project_plural)%></h3>
|
<h3>
|
||||||
|
<%=l(:label_project_plural)%>
|
||||||
|
</h3>
|
||||||
|
|
||||||
<%= form_tag({}, :method => :get) do %>
|
<%= form_tag({}, :method => :get) do %>
|
||||||
<fieldset><legend><%= l(:label_filter_plural) %></legend>
|
<fieldset>
|
||||||
<label for='status'><%= l(:field_status) %> :</label>
|
<legend>
|
||||||
<%= select_tag 'status', project_status_options_for_select(@status), :class => "small", :onchange => "this.form.submit(); return false;" %>
|
<%= l(:label_filter_plural) %>
|
||||||
<label for='name'><%= l(:label_project) %>:</label>
|
</legend>
|
||||||
<%= text_field_tag 'name', params[:name], :size => 30 %>
|
<label for='status'>
|
||||||
<%= submit_tag l(:button_apply), :class => "small", :name => nil %>
|
<%= l(:field_status) %> :
|
||||||
<%= link_to l(:button_clear), {:controller => 'admin', :action => 'projects'}, :class => 'icon icon-reload' %>
|
</label>
|
||||||
|
<%= select_tag 'status', project_status_options_for_select(@status), :class => "small", :onchange => "this.form.submit(); return false;" %>
|
||||||
|
<label for='name'>
|
||||||
|
<%= l(:label_project) %>:
|
||||||
|
</label>
|
||||||
|
<%= text_field_tag 'name', params[:name], :size => 30 %>
|
||||||
|
<%= submit_tag l(:button_apply), :class => "small", :name => nil %>
|
||||||
|
<%= link_to l(:button_clear), {:controller => 'admin', :action => 'projects'}, :class => 'icon icon-reload' %>
|
||||||
</fieldset>
|
</fieldset>
|
||||||
<% end %>
|
<% end %>
|
||||||
|
|
||||||
|
@ -19,17 +28,31 @@
|
||||||
<div class="autoscroll">
|
<div class="autoscroll">
|
||||||
<table class="list" style="width: 100%;table-layout: fixed">
|
<table class="list" style="width: 100%;table-layout: fixed">
|
||||||
<thead><tr>
|
<thead><tr>
|
||||||
<th><%=l(:label_project)%></th>
|
<th>
|
||||||
<th><%=l(:field_is_public)%></th>
|
<%=l(:label_project)%>
|
||||||
<th><%=l(:field_created_on)%></th>
|
</th>
|
||||||
|
<th>
|
||||||
|
<%=l(:field_is_public)%>
|
||||||
|
</th>
|
||||||
|
<th>
|
||||||
|
<%=l(:field_created_on)%>
|
||||||
|
</th>
|
||||||
<th></th>
|
<th></th>
|
||||||
</tr></thead>
|
</tr></thead>
|
||||||
<tbody>
|
<tbody>
|
||||||
<% project_tree(@projects) do |project, level| %>
|
<% project_tree(@projects) do |project, level| %>
|
||||||
<tr class="<%= cycle("odd", "even") %> <%= project.css_classes %> <%= level > 0 ? "idnt idnt-#{level}" : nil %>">
|
<tr class="<%= cycle("odd", "even") %> <%= project.css_classes %> <%= level > 0 ? "idnt idnt-#{level}" : nil %>">
|
||||||
<td style="white-space: nowrap;overflow: hidden;text-overflow: ellipsis;" class="name" title='<%=project.name%>'><span><%= link_to_project_settings(project, {}) %></span></td>
|
<td style="white-space: nowrap;overflow: hidden;text-overflow: ellipsis;" class="name" title='<%=project.name%>'>
|
||||||
<td align="center"><%= checked_image project.is_public? %></td>
|
<span>
|
||||||
<td align="center"><%= format_date(project.created_on) %></td>
|
<%= link_to_project_settings(project, {}) %>
|
||||||
|
</span>
|
||||||
|
</td>
|
||||||
|
<td align="center">
|
||||||
|
<%= checked_image project.is_public? %>
|
||||||
|
</td>
|
||||||
|
<td align="center">
|
||||||
|
<%= format_date(project.created_on) %>
|
||||||
|
</td>
|
||||||
<td class="buttons">
|
<td class="buttons">
|
||||||
<%= link_to(l(:button_archive), { :controller => 'projects', :action => 'archive', :id => project, :status => params[:status] }, :data => {:confirm => l(:text_are_you_sure)}, :method => :post, :class => 'icon icon-lock') unless project.archived? %>
|
<%= link_to(l(:button_archive), { :controller => 'projects', :action => 'archive', :id => project, :status => params[:status] }, :data => {:confirm => l(:text_are_you_sure)}, :method => :post, :class => 'icon icon-lock') unless project.archived? %>
|
||||||
<%= link_to(l(:button_unarchive), { :controller => 'projects', :action => 'unarchive', :id => project, :status => params[:status] }, :method => :post, :class => 'icon icon-unlock') if project.archived? && (project.parent.nil? || !project.parent.archived?) %>
|
<%= link_to(l(:button_unarchive), { :controller => 'projects', :action => 'unarchive', :id => project, :status => params[:status] }, :method => :post, :class => 'icon icon-unlock') if project.archived? && (project.parent.nil? || !project.parent.archived?) %>
|
||||||
|
|
|
@ -27,6 +27,7 @@
|
||||||
// file.click();
|
// file.click();
|
||||||
// }
|
// }
|
||||||
</script>
|
</script>
|
||||||
|
<% project = project %>
|
||||||
<span class="add_attachment" style="font-weight:normal;">
|
<span class="add_attachment" style="font-weight:normal;">
|
||||||
<%#= button_tag "浏览", :type=>"button", :onclick=>"CompatibleSend();" %>
|
<%#= button_tag "浏览", :type=>"button", :onclick=>"CompatibleSend();" %>
|
||||||
<!--%= link_to image_tag(),"javascript:void(0)", :onclick => "_file.click()"%-->
|
<!--%= link_to image_tag(),"javascript:void(0)", :onclick => "_file.click()"%-->
|
||||||
|
@ -41,7 +42,7 @@
|
||||||
:max_file_size => Setting.attachment_max_size.to_i.kilobytes,
|
:max_file_size => Setting.attachment_max_size.to_i.kilobytes,
|
||||||
:max_file_size_message => l(:error_attachment_too_big, :max_size => number_to_human_size(Setting.attachment_max_size.to_i.kilobytes)),
|
:max_file_size_message => l(:error_attachment_too_big, :max_size => number_to_human_size(Setting.attachment_max_size.to_i.kilobytes)),
|
||||||
:max_concurrent_uploads => Redmine::Configuration['max_concurrent_ajax_uploads'].to_i,
|
:max_concurrent_uploads => Redmine::Configuration['max_concurrent_ajax_uploads'].to_i,
|
||||||
:upload_path => uploads_path(:format => 'js'),
|
:upload_path => uploads_path(:format => 'js',:project =>project),
|
||||||
:description_placeholder => l(:label_optional_description)
|
:description_placeholder => l(:label_optional_description)
|
||||||
} %>
|
} %>
|
||||||
<span id="upload_file_count">
|
<span id="upload_file_count">
|
||||||
|
|
|
@ -1,7 +1,10 @@
|
||||||
<div class="attachments" style="font-weight:normal;">
|
<div class="attachments" style="font-weight:normal;">
|
||||||
|
<% is_float ||= false %>
|
||||||
<% for attachment in attachments %>
|
<% for attachment in attachments %>
|
||||||
<p style="width: 100%;white-space: nowrap;overflow: hidden;text-overflow: ellipsis;">
|
<p style="width: 100%;white-space: nowrap;overflow: hidden;text-overflow: ellipsis;">
|
||||||
<div style="width:65%;white-space: nowrap; overflow: hidden; text-overflow: ellipsis;float: left;">
|
<%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_">
|
<span title="<%= attachment.filename%>" id = "attachment_">
|
||||||
<% if options[:length] %>
|
<% if options[:length] %>
|
||||||
<%= link_to_attachment attachment, :class => 'icon icon-attachment', :download => true,:length => options[:length] -%>
|
<%= link_to_attachment attachment, :class => 'icon icon-attachment', :download => true,:length => options[:length] -%>
|
||||||
|
@ -9,7 +12,10 @@
|
||||||
<%= link_to_attachment attachment, :class => 'icon icon-attachment', :download => true -%>
|
<%= link_to_attachment attachment, :class => 'icon icon-attachment', :download => true -%>
|
||||||
<% end %>
|
<% end %>
|
||||||
</span>
|
</span>
|
||||||
</div>
|
<%if is_float%>
|
||||||
|
</div>
|
||||||
|
<% end%>
|
||||||
|
|
||||||
<% if attachment.is_text? %>
|
<% if attachment.is_text? %>
|
||||||
<%= link_to image_tag('magnifier.png'),
|
<%= link_to image_tag('magnifier.png'),
|
||||||
:controller => 'attachments',
|
:controller => 'attachments',
|
||||||
|
|
|
@ -38,7 +38,7 @@
|
||||||
|
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<p><%=l(:label_attachment_plural)%></label><%= render :partial => 'attachments/form' %></p>
|
<p><%=l(:label_attachment_plural)%></label><%= render :partial => 'attachments/form', locals: {project: project} %></p>
|
||||||
</div>
|
</div>
|
||||||
<%= submit_tag l(:button_add) %>
|
<%= submit_tag l(:button_add) %>
|
||||||
<% end %>
|
<% end %>
|
||||||
|
|
|
@ -1,7 +1,8 @@
|
||||||
<div class="project_r_h">
|
<div class="project_r_h">
|
||||||
<h2 class="project_h2">问题跟踪</h2>
|
<h2 class="project_h2">问题跟踪</h2>
|
||||||
</div>
|
</div>
|
||||||
<% html_title "#{@issue.tracker.name} #{@issue.source_from}: #{@issue.subject}" %>
|
<%# html_title "#{@issue.tracker.name} ##{@issue.id}: #{@issue.subject}" %>
|
||||||
|
<% html_title "#{@issue.tracker.name} #{@issue.source_from}'#'#{@issue.project_index}: #{@issue.subject}" %>
|
||||||
|
|
||||||
<%= render :partial => 'action_menu' %>
|
<%= render :partial => 'action_menu' %>
|
||||||
|
|
||||||
|
@ -88,7 +89,7 @@ end %>
|
||||||
<%= render_custom_fields_rows(@issue) %>
|
<%= render_custom_fields_rows(@issue) %>
|
||||||
<%= call_hook(:view_issues_show_details_bottom, :issue => @issue) %>
|
<%= call_hook(:view_issues_show_details_bottom, :issue => @issue) %>
|
||||||
</table>
|
</table>
|
||||||
|
woca
|
||||||
<% if @issue.description? || @issue.attachments.any? -%>
|
<% if @issue.description? || @issue.attachments.any? -%>
|
||||||
<hr />
|
<hr />
|
||||||
<% if @issue.description? %>
|
<% if @issue.description? %>
|
||||||
|
|
|
@ -7,7 +7,7 @@
|
||||||
paginator: the paginator that renders the pagination tags inside
|
paginator: the paginator that renders the pagination tags inside
|
||||||
-%>
|
-%>
|
||||||
<%= paginator.render do -%>
|
<%= paginator.render do -%>
|
||||||
<div class="pagination">
|
<div id="paginator" class="pagination">
|
||||||
<%= first_page_tag unless current_page.first? %>
|
<%= first_page_tag unless current_page.first? %>
|
||||||
<%= prev_page_tag unless current_page.first? %>
|
<%= prev_page_tag unless current_page.first? %>
|
||||||
<% each_page do |page| -%>
|
<% each_page do |page| -%>
|
||||||
|
|
|
@ -40,18 +40,15 @@
|
||||||
</div>
|
</div>
|
||||||
<div class="debug">
|
<div class="debug">
|
||||||
<%= debug(params) if Rails.env.development? %>
|
<%= debug(params) if Rails.env.development? %>
|
||||||
<div class="hidden">
|
<script>
|
||||||
<script>
|
var _hmt = _hmt || [];
|
||||||
|
(function() {
|
||||||
(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
|
var hm = document.createElement("script");
|
||||||
(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
|
hm.src = "//hm.baidu.com/hm.js?67e9738474be83f55f1233001a6ac34e";
|
||||||
m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
|
var s = document.getElementsByTagName("script")[0];
|
||||||
})(window,document,'script','//www.google-analytics.com/analytics.js','ga');
|
s.parentNode.insertBefore(hm, s);
|
||||||
|
})();
|
||||||
ga('create', 'UA-46523987-1', 'trustie.net');
|
</script>
|
||||||
ga('send', 'pageview');
|
</div>
|
||||||
|
|
||||||
</script>
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
|
@ -68,7 +68,7 @@
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td>
|
<td>
|
||||||
<%=link_to "主页", home_path %> >
|
<%=link_to l(:field_homepage), home_path %> >
|
||||||
<span>
|
<span>
|
||||||
<%=link_to @user.name, user_path %>
|
<%=link_to @user.name, user_path %>
|
||||||
</span>
|
</span>
|
||||||
|
@ -343,7 +343,7 @@
|
||||||
<% if @user.user_extensions.identity == 2 %>
|
<% if @user.user_extensions.identity == 2 %>
|
||||||
<%= render_menu :user_enterprise_menu %>
|
<%= render_menu :user_enterprise_menu %>
|
||||||
<% else %>
|
<% else %>
|
||||||
<%= render_menu :user_menu,@user %>
|
<%= render_menu :user_menu, @user %>
|
||||||
<% end %>
|
<% end %>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
|
@ -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>
|
||||||
|
|
|
@ -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;" %>
|
|
@ -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>
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,2 @@
|
||||||
|
<%= @subject %>
|
||||||
|
<%= link_to @project_url, @project_url%>
|
|
@ -67,7 +67,7 @@
|
||||||
<p>
|
<p>
|
||||||
<% if @memo.attachments.any?%>
|
<% if @memo.attachments.any?%>
|
||||||
<% options = {:author => true, :deletable => @memo.deleted_attach_able_by?(User.current) } %>
|
<% 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 %>
|
<% end %>
|
||||||
</p>
|
</p>
|
||||||
<div class="clearfix"></div>
|
<div class="clearfix"></div>
|
||||||
|
@ -136,7 +136,7 @@
|
||||||
<p>
|
<p>
|
||||||
<% if reply.attachments.any?%>
|
<% if reply.attachments.any?%>
|
||||||
<% options = {:author => true, :deletable => reply.deleted_attach_able_by?(User.current) } %>
|
<% 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 %>
|
<% end %>
|
||||||
</p>
|
</p>
|
||||||
</td>
|
</td>
|
||||||
|
|
|
@ -151,9 +151,9 @@
|
||||||
<!-- modified by fq -->
|
<!-- modified by fq -->
|
||||||
|
|
||||||
<% if !User.current.user_extensions.nil? && !User.current.user_extensions.student_id.nil? %>
|
<% 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 %>
|
<% else %>
|
||||||
<%= text_field_tag :no, nil, :placeholder => "请输入学号" %></span>
|
<%= text_field_tag :no, nil, :placeholder => l(:label_account_identity_studentID) %></span>
|
||||||
<% end %>
|
<% end %>
|
||||||
|
|
||||||
<!-- end -->
|
<!-- end -->
|
||||||
|
@ -217,18 +217,18 @@
|
||||||
<label for="occupation_name"><%= l(:field_occupation) %></label>
|
<label for="occupation_name"><%= l(:field_occupation) %></label>
|
||||||
<span class="required"> </span>
|
<span class="required"> </span>
|
||||||
<% if User.current.user_extensions.nil? %>
|
<% 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="occupation" style="display: none" type="text" value="" />
|
||||||
<input id="occupation_name" type="text" style="display: none" readonly/>
|
<input id="occupation_name" type="text" style="display: none" readonly/>
|
||||||
<% else %>
|
<% else %>
|
||||||
<% if User.current.user_extensions.identity == 3 || User.current.user_extensions.identity == 2 %>
|
<% 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="occupation" style="display: none" type="text" value="<%= @user.user_extensions.occupation %>" />
|
||||||
<input id="occupation_name" type="text" style="display: none" readonly/>
|
<input id="occupation_name" type="text" style="display: none" readonly/>
|
||||||
<% elsif User.current.user_extensions.school.nil? %>
|
<% 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="occupation" style="display: none" type="text" />
|
||||||
<input id="occupation_name" type="text" style="display: none" readonly/>
|
<input id="occupation_name" type="text" style="display: none" readonly/>
|
||||||
<% else %>
|
<% else %>
|
||||||
|
|
|
@ -0,0 +1,21 @@
|
||||||
|
<%= error_messages_for 'project' %>
|
||||||
|
<!--[form:project]-->
|
||||||
|
<% unless @organizations.new_record? %>
|
||||||
|
<p>
|
||||||
|
<%= render :partial=>"avatar/avatar_form",:locals=> {source:@organizations} %>
|
||||||
|
</p>
|
||||||
|
<% end %>
|
||||||
|
<p>
|
||||||
|
<label for="project_description">
|
||||||
|
<%= l(:label_organization_name)%>:
|
||||||
|
<span class="required"> </span>
|
||||||
|
</label>
|
||||||
|
<%= f.text_field :name, :required => true, :size => 60, :style => "width:290px;" %>
|
||||||
|
</p>
|
||||||
|
<!--<p>-->
|
||||||
|
<!--<label for="project_description">-->
|
||||||
|
<%#= l(:field_description)%>
|
||||||
|
<!--<span class="required"> </span>-->
|
||||||
|
<!--</label>-->
|
||||||
|
<!--<%#= f.text_area :description, :required => true, :size => 60, :style => "width:490px;" %>-->
|
||||||
|
<!--</p>-->
|
|
@ -0,0 +1,25 @@
|
||||||
|
<%= form_for(@organization) do |f|%>
|
||||||
|
<h3>
|
||||||
|
<%=l(:label_organization_edit)%>
|
||||||
|
</h3>
|
||||||
|
<div class="box tabular" >
|
||||||
|
<%= error_messages_for 'project' %>
|
||||||
|
<p>
|
||||||
|
<%= render :partial=>"avatar/avatar_form",:locals=> {source:@organization} %>
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
<label for="project_description">
|
||||||
|
<%= l(:label_organization_name)%>:
|
||||||
|
<span class="required"> </span>
|
||||||
|
</label>
|
||||||
|
<%= f.text_field :name, :required => true, :size => 60, :style => "width:290px;" %>
|
||||||
|
</p>
|
||||||
|
<span style="padding-left: 60px">
|
||||||
|
<%= submit_tag l(:button_create), :class => "enterprise"%>
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
<%#= submit_tag l(:button_create_and_continue), :name => 'continue' %>
|
||||||
|
<%= javascript_tag "$('#project_name').focus();" %>
|
||||||
|
<% end %>
|
||||||
|
|
||||||
|
<% html_title(l(:label_organization_edit)) -%>
|
|
@ -0,0 +1,31 @@
|
||||||
|
<title>
|
||||||
|
<%= l(:label_all_enterprises) %>
|
||||||
|
</title>
|
||||||
|
<div class="content_syqy">
|
||||||
|
<div class="list">
|
||||||
|
<%= l(:label_all_enterprises) %>
|
||||||
|
</div>
|
||||||
|
<div class="syqy_box">
|
||||||
|
<% if @organizations.empty? %>
|
||||||
|
<h3>
|
||||||
|
<%= l(:label_enterprise_nil) %>
|
||||||
|
</h3>
|
||||||
|
<% else %>
|
||||||
|
<% @organizations.each do |organization| %>
|
||||||
|
<% unless organization.name.blank? %>
|
||||||
|
<ul>
|
||||||
|
<li >
|
||||||
|
<img src="/images/organization_logo.jpg" width="30" height="30" alt="<%= organization.name%>" />
|
||||||
|
<%= link_to organization.name, home_path(:organization => organization.id) %>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
<% end %>
|
||||||
|
<% end %>
|
||||||
|
<% end %>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div style="clear: both"></div>
|
||||||
|
<div class="school-index">
|
||||||
|
<ul id="schoollist" style="line-height: 25px"></ul>
|
||||||
|
</div>
|
||||||
|
<% html_title(l(:label_enterprise_all)) -%>
|
|
@ -0,0 +1,18 @@
|
||||||
|
<%= form_for(@organizations, :method => :post,
|
||||||
|
:name => 'new_form',
|
||||||
|
:url => {:controller => 'organization',
|
||||||
|
:action => 'create'}) do |f|%>
|
||||||
|
<h3>
|
||||||
|
<%=l(:label_organization_new)%>
|
||||||
|
</h3>
|
||||||
|
<div class="box tabular" >
|
||||||
|
<%= render :partial => 'form', :locals => { :f => f } %>
|
||||||
|
<span style="padding-left: 60px">
|
||||||
|
<%= submit_tag l(:button_create), :class => "enterprise"%>
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
<%#= submit_tag l(:button_create_and_continue), :name => 'continue' %>
|
||||||
|
<%= javascript_tag "$('#project_name').focus();" %>
|
||||||
|
<% end %>
|
||||||
|
|
||||||
|
<% html_title(l(:label_organization_new)) -%>
|
|
@ -1,23 +0,0 @@
|
||||||
<title><%= l(:label_all_enterprises) %></title>
|
|
||||||
<div class="content_syqy">
|
|
||||||
<div class="list"><%= l(:label_all_enterprises) %></div>
|
|
||||||
<div class="syqy_box">
|
|
||||||
<% if @projects.count == 0 %>
|
|
||||||
<h3><%= l(:label_enterprise_nil) %></h3>
|
|
||||||
<% else %>
|
|
||||||
<% @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 organization.enterprise_name, home_path(:organization => organization) %></li>
|
|
||||||
</ul>
|
|
||||||
<% end %>
|
|
||||||
<% end %>
|
|
||||||
<% end %>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div style="clear: both"></div>
|
|
||||||
<div class="school-index">
|
|
||||||
<ul id="schoollist" style="line-height: 25px"></ul>
|
|
||||||
</div>
|
|
||||||
<% html_title(l(:label_enterprise_all)) -%>
|
|
|
@ -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();">
|
||||||
|
确 定
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
<div class="cl"></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
|
|
|
@ -1,2 +1,10 @@
|
||||||
$("#polls_<%= @poll.id %>").html("<%= escape_javascript(render :partial => 'poll',:locals => {:poll => @poll}) %>");
|
$("#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");
|
|
@ -1,2 +1,10 @@
|
||||||
$("#polls_<%= @poll.id %>").html("<%= escape_javascript(render :partial => 'poll',:locals => {:poll => @poll}) %>");
|
$("#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");
|
|
@ -1,35 +1,62 @@
|
||||||
<%= error_messages_for 'project' %>
|
<%= error_messages_for 'project' %>
|
||||||
<!--[form:project]-->
|
<!--[form:project]-->
|
||||||
<% unless @project.new_record? %>
|
<% unless @project.new_record? %>
|
||||||
<p><%= render :partial=>"avatar/avatar_form",:locals=> {source:@project} %></p>
|
<p>
|
||||||
|
<%= render :partial=>"avatar/avatar_form",:locals=> {source:@project} %>
|
||||||
|
</p>
|
||||||
<% end %>
|
<% end %>
|
||||||
<p><%= f.text_field :name, :required => true, :size => 60, :style => "width:490px;" %></p>
|
<p>
|
||||||
|
<%= f.text_field :name, :required => true, :size => 60, :style => "width:490px;" %>
|
||||||
|
</p>
|
||||||
|
|
||||||
<p style="padding-right: 20px;">
|
<p style="padding-right: 20px;">
|
||||||
<%= f.text_area :description, :rows => 8, :class => 'wiki-edit', :style => "font-size:small;width:490px;margin-left:10px;" %>
|
<%= f.text_area :description, :rows => 8, :class => 'wiki-edit', :style => "font-size:small;width:490px;margin-left:10px;" %>
|
||||||
</p><!--by young-->
|
</p><!--by young-->
|
||||||
<p><%= f.text_field :enterprise_name, :size => 60, :style => "width:490px;" %></p>
|
<p>
|
||||||
<p style="display: none" ><%= f.text_field :identifier, :required => true, :size => 60, :style => "width:488px;", :disabled => @project.identifier_frozen?, :maxlength => Project::IDENTIFIER_MAX_LENGTH,
|
<%#= f.text_field :enterprise_name, :size => 60, :style => "width:490px;" %>
|
||||||
|
<label for="project_description">
|
||||||
|
<%= l(:field_enterprise_name)%>
|
||||||
|
<span class="required"> </span>
|
||||||
|
</label>
|
||||||
|
<%= select_tag :organization_id,options_for_select(project_organizations_id_option,@project.organization_id),{} %>
|
||||||
|
</p>
|
||||||
|
<p style="display: none" >
|
||||||
|
<%= f.text_field :identifier, :required => true, :size => 60, :style => "width:488px;", :disabled => @project.identifier_frozen?, :maxlength => Project::IDENTIFIER_MAX_LENGTH,
|
||||||
value:"#{User.current.id.to_s + '_' +Time.now.to_s.gsub(' ','_').gsub(':','').gsub('+','')}" %>
|
value:"#{User.current.id.to_s + '_' +Time.now.to_s.gsub(' ','_').gsub(':','').gsub('+','')}" %>
|
||||||
<% unless @project.identifier_frozen? %>
|
<% unless @project.identifier_frozen? %>
|
||||||
<em class="info"><%= l(:text_length_between, :min => 1, :max => Project::IDENTIFIER_MAX_LENGTH) %> <%= l(:text_project_identifier_info).html_safe %></em>
|
<em class="info">
|
||||||
|
<%= l(:text_length_between, :min => 1, :max => Project::IDENTIFIER_MAX_LENGTH) %>
|
||||||
|
<%= l(:text_project_identifier_info).html_safe %>
|
||||||
|
</em>
|
||||||
<% end %></p>
|
<% end %></p>
|
||||||
|
|
||||||
<!-- <p style="margin-left:-10px;"><%#= f.text_field :homepage, :size => 60, :style => "width:488px;margin-left: 10px;" %></p> --> <!-- by huang -->
|
<!-- <p style="margin-left:-10px;"><%#= f.text_field :homepage, :size => 60, :style => "width:488px;margin-left: 10px;" %></p> --> <!-- by huang -->
|
||||||
<p style="margin-left:-10px;"><em style ="color: #888888;display: block;font-size: 90%;font-style: normal;"><%= f.check_box :is_public, :style => "margin-left:10px;" %></em></p>
|
<p style="margin-left:-10px;">
|
||||||
<p style="margin-left:-10px;"><em style ="color: #888888;display: block;font-size: 90%;font-style: normal;"><%= f.hidden_field :hidden_repo, :style => "margin-left:10px;" %></em></p>
|
<em style ="color: #888888;display: block;font-size: 90%;font-style: normal;">
|
||||||
|
<%= f.check_box :is_public, :style => "margin-left:10px;" %>
|
||||||
|
</em>
|
||||||
|
</p>
|
||||||
|
<p style="margin-left:-10px;">
|
||||||
|
<em style ="color: #888888;display: block;font-size: 90%;font-style: normal;">
|
||||||
|
<%= f.check_box :hidden_repo, :style => "margin-left:10px;" %>
|
||||||
|
</em>
|
||||||
|
</p>
|
||||||
<!--
|
<!--
|
||||||
<p style="margin-left:-10px;"><em style ="color: #888888;display: block;font-size: 90%;font-style: normal;">
|
<p style="margin-left:-10px;"><em style ="color: #888888;display: block;font-size: 90%;font-style: normal;">
|
||||||
<%#= f.check_box :dts_test, :style => "margin-left:10px;" %>
|
<%#= f.check_box :dts_test, :style => "margin-left:10px;" %>
|
||||||
</em></p>
|
</em></p>
|
||||||
-->
|
-->
|
||||||
<p style="display:none;"><%= f.text_field :project_type, :value => 0 %></p>
|
<p style="display:none;">
|
||||||
|
<%= f.text_field :project_type, :value => 0 %>
|
||||||
|
</p>
|
||||||
|
|
||||||
<%= wikitoolbar_for 'project_description' %>
|
<%= wikitoolbar_for 'project_description' %>
|
||||||
|
|
||||||
|
|
||||||
<% @project.custom_field_values.each do |value| %>
|
<% @project.custom_field_values.each do |value| %>
|
||||||
<p><%= custom_field_tag_with_label :project, value %></p>
|
<p>
|
||||||
|
<%= custom_field_tag_with_label :project, value %>
|
||||||
|
</p>
|
||||||
<% end %>
|
<% end %>
|
||||||
<%= call_hook(:view_projects_form, :project => @project, :form => f) %>
|
<%= call_hook(:view_projects_form, :project => @project, :form => f) %>
|
||||||
|
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||||
<head>
|
<head>
|
||||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
||||||
<title>快速进入项目通道</title>
|
<title><%= l('project.join.title')%></title>
|
||||||
<style>
|
<style>
|
||||||
#popbox{ font-size:12px; font-family:"微软雅黑","宋体"; line-height:1.9; background:#fff; font-style:normal;}
|
#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;}
|
#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 id="popbox">
|
||||||
<div class="C" >
|
<div class="C" >
|
||||||
<div class="C_top">
|
<div class="C_top">
|
||||||
<h2>快速进入项目通道</h2>
|
<h2><%= l('project.join.title')%></h2>
|
||||||
<p>只要持有项目的ID,就可快速申请加入所在项目。项目页面搜索不到的私有项目只能从此通道进入哦!</p>
|
<p><%= l('project.join.description')%></p>
|
||||||
</div>
|
</div>
|
||||||
<div class="C_form">
|
<div class="C_form">
|
||||||
<%= form_tag({:controller => 'applied_project',
|
<%= form_tag({:controller => 'applied_project',
|
||||||
|
@ -58,13 +58,13 @@
|
||||||
:id => 'new-watcher-form') do %>
|
:id => 'new-watcher-form') do %>
|
||||||
<ul>
|
<ul>
|
||||||
<li style="padding-top: 15px;">
|
<li style="padding-top: 15px;">
|
||||||
<span class="tips">项 目 ID:</span>
|
<span class="tips"><%= l('project.join.id.label')%></span>
|
||||||
<input type="hidden" name="project_join" value="1">
|
<input type="hidden" name="project_join" value="1">
|
||||||
<input type="hidden" name="user_id" value="<%= User.current.id%>">
|
<input type="hidden" name="user_id" value="<%= User.current.id%>">
|
||||||
<input class=" width190" name="project_id" id="project_id" type="text" value="" >
|
<input class=" width190" name="project_id" id="project_id" type="text" value="" >
|
||||||
<input type="text" style="display: none"/>
|
<input type="text" style="display: none"/>
|
||||||
</li>
|
</li>
|
||||||
<li class="mB5">项目ID是所在项目网址中显示的序号</li>
|
<li class="mB5"><%= l('project.join.id.tips')%></li>
|
||||||
<li>
|
<li>
|
||||||
<a href="#" class="btn" style="margin-left: 50px;" onclick="submit_form(this);">
|
<a href="#" class="btn" style="margin-left: 50px;" onclick="submit_form(this);">
|
||||||
<%= l(:label_apply_project) %>
|
<%= l(:label_apply_project) %>
|
||||||
|
|
|
@ -4,7 +4,9 @@
|
||||||
<%= labelled_form_for @project do |f| %>
|
<%= labelled_form_for @project do |f| %>
|
||||||
<div class="project_new"><%=l(:label_project_new)%><span class="description"> <%=raw l(:label_project_new_description)%></span>
|
<div class="project_new"><%=l(:label_project_new)%><span class="description"> <%=raw l(:label_project_new_description)%></span>
|
||||||
<div class="box tabular" >
|
<div class="box tabular" >
|
||||||
|
<p style="font-weight: bold; color: rgb(237,137,36)">
|
||||||
|
<%=raw l(:label_project_new_description)%>
|
||||||
|
</p>
|
||||||
<%= render :partial => 'form', :locals => { :f => f } %>
|
<%= render :partial => 'form', :locals => { :f => f } %>
|
||||||
<span style="padding-left: 60px">
|
<span style="padding-left: 60px">
|
||||||
<%= submit_tag l(:button_create), :class => "enterprise"%>
|
<%= submit_tag l(:button_create), :class => "enterprise"%>
|
||||||
|
|
|
@ -1 +1,177 @@
|
||||||
<%= render :partial => 'projects/newproject_show' %>
|
<%= javascript_include_tag "jquery.infinitescroll.js" %>
|
||||||
|
<script>
|
||||||
|
/* $(document).ready(function (){ //别忘了加这句,除非你没学Jquery
|
||||||
|
$("#container").infinitescroll({
|
||||||
|
navSelector: "#paginator", //页面分页元素--成功后自动隐藏
|
||||||
|
nextSelector: "#paginator a[rel='next']", //下一页的按钮,但是貌似这个选不中
|
||||||
|
itemSelector: ".scroll " ,
|
||||||
|
path: function(current){ var page = parseInt(current)+1;
|
||||||
|
var project_id = <%= @project.id %>;
|
||||||
|
return "/projects/"+project_id+"?page="+page
|
||||||
|
}, //下一页的路径
|
||||||
|
animate: true,
|
||||||
|
maxPage: 500
|
||||||
|
});
|
||||||
|
});*/
|
||||||
|
</script>
|
||||||
|
<div id="container">
|
||||||
|
<div class="scroll">
|
||||||
|
<% unless @events_pages.empty? %>
|
||||||
|
<% @events_pages.each do |e| -%>
|
||||||
|
<% act = e.forge_act %>
|
||||||
|
<% if e.forge_act_type == "Issue" %>
|
||||||
|
<div class="activity-item underline-evreycontent" style="font-size: 14px;line-height:1.5em;width: 100%;word-wrap: break-word;word-break: break-all;">
|
||||||
|
<div class="activity-avatar" style="float: left; margin:3px; height: 100%;">
|
||||||
|
<%= image_tag(url_to_avatar(act.author), :class => "avatar") %>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="activity-content" style="padding:5px 5px 5px 70px;">
|
||||||
|
<strong> <%= h(e.project) if @project.nil? || @project.id != e.project_id %></strong>
|
||||||
|
<span class="activity-title font_lighter">
|
||||||
|
<%= link_to_user(act.author) %>
|
||||||
|
<%= l(:label_new_activity) %>
|
||||||
|
</span>
|
||||||
|
<%= link_to format_activity_title("#{act.source_from}##{act.project_issues_index} (#{act.status}): #{act.tracker.name} #{act.subject}"),
|
||||||
|
{:controller => 'issues',
|
||||||
|
:action => 'show',
|
||||||
|
:id => act.id} %>
|
||||||
|
<div class="activity_description info-break" style="font-size: 13px;width: 100%;word-break: break-all;word-wrap: break-word;">
|
||||||
|
<%= textAreailizable act,:description %>
|
||||||
|
</div>
|
||||||
|
<div class="activity_status" style="position:relative; padding-top: 3px;">
|
||||||
|
<span class="font_lighter"> <%= l :label_activity_time %>
|
||||||
|
: <%= format_activity_day(act.created_on) %> <%= format_time(act.created_on, false) %></span>
|
||||||
|
<div class="" style="display:inline-block;position:absolute; right:2%;">
|
||||||
|
<span> <%= link_to l(:label_find_all_comments), issue_path(act.id) %> </span><span class="font_lighter"><%= l(:label_comments_count, :count => act.journals.count) %></span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<% elsif e.forge_act_type == "Journal" %>
|
||||||
|
<div class="activity-item underline-evreycontent" style="font-size: 14px;line-height:1.5em;width: 100%;word-wrap: break-word;word-break: break-all;">
|
||||||
|
<div class="activity-avatar" style="float: left; margin:3px; height: 100%;">
|
||||||
|
<%= image_tag(url_to_avatar(e.user), :class => "avatar") %>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="activity-content" style="padding:5px 5px 5px 70px;">
|
||||||
|
<strong> <%= h(e.project) if @project.nil? || @project.id != e.project_id %></strong>
|
||||||
|
<span class="activity-title font_lighter">
|
||||||
|
<%= link_to(h(e.user), user_path(e.user_id)) %>
|
||||||
|
<%= l(:label_new_activity) %>
|
||||||
|
</span>
|
||||||
|
<%= link_to(l(:label_activity_project)+act.issue.project.name, project_path(act.issue.project.id)) %>
|
||||||
|
<%= link_to format_activity_title("#{act.issue.tracker} ##{act.issue.project_issues_index}: #{act.issue.subject}"),
|
||||||
|
{:controller => 'issues', :action => 'show', :id => act.issue.id, :anchor => "change-#{act.id}"} %>
|
||||||
|
<div class="activity_description info-break" style="font-size: 13px;width: 100%;word-break: break-all;word-wrap: break-word;">
|
||||||
|
<%= textAreailizable act,:notes %>
|
||||||
|
</div>
|
||||||
|
<div class="activity_status" style="position:relative; padding-top: 3px;">
|
||||||
|
<span class="font_lighter"> <%= l :label_activity_time %>
|
||||||
|
: <%= format_activity_day(act.created_on) %> <%= format_time(act.created_on, false) %></span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<% elsif e.forge_act_type == "Message" %>
|
||||||
|
<div class="activity-item underline-evreycontent" style="font-size: 14px;line-height:1.5em;width: 100%;word-wrap: break-word;word-break: break-all;">
|
||||||
|
<div class="activity-avatar" style="float: left; margin:3px; height: 100%;">
|
||||||
|
<%= image_tag(url_to_avatar(e.user), :class => "avatar") %>
|
||||||
|
</div>
|
||||||
|
<div class="activity-content" style="padding:5px 5px 5px 70px;">
|
||||||
|
<strong> <%= h(e.project) if @project.nil? || @project.id != e.project_id %></strong>
|
||||||
|
<span class="activity-title font_lighter">
|
||||||
|
<%= link_to(h(e.user), user_path(e.user_id)) %>
|
||||||
|
<%= l(:label_new_activity) %>
|
||||||
|
</span>
|
||||||
|
<%= link_to format_activity_title("#{act.board.name}: #{act.subject}"),
|
||||||
|
{:controller => 'messages',
|
||||||
|
:action => 'show',
|
||||||
|
:board_id => act.board_id}.merge(act.parent_id.nil? ? {:id => act.id} : {:id => act.parent_id, :r => act.id, :anchor => "message-#{act.id}"}) %>
|
||||||
|
<div class="activity_description info-break" style="font-size: 13px;width: 100%;word-break: break-all;word-wrap: break-word;">
|
||||||
|
<%= textAreailizable act,:content %>
|
||||||
|
</div>
|
||||||
|
<div class="activity_status" style="position:relative; padding-top: 3px;">
|
||||||
|
<span class="font_lighter"> <%= l :label_activity_time %>
|
||||||
|
: <%= format_activity_day(act.created_on) %> <%= format_time(act.created_on, false) %></span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<% elsif e.forge_act_type == "News" %>
|
||||||
|
<div class="activity-item underline-evreycontent" style="font-size: 14px;line-height:1.5em;width: 100%;word-wrap: break-word;word-break: break-all;">
|
||||||
|
<div class="activity-avatar" style="float: left; margin:3px; height: 100%;">
|
||||||
|
<%= image_tag(url_to_avatar(e.user), :class => "avatar") %>
|
||||||
|
</div>
|
||||||
|
<div class="activity-content" style="padding:5px 5px 5px 70px;">
|
||||||
|
<strong> <%= h(e.project) if @project.nil? || @project.id != e.project_id %></strong>
|
||||||
|
<span class="activity-title font_lighter">
|
||||||
|
<%= link_to(h(e.user), user_path(e.user_id)) %>
|
||||||
|
<%= l(:label_new_activity) %>
|
||||||
|
</span>
|
||||||
|
<%= link_to format_activity_title("#{l(:label_news)}: #{act.title}"), {:controller => 'news', :action => 'show', :id => act.id} %>
|
||||||
|
<div class="activity_description info-break" style="font-size: 13px;width: 100%;word-break: break-all;word-wrap: break-word;">
|
||||||
|
<%= textAreailizable act,:description %>
|
||||||
|
</div>
|
||||||
|
<div class="activity_status" style="position:relative; padding-top: 3px;">
|
||||||
|
<span class="font_lighter"> <%= l :label_activity_time %>
|
||||||
|
: <%= format_activity_day(act.created_on) %> <%= format_time(act.created_on, false) %></span>
|
||||||
|
<div class="" style="display:inline-block;position:absolute; right:2%;">
|
||||||
|
<span>
|
||||||
|
<%= link_to l(:label_find_all_comments), {:controller => 'news', :action => 'show', :id => act.id} %>
|
||||||
|
</span>
|
||||||
|
<span class="font_lighter">
|
||||||
|
<%= l(:label_comments_count, :count => act.comments_count) %>
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<% elsif e.forge_act_type == "Document" %>
|
||||||
|
<div class="activity-item underline-evreycontent" style="font-size: 14px;line-height:1.5em;width: 100%;word-wrap: break-word;word-break: break-all;">
|
||||||
|
<div class="activity-avatar" style="float: left; margin:3px; height: 100%;">
|
||||||
|
<%= image_tag(url_to_avatar(e.user), :class => "avatar") %>
|
||||||
|
</div>
|
||||||
|
<div class="activity-content" style="padding:5px 5px 5px 70px;">
|
||||||
|
<strong> <%= h(e.project) if @project.nil? || @project.id != e.project_id %></strong>
|
||||||
|
<span class="activity-title font_lighter">
|
||||||
|
<%= link_to(h(e.user), user_path(e.user_id)) %>
|
||||||
|
<%= l(:label_new_activity) %>
|
||||||
|
</span>
|
||||||
|
<%= link_to format_activity_title("#{l(:label_document)}: #{act.title}"), {:controller => 'documents', :action => 'show', :id => act.id} %>
|
||||||
|
<div class="activity_description info-break" style="font-size: 13px;width: 100%;word-break: break-all;word-wrap: break-word;">
|
||||||
|
<%= textAreailizable act,:description %>
|
||||||
|
</div>
|
||||||
|
<div class="activity_status" style="position:relative; padding-top: 3px;">
|
||||||
|
<span class="font_lighter"> <%= l :label_activity_time %>
|
||||||
|
: <%= format_activity_day(act.created_on) %> <%= format_time(act.created_on, false) %></span>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<% elsif e.forge_act_type == "Attachment" %>
|
||||||
|
<div class="activity-item underline-evreycontent" style="font-size: 14px;line-height:1.5em;width: 100%;word-wrap: break-word;word-break: break-all;">
|
||||||
|
<div class="activity-avatar" style="float: left; margin:3px; height: 100%;">
|
||||||
|
<%= image_tag(url_to_avatar(e.user), :class => "avatar") %>
|
||||||
|
</div>
|
||||||
|
<div class="activity-content" style="padding:5px 5px 5px 70px;">
|
||||||
|
<strong> <%= h(e.project) if @project.nil? || @project.id != e.project_id %></strong>
|
||||||
|
<span class="activity-title font_lighter">
|
||||||
|
<%= link_to(h(e.user), user_path(e.user_id)) %>
|
||||||
|
<%= l(:label_new_activity) %>
|
||||||
|
</span>
|
||||||
|
<%= link_to format_activity_title("#{l(:label_attachment)}: #{act.filename}"), {:controller => 'attachments', :action => 'show', :id => act.id} %>
|
||||||
|
<div class="activity_description info-break" style="font-size: 13px;width: 100%;word-break: break-all;word-wrap: break-word;">
|
||||||
|
<%= textAreailizable act,:description %>
|
||||||
|
</div>
|
||||||
|
<div class="activity_status" style="position:relative; padding-top: 3px;">
|
||||||
|
<span class="font_lighter"> <%= l :label_activity_time %>
|
||||||
|
: <%= format_activity_day(act.created_on) %> <%= format_time(act.created_on, false) %></span>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<% end %>
|
||||||
|
<% end %>
|
||||||
|
<% end %>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<%= paginate @events_pages %>
|
|
@ -15,12 +15,12 @@
|
||||||
</span>
|
</span>
|
||||||
</div>
|
</div>
|
||||||
<strong><%= l(:field_description) %></strong>: <%= file.description %>
|
<strong><%= l(:field_description) %></strong>: <%= 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">
|
<span class="gray blue-color">
|
||||||
下载:<%= file.downloads%>|
|
<%= l('attachment.download_num')%><%= file.downloads%>|
|
||||||
大小:<%= number_to_human_size(file.filesize) %>|
|
<%= l('attachment.size')%><%= number_to_human_size(file.filesize) %>|
|
||||||
共享者:<a class="gray" ><%= link_to file.author, user_path(file.author), target: "_blank" unless file.author.blank? %></a>|
|
<%= l('attachment.sharer')%><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.upload_time')%><%= format_time(file.created_on) %>
|
||||||
</span>
|
</span>
|
||||||
<div style="display: none"></div>
|
<div style="display: none"></div>
|
||||||
</td>
|
</td>
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
<hr />
|
<hr />
|
||||||
<% contests_results.each do |contest| %>
|
<% contests_results.each do |contest| %>
|
||||||
<p class="font_description2">
|
<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>
|
:controller => "contests",:action => "show_contest",:id => contest.id %></strong>
|
||||||
<br />
|
<br />
|
||||||
<strong><%= l(:label_tags_contest_description) %>:</strong><%= textilizable contest.description %>
|
<strong><%= l(:label_tags_contest_description) %>:</strong><%= textilizable contest.description %>
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
<hr />
|
<hr />
|
||||||
<% courses_results.each do |course| %>
|
<% courses_results.each do |course| %>
|
||||||
<p class="font_description2">
|
<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 />
|
<br />
|
||||||
<strong><%= l(:label_new_course_description) %>:</strong><%= textilizable course.description %>
|
<strong><%= l(:label_new_course_description) %>:</strong><%= textilizable course.description %>
|
||||||
<%= course.updated_at %>
|
<%= course.updated_at %>
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
<%= link_to '+ 添加标签', 'javascript:void(0);',
|
<%= link_to l(:label_add_tag), 'javascript:void(0);',
|
||||||
:class => "yellowBtn f_l",
|
:class => "yellowBtn f_l",
|
||||||
:onclick=>"$('#add_tag_#{obj.id}').slideToggle();" if User.current.logged? %> <!-- $('#put-tag-form-#{obj.class}-#{obj.id}').toggle(); readmore(this); -->
|
:onclick=>"$('#add_tag_#{obj.id}').slideToggle();" if User.current.logged? %> <!-- $('#put-tag-form-#{obj.class}-#{obj.id}').toggle(); readmore(this); -->
|
||||||
|
|
||||||
|
|
|
@ -23,7 +23,7 @@
|
||||||
<%= l(:label_user_plural) %>(<%= @users_tags_num %>) |
|
<%= l(:label_user_plural) %>(<%= @users_tags_num %>) |
|
||||||
<%= l(:label_tags_call)%>(<%= @bids_tags_num %>) |
|
<%= l(:label_tags_call)%>(<%= @bids_tags_num %>) |
|
||||||
<%= l(:field_filename)%>(<%= @attachments_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 %>) |
|
<%= l(:label_tags_contest)%>(<%= @contests_tags_num %>) |
|
||||||
</div>
|
</div>
|
||||||
<div id="show_results">
|
<div id="show_results">
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
<% content_for :content do %>
|
<% content_for :content do %>
|
||||||
<h3 style="color: red;">总标签数:<%= @tags.size %>个</h3>
|
<h3 style="color: red;"><%= l(:label_tags_count) %><%= @tags.size %>个</h3>
|
||||||
<hr />
|
<hr />
|
||||||
<% i = 0 %>
|
<% i = 0 %>
|
||||||
<div id="show_all_tags">
|
<div id="show_all_tags">
|
||||||
|
|
|
@ -16,8 +16,8 @@
|
||||||
<div class="menu">
|
<div class="menu">
|
||||||
<%= link_to "#{l(:label_course_new)}", new_course_path, class: 'icon icon-add' if @user == User.current %>
|
<%= link_to "#{l(:label_course_new)}", new_course_path, class: 'icon icon-add' if @user == User.current %>
|
||||||
<ul>
|
<ul>
|
||||||
<li mode='doing' class="on">进行中</li>
|
<li mode='doing' class="on"><%= l('user.courses.doing')%></li>
|
||||||
<li mode='end'>已完结</li>
|
<li mode='end'><%= l('user.courses.done')%></li>
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
<div class="menu-div">
|
<div class="menu-div">
|
||||||
<div class="menu">
|
<div class="menu">
|
||||||
<span style="color: #000; font-weight: bold;">
|
<span style="color: #000; font-weight: bold;">
|
||||||
<%= "#{@user.name}的动态" %>
|
<%= l(:label_user_activity, :value => @user.name) %>
|
||||||
</span>
|
</span>
|
||||||
<ul><%#链接绑定在页面最下方的jQuery%>
|
<ul><%#链接绑定在页面最下方的jQuery%>
|
||||||
<li mode='all' class="<%= "on" if @state.eql?(0) %>">
|
<li mode='all' class="<%= "on" if @state.eql?(0) %>">
|
||||||
|
|
|
@ -1,47 +1,63 @@
|
||||||
<h3><%= l(:label_user_watcher)%></h3>
|
<h3><%= l(:label_user_watcher)%></h3>
|
||||||
<div class="inf_user_image">
|
<div class="inf_user_image">
|
||||||
<% for user in User.watched_by(@user.id) %>
|
<% for user in User.watched_by(@user.id) %>
|
||||||
<ul class="list_watch"><li>
|
<ul class="list_watch">
|
||||||
<table width="660px" border="0" align="center">
|
<li>
|
||||||
<tr>
|
<table width="660px" border="0" align="center">
|
||||||
<td colspan="2" valign="top" width="50" ><%= link_to image_tag(url_to_avatar(user), :class => "avatar"), user_path(user), :title => "#{user.name}" %></td>
|
<tr>
|
||||||
<td><table width="580px" border="0">
|
<td colspan="2" valign="top" width="50" >
|
||||||
<tr> <!-- modified by bai 增加了关注人的名字全称-->
|
<%= link_to image_tag(url_to_avatar(user), :class => "avatar"), user_path(user), :title => "#{user.name}" %>
|
||||||
<td colspan="2" valign="top"><strong><%= content_tag "div", link_to(user.name,user_path(user)), :class => "project_avatar_name" %></strong>
|
</td>
|
||||||
</td>
|
<td>
|
||||||
</tr>
|
<table width="580px" border="0">
|
||||||
<tr> <!-- modified by bai 区别了“关注”里个人参与的项目与课程-->
|
<tr> <!-- modified by bai 增加了关注人的名字全称-->
|
||||||
<td colspan="2" width="580px" ><p class="font_description">
|
<td colspan="2" valign="top">
|
||||||
<%# unless user.memberships.empty? %>
|
<strong>
|
||||||
<% cond = Project.visible_condition(User.current) + " AND projects.project_type <> 1" %>
|
<%= content_tag "div", link_to(user.name,user_path(user)), :class => "project_avatar_name" %>
|
||||||
<% memberships = user.memberships.all(:conditions => cond) %>
|
</strong>
|
||||||
<%= l(:label_x_contribute_to, :count => memberships.count) %>
|
</td>
|
||||||
<% for member in memberships %>
|
</tr>
|
||||||
<%= link_to_project(member.project) %><%= (user.memberships.last == member) ? '' : ',' %>
|
<tr> <!-- modified by bai 区别了“关注”里个人参与的项目与课程-->
|
||||||
<% end %>
|
<td colspan="2" width="580px" >
|
||||||
<%# end %>
|
<p class="font_description">
|
||||||
</p>
|
<%# unless user.memberships.empty? %>
|
||||||
<p class="font_description">
|
<% cond = Project.visible_condition(User.current) + " AND projects.project_type <> 1" %>
|
||||||
<%# unless user.memberships.empty? %>
|
<% memberships = user.memberships.all(:conditions => cond) %>
|
||||||
<% user_courses = user_courses_list(user) %>
|
<%= l(:label_x_contribute_to, :count => memberships.count) %>
|
||||||
<%= l(:label_x_course_contribute_to, :count => user_courses.count) %>
|
<%= ":" unless memberships.empty? %>
|
||||||
<% for course in user_courses %>
|
<% for member in memberships %>
|
||||||
<%# if course.name != nil %>
|
<%= link_to_project(member.project) %>
|
||||||
<%= link_to course.name,{:controller => 'courses',:action => 'show',id:course.id, host: Setting.course_domain} %><%= (user_courses.last == course) ? '' : ',' %>
|
<%= (user.memberships.last == member) ? '' : ',' %>
|
||||||
<%# end %>
|
<% end %>
|
||||||
<% end %>
|
<%# end %>
|
||||||
<%# end %>
|
</p>
|
||||||
</p>
|
<p class="font_description">
|
||||||
</td>
|
<%# unless user.memberships.empty? %>
|
||||||
</tr>
|
<% user_courses = user_courses_list(user) %>
|
||||||
<!-- end -->
|
<%= l(:label_x_course_contribute_to, :count => user_courses.count) %>
|
||||||
|
<%= ":" unless user_courses.empty? %>
|
||||||
<tr>
|
<% for course in user_courses %>
|
||||||
<td width="200" align="right" class="font_lighter"><%= l(:label_user_joinin) %><%= format_date(user.created_on) %>
|
<%# if course.name != nil %>
|
||||||
</td>
|
<%= link_to course.name,{:controller => 'courses',:action => 'show',id:course.id, host: Setting.course_domain} %><%= (user_courses.last == course) ? '' : ',' %>
|
||||||
</tr>
|
<%# end %>
|
||||||
</table></td>
|
<% end %>
|
||||||
</tr>
|
<%# end %>
|
||||||
</table></li></ul>
|
</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 %>
|
<% end %>
|
||||||
</div>
|
</div>
|
|
@ -5,7 +5,9 @@
|
||||||
<!-- 上左下右 -->
|
<!-- 上左下右 -->
|
||||||
<div style="float: left; margin-left: 10px; width: 380px;">
|
<div style="float: left; margin-left: 10px; width: 380px;">
|
||||||
<% unless project.is_public %>
|
<% unless project.is_public %>
|
||||||
<span class="private_project"> <%= l(:label_private) %> </span>
|
<span class="private_project">
|
||||||
|
<%= l(:label_private) %>
|
||||||
|
</span>
|
||||||
<% end %>
|
<% end %>
|
||||||
<%= link_to( project.name, project_path(project.id), :class => "d-g-blue d-p-project-name",:title => "#{project.name}" )%>
|
<%= link_to( project.name, project_path(project.id), :class => "d-g-blue d-p-project-name",:title => "#{project.name}" )%>
|
||||||
(<%= link_to l(:label_project_member_amount, :count=>projectCount(project)), project_member_path(project) ,:course =>'0' %>)
|
(<%= link_to l(:label_project_member_amount, :count=>projectCount(project)), project_member_path(project) ,:course =>'0' %>)
|
||||||
|
|
|
@ -1,8 +1,8 @@
|
||||||
<%
|
<%
|
||||||
select_option = []
|
select_option = []
|
||||||
(select_option << [l(:label_select_project), 'projects']) if project_type == Project::ProjectType_project
|
(select_option << [l('welcome.search.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('welcome.search.select.course'), 'courses']) if project_type == Project::ProjectType_course
|
||||||
select_option << [l(:label_select_user), 'users']
|
select_option << [l('welcome.search.select.user'), 'users']
|
||||||
#select_option << ['教师', 'users_teacher'],
|
#select_option << ['教师', 'users_teacher'],
|
||||||
#select_option << ['学生', 'users_student']
|
#select_option << ['学生', 'users_student']
|
||||||
%>
|
%>
|
||||||
|
@ -49,7 +49,7 @@ form #search_type{
|
||||||
<%= form_tag({controller: :welcome, action: :search }, method: :get) do %>
|
<%= form_tag({controller: :welcome, action: :search }, method: :get) do %>
|
||||||
<div class="project-search" style="float: right">
|
<div class="project-search" style="float: right">
|
||||||
<div class='search_widget'>
|
<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" ) %>
|
<%= select_tag(:search_type, options_for_select(select_option), :style => "float:right" ) %>
|
||||||
</div>
|
</div>
|
||||||
<%#= hidden_field_tag 'project_type', project_type %>
|
<%#= hidden_field_tag 'project_type', project_type %>
|
||||||
|
|
|
@ -1,8 +1,8 @@
|
||||||
<%
|
<%
|
||||||
select_option = []
|
select_option = []
|
||||||
(select_option << [l(:label_select_project), 'projects']) if project_type == Project::ProjectType_project
|
(select_option << [l('welcome.search.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('welcome.search.select.course'), 'courses']) if project_type == Project::ProjectType_course
|
||||||
select_option << [l(:label_select_user), 'users']
|
select_option << [l('welcome.search.select.user'), 'users']
|
||||||
%>
|
%>
|
||||||
<style type="text/css">
|
<style type="text/css">
|
||||||
form #q, form #search_type{
|
form #q, form #search_type{
|
||||||
|
@ -90,10 +90,10 @@ form #search_by
|
||||||
<div class="project-search" style="float: right">
|
<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" %>
|
<%= submit_tag l(:label_search), :class => "enterprise", :name => nil,:style =>"float: right; margin-left:3px;margin-top:2px" %>
|
||||||
<div class='search_widget' >
|
<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">
|
<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_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>
|
</div>
|
||||||
<%#= hidden_field_tag 'project_type', project_type %>
|
<%#= hidden_field_tag 'project_type', project_type %>
|
||||||
</div>
|
</div>
|
||||||
|
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue