diff --git a/app/controllers/my_controller.rb b/app/controllers/my_controller.rb
index 69d8bc3a6..84e2e7d35 100644
--- a/app/controllers/my_controller.rb
+++ b/app/controllers/my_controller.rb
@@ -25,6 +25,7 @@ class MyController < ApplicationController
helper :issues
helper :users
helper :custom_fields
+ helper :user_score
BLOCKS = { 'issuesassignedtome' => :label_assigned_to_me_issues,
'issuesreportedbyme' => :label_reported_issues,
@@ -88,6 +89,23 @@ class MyController < ApplicationController
end
end
+ def clear_user_avatar_temp
+ @user = User.current
+ diskfile = disk_filename('User', @user.id)
+ diskfile1 = diskfile + 'temp'
+ File.delete(diskfile1) if File.exist?(diskfile1)
+ end
+ def save_user_avatar
+ @user = User.current
+ diskfile = disk_filename('User', @user.id)
+ diskfile1 = diskfile + 'temp'
+ begin
+ FileUtils.mv diskfile1, diskfile, force: true if File.exist? diskfile1
+ ensure
+ File.delete(diskfile1) if File.exist?(diskfile1)
+ end
+ end
+
# Edit user's account
def account
@user = User.current
@@ -119,6 +137,8 @@ class MyController < ApplicationController
@se.identity = params[:identity].to_i if params[:identity]
@se.technical_title = params[:technical_title] if params[:technical_title]
@se.student_id = params[:no] if params[:no]
+ @se.brief_introduction = params[:brief_introduction]
+ @se.description = params[:description]
if @user.save && @se.save
# 头像保存
@@ -137,6 +157,7 @@ class MyController < ApplicationController
File.delete(diskfile1) if File.exist?(diskfile1)
end
+ render :layout=>'base_users_new'
end
# Destroys user's account
@@ -159,6 +180,7 @@ class MyController < ApplicationController
# Manage user's password
def password
+ @act='password'
@user = User.current
unless @user.change_password_allowed?
flash.now[:error] = l(:notice_can_t_change_password)
@@ -178,12 +200,14 @@ class MyController < ApplicationController
flash.now[:error] = l(:notice_account_wrong_password)
end
end
+ render :template => 'my/account',:layout=>'base_users_new'
rescue Exception => e
if e.message == 'wrong password'
flash.now[:error] = l(:notice_account_wrong_password)
else
flash.now[:error] = e.message
end
+ render :template => 'my/account',:layout=>'base_users_new'
end
# Create a new feeds key
diff --git a/app/controllers/users_controller.rb b/app/controllers/users_controller.rb
index 0655c323b..cb2821a4b 100644
--- a/app/controllers/users_controller.rb
+++ b/app/controllers/users_controller.rb
@@ -26,10 +26,10 @@ class UsersController < ApplicationController
menu_item :user_homework, :only => :user_homeworks
menu_item :user_project, :only => [:user_projects, :watch_projects]
# menu_item :requirement_focus, :only => :watch_bids
- menu_item :requirement_focus, :only => :watch_contests
+ menu_item :requirement_focus, :only => :watch_contests
menu_item :user_newfeedback, :only => :user_newfeedback
-
-
+
+
#Ended by young
# edit
@@ -39,23 +39,28 @@ class UsersController < ApplicationController
before_filter :require_admin, :except => [:show, :index, :search, :tag_save, :tag_saveEx,:user_projects, :user_newfeedback, :user_comments, :watch_contests, :info,
:user_watchlist, :user_fanslist,:update, :user_courses, :user_homeworks, :watch_projects, :show_score, :topic_score_index, :project_score_index,
:activity_score_index, :influence_score_index, :score_index,:show_new_score, :topic_new_score_index, :project_new_score_index,
- :activity_new_score_index, :influence_new_score_index, :score_new_index,:update_score,:user_activities,:user_projects_index]
+ :activity_new_score_index, :influence_new_score_index, :score_new_index,:update_score,:user_activities,:user_projects_index,
+ :user_courses4show,:user_projects4show,:user_course_activities,:user_project_activities,:user_feedback4show,:user_visitorlist]
#edit has been deleted by huang, 2013-9-23
- before_filter :find_user, :only => [:user_fanslist, :user_watchlist, :show, :edit, :update, :destroy, :edit_membership, :user_courses,
- :user_homeworks, :destroy_membership, :user_activities, :user_projects, :user_newfeedback, :user_comments,
+ before_filter :find_user, :only => [:user_fanslist, :user_watchlist, :show, :edit, :update, :destroy, :edit_membership, :user_courses,
+ :user_homeworks, :destroy_membership, :user_activities, :user_projects, :user_newfeedback, :user_comments,
:watch_contests, :info, :watch_projects, :show_score, :topic_score_index, :project_score_index,
:activity_score_index, :influence_score_index, :score_index,:show_new_score, :topic_new_score_index, :project_new_score_index,
- :activity_new_score_index, :influence_new_score_index, :score_new_index,:user_projects_index]
+ :activity_new_score_index, :influence_new_score_index, :score_new_index,:user_projects_index,
+ :user_courses4show,:user_projects4show,:user_course_activities,:user_project_activities,:user_feedback4show,:user_visitorlist]
before_filter :auth_user_extension, only: :show
#before_filter :rest_user_score, only: :show
#before_filter :select_entry, only: :user_projects
accept_api_auth :index, :show, :create, :update, :destroy,:tag_save , :tag_saveEx
-
+
#william
before_filter :require_login, :only => [:tag_save,:tag_saveEx]
#before_filter :refresh_changests, :only =>[:user_activities,:user_courses,:user_projects,:user_newfeedback]
+ #visitor
+ before_filter :recorded_visitor, :only => [:show,:user_fanslist,:user_watchlist,:user_visitorlist]
+
helper :sort
include SortHelper
helper :custom_fields
@@ -76,6 +81,9 @@ class UsersController < ApplicationController
# fq
helper :words
+ helper :project_score
+ helper :issues
+ include UsersHelper
def refresh_changests
if !(@user.nil?) && !(@user.memberships.nil?)
@@ -104,34 +112,41 @@ class UsersController < ApplicationController
#added by young
def user_projects
- if User.current.admin?
- @memberships = @user.memberships.all(conditions: "projects.project_type = #{Project::ProjectType_project}")
- else
- cond = Project.visible_condition(User.current) + " AND projects.project_type <> 1"
- @memberships = @user.memberships.all(:conditions => cond)
- end
- @memberships = @memberships.sort {|a,b| b.created_on.to_i <=> a.created_on.to_i}
- # unless @memberships.nil?
- # @user_projects = []
- # @memberships.each do |membership|
- # @user_projects << membership.project
- # end
- # @user_projects = @user_projects.sort {|a,b| b.created_on.to_i <=> a.created_on.to_i}
- # end
- #events = Redmine::Activity::Fetcher.new(User.current, :author => @user).events(nil, nil, :limit => 20)
- #@events_by_day = events.group_by(&:event_date)
- @state = 0
- #add by huang
+
+ #add by huang
unless User.current.admin?
if !@user.active? #|| (@user != User.current && @memberships.empty? && events.empty?)
render_404
- return
+ return
end
end
- #end
-
+ #end
+ # if User.current.admin?
+ # @memberships = @user.memberships.all(conditions: "projects.project_type = #{Project::ProjectType_project}")
+ # else
+ # cond = Project.visible_condition(User.current) + " AND projects.project_type <> 1"
+ # @memberships = @user.memberships.all(:conditions => cond)
+ # end
+ #events = Redmine::Activity::Fetcher.new(User.current, :author => @user).events(nil, nil, :limit => 20)
+ #@events_by_day = events.group_by(&:event_date)
+ # @state = 0
+
+ limit = 10;
+ query = Project.joins("join members m on #{Project.table_name}.id=m.project_id")
+ query = query.where("m.user_id = ? and #{Project.table_name}.project_type=?",@user.id,Project::ProjectType_project)
+ if(params[:status] == '1')
+ query = query.where("#{Project.table_name}.user_id = ?",@user.id);
+ elsif(params[:status] == '2')
+ query = query.where("#{Project.table_name}.user_id <> ?",@user.id);
+ end
+ @obj_count = query.count();
+
+ @obj_pages = Paginator.new @obj_count,limit,params['page']
+ @list = query.order("#{Project.table_name}.id desc").limit(limit).offset(@obj_pages.offset).all();
+ @params = params
+
respond_to do |format|
- format.html
+ format.html{render :layout=>'base_users_new'}
format.api
end
end
@@ -168,21 +183,21 @@ class UsersController < ApplicationController
# format.api
# end
end
-
+
#new add by linchun
- def watch_contests
- @bids = Contest.watched_by(@user)
+ def watch_contests
+ @bids = Contest.watched_by(@user)
@offset, @limit = api_offset_and_limit({:limit => 10})
@contest_count = @contests.count
@contest_pages = Paginator.new @contest_count, @limit, params['page']
- @offset ||= @contest_pages.reverse_offset
+ @offset ||= @contest_pages.reverse_offset
unless @offset == 0
@contest = @contests.offset(@offset).limit(@limit).all.reverse
else
limit = @bid_count % @limit
@contest = @contests.offset(@offset).limit(limit).all.reverse
end
-
+
respond_to do |format|
format.html {
render :layout => 'base_users'
@@ -219,9 +234,9 @@ class UsersController < ApplicationController
end
end
# end
-
+
# added by huang
- def user_homeworks
+ def user_homeworks
# @membership = @user.memberships.all(:conditions => Project.visible_condition(User.current))
# @memberships = []
# @membership.each do |membership|
@@ -240,46 +255,63 @@ class UsersController < ApplicationController
# return
# end
# end
- end
-
-
+ end
+
+
include CoursesHelper
- def user_courses
+ def user_courses
unless User.current.admin?
if !@user.active? #|| (@user != User.current && @memberships.empty? && events.empty?)
render_404
- return
+ return
end
end
-
+
#@user.coursememberships.all(:conditions => Course.visible_condition(User.current))
- if User.current == @user || User.current.admin?
- membership = @user.coursememberships.all
- else
- membership = @user.coursememberships.all(:conditions => Course.visible_condition(User.current))
- end
-
- membership.sort! {|older, newer| newer.created_on <=> older.created_on }
- @memberships = []
- membership.collect { |e| @memberships.push(e)}
- ## 判断课程是否过期 [需封装]
- @memberships_doing = []
- @memberships_done = []
- #now_time = Time.now.year
- @memberships.map { |e|
- #end_time = e.course.get_time.year
- isDone = course_endTime_timeout?(e.course)
- if isDone
- @memberships_done.push e
- else
- @memberships_doing.push e
- end
- }
+ limit = 10;
+ query = Course.joins("join members m on #{Course.table_name}.id=m.course_id")
+ query = query.where("m.user_id = ?",@user.id)
+ if(params[:status] == '1')
+ query = query.where("endup_time >= ? or endup_time is null or endup_time=''",Time.now);
+ elsif(params[:status] == '2')
+ query = query.where("endup_time < ?",Time.now);
+ end
+ @obj_count = query.count();
+
+ @obj_pages = Paginator.new @obj_count,limit,params['page']
+ @list = query.order("#{Course.table_name}.id desc").limit(limit).offset(@obj_pages.offset).all();
+ @params = params
+ render :layout=>'base_users_new'
+
+ # if User.current == @user || User.current.admin?
+ # membership = @user.coursememberships.all
+ # else
+ # membership = @user.coursememberships.all(:conditions => Course.visible_condition(User.current))
+ # end
+ #
+ # membership.sort! {|older, newer| newer.created_on <=> older.created_on }
+ # @memberships = []
+ # membership.collect { |e|
+ # @memberships.push(e)
+ # }
+ # ## 判断课程是否过期 [需封装]
+ # @memberships_doing = []
+ # @memberships_done = []
+ # #now_time = Time.now.year
+ # @memberships.map { |e|
+ # #end_time = e.course.get_time.year
+ # isDone = course_endTime_timeout?(e.course)
+ # if isDone
+ # @memberships_done.push e
+ # else
+ # @memberships_doing.push e
+ # end
+ # }
# respond_to do |format|
- # format.html
- # format.api
+ # format.html
+ # format.api
# end
end
@@ -306,7 +338,7 @@ class UsersController < ApplicationController
#end
def index
-
+
@status = params[:status] || 1
sort_init 'login', 'asc'
sort_update %w(login firstname lastname mail admin created_on last_login_on)
@@ -322,7 +354,7 @@ class UsersController < ApplicationController
# 先内连一下statuses 保证排序之后数量一致
scope = User.visible.
joins("INNER JOIN user_statuses ON users.id = user_statuses.user_id")
-
+
# unknow
scope = scope.in_group(params[:group_id]) if params[:group_id].present?
@@ -359,7 +391,7 @@ class UsersController < ApplicationController
# limit and offset
@users = @users.limit(@user_pages.per_page).offset(@user_pages.offset)
-
+
@user_base_tag = params[:id] ? 'base_users':'users_base'
respond_to do |format|
format.html {
@@ -369,7 +401,7 @@ class UsersController < ApplicationController
format.api
end
end
-
+
def search
sort_init 'login', 'asc'
sort_update %w(login firstname lastname mail admin created_on last_login_on)
@@ -413,8 +445,213 @@ class UsersController < ApplicationController
format.api
end
end
-
+
+ def user_courses4show
+ query = Course.joins("join members m on #{Course.table_name}.id=m.course_id")
+ query = query.where("m.user_id = ?",@user.id)
+ if User.current == @user #看自己
+ else
+ if @user.user_extensions!=nil && @user.user_extensions.identity == 0 #看老师
+ query = query.joins("join member_roles r on m.id = r.member_id")
+ query = query.where("r.role_id in(3,7,9)")
+ end
+ query = query.where(Course.table_name+".is_public = 1")
+ # or exists (select 1 from courses c2,members m2 where c2.id=m2.course_id and c2.id=#{Course.table_name}.id and m2.user_id= User.current.id)
+ end
+
+ if params[:lastid]!=nil && !params[:lastid].empty?
+ query = query.where("#{Course.table_name}.id < ?",params[:lastid])
+ end
+ @list = query.order("#{Course.table_name}.id desc").limit(8).all
+
+ render :layout=>nil
+ end
+ def user_projects4show
+
+ query = Project.joins("join members m on #{Project.table_name}.id=m.project_id")
+ query = query.where("m.user_id = ? and #{Project.table_name}.project_type=?",@user.id,Project::ProjectType_project)
+ if User.current == @user #看自己
+ else
+ query = query.where(Project.table_name+".is_public = 1")
+ # TODO or exists (select 1 from project c2,members m2 where c2.id=m2.course_id and c2.id=#{Project.table_name}.id and m2.user_id= User.current.id)
+ end
+
+ if params[:lastid]!=nil && !params[:lastid].empty?
+ query = query.where("#{Project.table_name}.id < ?",params[:lastid])
+ end
+ @list = query.order("#{Project.table_name}.id desc").limit(8).all
+
+ render :layout=>nil
+ end
+
+ # def user_course_activities
+ # @list = []
+ # lastid = nil
+ # if params[:lastid]!=nil && !params[:lastid].empty?
+ # lastid = params[:lastid];
+ # end
+ #
+ # user_ids = []
+ # if @user == User.current
+ # watcher = User.watched_by(@user)
+ # watcher.push(User.current)
+ # user_ids = watcher.map{|x| x.id}
+ # else
+ # user_ids << @user.id
+ # end
+ #
+ # query_rec_count = 8
+ # query_times = 10 #query_times次没查到query_rec_count条记录就不查了
+ # query_i = 0;
+ # while( true )
+ # query_i = query_i+1
+ # if(query_i>query_times)
+ # break
+ # end
+ # query = Activity.where(user_id: user_ids)
+ # if(lastid != nil)
+ # query = query.where("id < ?",lastid)
+ # end
+ # lastid,item_list = query_activities(query,'course');
+ # for item in item_list
+ # @list << item
+ # if @list.count() >= query_rec_count
+ # break
+ # end
+ # end
+ # if @list.count() >= query_rec_count
+ # break
+ # end
+ # if lastid == nil
+ # break
+ # end
+ # end
+ # render :layout=>nil
+ # end
+ #
+ # def user_project_activities
+ # @list = []
+ # lastid = nil
+ # if params[:lastid]!=nil && !params[:lastid].empty?
+ # lastid = params[:lastid];
+ # end
+ #
+ # user_ids = []
+ # if @user == User.current
+ # watcher = User.watched_by(@user)
+ # watcher.push(User.current)
+ # user_ids = watcher.map{|x| x.id}
+ # else
+ # user_ids << @user.id
+ # end
+ #
+ # query_rec_count = 8
+ # query_times = 10 #query_times次没查到query_rec_count条记录就不查了
+ # query_i = 0;
+ # while( true )
+ # query_i = query_i+1
+ # if(query_i>query_times)
+ # break
+ # end
+ # query = Activity.where(user_id: user_ids)
+ # if(lastid != nil)
+ # query = query.where("id < ?",lastid)
+ # end
+ # lastid,item_list = query_activities(query,'project');
+ # for item in item_list
+ # @list << item
+ # if @list.count() >= query_rec_count
+ # break
+ # end
+ # end
+ # if @list.count() >= query_rec_count
+ # break
+ # end
+ # if lastid == nil
+ # break
+ # end
+ # end
+ # render :action=>'user_course_activities',:layout=>nil
+ # end
+ def user_course_activities
+ lastid = nil
+ if params[:lastid]!=nil && !params[:lastid].empty?
+ lastid = params[:lastid];
+ end
+
+ user_ids = []
+ if @user == User.current
+ watcher = User.watched_by(@user)
+ watcher.push(User.current)
+ user_ids = watcher.map{|x| x.id}
+ else
+ user_ids << @user.id
+ end
+
+ query = Activity.joins("join courses c on c.id=#{Activity.table_name}.activity_container_id and #{Activity.table_name}.activity_container_type='Course'")
+ query = query.where("#{Activity.table_name}.user_id in (?)", user_ids)
+ if User.current != @user #看别人
+ if @user.user_extensions!=nil && @user.user_extensions.identity == 0 #看老师
+ query = query.joins("join members m on c.id=m.course_id and m.user_id = #{@user.id}")
+ query = query.joins("join member_roles r on m.id = r.member_id")
+ query = query.where("r.role_id in(3,7,9)")
+ end
+ query = query.where("c.is_public=1")
+ end
+ if(lastid != nil)
+ query = query.where("#{Activity.table_name}.id < ?",lastid)
+ end
+ query = query.order("#{Activity.table_name}.id desc")
+ @list = query_activities(query)
+
+ render :layout=>nil
+ end
+
+ def user_project_activities
+ lastid = nil
+ if params[:lastid]!=nil && !params[:lastid].empty?
+ lastid = params[:lastid];
+ end
+
+ user_ids = []
+ if @user == User.current
+ watcher = User.watched_by(@user)
+ watcher.push(User.current)
+ user_ids = watcher.map{|x| x.id}
+ else
+ user_ids << @user.id
+ end
+
+ query = Activity.joins("join projects c on c.id=#{Activity.table_name}.activity_container_id and #{Activity.table_name}.activity_container_type='Project'")
+ query = query.where(user_id: user_ids)
+ if User.current != @user #看别人
+ query = query.where("c.is_public=1")
+ end
+ if(lastid != nil)
+ query = query.where("#{Activity.table_name}.id < ?",lastid)
+ end
+ query = query.order("#{Activity.table_name}.id desc")
+ @list = query_activities(query);
+
+ render :action=>'user_course_activities',:layout=>nil
+ end
+
+ def user_feedback4show
+ query = @user.journals_for_messages
+ if params[:lastid]!=nil && !params[:lastid].empty?
+ query = query.where("#{JournalsForMessage.table_name}.id < ?",params[:lastid])
+ end
+ logger.info('xxoo')
+ @list = query.order("#{JournalsForMessage.table_name}.id desc").limit(3).all
+ logger.info('aavv')
+ render :layout=>nil,:locals => {:feed_list=>@list}
+ end
+
def show
+ render :layout=>'base_users_new'
+ end
+
+ def show_old
pre_count = 10 #limit
# Time 2015-02-04 11:46:34
# Author lizanle
@@ -430,9 +667,9 @@ class UsersController < ApplicationController
end
when "2"
message = []
- if @user == User.current
+ if @user == User.current
message = JournalsForMessage.reference_message(@user.id)
- message += Journal.reference_message(@user.id)
+ message += Journal.reference_message(@user.id)
end
@activity_count = message.size
@info_pages = Paginator.new @activity_count, pre_count, params['page']
@@ -463,7 +700,7 @@ class UsersController < ApplicationController
p_ids = []
Project.where(id: project_ids).each do |x|
p_ids << x.id unless x.visible?(User.current)
- end
+ end
ids = []
ids << Issue.where(id: act_ids, project_id: p_ids).map{|x| x.id}
@@ -482,7 +719,7 @@ class UsersController < ApplicationController
p_ids = []
Project.where(id: project_ids).each do |x|
p_ids << x.id unless x.visible?(User.current)
- end
+ end
ids << Journal.where(id: act_ids, journalized_id: p_ids, journalized_type: 'Project').map{|x| x.id}
#News
@@ -491,16 +728,16 @@ class UsersController < ApplicationController
p_ids = []
Project.where(id: project_ids).each do |x|
p_ids << x.id unless x.visible?(User.current)
- end
+ end
ids << News.where(id: act_ids, project_id: p_ids).map{|x| x.id}
project_ids = News.where(id: act_ids).select('distinct course_id').map{|x| x.course_id}
c_ids = []
Course.where(id: project_ids).each do |x|
c_ids << x.id unless x.is_public !=0 && User.current.member_of_course?(x)
- end
+ end
ids << News.where(id: act_ids, course_id: p_ids).map{|x| x.id}
-
+
#Message
act_ids = activity.where(act_type: 'Message').select('act_id').map{|x| x.act_id}
board_ids = Message.where(id: act_ids).select('distinct board_id').map{|x| x.board_id}
@@ -508,14 +745,14 @@ class UsersController < ApplicationController
p_ids = []
Project.where(id: project_ids).each do |x|
p_ids << x.id unless x.visible?(User.current)
- end
+ end
ids << Message.where(id: act_ids, board_id: p_ids).map{|x| x.id}
-
+
project_ids = Board.where(id: board_ids).select('distinct course_id').map{|x| x.course_id}
c_ids = []
Course.where(id: project_ids).each do |x|
c_ids << x.id unless x.is_public !=0 && User.current.member_of_course?(x)
- end
+ end
ids << Message.where(id: act_ids, board_id: c_ids).map{|x| x.id}
logger.debug "filter ids #{ids}"
@@ -533,33 +770,33 @@ class UsersController < ApplicationController
# (e.act_type == "Message" && !e.act.board.nil? && ((!e.act.board.project.nil? && !e.act.board.project.visible?(User.current)) || (!e.act.board.course.nil? && e.act.board.course.is_public == 0 && !User.current.member_of_course?(e.act.board.course))))))
# }
#
-
+
@activity_count = activity.count
@activity_pages = Paginator.new @activity_count, pre_count, params['page']
@activity = activity.slice(@activity_pages.offset,@activity_pages.per_page)
@state = 0
end
-
+
if params[:user].present?
-
+
user_temp = User.find_by_sql("select id from users where concat(lastname,firstname) like '%#{params[:user]}%' or lastname like '%#{params[:user]}%'")
-
+
if user_temp.size > 1
- activity = Activity.where('user_id in (?)', user_temp).where('user_id in (?)', watcher).order('id desc')
+ activity = Activity.where('user_id in (?)', user_temp).where('user_id in (?)', watcher).order('id desc')
elsif user_temp.size == 1
- activity = Activity.where('user_id = ?', user_temp).where('user_id in (?)', watcher).order('id desc')
+ activity = Activity.where('user_id = ?', user_temp).where('user_id in (?)', watcher).order('id desc')
else
activity = Activity.where("1 = 0")
end
@offset, @limit = api_offset_and_limit({:limit => 10})
- @activity_count = activity.count
+ @activity_count = activity.count
@activity_pages = Paginator.new @activity_count, @limit, params['page']
@offset ||= @activity_pages.offset
- @activity = activity.offset(@offset).limit(@limit)
+ @activity = activity.offset(@offset).limit(@limit)
@state = 0
end
-
-
+
+
#Modified by nie
unless User.current.admin?
if !@user.active? #|| (@user != User.current && @memberships.empty? && events.empty?)
@@ -581,17 +818,17 @@ class UsersController < ApplicationController
def info
message = []
- if @user == User.current
+ if @user == User.current
message = JournalsForMessage.reference_message(@user.id)
- message += Journal.reference_message(@user.id)
+ message += Journal.reference_message(@user.id)
end
@offset, @limit = api_offset_and_limit({:limit => 10})
@info_count = message.size
@info_pages = Paginator.new @info_count, @limit, params['page']
@offset ||= @info_pages.offset
-
+
messages = message.sort {|x,y| y.created_on <=> x.created_on }
-
+
@message = messages[@offset, @limit]
unless User.current.admin?
@@ -607,7 +844,7 @@ class UsersController < ApplicationController
end
end
#### end
-
+
def new
@user = User.new(:language => Setting.default_language, :mail_notification => Setting.default_notification_option)
@@ -665,7 +902,7 @@ class UsersController < ApplicationController
@auth_sources = AuthSource.all
@membership ||= Member.new
end
-
+
def watch_projects
@watch_projects = Project.joins(:watchers).where("project_type <>? and watchable_type = ? and `watchers`.user_id = ?", '1','Project', @user.id)
@state = 1
@@ -835,42 +1072,66 @@ class UsersController < ApplicationController
end
end
###add by huang
- def user_watchlist
+ def user_watchlist
+ limit = 10;
+ query = User.watched_by(@user.id);
+ @obj_count = query.count();
+ @obj_pages = Paginator.new @obj_count,limit,params['page']
+ @list = query.order("#{Watcher.table_name}.id desc").limit(limit).offset(@obj_pages.offset).all();
+
+ render :template=>'users/user_fanslist',:layout=>'base_users_new'
end
###add by huang
- def user_fanslist
-
+ def user_fanslist
+ limit = 10;
+ query = @user.watcher_users;
+ @obj_count = query.count();
+ @obj_pages = Paginator.new @obj_count,limit,params['page']
+ @list = query.order("#{Watcher.table_name}.id desc").limit(limit).offset(@obj_pages.offset).all();
+ @action = 'fans'
+ render :layout=>'base_users_new'
+ end
+ def user_visitorlist
+ limit = 10;
+ #query = @user.watcher_users;
+ query = User.joins("join visitors v on #{User.table_name}.id=v.user_id")
+ query = query.where("v.master_id=?",@user.id)
+ @obj_count = query.count();
+ @obj_pages = Paginator.new @obj_count,limit,params['page']
+ @list = query.order("v.updated_on desc").limit(limit).offset(@obj_pages.offset).all();
+ @action = 'visitor'
+ render :template=>'users/user_fanslist',:layout=>'base_users_new'
end
-
+
#william
def update_extensions(user_extensions)
user_extensions = params[:user_extensions]
unless user_extensions.nil?
user_extensions = UserExtensions.find_by_id(user_extensions.user_id)
-
+
# user_extensions.
end
end
# added by bai
def topic_score_index
-
+
end
-
+
def project_score_index
-
+
end
-
+
def activity_score_index
-
+
end
-
+
def influence_score_index
-
+
end
-
+
def score_index
-
+
end
# end
def topic_new_score_index
@@ -916,7 +1177,7 @@ class UsersController < ApplicationController
# 必填自己的工作单位,其实就是学校
def auth_user_extension
- if @user == User.current && @user.user_extensions.nil?
+ if @user == User.current && @user.user_extensions.nil?
flash[:error] = l(:error_complete_occupation)
redirect_to my_account_url
end
@@ -944,4 +1205,20 @@ class UsersController < ApplicationController
render_404
end
end
+
+ def recorded_visitor
+ if(User.current.logged? && User.current != @user)
+ #impl = Visitor.where('user_id=? and master_id=?',User.current.id,@user.id).find;
+ # impl = Visitor.find_by_sql('user_id=? and master_id=?',[User.current.id,@user.id]);
+ impl = Visitor.find_by_user_id_and_master_id(User.current.id,@user.id);
+ if(impl.nil?)
+ impl = Visitor.new
+ impl.user_id = User.current.id
+ impl.master_id = @user.id
+ else
+ impl.updated_on = Time.now
+ end
+ impl.save
+ end
+ end
end
diff --git a/app/controllers/watchers_controller.rb b/app/controllers/watchers_controller.rb
index f6d01a03d..35e1d5ba4 100644
--- a/app/controllers/watchers_controller.rb
+++ b/app/controllers/watchers_controller.rb
@@ -16,12 +16,15 @@
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
class WatchersController < ApplicationController
before_filter :require_login#, :find_watchables, :only => [:watch, :unwatch]
+
+ helper :users
+
def watch
s = WatchesService.new
watchables = s.watch params.merge(:current_user_id => User.current.id)
respond_to do |format|
format.html { redirect_to_referer_or {render :text => (true ? 'Watcher added.' : 'Watcher removed.'), :layout => true}}
- format.js { render :partial => 'set_watcher', :locals => {:user => User.current, :watched => watchables} }
+ format.js { render :partial => 'set_watcher', :locals => {:user => User.current, :watched => watchables,:params=>params,:opt=>'add'} }
end
rescue Exception => e
if e.message == "404"
@@ -37,7 +40,7 @@ class WatchersController < ApplicationController
watchables = s.unwatch params.merge(:current_user_id => User.current.id)
respond_to do |format|
format.html { redirect_to_referer_or {render :text => (false ? 'Watcher added.' : 'Watcher removed.'), :layout => true}}
- format.js { render :partial => 'set_watcher', :locals => {:user => User.current, :watched => watchables} }
+ format.js { render :partial => 'set_watcher', :locals => {:user => User.current, :watched => watchables,:params=>params,:opt=>'delete'} }
end
rescue Exception => e
if e.message == "404"
diff --git a/app/controllers/words_controller.rb b/app/controllers/words_controller.rb
index cc6c4f47e..4ff01d36c 100644
--- a/app/controllers/words_controller.rb
+++ b/app/controllers/words_controller.rb
@@ -13,11 +13,12 @@ class WordsController < ApplicationController
end
refer_user_id = params[:new_form][:reference_user_id].to_i
- @user.add_jour(User.current, message, refer_user_id)
+ list = @user.add_jour(User.current, message, refer_user_id)
unless refer_user_id == 0 || refer_user_id == User.current.id
- User.find(refer_user_id).add_jour(User.current, message, refer_user_id)
+ list = User.find(refer_user_id).add_jour(User.current, message, refer_user_id)
end
- @user.count_new_jour
+ @jour = list.last
+ # @user.count_new_jour
# if a_message.size > 5
# @message = a_message[-5, 5]
# else
@@ -26,8 +27,8 @@ class WordsController < ApplicationController
# @message_count = a_message.count
end
end
- @jours = @user.journals_for_messages.where('m_parent_id IS NULL').reverse
- @jour = paginateHelper @jours,10
+ # @jours = @user.journals_for_messages.where('m_parent_id IS NULL').reverse
+ # @jour = paginateHelper @jours,10
respond_to do |format|
# format.html { redirect_to_referer_or {render :text => 'Watcher added.', :layout => true}}
diff --git a/app/helpers/activities_helper.rb b/app/helpers/activities_helper.rb
index ede2ed78a..cf8679da6 100644
--- a/app/helpers/activities_helper.rb
+++ b/app/helpers/activities_helper.rb
@@ -42,4 +42,30 @@ module ActivitiesHelper
end
sorted_events
end
+
+ def get_container_type(activity)
+ #问卷
+ if activity.act_type == 'Poll'
+ return ['Course',activity.act.polls_group_id]
+ end
+ #注册
+ if activity.act_type == 'Principal'
+ return ['Principal',activity.act.id]
+ end
+ #留言
+ if activity.act_type == 'JournalsForMessage'
+ return [activity.act.jour_type,activity.act.jour_id]
+ end
+
+ # HomeworkCommon Issue Journal Message News
+ if activity.act.respond_to?('course') && activity.act.course
+ return ['Course',activity.act.course.id]
+ end
+ if activity.act.respond_to?('project') && activity.act.project
+ return ['Project',activity.act.project.id]
+ end
+
+ # Contest Contestnotification
+ return ['Unknow',0]
+ end
end
diff --git a/app/helpers/users_helper.rb b/app/helpers/users_helper.rb
index af2d5abc4..1926be0e8 100644
--- a/app/helpers/users_helper.rb
+++ b/app/helpers/users_helper.rb
@@ -303,4 +303,237 @@ module UsersHelper
end
end
end
+
+ def get_watcher_users(obj)
+ count = User.watched_by(obj.id).count
+ if count == 0
+ return [0,[]]
+ end
+ list = User.watched_by(obj.id).order("#{Watcher.table_name}.id desc").limit(10).all
+ return [count,list];
+ end
+
+ def get_fans_users(obj)
+ count = obj.watcher_users.count
+ if count == 0
+ return [0,[]]
+ end
+ list = obj.watcher_users.order("#{Watcher.table_name}.id desc").limit(10).all
+ return [count,list];
+ end
+ def get_visitor_users(obj)
+ query = Visitor.where("master_id=?",obj.id)
+ count = query.count
+ if count == 0
+ return [0,[]]
+ end
+ list = query.order("updated_on desc").limit(10).all
+ return [count,list];
+ end
+
+ def get_create_course_count(user)
+ return Course.where("tea_id = ?",user.id).count()
+ end
+ def get_join_course_count(user)
+ return user.coursememberships.count() - get_create_course_count(user)
+ end
+ def get_homework_commons_count(user)
+ return HomeworkCommon.where("user_id = ?",user.id).count()
+ end
+ def get_projectandcourse_attachment_count(user)
+ return Attachment.where("author_id = ? and container_type in ('Project','Course')",user.id).count()
+ end
+ def get_create_project_count(user)
+ return Project.where("user_id = ? and project_type = ?",user.id,Project::ProjectType_project).count()
+ end
+ def get_join_project_count(user)
+ return user.memberships.count(conditions: "projects.project_type = #{Project::ProjectType_project}") - get_create_project_count(user)
+ end
+ def get_create_issue_count(user)
+ return Issue.where("author_id = ?",user.id).count()
+ end
+ def get_resolve_issue_count(user)
+ return Issue.where("assigned_to_id = ? and status_id=3",user.id).count()
+ end
+ def get_anonymous_evaluation_count(user)
+ return StudentWorksScore.where("user_id = ? and reviewer_role=3",user.id).count()
+ end
+
+
+ # def query_activities(query,type)
+ # query_rec_count = 8
+ # # query = query.where("act_type='JournalsForMessage'")
+ # #query = query.where("act_type not in (?)", ['JournalsForMessage','Message','HomeworkCommon','News','Issue','Journal','Poll'])
+ # list = query.order("id desc").limit(query_rec_count).all
+ #
+ # result = [];
+ # for item in list
+ # container = get_activity_container(item,type)
+ # if( activity_is_show(item,container) )
+ # result << { :item=>item,:e=>container }
+ # end
+ # end
+ # return [lastid,result]
+ # end
+ # def get_activity_container activity,type
+ # e = nil;
+ # if type == 'Project'
+ # if activity.act_type == 'Poll'
+ # # 项目没有问卷
+ # # e = Project.find_by_id(activity.act.polls_group_id)
+ # else
+ # e = activity.act.project if activity.act.respond_to?('project')
+ # end
+ # end
+ # if type == 'Course'
+ # if activity.act_type == 'Poll'
+ # e = Course.find_by_id(activity.act.polls_group_id)
+ # else
+ # e = activity.act.course if activity.act.respond_to?('course')
+ # end
+ # end
+ #
+ # return e;
+ # end
+ def query_activities(query)
+ list = query.limit(8).all
+ result = [];
+ for item in list
+ container = get_activity_container(item)
+ result << { :item=>item,:e=>container }
+ end
+ return result
+ end
+ def get_activity_container activity
+ return activity.activity_container
+ # if type == 'Project'
+ # return activity.act.project if activity.act.respond_to?('project')
+ # end
+ # if type == 'Course'
+ # if activity.act_type == 'Poll'
+ # return Course.find_by_id(activity.act.polls_group_id)
+ # end
+ # return activity.act.course if activity.act.respond_to?('course')
+ # end
+ # return nil;
+ end
+
+ # def activity_is_show(activity,e)
+ # if(!e)
+ # return false
+ # end
+ #
+ # if activity.user_id == User.current.id
+ # return true
+ # end
+ # if( e.visible? )
+ # return true
+ # end
+ # return false
+ # end
+ def get_activity_act_showname_htmlclear(activity)
+ str = get_activity_act_showname(activity)
+ str = str.gsub(/<.*>/,'')
+ str = str.lstrip.rstrip
+ if str == ''
+ str = 'RE:'
+ end
+ return str.html_safe
+ end
+ def get_activity_act_showname(activity)
+ case activity.act_type
+ when "HomeworkCommon"
+ return activity.act.name
+ when "Issue"
+ return activity.act.subject
+ when "Journal"
+ return details_to_strings(activity.act.details,true).to_s
+ when "JournalsForMessage"
+ return activity.act.notes
+ when "Message"
+ return activity.act.subject
+ when "News"
+ return activity.act.title
+ when "Poll"
+ return activity.act.polls_name
+ when "Contest"
+ return ''
+ when "Contestnotification"
+ return ''
+ when "Principal"
+ return ''
+ else
+ return activity.act_type
+ end
+ end
+ def get_activity_act_createtime(activity)
+ case activity.act_type
+ when "HomeworkCommon"
+ return activity.act.created_at
+ when "Poll"
+ return activity.act.created_at
+ else
+ return activity.act.created_on
+ end
+ end
+ def get_activity_container_url e
+ if !e.visible?
+ return "javascript:;"
+ end
+
+ if e.class.to_s == 'Course'
+ return url_for(:controller => 'courses', :action=>"show", :id=>e.id, :host=>Setting.host_course)
+ end
+ return url_for(:controller => 'projects', :action=>"show", :id=>e.id, :host=>Setting.host_name)
+ end
+ def get_activity_url(activity,e)
+ if !e.visible?
+ return "javascript:;"
+ end
+
+ case activity.act_type
+ # when "Contest"
+ # when "Contestnotification"
+ # when "Principal"
+ when "HomeworkCommon"
+ return homework_common_index_path( :course=>e.id )
+ when "Issue"
+ return issue_path(activity.act.id)
+ when "Journal"
+ return issue_path( activity.act.journalized_id )
+ when "JournalsForMessage"
+ return e.class.to_s == 'Course' ? course_feedback_path(e) : project_feedback_path(e)
+ when "Message"
+ return e.class.to_s == 'Course' ? course_boards_path(e) : project_boards_path(e)
+ when "News"
+ return news_path(activity.act)
+ #return e.class.to_s == 'Course' ? course_news_index_path(e) : project_news_index_path(e)
+ when "Poll"
+ return poll_index_path( :polls_group_id=>activity.act.polls_group_id, :polls_type=>e.class.to_s )
+ else
+ return 'javascript:;'
+ end
+ end
+ def get_activity_opt(activity,e)
+ case activity.act_type
+ when "HomeworkCommon"
+ return '创建了作业'
+ when "News"
+ return e.class.to_s == 'Course' ? '发布了通知' : '添加了新闻'
+ when "Issue"
+ return '发表了问题'
+ when "Journal"
+ return '回复了问题'
+ when "JournalsForMessage"
+ return e.class.to_s == 'Course' ? '发表了留言' : '提交了反馈'
+ #return ( activity.act.reply_id == nil || activity.act.reply_id == 0 ) ? '' : ''
+ when "Message"
+ return ( activity.act.parent_id == nil || activity.act.parent_id == '' ) ? '发布了帖子' : '回复了帖子'
+ when "Poll"
+ return '发布了问卷'
+ else
+ return '有了新动态'
+ end
+ end
+
end
diff --git a/app/models/activity.rb b/app/models/activity.rb
index 5ec778641..679cb9599 100644
--- a/app/models/activity.rb
+++ b/app/models/activity.rb
@@ -2,9 +2,20 @@ class Activity < ActiveRecord::Base
attr_accessible :act_id, :act_type, :user_id
belongs_to :act, :polymorphic => true
belongs_to :user
+ belongs_to :activity_container, polymorphic: true
validates :act_id, presence: true
validates :act_type, presence: true
validates :user_id, presence: true
include Trustie::Cache::ClearCourseEvent
+
+ before_create :set_container_type_val
+
+ #helper :activities
+ include ActivitiesHelper
+ def set_container_type_val
+ container_type,container_id =get_container_type(self)
+ self.activity_container_type = container_type
+ self.activity_container_id = container_id
+ end
end
diff --git a/app/models/visitor.rb b/app/models/visitor.rb
new file mode 100644
index 000000000..6563fde16
--- /dev/null
+++ b/app/models/visitor.rb
@@ -0,0 +1,3 @@
+class Visitor < ActiveRecord::Base
+ belongs_to :user
+end
\ No newline at end of file
diff --git a/app/views/avatar/upload.js.erb b/app/views/avatar/upload.js.erb
index 1fa90c5a3..41cf3ab77 100644
--- a/app/views/avatar/upload.js.erb
+++ b/app/views/avatar/upload.js.erb
@@ -1,4 +1,8 @@
+<% if @source_type=='User' %>
+var imgSpan = $("img[nhname='avatar_image']");
+imgSpan.attr({"src":'<%= "#{@urlfile.to_s}?#{Time.now.to_i}" %>'});
+<% else %>
var imgSpan = jQuery('#avatar_image');
imgSpan.attr({"src":'<%= "#{@urlfile.to_s}?#{Time.now.to_i}" %>'});
-
+<% end %>
\ No newline at end of file
diff --git a/app/views/courses/finishcourse.js.erb b/app/views/courses/finishcourse.js.erb
index 2399062fd..0ca89aa19 100644
--- a/app/views/courses/finishcourse.js.erb
+++ b/app/views/courses/finishcourse.js.erb
@@ -1,8 +1,8 @@
<% if @save_flag %>
- $('#finish_course_<%=@course.id%>').replaceWith("<%= escape_javascript(set_course_time(@course_prefs))%>");
+$('#finish_course_<%=@course.id%>').replaceWith("<%= escape_javascript(set_course_time(@course_prefs))%>");
+var html = "<%= escape_javascript( render( :partial => 'users/course_form', :locals => {:item => @course_prefs} ) )%>";
+$('#nh_course_<%=@course.id%>').replaceWith(html);
// alert("关闭成功");
<% else %>
- alert('权限不足,设置失败,请在论坛提交问题,等待管理员处理。');
-<% end %>
-
-
+alert('权限不足,设置失败,请在论坛提交问题,等待管理员处理。');
+<% end %>
\ No newline at end of file
diff --git a/app/views/courses/join_private_courses.js.erb b/app/views/courses/join_private_courses.js.erb
index fecfb13cd..d1bce7d86 100644
--- a/app/views/courses/join_private_courses.js.erb
+++ b/app/views/courses/join_private_courses.js.erb
@@ -1,7 +1,8 @@
$('#ajax-modal').html('<%= escape_javascript(render :partial => 'join_private_course') %>');
showModal('ajax-modal', '540px');
$('#ajax-modal').css('height','330px');
-$('#ajax-modal').siblings().remove();
+//$('#ajax-modal').siblings().remove();
+$('#ajax-modal').siblings().hide();
$('#ajax-modal').before("" +
"");
$('#ajax-modal').parent().removeClass("alert_praise");
diff --git a/app/views/layouts/_base_footer_new.html.erb b/app/views/layouts/_base_footer_new.html.erb
new file mode 100644
index 000000000..b4856d2af
--- /dev/null
+++ b/app/views/layouts/_base_footer_new.html.erb
@@ -0,0 +1,13 @@
+
+
+
<%= @organizer.description.html_safe %>
+
+
+
+ <% @companies && @companies.each do |company| %>
+
+
+
+ <% end %>
+
+
\ No newline at end of file
diff --git a/app/views/layouts/_base_header_new.html.erb b/app/views/layouts/_base_header_new.html.erb
new file mode 100644
index 000000000..63e221cca
--- /dev/null
+++ b/app/views/layouts/_base_header_new.html.erb
@@ -0,0 +1,76 @@
+