diff --git a/app/controllers/news_controller.rb b/app/controllers/news_controller.rb index 9437889b2..e564bc940 100644 --- a/app/controllers/news_controller.rb +++ b/app/controllers/news_controller.rb @@ -148,7 +148,8 @@ class NewsController < ApplicationController flash[:notice] = l(:notice_successful_update) redirect_to news_path(@news) else - render :action => 'edit' + #flash[:error] = l(:notice_successful_update) + redirect_to news_path(@news) end end diff --git a/app/controllers/projects_controller.rb b/app/controllers/projects_controller.rb index 3fea454de..ee42c2c6a 100644 --- a/app/controllers/projects_controller.rb +++ b/app/controllers/projects_controller.rb @@ -407,7 +407,7 @@ class ProjectsController < ApplicationController @page = @page.to_i # Find the page of the requested reply @jours = @project.journals_for_messages.where('m_parent_id IS NULL').order('created_on DESC') - @limit = 3 + @limit = 10 offset = @jours.count(:conditions => ["#{JournalsForMessage.table_name}.id > ?", params[:r].to_i]) page = 1 + offset / @limit @@ -697,8 +697,8 @@ class ProjectsController < ApplicationController else # @project.project_type == Project::ProjectType_project roles = Role.find_all_givable @subPage_title = l :label_member_list - @members = @project.member_principals.includes(:roles, :principal).all - @members = sort_project_members(@project, @members) + @members = @project.member_principals.includes(:roles, :principal).joins("LEFT JOIN #{OptionNumber.table_name} ON #{OptionNumber.table_name}.user_id = #{Member.table_name}.user_id and #{OptionNumber.table_name}.score_type = 2 AND #{Member.table_name}.project_id = #{OptionNumber.table_name}.project_id").order("#{OptionNumber.table_name}.total_score DESC").all + #@members = sort_project_members(@project, @members) @applied_members = appied_project_members(@project, @members) end @members = paginateHelper @members diff --git a/app/controllers/words_controller.rb b/app/controllers/words_controller.rb index e31bb2738..2d03b2112 100644 --- a/app/controllers/words_controller.rb +++ b/app/controllers/words_controller.rb @@ -99,7 +99,7 @@ class WordsController < ApplicationController @project = Project.find params[:project_id] # Find the page of the requested reply @jours = @project.journals_for_messages.where('m_parent_id IS NULL').order('created_on DESC') - @limit = 3 + @limit = 10 offset = @jours.count(:conditions => ["#{JournalsForMessage.table_name}.id > ?", params[:r].to_i]) page = 1 + offset / @limit diff --git a/app/helpers/courses_helper.rb b/app/helpers/courses_helper.rb index aad350d22..e08e50e80 100644 --- a/app/helpers/courses_helper.rb +++ b/app/helpers/courses_helper.rb @@ -441,7 +441,7 @@ module CoursesHelper def homework_user_of_homework homework,is_teacher homework_users = "" homework.users.each do |user| - homework_users = homework_users + (is_teacher ? user.realname : user.name) + homework_users = homework_users + (is_teacher ? (user.firstname + user.lastname) : user.login) if user != homework.users.last homework_users = homework_users + "、" end diff --git a/app/helpers/user_score_helper.rb b/app/helpers/user_score_helper.rb index 1353f9a1c..376f676b7 100644 --- a/app/helpers/user_score_helper.rb +++ b/app/helpers/user_score_helper.rb @@ -381,6 +381,46 @@ module UserScoreHelper result end + def get_option_num_by_id(user_id,type,project_id=nil) + if project_id.nil? + option_number = OptionNumber.where("user_id = '#{user_id}' and score_type = '#{type}'"); + else + option_number = OptionNumber.where("user_id = '#{user_id}' and score_type = '#{type}' and project_id = '#{project_id}'"); + end + + result = nil + if option_number.nil? || option_number.count == 0 + result = OptionNumber.new + result.user_id = user_id + result.memo = 0 + result.messages_for_issues = 0 + result.issues_status = 0 + result.replay_for_message = 0 + result.replay_for_memo = 0 + result.follow = 0 + result.tread = 0 + result.praise_by_one = 0 + result.praise_by_two = 0 + result.praise_by_three = 0 + result.tread_by_one = 0 + result.tread_by_two = 0 + result.tread_by_three = 0 + result.changeset = 0 + result.document = 0 + result.attachment = 0 + result.issue_done_ratio = 0 + result.post_issue = 0 + result.total_score = 0 + result.score_type =type + unless project_id.nil? + result.project_id = project_id + end + else + result = option_number.first + end + result + end + #更新分数 def update_score(option_number) option_number.total_score = collaboration(option_number) + influence(option_number) + skill(option_number) + active(option_number) @@ -418,11 +458,24 @@ module UserScoreHelper #发帖数 def memo_num(user,project=nil) if project.nil? - Message.includes(:author).joins(:board).where("#{Message.table_name}.parent_id IS NULL and #{Message.table_name}.author_id = '#{user.id}' and #{Board.table_name}.project_id != -1").all.count #+ Memo.includes(:author).where("parent_id IS NULL and author_id = '#{user.id}'").all.count - + #Message.includes(:author).joins(:board).where("#{Message.table_name}.parent_id IS NULL and #{Message.table_name}.author_id = '#{user.id}' and #{Board.table_name}.project_id != -1").all.count #+ Memo.includes(:author).where("parent_id IS NULL and author_id = '#{user.id}'").all.count + users = Message.find_by_sql("SELECT COUNT(*) as m_count FROM `messages` JOIN `boards` ON boards.project_id != -1 AND messages.board_id = boards.id +WHERE messages.parent_id IS NULL AND messages.author_id = #{user.id}") + result = 0 + users.each do |user| + result = user.m_count + end + result #user.messages.where("parent_id IS NULL").count else - Message.includes(:author).joins(:board).where("#{Message.table_name}.parent_id IS NULL and #{Message.table_name}.author_id = '#{user.id}' and #{Board.table_name}.project_id = #{project.id}").all.count + #Message.includes(:author).joins(:board).where("#{Message.table_name}.parent_id IS NULL and #{Message.table_name}.author_id = '#{user.id}' and #{Board.table_name}.project_id = #{project.id}").all.count + users = Message.find_by_sql("SELECT COUNT(*) as m_count FROM `messages` JOIN `boards` ON boards.project_id = '#{project.id}' AND messages.board_id = boards.id +WHERE messages.parent_id IS NULL AND messages.author_id = #{user.id}") + result = 0 + users.each do |user| + result = user.m_count + end + result end end @@ -448,9 +501,21 @@ FROM `users` where id = #{user.id}") def messges_for_issue_num(user,project=nil) if project.nil? - Journal.includes(:user).where("user_id = '#{user.id}' and notes is not null and notes != ''").all.count + #Journal.includes(:user).where("user_id = '#{user.id}' and notes is not null and notes != ''").all.count + users = Journal.find_by_sql("SELECT COUNT(*) as m_count FROM journals WHERE journals.user_id = #{user.id} AND journals.notes IS NOT NULL AND journals.notes != ''") + result = 0 + if users.count > 0 + result = users.first.m_count + end + result else - Journal.includes(:user).joins(:issue).where("#{Journal.table_name}.user_id = '#{user.id}' and #{Issue.table_name}.project_id = '#{project.id}' and #{Journal.table_name}.notes != '' and #{Journal.table_name}.notes is not null").all.count + #Journal.includes(:user).joins(:issue).where("#{Journal.table_name}.user_id = '#{user.id}' and #{Issue.table_name}.project_id = '#{project.id}' and #{Journal.table_name}.notes != '' and #{Journal.table_name}.notes is not null").all.count + users = Journal.find_by_sql("SELECT COUNT(*) as m_count FROM journals join issues on #{Journal.table_name}.journalized_type = 'Issue' and #{Journal.table_name}.journalized_id = #{Issue.table_name}.id WHERE journals.user_id = #{user.id} AND journals.notes IS NOT NULL AND journals.notes != ''and #{Issue.table_name}.project_id = '#{project.id}'") + result = 0 + if users.count > 0 + result = users.first.m_count + end + result end end @@ -471,9 +536,21 @@ FROM `users` where id = #{user.id}") def issues_status_num(user,project=nil) if project.nil? - Journal.joins(:details, :user).where("#{JournalDetail.table_name}.prop_key = 'status_id' and #{User.table_name}.id = '#{user.id}'").count + #Journal.joins(:details, :user).where("#{JournalDetail.table_name}.prop_key = 'status_id' and #{User.table_name}.id = '#{user.id}'").count + users = Journal.find_by_sql("SELECT COUNT(*) as m_count FROM journals JOIN journal_details on journals.id = journal_details.journal_id WHERE journal_details.prop_key = 'status_id' and journals.user_id = #{user.id}") + result = 0 + if users.count > 0 + result = users.first.m_count + end + result else - Journal.joins(:issue,:details,:user).where("#{Issue.table_name}.project_id = '#{project.id}' and #{JournalDetail.table_name}.prop_key = 'status_id' and #{User.table_name}.id = '#{user.id}'").count + #Journal.joins(:issue,:details,:user).where("#{Issue.table_name}.project_id = '#{project.id}' and #{JournalDetail.table_name}.prop_key = 'status_id' and #{User.table_name}.id = '#{user.id}'").count + users = Journal.find_by_sql("SELECT COUNT(*) as m_count FROM journals JOIN journal_details on journals.id = journal_details.journal_id JOIN issues ON issues.id = journals.journalized_id and journalized_type = 'Issue' WHERE journal_details.prop_key = 'status_id' and journals.user_id = #{user.id} and issues.project_id = '#{project.id}'") + result = 0 + if users.count > 0 + result = users.first.m_count + end + result end end @@ -481,10 +558,10 @@ FROM `users` where id = #{user.id}") def issues_status_score(user,project=nil) if project.nil? #Journal.joins(:details, :user).where("#{JournalDetail.table_name}.prop_key = 'status_id' and #{User.table_name}.id = '#{user.id}'").count - User.find_by_sql("SELECT users.id,(SELECT COUNT(*) FROM journals JOIN journal_details on journals.id = journal_details.journal_id WHERE journal_details.prop_key = 'status_id' and journals.user_id = users.id) AS m_score FROM users WHERE users.id = '#{user.id}'") + User.find_by_sql("SELECT users.id,(SELECT COUNT(*) FROM journals JOIN journal_details on journals.id = journal_details.journal_id WHERE journal_details.prop_key = 'status_id' and journals.user_id = users.id) AS m_count FROM users WHERE users.id = '#{user.id}'") else #Journal.joins(:issue,:details,:user).where("#{Issue.table_name}.project_id = '#{project.id}' and #{JournalDetail.table_name}.prop_key = 'status_id' and #{User.table_name}.id = '#{user.id}'").count - User.find_by_sql("SELECT users.id,(SELECT COUNT(*) FROM journals JOIN journal_details on journals.id = journal_details.journal_id JOIN issues ON issues.id = journals.journalized_id and journalized_type = 'Issue' WHERE journal_details.prop_key = 'status_id' and journals.user_id = users.id and issues.project_id = '#{project.id}') AS m_score FROM users WHERE users.id = '#{user.id}'") + User.find_by_sql("SELECT users.id,(SELECT COUNT(*) FROM journals JOIN journal_details on journals.id = journal_details.journal_id JOIN issues ON issues.id = journals.journalized_id and journalized_type = 'Issue' WHERE journal_details.prop_key = 'status_id' and journals.user_id = users.id and issues.project_id = '#{project.id}') AS m_count FROM users WHERE users.id = '#{user.id}'") end end @@ -497,9 +574,21 @@ FROM `users` where id = #{user.id}") def replay_for_message_num(user,project=nil) if project.nil? - JournalsForMessage.includes(:user).where("m_parent_id IS NOT NULL and user_id = #{user.id} and jour_type = 'Project'").count + #JournalsForMessage.includes(:user).where("m_parent_id IS NOT NULL and user_id = #{user.id} and jour_type = 'Project'").count + users = JournalsForMessage.find_by_sql("SELECT COUNT(*) as m_count From #{JournalsForMessage.table_name} WHERE m_parent_id IS NOT NULL and user_id = #{user.id} and jour_type = 'Project'") + result = 0 + if users.count > 0 + result = users.first.m_count + end + result else - JournalsForMessage.includes(:user).where("m_parent_id IS NOT NULL and user_id = #{user.id} and jour_type = 'Project' and jour_id = '#{project.id}'").count + #JournalsForMessage.includes(:user).where("m_parent_id IS NOT NULL and user_id = #{user.id} and jour_type = 'Project' and jour_id = '#{project.id}'").count + users = JournalsForMessage.find_by_sql("SELECT COUNT(*) as m_count From #{JournalsForMessage.table_name} WHERE m_parent_id IS NOT NULL and user_id = #{user.id} and jour_type = 'Project' and jour_id = '#{project.id}'") + result = 0 + if users.count > 0 + result = users.first.m_count + end + result end end @@ -508,7 +597,7 @@ FROM `users` where id = #{user.id}") if project.nil? User.find_by_sql("SELECT users.id,(SELECT COUNT(*) From journals_for_messages WHERE m_parent_id IS NOT NULL and user_id = users.id and jour_type = 'Project') as m_score FROM users WHERE users.id = '#{user.id}'") else - User.find_by_sql("SELECT users.id,(SELECT COUNT(*) From journals_for_messages WHERE m_parent_id IS NOT NULL and user_id = users.id and jour_type = 'Project' and jour_id = '#{project.id}') as m_score FROM users WHERE users.id = '#{user.id}'") + User.find_by_sql("SELECT users.id,(SELECT COUNT(*) From journals_for_messages WHERE m_parent_id IS NOT NULL and user_id = users.id and jour_type = 'Project' and jour_id = '#{project.id}') as m_score FROM users WHERE users.id = '#{user.id}'") end end @@ -521,9 +610,21 @@ FROM `users` where id = #{user.id}") def replay_for_memo_num(user,project=nil) if project.nil? - Message.includes(:author).joins(:board).where("#{Message.table_name}.parent_id IS NOT NULL and #{Message.table_name}.author_id = '#{user.id}' and #{Board.table_name}.project_id != -1").all.count + #Message.includes(:author).joins(:board).where("#{Message.table_name}.parent_id IS NOT NULL and #{Message.table_name}.author_id = '#{user.id}' and #{Board.table_name}.project_id != -1").all.count + users = Message.find_by_sql("SELECT COUNT(*) as m_count FROM messages JOIN boards on messages.board_id = boards.id WHERE messages.parent_id IS NOT NULL AND messages.author_id = #{user.id} AND boards.project_id != -1") + result = 0 + if users.count > 0 + result = users.first.m_count + end + result else - Message.includes(:author).joins(:board).where("#{Message.table_name}.parent_id IS NOT NULL and #{Message.table_name}.author_id = '#{user.id}' and #{Board.table_name}.project_id = #{project.id}").all.count + #Message.includes(:author).joins(:board).where("#{Message.table_name}.parent_id IS NOT NULL and #{Message.table_name}.author_id = '#{user.id}' and #{Board.table_name}.project_id = #{project.id}").all.count + users = Message.find_by_sql("SELECT COUNT(*) as m_count FROM messages JOIN boards on messages.board_id = boards.id WHERE messages.parent_id IS NOT NULL AND messages.author_id = #{user.id} AND boards.project_id = #{project.id}") + result = 0 + if users.count > 0 + result = users.first.m_count + end + result end end @@ -538,16 +639,22 @@ FROM `users` where id = #{user.id}") #更新被关注的人数 def update_follow(user,type) option_number = get_option_number(user,type) - option_number.follow = Watcher.includes(:watchable).where("watchable_type = 'Principal' and watchable_id = '#{user.id}'").count + option_number.follow = follow_num(user)#Watcher.includes(:watchable).where("watchable_type = 'Principal' and watchable_id = '#{user.id}'").count update_score(option_number) end def follow_num(user) - Watcher.includes(:watchable).where("watchable_type = 'Principal' and watchable_id = '#{user.id}'").count + #Watcher.includes(:watchable).where("watchable_type = 'Principal' and watchable_id = '#{user.id}'").count + users = Watcher.find_by_sql("SELECT COUNT(*) as m_count FROM #{Watcher.table_name} WHERE watchable_type = 'Principal' and watchable_id = #{user.id}") + result = 0 + if users.count > 0 + result = users.first.m_count + end + result end def follow_score(user) - User.find_by_sql("SELECT users.id, (SELECT COUNT(*) * 2 FROM #{Watcher.table_name} WHERE watchable_type = 'Principal' and watchable_id = '#{user.id}') FROM users WHERE users.id = '#{user.id}'") + User.find_by_sql("SELECT users.id, (SELECT COUNT(*) * 2 FROM #{Watcher.table_name} WHERE watchable_type = 'Principal' and watchable_id = users.id) FROM users WHERE users.id = '#{user.id}'") end #更新帖子踩各项数量 @@ -689,9 +796,21 @@ FROM `users` where id = #{user.id}") def changeset_num(user,project=nil) if project.nil? - Changeset.includes(:user).where("user_id = '#{user.id}'").all.count + #Changeset.includes(:user).where("user_id = '#{user.id}'").all.count + users = Changeset.find_by_sql("SELECT COUNT(*) as m_count FROM #{Changeset.table_name} WHERE user_id = #{user.id}") + result = 0 + if users.count > 0 + result = users.first.m_count + end + result else - Changeset.includes(:user).joins(:repository).where("#{Changeset.table_name}.user_id = '#{user.id}' and #{Repository.table_name}.project_id = #{project.id}").all.count + #Changeset.includes(:user).joins(:repository).where("#{Changeset.table_name}.user_id = '#{user.id}' and #{Repository.table_name}.project_id = #{project.id}").all.count + users = Changeset.find_by_sql("SELECT COUNT(*) as m_count FROM #{Changeset.table_name} JOIN #{Repository.table_name} ON #{Changeset.table_name}.repository_id = #{Repository.table_name}.id WHERE #{Changeset.table_name}.user_id = #{user.id} and #{Repository.table_name}.project_id = #{project.id}") + result = 0 + if users.count > 0 + result = users.first.m_count + end + result end end @@ -705,9 +824,21 @@ FROM `users` where id = #{user.id}") def document_num(user,project=nil) if project.nil? - Document.includes(:user).where("user_id = '#{user.id}'").all.count + #Document.includes(:user).where("user_id = '#{user.id}'").all.count + users = Document.find_by_sql("SELECT COUNT(*) as m_count FROM #{Document.table_name} WHERE #{Document.table_name}.user_id = #{user.id}") + result = 0 + if users.count > 0 + result = users.first.m_count + end + result else - Document.includes(:user,:project).where("user_id = '#{user.id}' and project_id = '#{project.id}'").all.count + #Document.includes(:user,:project).where("user_id = '#{user.id}' and project_id = '#{project.id}'").all.count + users = Document.find_by_sql("SELECT COUNT(*) as m_count FROM #{Document.table_name} WHERE #{Document.table_name}.user_id = #{user.id} and #{Document.table_name}.project_id = '#{project.id}'") + result = 0 + if users.count > 0 + result = users.first.m_count + end + result end end @@ -721,9 +852,21 @@ FROM `users` where id = #{user.id}") def attachment_num(user,project=nil) if project.nil? - Attachment.includes(:author,:container).where("author_id = '#{user.id}' and container_type = 'Project'").all.count + #Attachment.includes(:author,:container).where("author_id = '#{user.id}' and container_type = 'Project'").all.count + users = Attachment.find_by_sql("SELECT COUNT(*) as m_count FROM #{Attachment.table_name} WHERE author_id = '#{user.id}' and container_type = 'Project'") + result = 0 + if users.count > 0 + result = users.first.m_count + end + result else - Attachment.includes(:author,:container).where("author_id = '#{user.id}' and container_type = 'Project' and container_id = #{project.id}").all.count + #Attachment.includes(:author,:container).where("author_id = '#{user.id}' and container_type = 'Project' and container_id = #{project.id}").all.count + users = Attachment.find_by_sql("SELECT COUNT(*) as m_count FROM #{Attachment.table_name} WHERE author_id = '#{user.id}' and container_type = 'Project' and container_id = #{project.id}") + result = 0 + if users.count > 0 + result = users.first.m_coumt + end + result end end @@ -736,9 +879,21 @@ FROM `users` where id = #{user.id}") def issue_done_ratio_num(user,project=nil) if project.nil? - Journal.joins(:details, :user).where("#{JournalDetail.table_name}.prop_key = 'done_ratio' and #{User.table_name}.id = '#{user.id}'").count + #Journal.joins(:details, :user).where("#{JournalDetail.table_name}.prop_key = 'done_ratio' and #{User.table_name}.id = '#{user.id}'").count + users = Journal.find_by_sql("SELECT COUNT(*) as m_count FROM #{Journal.table_name} JOIN #{JournalDetail.table_name} ON #{JournalDetail.table_name}.journal_id = #{Journal.table_name}.id WHERE #{JournalDetail.table_name}.prop_key = 'done_ratio' and #{Journal.table_name}.user_id = #{user.id}") + result = 0 + if users.count > 0 + result = users.first.m_count + end + result else - Journal.joins(:issue,:details,:user).where("#{Issue.table_name}.project_id = '#{project.id}' and #{JournalDetail.table_name}.prop_key = 'done_ratio' and #{User.table_name}.id = '#{user.id}'").count + #Journal.joins(:issue,:details,:user).where("#{Issue.table_name}.project_id = '#{project.id}' and #{JournalDetail.table_name}.prop_key = 'done_ratio' and #{User.table_name}.id = '#{user.id}'").count + users = Journal.find_by_sql("SELECT COUNT(*) as m_count FROM #{Journal.table_name} JOIN #{JournalDetail.table_name} ON #{JournalDetail.table_name}.journal_id = #{Journal.table_name}.id JOIN issues ON issues.id = journals.journalized_id and journalized_type = 'Issue' WHERE #{JournalDetail.table_name}.prop_key = 'done_ratio' and #{Journal.table_name}.user_id = #{user.id} and #{Issue.table_name}.project_id = '#{project.id}'") + result = 0 + if users.count > 0 + result = users.first.m_count + end + result end end @@ -752,9 +907,21 @@ FROM `users` where id = #{user.id}") def post_issue_num(user,project=nil) if project.nil? - Issue.includes(:author).where("author_id = '#{user.id}'").all.count + #Issue.includes(:author).where("author_id = '#{user.id}'").all.count + users = Issue.find_by_sql("SELECT COUNT(*) as m_count FROM #{Issue.table_name} WHERE author_id = #{user.id}") + result = 0 + if users.count > 0 + result = users.first.m_count + end + result else - Issue.includes(:author).where("author_id = '#{user.id}' and project_id = '#{project.id}'").all.count + #Issue.includes(:author).where("author_id = '#{user.id}' and project_id = '#{project.id}'").all.count + users = Issue.find_by_sql("SELECT COUNT(*) as m_count FROM #{Issue.table_name} WHERE author_id = #{user.id} and project_id = '#{project.id}'") + result = 0 + if users.count > 0 + result = users.first.m_count + end + result end end @@ -778,6 +945,9 @@ FROM `users` where id = #{user.id}") update_attachment(user,type,project) update_issue_done_ratio(user,type,project) update_post_issue(user,type,project) + if project.nil? + update_follow(user,type) + end update_score(ooption_num) ooption_num end diff --git a/app/views/bids/_homework_list.html.erb b/app/views/bids/_homework_list.html.erb index 6797bc9eb..6d3a2adcc 100644 --- a/app/views/bids/_homework_list.html.erb +++ b/app/views/bids/_homework_list.html.erb @@ -28,13 +28,15 @@ + <% user_name = is_teacher ? (homework.user.firstname + homework.user.lastname) : homework.user.login %> - + - diff --git a/app/views/boards/_course_show.html.erb b/app/views/boards/_course_show.html.erb index 25d35d407..ca33b7516 100644 --- a/app/views/boards/_course_show.html.erb +++ b/app/views/boards/_course_show.html.erb @@ -63,7 +63,9 @@
<%= image_tag(url_to_avatar(homework.user), :class => "avatar")%><%= image_tag(url_to_avatar(homework.user), :class => "avatar")%>
+ +

- <%= link_to (is_teacher ? homework.user.realname : homework.user ), user_path(homework.user),{:style => "color:#727272"} %> + <%= link_to user_name, user_path(homework.user),{:style => "color:#727272"} %>

- + diff --git a/app/views/boards/_project_show.html.erb b/app/views/boards/_project_show.html.erb index 1327f13e9..ef1afd27e 100644 --- a/app/views/boards/_project_show.html.erb +++ b/app/views/boards/_project_show.html.erb @@ -71,7 +71,9 @@
<%= link_to h(topic.subject), board_message_path(@board, topic) %><%= link_to h(topic.subject.truncate(40,ommision:'...')), board_message_path(@board, topic),title: topic.subject.to_s %> +
<%=link_to (topic.replies_count), board_message_path(@board, topic) %>
回答
- +
<%= link_to h(topic.subject), board_message_path(@board, topic) %><%= link_to h(topic.subject.truncate(40,ommision:'...')), board_message_path(@board, topic),title:topic.subject.to_s %> + diff --git a/app/views/contestnotifications/_news.html.erb b/app/views/contestnotifications/_news.html.erb index 301a193d8..fbac2557f 100644 --- a/app/views/contestnotifications/_news.html.erb +++ b/app/views/contestnotifications/_news.html.erb @@ -1,9 +1,9 @@ - + <%# unless news.summary.blank? %> +
<%#=h news.summary %><% end %><%#= authoring news.created_on, news.author %>

--> diff --git a/app/views/messages/_course_show.html.erb b/app/views/messages/_course_show.html.erb index 5b8b629d4..55cf9d61c 100644 --- a/app/views/messages/_course_show.html.erb +++ b/app/views/messages/_course_show.html.erb @@ -96,9 +96,9 @@
<% if @project %> - <%= label_tag l(:field_subject) %>: <%= link_to @topic.subject, project_boards_path(@topic.project) %> + <%= label_tag l(:field_subject) %>: <%= link_to @topic.subject.truncate(24, omission: '...'), project_boards_path(@topic.project),title: @topic.subject.to_s %> <% elsif @course %> - <%= label_tag l(:field_subject) %>: <%= link_to @topic.subject, course_boards_path(@topic.course) %> + <%= label_tag l(:field_subject) %>: <%= link_to @topic.subject.truncate(24,omission:'...'), course_boards_path(@topic.course),title: @topic.subject.to_s %> <% end %>
@@ -109,14 +109,8 @@
<%= authoring @topic.created_on, @topic.author %>
- -
<%= toggle_link l(:button_reply), "reply", :focus => 'message_content' %>
- - - -

diff --git a/app/views/messages/_project_show.html.erb b/app/views/messages/_project_show.html.erb index ad91c72f8..7f88816f5 100644 --- a/app/views/messages/_project_show.html.erb +++ b/app/views/messages/_project_show.html.erb @@ -95,11 +95,11 @@

-
+
<% if @project %> - <%= label_tag l(:field_subject) %>: <%= link_to @topic.subject, project_boards_path(@topic.project) %> + <%= label_tag l(:field_subject) %>: <%= link_to @topic.subject.truncate(24, omission: '...'), project_boards_path(@topic.project),title: @topic.subject.to_s %> <% elsif @course %> - <%= label_tag l(:field_subject) %>: <%= link_to @topic.subject, course_boards_path(@topic.course) %> + <%= label_tag l(:field_subject) %>: <%= link_to @topic.subject.truncate(24,omission:'...'), course_boards_path(@topic.course),title: @topic.subject.to_s %> <% end %>
@@ -179,9 +179,6 @@
<% end %> - - - <% if !@topic.locked? && authorize_for('messages', 'reply') %>
<% if e.user == User.current %> <% else %>
- <%= link_to("#{l(:label_i)}", user_path(e.user_id)) %> <%= l(:label_i_new_activity) %> <%= link_to(l(:label_activity_project)+act.issue.project.name, project_path(act.issue.project.identifier)) %> <%= link_to format_activity_title("#{act.issue.tracker} ##{act.issue.id}: #{act.issue.subject}"), {:controller => 'issues', :action => 'show', :id => act.issue.id, :anchor => "change-#{act.id}"} %> + <%= link_to("#{l(:label_i)}", user_path(e.user_id)) %> <%= l(:label_i_new_activity) %> <%= 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.id}: #{act.issue.subject}"), {:controller => 'issues', :action => 'show', :id => act.issue.id, :anchor => "change-#{act.id}"} %> diff --git a/app/views/users/user_newfeedback.html.erb b/app/views/users/user_newfeedback.html.erb index 22ff5a280..d6337e1d0 100644 --- a/app/views/users/user_newfeedback.html.erb +++ b/app/views/users/user_newfeedback.html.erb @@ -2,7 +2,7 @@
<%= render :partial => 'words/new', :locals => {:user => @user, :sta => @state} %>
-
+
<%= l(:label_newfeedback_message) %>(<%= @feedback_count%>)
diff --git a/app/views/words/_new.html.erb b/app/views/words/_new.html.erb index aa2001028..bc4d19225 100644 --- a/app/views/words/_new.html.erb +++ b/app/views/words/_new.html.erb @@ -72,7 +72,7 @@ + <%= submit_tag l(:button_cancel), :name => nil, :class => "enterprise", :onclick => "clearMessage('new_form_user_message');", :onmouseout => "this.style.backgroundPosition = 'left top'", :onmouseover => "this.style.backgroundPosition = 'left -31px'" %>
<%= submit_tag l(:button_leave_meassge), :name => nil , :class => "enterprise", :onmouseout => "this.style.backgroundPosition = 'left top'", :onmouseover => "this.style.backgroundPosition = 'left -31px'"%> - <%= submit_tag l(:button_clear), :name => nil, :class => "enterprise", :onclick => "clearMessage('new_form_user_message');", :onmouseout => "this.style.backgroundPosition = 'left top'", :onmouseover => "this.style.backgroundPosition = 'left -31px'" %>
<% else %> diff --git a/config/locales/en.yml b/config/locales/en.yml index 367624f89..602e7a659 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -1782,6 +1782,7 @@ en: label_no_file_uploaded: No file uploaded label_forum_new: New forum label_memo_new_from_forum: Release memo + bale_edit_notice: Edit label_user_grade: Individual score label_active_homework: homework @@ -1797,6 +1798,8 @@ en: label_record: 湘ICP备09019772 label_check_comment: Check comment label_notification: Notification + + #end # ajax异步验证 diff --git a/config/locales/zh.yml b/config/locales/zh.yml index d17f4c3bd..a73f9db56 100644 --- a/config/locales/zh.yml +++ b/config/locales/zh.yml @@ -707,6 +707,7 @@ zh: label_news: 新闻 label_news_new: 添加新闻 bale_news_notice: 添加通知 #huang + bale_edit_notice: 修改通知 label_news_notice: 发布课程通知 label_news_plural: 新闻 label_news_latest: 最近的新闻 diff --git a/lib/tasks/user_new_score.rake b/lib/tasks/user_new_score.rake new file mode 100644 index 000000000..19f003f4d --- /dev/null +++ b/lib/tasks/user_new_score.rake @@ -0,0 +1,23 @@ +desc "User New Score description" +task :user_new_score do + puts "user_score sync." +end + +namespace :user_new_score do + desc "calculating user score" + task :calculating => :environment do + include UserScoreHelper + User.all.each do |user| + result = user_scores(user,1).total_score + puts "score of #{user.login} is #{result}" + end + + Project.where("project_type != 1").all.each do |project| + project.member_principals.includes(:roles, :principal).all.each do |member| + result = user_scores(member.user,2,project).total_score + puts "#{user.login}/'s score in #{project.name} is #{result}" + end + end + puts "calculate completed" + end +end \ No newline at end of file diff --git a/lib/tasks/user_score_new.rake b/lib/tasks/user_score_new.rake new file mode 100644 index 000000000..cb0e7ef52 --- /dev/null +++ b/lib/tasks/user_score_new.rake @@ -0,0 +1,453 @@ +desc "User Score description" +task :user_score_new do + puts "user_score sync." +end + +namespace :user_score_new do + desc "calculating user score" + task :calculated => :environment do + include UserScoreHelper + puts "truncating table...#{Rails.env}" + puts "loading..." + # collaboration 协同得分 + users = {} + grades = {} + # 发帖 + Message.find_by_sql("SELECT `messages`.author_id AS u_id,`boards`.project_id AS p_id, COUNT(*) AS memo_number FROM `messages` JOIN `boards` ON `messages`.board_id = `boards`.id WHERE `messages`.parent_id IS NULL AND `boards`.project_id != -1 GROUP BY `messages`.author_id,`boards`.project_id ").each do|message| + option_num = get_option_num_by_id(message.u_id,2,message.p_id) + option_num.memo = message.memo_number + option_num.save + update_score(option_num) + puts "#{message.u_id}'s memo number in project #{message.p_id}: #{message.memo_number}" + end + + Message.find_by_sql("SELECT `messages`.author_id AS u_id, COUNT(*) AS memo_number FROM `messages` JOIN `boards` ON `messages`.board_id = `boards`.id WHERE `messages`.parent_id IS NULL AND `boards`.project_id != -1 GROUP BY `messages`.author_id").each do|message| + option_num = get_option_num_by_id(message.u_id,1) + option_num.memo = message.memo_number + option_num.save + update_score(option_num) + puts "#{message.u_id}'s memo number: #{message.memo_number}" + end + + + puts "post_message calculate Completed." + # + ## 对缺陷的留言 + Journal.find_by_sql("SELECT user_id AS u_id,COUNT(*) AS m_count FROM journals WHERE journals.notes IS NOT NULL AND journals.notes != '' GROUP BY u_id").each do |journal| + option_num = get_option_num_by_id(journal.u_id,1) + option_num.messages_for_issues = journal.m_count + option_num.save + update_score(option_num) + puts "#{journal.u_id}'s messages_for_issues number: #{journal.m_count}" + end + + Journal.find_by_sql("SELECT #{Journal.table_name}.user_id AS u_id, #{Issue.table_name}.project_id AS p_id ,COUNT(*) as m_count FROM journals join #{Issue.table_name} on #{Journal.table_name}.journalized_type = 'Issue' and #{Journal.table_name}.journalized_id = #{Issue.table_name}.id WHERE journals.notes IS NOT NULL AND journals.notes != '' GROUP BY u_id,p_id").each do |journal| + option_num = get_option_num_by_id(journal.u_id,2,journal.p_id) + option_num.messages_for_issues = journal.m_count + option_num.save + update_score(option_num) + puts "#{journal.u_id}'s messages_for_issues number in project #{journal.p_id}: #{journal.m_count}" + end + + puts ":post_issue_message calculate Completed" + # + ## 更改一次缺陷状态 + Journal.find_by_sql("SELECT journals.user_id AS u_id, COUNT(*) as m_count FROM journals JOIN journal_details on journals.id = journal_details.journal_id WHERE journal_details.prop_key = 'status_id' GROUP BY u_id").each do |journal| + option_num = get_option_num_by_id(journal.u_id,1) + option_num.issues_status = journal.m_count + option_num.save + update_score(option_num) + puts "#{journal.u_id}'s issues_status number: #{journal.m_count}" + end + + Journal.find_by_sql("SELECT journals.user_id AS u_id,issues.project_id AS p_id,COUNT(*) as m_count FROM journals JOIN journal_details on journals.id = journal_details.journal_id JOIN issues ON issues.id = journals.journalized_id and journalized_type = 'Issue' WHERE journal_details.prop_key = 'status_id' GROUP BY u_id,p_id").each do |journal| + option_num = get_option_num_by_id(journal.u_id,2,journal.p_id) + option_num.issues_status = journal.m_count + option_num.save + update_score(option_num) + puts "#{journal.u_id}'s issues_status number in project #{journal.p_id}: #{journal.m_count}" + end + + puts ":change_issue_status calculate Completed" + # + ## 对留言的回复 + JournalsForMessage.find_by_sql("SELECT user_id AS u_id,COUNT(*) as m_count From #{JournalsForMessage.table_name} WHERE m_parent_id IS NOT NULL and jour_type = 'Project' GROUP BY u_id").each do |jfm| + option_num = get_option_num_by_id(jfm.u_id,1) + option_num.replay_for_message = jfm.m_count + option_num.save + update_score(option_num) + puts "#{jfm.u_id}'s replay_for_message number: #{jfm.m_count}" + end + + JournalsForMessage.find_by_sql("SELECT user_id AS u_id,jour_id AS p_id,COUNT(*) as m_count From #{JournalsForMessage.table_name} WHERE m_parent_id IS NOT NULL and jour_type = 'Project' GROUP BY u_id,p_id").each do |jfm| + option_num = get_option_num_by_id(jfm.u_id,2,jfm.p_id) + option_num.replay_for_message = jfm.m_count + option_num.save + update_score(option_num) + puts "#{jfm.u_id}'s replay_for_message number in project #{jfm.p_id}: #{jfm.m_count}" + end + + puts ":reply_message calculate Completed" + # + ## 对帖子的回复 + Message.find_by_sql("SELECT messages.author_id AS u_id, COUNT(*) as m_count FROM messages JOIN boards on messages.board_id = boards.id WHERE messages.parent_id IS NOT NULL AND boards.project_id != -1 GROUP BY u_id").each do |message| + option_num = get_option_num_by_id(message.u_id,1) + option_num.replay_for_memo = message.m_count + option_num.save + update_score(option_num) + puts "#{message.u_id}'s replay_for_memo number: #{message.m_count}" + end + + Message.find_by_sql("SELECT messages.author_id AS u_id,boards.project_id AS p_id,COUNT(*) as m_count FROM messages JOIN boards on messages.board_id = boards.id WHERE messages.parent_id IS NOT NULL AND boards.project_id != -1 GROUP BY u_id,p_id").each do |message| + option_num = get_option_num_by_id(message.u_id,2,message.p_id) + option_num.replay_for_memo = message.m_count + option_num.save + update_score(option_num) + puts "#{message.u_id}'s replay_for_memo number in project #{message.p_id}: #{message.m_count}" + end + + puts ":reply_posting calculate Completed." + # + #UserScore.transaction do + # users.each do |user_id, score| + # UserScore.find_or_create_by_user_id(user_id).update_attribute(:collaboration, score) + # end + #end + #puts "=== UserScore#collaboration calculate Completed. collaboration users count: #{users.count}" + #puts "" + # + #users.clear + # + ## influence 影响力得分 + ##关注 + Watcher.find_by_sql("SELECT watchable_id AS u_id ,COUNT(*) as m_count FROM #{Watcher.table_name} WHERE watchable_type = 'Principal' GROUP BY u_id").each do |watcher| + option_num = get_option_num_by_id(watcher.u_id,1) + option_num.follow = watcher.m_count + option_num.save + update_score(option_num) + puts "#{watcher.u_id}'s follow number: #{watcher.m_count}" + end + puts ":followed_by calculate Completed." + # + #UserScore.transaction do + # users_influence.each do |user_id, score| + # UserScore.find_or_create_by_user_id(user_id).update_attribute(:influence, score) + # end + #end + #puts "=== UserScore#influence calculate Completed. influence users count: #{users_influence.count}" + #puts "" + ## skill 技术得分 + + #计算相关user的等级 + PraiseTread.find_by_sql("SELECT user_id AS u_id,COUNT(*) AS m_count FROM `praise_treads` WHERE praise_tread_object_type IN ( 'Issue','Message') GROUP BY u_id").each do |pt| + user = User.find(pt.u_id) + level = UserLevels.get_level(user) + puts "user #{user.login}'s level is #{level}" + end + ## 踩帖 + PraiseTread.find_by_sql("SELECT user_id AS u_id,COUNT(*) AS m_count FROM `praise_treads` WHERE praise_tread_object_type IN ( 'Issue','Message') AND praise_or_tread = 0 GROUP BY u_id").each do |pt| + #踩别人扣分 + option_num = get_option_num_by_id(pt.u_id,1) + option_num.tread = pt.m_count + option_num.save + update_score(option_num) + puts "#{pt.u_id}'s tread number: #{pt.m_count}" + end + + + #SELECT AS u_id,COUNT(*) AS m_count FROM `praise_treads` JOIN issues ON `issues`.id = `praise_treads`.praise_tread_object_id AND `praise_treads`.praise_tread_object_type = 'Issue' WHERE praise_or_tread = 0 GROUP BY u_id + PraiseTread.find_by_sql("SELECT `issues`.author_id AS target_u_id,`user_levels`.level AS u_level,COUNT(*) AS m_count FROM `praise_treads` JOIN issues ON `issues`.id =`praise_treads`.praise_tread_object_id AND `praise_treads`.praise_tread_object_type = 'Issue' JOIN `user_levels` ON `praise_treads`.user_id = `user_levels`.user_id WHERE praise_or_tread = 0 GROUP BY target_u_id,u_level").each do |pt| + #缺陷被人踩的次数 + option_num = get_option_num_by_id(pt.target_u_id,1) + if pt.u_level == 1 + option_num.tread_by_one = pt.m_count + puts "user #{pt.target_u_id} tread by one-level member #{pt.m_count} times " + elsif pt.u_level == 2 + option_num.tread_by_two = pt.m_count + puts "user #{pt.target_u_id} tread by two-level member #{pt.m_count} times " + elsif pt.u_level == 3 + option_num.tread_by_three = pt.m_count + puts "user #{pt.target_u_id} tread by three-level member #{pt.m_count} times " + else + puts "level error!:#{pt.u_level}" + next + end + option_num.save + update_score(option_num) + end + + PraiseTread.find_by_sql("SELECT `praise_treads`.user_id AS u_id,`issues`.project_id AS p_id, COUNT(*) AS m_count FROM `praise_treads` JOIN issues ON `issues`.id =`praise_treads`.praise_tread_object_id AND `praise_treads`.praise_tread_object_type = 'Issue' WHERE praise_or_tread = 0 GROUP BY u_id,p_id").each do |pt| + #项目中踩别人缺陷的次数 + option_num = get_option_num_by_id(pt.u_id,2,pt.p_id) + option_num.tread = pt.m_count + option_num.save + update_score(option_num) + puts "#{pt.u_id}'s tread number: #{pt.m_count}" + end + + #项目中被人踩缺陷的次数 + PraiseTread.find_by_sql("SELECT `issues`.author_id AS target_u_id,`issues`.project_id AS p_id,`user_levels`.level AS u_level,COUNT(*) AS m_count FROM `praise_treads` JOIN issues ON `issues`.id =`praise_treads`.praise_tread_object_id AND `praise_treads`.praise_tread_object_type = 'Issue' JOIN `user_levels` ON `praise_treads`.user_id = `user_levels`.user_id WHERE praise_or_tread = 0 GROUP BY target_u_id,p_id,u_level").each do |pt| + option_num = get_option_num_by_id(pt.target_u_id,2,pt.p_id) + if pt.u_level == 1 + option_num.tread_by_one = pt.m_count + puts "user #{pt.target_u_id} tread by one-level member in project #{pt.p_id} #{pt.m_count} times " + elsif pt.u_level == 2 + option_num.tread_by_two = pt.m_count + puts "user #{pt.target_u_id} tread by two-level member in project #{pt.p_id} #{pt.m_count} times " + elsif pt.u_level == 3 + option_num.tread_by_three = pt.m_count + puts "user #{pt.target_u_id} tread by three-level member in project #{pt.p_id} #{pt.m_count} times " + else + puts "level error!:#{pt.u_level}" + next + end + option_num.save + update_score(option_num) + end + + PraiseTread.find_by_sql("SELECT `messages`.author_id AS target_u_id,`user_levels`.level AS u_level,COUNT(*) AS m_count FROM `praise_treads` JOIN messages ON `messages`.id =`praise_treads`.praise_tread_object_id AND `praise_treads`.praise_tread_object_type = 'Message' JOIN `user_levels` ON `praise_treads`.user_id = `user_levels`.user_id WHERE praise_or_tread = 0 GROUP BY target_u_id,u_level").each do |pt| + #讨论区被人踩的次数 + option_num = get_option_num_by_id(pt.target_u_id,1) + if pt.u_level == 1 + option_num.tread_by_one += pt.m_count + puts "user #{pt.target_u_id} tread by one-level member #{pt.m_count} times " + elsif pt.u_level == 2 + option_num.tread_by_two += pt.m_count + puts "user #{pt.target_u_id} tread by two-level member #{pt.m_count} times " + elsif pt.u_level == 3 + option_num.tread_by_three += pt.m_count + puts "user #{pt.target_u_id} tread by three-level member #{pt.m_count} times " + else + puts "level error!:#{pt.u_level}" + next + end + option_num.save + update_score(option_num) + end + + PraiseTread.find_by_sql("SELECT `praise_treads`.user_id AS u_id,`boards`.project_id AS p_id, COUNT(*) AS m_count FROM `praise_treads` JOIN messages ON `messages`.id =`praise_treads`.praise_tread_object_id AND `praise_treads`.praise_tread_object_type = 'Message' JOIN `boards` ON `boards`.id = `messages`.board_id AND `boards`.project_id != '-1' WHERE praise_or_tread = 0 GROUP BY u_id , p_id").each do |pt| + #项目讨论区中踩别人的次数 + option_num = get_option_num_by_id(pt.u_id,2,pt.p_id) + option_num.tread += pt.m_count + option_num.save + update_score(option_num) + puts "#{pt.u_id}'s tread number: #{pt.m_count}" + end + + #项目中被人踩的次数 + PraiseTread.find_by_sql("SELECT `messages`.author_id AS target_u_id,`boards`.project_id AS p_id,`user_levels`.level AS u_level,COUNT(*) AS m_count FROM `praise_treads` JOIN messages ON `messages`.id =`praise_treads`.praise_tread_object_id AND `praise_treads`.praise_tread_object_type = 'Message' JOIN `user_levels` ON `praise_treads`.user_id = `user_levels`.user_id JOIN `boards` ON `boards`.id = `messages`.board_id AND `boards`.project_id != '-1' WHERE praise_or_tread = 0 GROUP BY target_u_id,p_id,u_level").each do |pt| + option_num = get_option_num_by_id(pt.target_u_id,2,pt.p_id) + if pt.u_level == 1 + option_num.tread_by_one += pt.m_count + puts "user #{pt.target_u_id} tread by one-level member in project #{pt.p_id} #{pt.m_count} times " + elsif pt.u_level == 2 + option_num.tread_by_two += pt.m_count + puts "user #{pt.target_u_id} tread by two-level member in project #{pt.p_id} #{pt.m_count} times " + elsif pt.u_level == 3 + option_num.tread_by_three += pt.m_count + puts "user #{pt.target_u_id} tread by three-level member in project #{pt.p_id} #{pt.m_count} times " + else + puts "level error!:#{pt.u_level}" + next + end + option_num.save + update_score(option_num) + end + + #顶贴 + #SELECT AS u_id,COUNT(*) AS m_count FROM `praise_treads` JOIN issues ON `issues`.id = `praise_treads`.praise_tread_object_id AND `praise_treads`.praise_tread_object_type = 'Issue' WHERE praise_or_tread = 0 GROUP BY u_id + PraiseTread.find_by_sql("SELECT `issues`.author_id AS target_u_id,`user_levels`.level AS u_level,COUNT(*) AS m_count FROM `praise_treads` JOIN issues ON `issues`.id =`praise_treads`.praise_tread_object_id AND `praise_treads`.praise_tread_object_type = 'Issue' JOIN `user_levels` ON `praise_treads`.user_id = `user_levels`.user_id WHERE praise_or_tread = 1 GROUP BY target_u_id,u_level").each do |pt| + #缺陷被人顶的次数 + option_num = get_option_num_by_id(pt.target_u_id,1) + if pt.u_level == 1 + option_num.praise_by_one = pt.m_count + puts "user #{pt.target_u_id} praise by one-level member #{pt.m_count} times " + elsif pt.u_level == 2 + option_num.praise_by_two = pt.m_count + puts "user #{pt.target_u_id} praise by two-level member #{pt.m_count} times " + elsif pt.u_level == 3 + option_num.praise_by_three = pt.m_count + puts "user #{pt.target_u_id} praise by three-level member #{pt.m_count} times " + else + puts "level error!:#{pt.u_level}" + next + end + option_num.save + update_score(option_num) + end + + #项目中被人顶缺陷的次数 + PraiseTread.find_by_sql("SELECT `issues`.author_id AS target_u_id,`issues`.project_id AS p_id,`user_levels`.level AS u_level,COUNT(*) AS m_count FROM `praise_treads` JOIN issues ON `issues`.id =`praise_treads`.praise_tread_object_id AND `praise_treads`.praise_tread_object_type = 'Issue' JOIN `user_levels` ON `praise_treads`.user_id = `user_levels`.user_id WHERE praise_or_tread = 1 GROUP BY target_u_id,p_id,u_level").each do |pt| + option_num = get_option_num_by_id(pt.target_u_id,2,pt.p_id) + if pt.u_level == 1 + option_num.praise_by_one = pt.m_count + puts "user #{pt.target_u_id} praise by one-level member in project #{pt.p_id} #{pt.m_count} times " + elsif pt.u_level == 2 + option_num.praise_by_two = pt.m_count + puts "user #{pt.target_u_id} praise by two-level member in project #{pt.p_id} #{pt.m_count} times " + elsif pt.u_level == 3 + option_num.praise_by_three = pt.m_count + puts "user #{pt.target_u_id} praise by three-level member in project #{pt.p_id} #{pt.m_count} times " + else + puts "level error!:#{pt.u_level}" + next + end + option_num.save + update_score(option_num) + end + + PraiseTread.find_by_sql("SELECT `messages`.author_id AS target_u_id,`user_levels`.level AS u_level,COUNT(*) AS m_count FROM `praise_treads` JOIN messages ON `messages`.id =`praise_treads`.praise_tread_object_id AND `praise_treads`.praise_tread_object_type = 'Message' JOIN `user_levels` ON `praise_treads`.user_id = `user_levels`.user_id WHERE praise_or_tread = 1 GROUP BY target_u_id,u_level").each do |pt| + #讨论区被人顶的次数 + option_num = get_option_num_by_id(pt.target_u_id,1) + if pt.u_level == 1 + option_num.praise_by_one += pt.m_count + puts "user #{pt.target_u_id} praise by one-level member #{pt.m_count} times " + elsif pt.u_level == 2 + option_num.praise_by_two += pt.m_count + puts "user #{pt.target_u_id} praise by two-level member #{pt.m_count} times " + elsif pt.u_level == 3 + option_num.praise_by_three += pt.m_count + puts "user #{pt.target_u_id} praise by three-level member #{pt.m_count} times " + else + puts "level error!:#{pt.u_level}" + next + end + option_num.save + update_score(option_num) + end + + #项目中被人踩的次数 + PraiseTread.find_by_sql("SELECT `messages`.author_id AS target_u_id,`boards`.project_id AS p_id,`user_levels`.level AS u_level,COUNT(*) AS m_count FROM `praise_treads` JOIN messages ON `messages`.id =`praise_treads`.praise_tread_object_id AND `praise_treads`.praise_tread_object_type = 'Message' JOIN `user_levels` ON `praise_treads`.user_id = `user_levels`.user_id JOIN `boards` ON `boards`.id = `messages`.board_id AND `boards`.project_id != '-1' WHERE praise_or_tread = 1 GROUP BY target_u_id,p_id,u_level").each do |pt| + option_num = get_option_num_by_id(pt.target_u_id,2,pt.p_id) + if pt.u_level == 1 + option_num.praise_by_one += pt.m_count + puts "user #{pt.target_u_id} praise by one-level member in project #{pt.p_id} #{pt.m_count} times " + elsif pt.u_level == 2 + option_num.praise_by_two += pt.m_count + puts "user #{pt.target_u_id} praise by two-level member in project #{pt.p_id} #{pt.m_count} times " + elsif pt.u_level == 3 + option_num.praise_by_three += pt.m_count + puts "user #{pt.target_u_id} praise by three-level member in project #{pt.p_id} #{pt.m_count} times " + else + puts "level error!:#{pt.u_level}" + next + end + option_num.save + update_score(option_num) + end + + puts "UserScore#skill calculate Completed." + #puts "" + # + ## active 项目贡献得分 + ## 提交代码 + Changeset.find_by_sql("SELECT user_id AS u_id, COUNT(*) AS m_count FROM `changesets` GROUP BY u_id").each do |changeset| + unless changeset.u_id.nil? + option_num = get_option_num_by_id(changeset.u_id,1) + option_num.changeset = changeset.m_count + option_num.save + update_score(option_num) + puts "#{changeset.u_id}'s changeset number: #{changeset.m_count}" + end + end + + Changeset.find_by_sql("SELECT `changesets`.user_id AS u_id, `repositories`.project_id AS p_id,COUNT(*) AS m_count FROM `changesets` JOIN `repositories` ON `repositories`.id = `changesets`.repository_id GROUP BY u_id,p_id ").each do |changeset| + unless changeset.nil? + option_num = get_option_num_by_id(changeset.u_id,2,changeset.p_id) + option_num.changeset = changeset.m_count + option_num.save + update_score(option_num) + puts "#{changeset.u_id}'s changeset number in project #{changeset.p_id}: #{changeset.m_count}" + end + end + + puts ":push_code calculate Completed." + ##提交文档 + Document.find_by_sql("SELECT user_id AS u_id ,COUNT(*) AS m_count FROM `documents` GROUP BY user_id").each do |document| + option_num = get_option_num_by_id(document.u_id,1) + option_num.document = document.m_count + option_num.save + update_score(option_num) + puts "#{document.u_id}'s document number: #{document.m_count}" + end + + Document.find_by_sql("SELECT user_id AS u_id , project_id AS p_id, COUNT(*) AS m_count FROM `documents` GROUP BY u_id,p_id").each do |document| + option_num = get_option_num_by_id(document.u_id,2,document.p_id) + option_num.document = document.m_count + option_num.save + update_score(option_num) + puts "#{document.u_id}'s document number in project #{document.p_id}: #{document.m_count}" + end + + puts ":push_document calculate Completed." + ##提交附件 + Attachment.find_by_sql("SELECT author_id AS u_id,COUNT(*) as m_count FROM #{Attachment.table_name} WHERE container_type = 'Project' GROUP By u_id").each do |attachment| + option_num = get_option_num_by_id(attachment.u_id,1) + option_num.attachment = attachment.m_count + option_num.save + update_score(option_num) + puts "#{attachment.u_id}'s attachment number: #{attachment.m_count}" + end + + Attachment.find_by_sql("SELECT author_id AS u_id,container_id AS p_id,COUNT(*) as m_count FROM #{Attachment.table_name} WHERE container_type = 'Project' GROUP By u_id,p_id").each do |attachment| + option_num = get_option_num_by_id(attachment.u_id,2,attachment.p_id) + option_num.attachment = attachment.m_count + option_num.save + update_score(option_num) + puts "#{attachment.u_id}'s attachment number in project #{attachment.p_id}: #{attachment.m_count}" + end + + puts ":push_file calculate Completed." + ##更新完成度 + Journal.find_by_sql("SELECT #{Journal.table_name}.user_id AS u_id, COUNT(*) as m_count FROM #{Journal.table_name} JOIN #{JournalDetail.table_name} ON #{JournalDetail.table_name}.journal_id = #{Journal.table_name}.id WHERE #{JournalDetail.table_name}.prop_key = 'done_ratio' GROUP BY u_id ").each do |j| + option_num = get_option_num_by_id(j.u_id,1) + option_num.issue_done_ratio = j.m_count + option_num.save + update_score(option_num) + puts "#{j.u_id}'s issue_done_ratio number: #{j.m_count}" + end + + Journal.find_by_sql("SELECT #{Journal.table_name}.user_id AS u_id, #{Issue.table_name}.project_id AS p_id,COUNT(*) as m_count FROM #{Journal.table_name} JOIN #{JournalDetail.table_name} ON #{JournalDetail.table_name}.journal_id = #{Journal.table_name}.id JOIN issues ON issues.id = journals.journalized_id and journalized_type = 'Issue' WHERE #{JournalDetail.table_name}.prop_key = 'done_ratio' GROUP BY u_id,p_id ").each do |j| + option_num = get_option_num_by_id(j.u_id,2,j.p_id) + option_num.issue_done_ratio = j.m_count + option_num.save + update_score(option_num) + puts "#{j.u_id}'s issue_done_ratio number in project #{j.p_id}: #{j.m_count}" + end + + puts ":update_issue_ratio calculate Completed." + ##发布缺陷 + Issue.find_by_sql("SELECT author_id AS u_id,COUNT(*) as m_count FROM #{Issue.table_name} GROUP BY u_id").each do |issues| + option_num = get_option_num_by_id(issues.u_id,1) + option_num.post_issue = issues.m_count + option_num.save + update_score(option_num) + puts "#{issues.u_id}'s issues number: #{issues.m_count}" + end + + Issue.find_by_sql("SELECT author_id AS u_id,project_id AS p_id,COUNT(*) as m_count FROM #{Issue.table_name} GROUP BY u_id,p_id").each do |issues| + option_num = get_option_num_by_id(issues.u_id,2,issues.p_id) + option_num.post_issue = issues.m_count + option_num.save + update_score(option_num) + puts "#{issues.u_id}'s issues number in project #{issues.p_id}: #{issues.m_count}" + end + puts ":post_issue calculate Completed." + # + # + #UserScore.transaction do + # users_active.each do |user_id, score| + # UserScore.find_or_create_by_user_id(user_id).update_attribute(:active, score) + # end + #end + #puts "=== UserScore#active calculate Completed. active users count: #{users_active.count}" + #UserGrade.transaction do + # grades.each do |grade_id,score| + # grade = UserGrade.find(grade_id) + # grade.grade = score + # grade.save + # end + #end + #puts "=== UserGrid calculate Completed. UserGrids count: #{grades.count}" + end +end \ No newline at end of file