diff --git a/app/controllers/at_controller.rb b/app/controllers/at_controller.rb index 9e7309646..25e731754 100644 --- a/app/controllers/at_controller.rb +++ b/app/controllers/at_controller.rb @@ -53,6 +53,7 @@ class AtController < ApplicationController end def find_project(id) + return [] if id<0 at_persons = Project.find(id).users at_persons.delete_if { |u| u.id == User.current.id } end diff --git a/app/controllers/comments_controller.rb b/app/controllers/comments_controller.rb index 11a788590..c8dcf0b8e 100644 --- a/app/controllers/comments_controller.rb +++ b/app/controllers/comments_controller.rb @@ -54,16 +54,9 @@ class CommentsController < ApplicationController # end # # ������ض�̬�ļ�¼add end #flash[:notice] = l(:label_comment_added) - course_activity = CourseActivity.where("course_act_type='News' and course_act_id =#{@news.id}").first - if course_activity - course_activity.updated_at = Time.now - course_activity.save - end - user_activity = UserActivity.where("act_type='News' and act_id =#{@news.id}").first - if user_activity - user_activity.updated_at = Time.now - user_activity.save - end + update_course_activity(@news.class,@news.id) + update_user_activity(@news.class,@news.id) + update_org_activity(@news.class,@news.id) end if params[:user_activity_id] diff --git a/app/controllers/files_controller.rb b/app/controllers/files_controller.rb index 70a0b76b8..42b486e69 100644 --- a/app/controllers/files_controller.rb +++ b/app/controllers/files_controller.rb @@ -17,8 +17,7 @@ # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. class FilesController < ApplicationController - - layout 'base_projects' #by young + layout 'base_projects' #by young menu_item :files before_filter :auth_login1, :only => [:index] @@ -454,6 +453,9 @@ class FilesController < ApplicationController end end end + # 更新资源总数, 根据上传的附件数累加 + @project.update_attribute(:attachments_count, @project.attachments_count + attachments[:files].count) + # end # TODO: 临时用 nyan sort_init 'created_on', 'desc' sort_update 'created_on' => "#{Attachment.table_name}.created_on", @@ -482,9 +484,6 @@ class FilesController < ApplicationController if !attachments.empty? && !attachments[:files].blank? && Setting.notified_events.include?('file_added') Mailer.run.attachments_added(attachments[:files]) end - # 更新课程英雄榜得分 - update_contributor_score(@course, attachments[:files].first) - # end if params[:course_attachment_type] && params[:course_attachment_type].is_a?(Array) params[:course_attachment_type].each do |type| tag_name = get_tag_name_by_type_number type @@ -506,8 +505,9 @@ class FilesController < ApplicationController end end end - - + # 更新课程英雄榜得分 + update_contributor_score(@course, attachments[:files].first) + # end # TODO: 临时用 nyan sort_init 'created_on', 'desc' sort_update 'created_on' => "#{Attachment.table_name}.created_on", @@ -828,5 +828,5 @@ class FilesController < ApplicationController def upload_files_menu - end +end end diff --git a/app/controllers/issues_controller.rb b/app/controllers/issues_controller.rb index 4aa959e81..8fc13c83c 100644 --- a/app/controllers/issues_controller.rb +++ b/app/controllers/issues_controller.rb @@ -405,9 +405,9 @@ class IssuesController < ApplicationController jour.journalized = @issue jour.save_attachments(params[:attachments]) jour.save - user_activity = UserActivity.where("act_type='Issue' and act_id =#{@issue.id}").first - user_activity.updated_at = jour.created_on - user_activity.save + update_user_activity(@issue.class,@issue.id) + update_forge_activity(@issue.class,@issue.id) + @user_activity_id = params[:user_activity_id] if params[:issue_id] @issue_id = params[:issue_id] @@ -455,9 +455,9 @@ class IssuesController < ApplicationController @issue = Issue.find params[:id] jour.journalized = @issue jour.save - user_activity = UserActivity.where("act_type='Issue' and act_id =#{@issue.id}").first - user_activity.updated_at = jour.created_on - user_activity.save + update_user_activity(@issue.class,@issue.id) + update_forge_activity(@issue.class,@issue.id) + respond_to do |format| format.js end diff --git a/app/controllers/messages_controller.rb b/app/controllers/messages_controller.rb index 72bffa06c..17111b3f3 100644 --- a/app/controllers/messages_controller.rb +++ b/app/controllers/messages_controller.rb @@ -176,26 +176,11 @@ class MessagesController < ApplicationController @reply.subject = "RE: #{@topic.subject}" unless params[:reply][:subject] # @reply.reply_id = params[:id] @topic.children << @reply - course_activity = CourseActivity.where("course_act_type='Message' and course_act_id =#{@topic.id}").first - if course_activity - course_activity.updated_at = Time.now - course_activity.save - end - forge_activity = ForgeActivity.where("forge_act_type='Message' and forge_act_id=#{@topic.id}").first - if forge_activity - forge_activity.updated_at = Time.now - forge_activity.save - end - user_activity = UserActivity.where("act_type='Message' and act_id =#{@topic.id}").first - if user_activity - user_activity.updated_at = Time.now - user_activity.save - end - org_activity = OrgActivity.where("org_act_type='Message' and org_act_id =#{@topic.id}").first - if org_activity - org_activity.updated_at = Time.now - org_activity.save - end + update_course_activity(@topic.class,@topic.id) + update_user_activity(@topic.class,@topic.id) + update_forge_activity(@topic.class,@topic.id) + update_org_activity(@topic.class,@topic.id) + #@topic.update_attribute(:updated_on, Time.now) if !@reply.new_record? if params[:asset_id] diff --git a/app/controllers/repositories_controller.rb b/app/controllers/repositories_controller.rb index 1674055ac..4d407e35e 100644 --- a/app/controllers/repositories_controller.rb +++ b/app/controllers/repositories_controller.rb @@ -344,20 +344,15 @@ update #Modified by young # (show_error_not_found; return) unless @entries g = Gitlab.client - - # count = 0 - # (0..100).each do |page| - # if g.commits(@project.gpid,:page => page).count == 0 - # break - # else - # count = count + g.commits(@project.gpid,:page => page).count - # end - # end - @changesets = g.commits(@project.gpid, :ref_name => @rev) # @changesets = @repository.latest_changesets(@path, @rev) # @changesets_count = @repository.latest_changesets(@path, @rev).count - @changesets_all_count = @project.gpid.nil? ? 0 : g.commits_total_count(@project.gpid).count + @changesets_all_count = @project.gpid.nil? ? 0 : g.project(@project.gpid).commit_count + # 访问该页面的是会后则刷新 + if @changesets_all_count != @project.commits_count && @changesets_all_count != 0 + update_commits_count(@project, @changesets_all_count) + end + # end @changesets_latest_coimmit = @changesets[0] @properties = @repository.properties(@path, @rev) @repositories = @project.repositories @@ -583,6 +578,10 @@ update end private + # 更新项目统计数 + def update_commits_count project, count + project.update_attribute(:commits_count, count) + end def find_repository @repository = Repository.find(params[:id]) diff --git a/app/controllers/student_work_controller.rb b/app/controllers/student_work_controller.rb index 9319c4db2..2f6c4ecc7 100644 --- a/app/controllers/student_work_controller.rb +++ b/app/controllers/student_work_controller.rb @@ -259,16 +259,10 @@ class StudentWorkController < ApplicationController stu_project.save end end - course_activity = CourseActivity.where("course_act_type='HomeworkCommon' and course_act_id =#{@homework.id}").first - if course_activity - course_activity.updated_at = Time.now - course_activity.save - end - user_activity = UserActivity.where("act_type='HomeworkCommon' and act_id =#{@homework.id}").first - if user_activity - user_activity.updated_at = Time.now - user_activity.save - end + update_course_activity(@homework.class,@homework.id) + update_user_activity(@homework.class,@homework.id) + update_org_activity(@homework.class,@homework.id) + course_message = CourseMessage.new(:user_id =>User.current.id,:content=>"new",:course_message_id=>student_work.id,:course_id => @course.id,:course_message_type=>"StudentWork", :status => 9) #作品提交记录 course_message.save diff --git a/app/controllers/words_controller.rb b/app/controllers/words_controller.rb index 79981ec4d..ebd46caa7 100644 --- a/app/controllers/words_controller.rb +++ b/app/controllers/words_controller.rb @@ -57,21 +57,11 @@ class WordsController < ApplicationController @jfm = add_reply_adapter options @save_succ = true if @jfm.errors.empty? if @save_succ - course_activity = CourseActivity.where("course_act_type='JournalsForMessage' and course_act_id =#{parent_id}").first - if course_activity - course_activity.updated_at = Time.now - course_activity.save - end - principal_activity = PrincipalActivity.where("principal_act_type='JournalsForMessage' and principal_act_id =#{parent_id}").first - if principal_activity - principal_activity.updated_at = Time.now - principal_activity.save - end - user_activity = UserActivity.where("act_type='JournalsForMessage' and act_id =#{parent_id}").first - if user_activity - user_activity.updated_at = Time.now - user_activity.save - end + update_course_activity('JournalsForMessage',parent_id) + update_user_activity('JournalsForMessage',parent_id) + update_forge_activity('JournalsForMessage',parent_id) + update_org_activity('JournalsForMessage',parent_id) + update_principal_activity('JournalsForMessage',parent_id) end respond_to do |format| # format.html { @@ -278,16 +268,9 @@ class WordsController < ApplicationController update_kindeditor_assets_owner ids,feedback[:id],OwnerTypeHelper::JOURNALSFORMESSAGE end - course_activity = CourseActivity.where("course_act_type='HomeworkCommon' and course_act_id =#{@homework_common.id}").first - if course_activity - course_activity.updated_at = Time.now - course_activity.save - end - user_activity = UserActivity.where("act_type='HomeworkCommon' and act_id =#{@homework_common.id}").first - if user_activity - user_activity.updated_at = Time.now - user_activity.save - end + update_course_activity(@homework_common.class,@homework_common.id) + update_user_activity(@homework_common.class,@homework_common.id) + update_org_activity(@homework_common.class,@homework_common.id) respond_to do |format| format.js{ @user_activity_id = params[:user_activity_id] diff --git a/app/helpers/application_helper.rb b/app/helpers/application_helper.rb index 9b7888bf2..17f80cec8 100644 --- a/app/helpers/application_helper.rb +++ b/app/helpers/application_helper.rb @@ -49,6 +49,12 @@ module ApplicationHelper end end + # 获取项目/课程总分 + # 发布缺陷 4分 回复缺陷 1分 提交一次 4分 讨论帖子 2分 回复帖子 1分 发布新闻 1分 + def static_project_score obj + score = obj.issues_count * 4 + obj.journals_count + obj.commits_count * 4 + obj.boards_count * 2 + obj.boards_reply_count + obj.news_count + obj.attachments_count * 5 + end + # 获取组织成员中文名字 def get_org_member_role_name member case member.roles[0].name @@ -2784,8 +2790,48 @@ int main(int argc, char** argv){ #代码提交数量 def changesets_num project g = Gitlab.client - project.gpid.nil? ? 0 : g.commits_total_count(project.gpid).count - # # commits_total_count(project.gpid) + project.gpid.nil? ? 0 : g.project(project.gpid).commit_count # project.changesets.count end + + #课程动态的更新 + def update_course_activity type, id + course_activity = CourseActivity.where("course_act_type=? and course_act_id =?", type.to_s, id).first + if course_activity + course_activity.updated_at = Time.now + course_activity.save + end + end + #首页动态更新 + def update_user_activity type, id + user_activity = UserActivity.where("act_type=? and act_id =?", type.to_s, id).first + if user_activity + user_activity.updated_at = Time.now + user_activity.save + end + end + #项目动态更新 + def update_forge_activity type, id + forge_activity = ForgeActivity.where("forge_act_type=? and forge_act_id=?", type.to_s, id).first + if forge_activity + forge_activity.updated_at = Time.now + forge_activity.save + end + end + #组织动态更新 + def update_org_activity type , id + org_activity = OrgActivity.where("org_act_type=? and org_act_id =?", type.to_s, id).first + if org_activity + org_activity.updated_at = Time.now + org_activity.save + end + end + #个人动态更新 + def update_principal_activity type, id + principal_activity = PrincipalActivity.where("principal_act_type=? and principal_act_id =?", type.to_s, id).first + if principal_activity + principal_activity.updated_at = Time.now + principal_activity.save + end + end end diff --git a/app/helpers/courses_helper.rb b/app/helpers/courses_helper.rb index a1b119cb5..097a3c1a4 100644 --- a/app/helpers/courses_helper.rb +++ b/app/helpers/courses_helper.rb @@ -507,8 +507,10 @@ module CoursesHelper #课程实践年份下拉框 def course_time_option year type = [] + month = Time.now.month now_year = year.nil? ? Time.now.year : (Time.now.year <= year ? Time.now.year : year) - for i in (now_year..now_year + 10) + year = month < 3 ? now_year - 1 : now_year + for i in (year..year + 10) option = [] option << i option << i diff --git a/app/models/attachment.rb b/app/models/attachment.rb index d90b0368e..3088714ee 100644 --- a/app/models/attachment.rb +++ b/app/models/attachment.rb @@ -90,7 +90,7 @@ class Attachment < ActiveRecord::Base before_save :files_to_final_location,:act_as_course_activity after_create :office_conver, :be_user_score,:act_as_forge_activity,:create_attachment_ealasticsearch_index after_update :office_conver, :be_user_score,:update_attachment_ealasticsearch_index - after_destroy :delete_from_disk,:down_user_score,:delete_attachment_ealasticsearch_index + after_destroy :delete_from_disk,:down_user_score,:delete_attachment_ealasticsearch_index#, :decrease_attchments_count # add by nwb # 获取所有可公开的资源文件列表 @@ -617,6 +617,7 @@ class Attachment < ActiveRecord::Base self.__elasticsearch__.index_document end end + def update_attachment_ealasticsearch_index if self.is_public == 1 && ( ((self.container_type == 'Project' or self.container_type == 'Version') && Project.find(self.container_id).is_public == 1) || ( self.container_type == 'Course' && Course.find(self.container_id).is_public == 1) || @@ -632,12 +633,20 @@ class Attachment < ActiveRecord::Base end end end + def delete_attachment_ealasticsearch_index begin self.__elasticsearch__.delete_document rescue => e end end + + # def decrease_attchments_count + # if self.container_type == "Project" + # count = self.container.attachments_count + # #self.container.update_attribute(:attachments_count, self.container.attachments_count - 1) + # end + # end end # Delete the previous articles index in Elasticsearch diff --git a/app/models/blog_comment.rb b/app/models/blog_comment.rb index 27da33121..db28e55d6 100644 --- a/app/models/blog_comment.rb +++ b/app/models/blog_comment.rb @@ -17,6 +17,7 @@ class BlogComment < ActiveRecord::Base safe_attributes 'title', 'content',"sticky", "locked" after_save :add_user_activity + after_update :update_activity before_destroy :destroy_user_activity scope :like, lambda {|arg| @@ -28,6 +29,15 @@ class BlogComment < ActiveRecord::Base end } + #动态更新 + def update_activity + user_activity = UserActivity.where("act_type='BlogComment' and act_id =?",self.id).first + if user_activity + user_activity.updated_at = Time.now + user_activity.save + end + end + #在个人动态里面增加当前动态 def add_user_activity if self.parent_id.nil? #只有发博文才插入动态 diff --git a/app/models/course.rb b/app/models/course.rb index 0194a2a9d..4e3b4fff0 100644 --- a/app/models/course.rb +++ b/app/models/course.rb @@ -70,7 +70,7 @@ class Course < ActiveRecord::Base validates_length_of :description, :maximum => 10000 before_save :self_validate # 公开课程变成私有课程,所有资源都变成私有 - after_update :update_files_public,:update_course_ealasticsearch_index + after_update :update_files_public,:update_course_ealasticsearch_index,:update_activity after_create :create_board_sync, :act_as_course_activity, :act_as_course_message,:create_course_ealasticsearch_index before_destroy :delete_all_members,:delete_course_ealasticsearch_index @@ -428,6 +428,12 @@ class Course < ActiveRecord::Base end end end +#动态的更新 +def update_activity + update_course_activity(self.class, self.id) + update_user_activity(self.class, self.id) + update_org_activity(self.class, self.id) +end # Delete the previous articles index in Elasticsearch # Course.__elasticsearch__.client.indices.delete index: Course.index_name rescue nil diff --git a/app/models/forge_activity.rb b/app/models/forge_activity.rb index c98c5475b..310d194a0 100644 --- a/app/models/forge_activity.rb +++ b/app/models/forge_activity.rb @@ -20,8 +20,8 @@ class ForgeActivity < ActiveRecord::Base validates :forge_act_id,presence: true validates :forge_act_type, presence: true has_many :user_acts, :class_name => 'UserAcivity',:as =>:act - after_save :add_user_activity, :add_org_activity - before_destroy :destroy_user_activity, :destroy_org_activity + after_save :add_user_activity, :add_org_activity, :add_acts_count + before_destroy :destroy_user_activity, :destroy_org_activity, :decrease_acts_count #在个人动态里面增加当前动态 def add_user_activity @@ -45,6 +45,21 @@ class ForgeActivity < ActiveRecord::Base end end + # 更新动态数 + def add_acts_count + if self.project + count = self.project.acts_count + 1 + self.project.update_attribute(:acts_count, count) + end + end + + def decrease_acts_count + if self.project + count = self.project.acts_count - 1 + self.project.update_attribute(:acts_count, count) + end + end + def add_org_activity org_activity = OrgActivity.where("org_act_type = '#{self.forge_act_type.to_s}' and org_act_id = #{self.forge_act_id}").first if org_activity diff --git a/app/models/homework_common.rb b/app/models/homework_common.rb index 0ad667bd1..f8e222b0f 100644 --- a/app/models/homework_common.rb +++ b/app/models/homework_common.rb @@ -26,6 +26,7 @@ class HomeworkCommon < ActiveRecord::Base :author => :author, :url => Proc.new {|o| {:controller => 'student_work', :action => 'index', :homework => o.id}} after_create :act_as_activity, :send_mail, :act_as_course_message + after_update :update_activity after_save :act_as_course_activity after_destroy :delete_kindeditor_assets @@ -60,7 +61,12 @@ class HomeworkCommon < ActiveRecord::Base end end end - + #动态的更新 + def update_activity + update_course_activity(self.class, self.id) + update_user_activity(self.class, self.id) + update_org_activity(self.class, self.id) + end #删除对应的图片 def delete_kindeditor_assets delete_kindeditor_assets_from_disk self.id,OwnerTypeHelper::HOMEWORKCOMMON diff --git a/app/models/issue.rb b/app/models/issue.rb index 5ecb3e36f..e898296af 100644 --- a/app/models/issue.rb +++ b/app/models/issue.rb @@ -83,9 +83,9 @@ class Issue < ActiveRecord::Base attr_reader :current_journal # fq - after_create :act_as_activity,:be_user_score_new_issue,:act_as_forge_activity, :act_as_forge_message, :act_as_at_message - after_update :be_user_score - after_destroy :down_user_score + after_create :act_as_activity,:be_user_score_new_issue,:act_as_forge_activity, :act_as_forge_message, :act_as_at_message, :add_issues_count + after_update :be_user_score,:update_activity + after_destroy :down_user_score, :decrease_issues_count # after_create :be_user_score # end @@ -126,6 +126,12 @@ class Issue < ActiveRecord::Base after_save :after_create_from_copy after_destroy :update_parent_attributes + #动态的更新 + def update_activity + update_user_activity(self.class, self.id) + update_forge_activity(self.class, self.id) + update_org_activity(self.class, self.id) + end # fq def act_as_activity @@ -165,6 +171,18 @@ class Issue < ActiveRecord::Base end end + # 创建issue的时候,issues_count加1 + def add_issues_count + issue_count = self.project.issues_count + 1 + self.project.update_attribute(:issues_count, issue_count) + end + + # 删除issue的时候,issues_count减1 + def decrease_issues_count + issue_count = self.project.issues_count - 1 + self.project.update_attribute(:issues_count, issue_count) + end + # 更新缺陷 #def act_as_forge_message_update # unless self.author_id == self.assigned_to_id diff --git a/app/models/journal.rb b/app/models/journal.rb index e1464a703..62f0d1d69 100644 --- a/app/models/journal.rb +++ b/app/models/journal.rb @@ -48,14 +48,14 @@ class Journal < ActiveRecord::Base :conditions => "#{Journal.table_name}.journalized_type = 'Issue' AND" + "(#{JournalDetail.table_name}.prop_key = 'status_id' OR #{Journal.table_name}.notes <> '')"} - before_create :split_private_notes + before_create :split_private_notes, :add_journals_count # fq after_save :act_as_activity,:be_user_score, :act_as_forge_message, :act_as_at_message # end #after_destroy :down_user_score #before_save :be_user_score - after_destroy :down_user_score + after_destroy :down_user_score, :decrease_issues_journal_count scope :visible, lambda {|*args| user = args.shift || User.current @@ -214,4 +214,20 @@ class Journal < ActiveRecord::Base end end + + # 减少留言数量统计 + def decrease_issues_journal_count + unless self.issue.project.nil? + project = self.issue.project + project.update_attribute(:journals_count, project.journals_count - 1) + end + end + + # issue留言总数更新 + def add_journals_count + unless self.issue.project.nil? && self.journalized_type == "Issue" + project = self.issue.project + project.update_attribute(:journals_count, project.journals_count + 1) + end + end end diff --git a/app/models/journals_for_message.rb b/app/models/journals_for_message.rb index d3e76addc..9e0ce2dd2 100644 --- a/app/models/journals_for_message.rb +++ b/app/models/journals_for_message.rb @@ -70,12 +70,21 @@ class JournalsForMessage < ActiveRecord::Base validates :notes, presence: true, if: :is_homework_jour? after_create :act_as_activity, :act_as_course_activity, :act_as_course_message, :act_as_at_message, :act_as_user_feedback_message, :act_as_principal_activity, :act_as_student_score after_create :reset_counters! + after_update :update_ativity after_destroy :reset_counters! after_save :be_user_score after_destroy :down_user_score # default_scope { where('m_parent_id IS NULL') } + #动态的更新 + def update_activity + update_course_activity(self.class, self.id) + update_user_activity(self.class, self.id) + update_forge_activity(self.class, self.id) + update_org_activity(self.class, self.id) + update_principal_activity(self.class, self.id) + end def self.create_by_user? user if user.anonymous? return false diff --git a/app/models/message.rb b/app/models/message.rb index 3bb08f481..2a83011f1 100644 --- a/app/models/message.rb +++ b/app/models/message.rb @@ -36,6 +36,8 @@ class Message < ActiveRecord::Base has_many :forge_acts, :class_name => 'ForgeActivity',:as =>:forge_act ,:dependent => :destroy # 课程动态 has_many :course_acts, :class_name => 'CourseActivity',:as =>:course_act ,:dependent => :destroy + has_many :user_acts, :class_name => 'UserActivity',:as =>:user_act ,:dependent => :destroy + # end # 课程/项目 消息 has_many :course_messages, :class_name =>'CourseMessage', :as => :course_message, :dependent => :destroy @@ -74,9 +76,9 @@ class Message < ActiveRecord::Base validates_length_of :subject, :maximum => 255 validate :cannot_reply_to_locked_topic, :on => :create - after_create :add_author_as_watcher, :reset_counters! - after_update :update_messages_board - after_destroy :reset_counters!,:down_user_score,:delete_kindeditor_assets + after_create :add_author_as_watcher, :reset_counters!, :add_boards_count + after_update :update_messages_board, :update_activity + after_destroy :reset_counters!,:down_user_score,:delete_kindeditor_assets, :decrease_boards_count after_create :act_as_activity,:act_as_course_activity,:be_user_score,:act_as_forge_activity, :act_as_system_message, :send_mail, :act_as_student_score, :act_as_at_message #before_save :be_user_score @@ -125,6 +127,20 @@ class Message < ActiveRecord::Base end end + # 发帖精辟更新发帖总数 + def add_boards_count + if self.project + # 讨论区 + if self.parent_id.nil? + count = self.project.boards_count + 1 + self.project.update_attribute(:boards_count, count) + else # 回复 + count = self.project.boards_reply_count + 1 + self.project.update_attribute(:boards_reply_count, count) + end + end + end + def reset_counters! if parent && parent.id Message.update_all({:last_reply_id => parent.children.maximum(:id)}, {:id => parent.id}) @@ -180,6 +196,13 @@ class Message < ActiveRecord::Base def get_notify_is_read() return @notify_is_read end + #动态的更新 + def update_activity + update_course_activity(self.class, self.id) + update_user_activity(self.class, self.id) + update_forge_activity(self.class, self.id) + update_org_activity(self.class, self.id) + end private @@ -303,6 +326,20 @@ class Message < ActiveRecord::Base delete_kindeditor_assets_from_disk self.id,OwnerTypeHelper::MESSAGE end + # 删除帖子的时候更新帖子总数, 删除回复的时候总数不减少 + def decrease_boards_count + if self.project && self.parent_id.nil? + # 讨论区 + if self.parent_id.nil? + count = self.project.boards_count - 1 + self.project.update_attribute(:boards_count, count) + else # 回复 + count = self.project.boards_reply_count - 1 + self.project.update_attribute(:boards_reply_count, count) + end + end + end + # 课程成员得分(英雄榜) def act_as_student_score if self.course diff --git a/app/models/news.rb b/app/models/news.rb index a7407c91f..4903003e8 100644 --- a/app/models/news.rb +++ b/app/models/news.rb @@ -55,9 +55,9 @@ class News < ActiveRecord::Base :author_key => :author_id acts_as_watchable - after_create :act_as_activity,:act_as_forge_activity, :act_as_course_activity,:act_as_system_message, :add_author_as_watcher, :send_mail - - after_destroy :delete_kindeditor_assets + after_create :act_as_activity,:act_as_forge_activity, :act_as_course_activity,:act_as_system_message, :add_author_as_watcher, :send_mail, :add_news_count + after_update :update_activity + after_destroy :delete_kindeditor_assets, :decrease_news_count scope :visible, lambda {|*args| includes(:project).where(Project.allowed_to_condition(args.shift || User.current, :view_news, *args)) @@ -68,6 +68,14 @@ class News < ActiveRecord::Base } safe_attributes 'title', 'summary', 'description', 'sticky' + #动态的更新 + def update_activity + update_course_activity(self.class, self.id) + update_user_activity(self.class, self.id) + update_org_activity(self.class, self.id) + update_forge_activity(self.class, self.id) + end + def visible?(user=User.current) !user.nil? && user.allowed_to?(:view_news, project) end @@ -107,10 +115,17 @@ class News < ActiveRecord::Base end private + def add_news_count + if self.project + count = self.project.news_count + 1 + self.project.update_attribute(:news_count, count) + end + end def add_author_as_watcher Watcher.create(:watchable => self, :user => author) end + ## fq def act_as_activity self.acts << Activity.new(:user_id => self.author_id) @@ -161,6 +176,13 @@ class News < ActiveRecord::Base delete_kindeditor_assets_from_disk self.id,OwnerTypeHelper::NEWS end + def decrease_news_count + if self.project + count = self.project.news_count - 1 + self.project.update_attribute(:news_count, count) + end + end + def send_mail Mailer.run.news_added(self) if Setting.notified_events.include?('news_added') end diff --git a/app/models/org_document_comment.rb b/app/models/org_document_comment.rb index c1619fc6e..75db910c3 100644 --- a/app/models/org_document_comment.rb +++ b/app/models/org_document_comment.rb @@ -8,6 +8,16 @@ class OrgDocumentComment < ActiveRecord::Base acts_as_attachable has_many :org_acts, :class_name => 'OrgActivity',:as =>:org_act ,:dependent => :destroy after_create :document_save_as_org_activity + after_update :update_activity + + #动态的更新 + def update_activity + org_activity = OrgActivity.where("org_act_type='OrgDocumentComment' and org_act_id =?", id).first + if org_activity + org_activity.updated_at = Time.now + org_activity.save + end + end def document_save_as_org_activity if(self.parent().nil?) diff --git a/app/models/poll.rb b/app/models/poll.rb index 67bb9f5a8..41bfe8a72 100644 --- a/app/models/poll.rb +++ b/app/models/poll.rb @@ -14,7 +14,7 @@ class Poll < ActiveRecord::Base # 课程消息 has_many :course_messages, :class_name =>'CourseMessage', :as => :course_message, :dependent => :destroy after_save :act_as_course_message, :act_as_activity, :act_as_course_activity - + after_update :update_activity acts_as_event :title => Proc.new {|o| "#{l(:label_course_poll)}: #{o.polls_name}" }, :description => :polls_description, :datetime => :published_at, @@ -32,6 +32,13 @@ class Poll < ActiveRecord::Base self.acts << Activity.new(:user_id => self.user_id) end + #动态的更新 + def update_activity + update_course_activity(self.class, self.id) + update_user_activity(self.class, self.id) + update_org_activity(self.class, self.id) + end + #课程动态公共表记录 def act_as_course_activity if self.polls_type == "Course" diff --git a/app/models/project.rb b/app/models/project.rb index cd4036810..f17124478 100644 --- a/app/models/project.rb +++ b/app/models/project.rb @@ -155,7 +155,7 @@ class Project < ActiveRecord::Base # 创建project之后默认创建一个board,之后的board去掉了board的概念 after_create :create_board_sync,:acts_as_forge_activities,:create_project_ealasticsearch_index before_destroy :delete_all_members,:delete_project_ealasticsearch_index - after_update :update_project_ealasticsearch_index + # after_update :update_project_ealasticsearch_index def remove_references_before_destroy return if self.id.nil? Watcher.delete_all ['watchable_id = ?', id] @@ -1223,21 +1223,21 @@ class Project < ActiveRecord::Base self.__elasticsearch__.index_document end end - def update_project_ealasticsearch_index - if self.is_public #如果是初次更新成为公开的情况,会报错,那么这条记录尚未被索引过。没有报错就是更新的其他属性 - begin - self.__elasticsearch__.update_document - rescue => e - self.__elasticsearch__.index_document - end - else #如果是更新成为私有的,那么索引就要被删除 - begin - self.__elasticsearch__.delete_document - rescue => e - - end - end - end + # def update_project_ealasticsearch_index + # if self.is_public #如果是初次更新成为公开的情况,会报错,那么这条记录尚未被索引过。没有报错就是更新的其他属性 + # begin + # self.__elasticsearch__.update_document + # rescue => e + # self.__elasticsearch__.index_document + # end + # else #如果是更新成为私有的,那么索引就要被删除 + # begin + # self.__elasticsearch__.delete_document + # rescue => e + # + # end + # end + # end def delete_project_ealasticsearch_index begin self.__elasticsearch__.delete_document diff --git a/app/views/blogs/_article.html.erb b/app/views/blogs/_article.html.erb index 0b813c4a7..0c43d0542 100644 --- a/app/views/blogs/_article.html.erb +++ b/app/views/blogs/_article.html.erb @@ -65,9 +65,13 @@        <% end%>
-
+
发帖时间:<%= format_time(activity.created_on) %>
+
+ 更新时间:<%= format_time(UserActivity.where("act_type='#{activity.class}' and act_id =#{activity.id}").first.updated_at) %> +
+
<% if activity.parent_id.nil? %> diff --git a/app/views/boards/_course_show_detail.html.erb b/app/views/boards/_course_show_detail.html.erb index 804f6543e..1898fce02 100644 --- a/app/views/boards/_course_show_detail.html.erb +++ b/app/views/boards/_course_show_detail.html.erb @@ -40,7 +40,7 @@ } $(function () { - init_activity_KindEditor_data(<%= topic.id%>, null, "87%"); + init_activity_KindEditor_data(<%= topic.id%>, null, "87%", "<%=topic.class.to_s%>"); }); <% if topic %> diff --git a/app/views/files/_course_list.html.erb b/app/views/files/_course_list.html.erb index 9c3c1efe2..f1d96d22c 100644 --- a/app/views/files/_course_list.html.erb +++ b/app/views/files/_course_list.html.erb @@ -20,7 +20,7 @@
- 上传时间:<%= format_date(file.created_on)%> + 上传时间:<%= format_time(file.created_on)%> <% if file.tag_list.length > 0%> 上传类型:<%= file.tag_list[0] %> <% end %> diff --git a/app/views/files/_project_list.html.erb b/app/views/files/_project_list.html.erb index 0d4b0f35e..391430126 100644 --- a/app/views/files/_project_list.html.erb +++ b/app/views/files/_project_list.html.erb @@ -19,7 +19,7 @@
- 上传时间:<%= format_date(file.created_on)%> + 上传时间:<%= format_time(file.created_on)%> <% if file.tag_list.length > 0%> 上传类型:<%= file.tag_list[0] %> <% end %> diff --git a/app/views/issues/_list.html.erb b/app/views/issues/_list.html.erb index e47967099..2a1ae56d4 100644 --- a/app/views/issues/_list.html.erb +++ b/app/views/issues/_list.html.erb @@ -24,14 +24,5 @@ <%= render :partial => 'users/project_issue', :locals => {:activity => issue, :user_activity_id => issue.id} %> <% end %> <% if issues.count == 10%> -
展开更多<%=link_to "", project_issues_path({:project_id => project.id}.merge(params)),:id => "more_issues_link",:remote => "true",:class => "none" %>
- <%#= link_to "点击展开更多",user_activities_path(@user.id,:type => type,:page => page),:id => "show_more_activities",:remote => "true",:class => "loadMore mt10 f_grey"%> + <%= link_to "点击展开更多",project_issues_path({:project_id => project.id}.merge(params)),:id => "show_more_issues",:remote => "true",:class => "loadMore mt10 f_grey"%> <% end%> - - - - \ No newline at end of file diff --git a/app/views/layouts/base_projects.html.erb b/app/views/layouts/base_projects.html.erb index 545b29073..8ecc6fb54 100644 --- a/app/views/layouts/base_projects.html.erb +++ b/app/views/layouts/base_projects.html.erb @@ -76,12 +76,13 @@
<% if @project.project_type == 0 %> - <% unless project_scores(@project) == 0 %> + <% unless static_project_score(@project) == 0 %> <%= l(:label_project_score)%> : - <%= link_to(format("%.2f" ,project_scores(@project) ).to_i, {:controller => 'projects', - :action => 'show_projects_score', - :remote => true, - :id => @project.id}, :class => "c_orange f14" ) %> + <%= link_to(format("%.2f" ,static_project_score(@project) ).to_i, + {:controller => 'projects', + :action => 'show_projects_score', + :remote => true, + :id => @project.id}, :class => "c_orange f14" ) %> <% end %> <% end %>
@@ -91,12 +92,11 @@ <%= l(:label_member) %>(<%= link_to "#{@project.members.count}", project_member_path(@project), :class => 'info_foot_num c_blue', :id => 'project_members_number' %>) <%= l(:label_user_watcher) %>(<%= link_to "#{@project.watcher_users.count}", {:controller=>"projects", :action=>"watcherlist", :id => @project.id}, :class => 'info_foot_num c_blue' %>) - <% attaments_num = @project.attachments.count %> <% unless @project.enabled_modules.where("name = 'files'").empty? %> <%= l(:project_module_attachments) %>( - <% attaments_num %> - <%= link_to "#{attaments_num}", project_files_path(@project), :class => 'info_foot_num c_blue', :id=>'project_files_count_info' %>) + <% @project.attachments_count %> + <%= link_to "#{@project.attachments_count}", project_files_path(@project), :class => 'info_foot_num c_blue', :id=>'project_files_count_info' %>) <% end %>
@@ -120,11 +120,11 @@
<% if @project.project_new_type == 1 || @project.project_new_type.nil? %> - <%= render :partial => 'projects/development_group', :locals => {:project => @project, :attaments_num => attaments_num} %> + <%= render :partial => 'projects/development_group', :locals => {:project => @project} %> <% elsif @project.project_new_type == 2 %> - <%= render :partial => 'projects/research_team', :locals => {:project => @project, :attaments_num => attaments_num} %> + <%= render :partial => 'projects/research_team', :locals => {:project => @project} %> <% else %> - <%= render :partial => 'projects/friend_group', :locals => {:project => @project, :attaments_num => attaments_num} %> + <%= render :partial => 'projects/friend_group', :locals => {:project => @project} %> <% end %>
@@ -213,19 +213,19 @@ if(data == 1) { $("#setting_project_type").replaceWith("<%= escape_javascript(project_type_link(l(:label_development_team), 1))%>"); - $("#project_memu_list").html('<%= escape_javascript(render(:partial => 'projects/development_group', :locals => {:project => @project, :attaments_num => attaments_num})) %>'); + $("#project_memu_list").html('<%= escape_javascript(render(:partial => 'projects/development_group', :locals => {:project => @project})) %>'); $("#close_light").attr("onClick","close_window('development_group');"); } else if(data == 2) { $("#setting_project_type").replaceWith("<%= escape_javascript(project_type_link(l(:label_research_group), 2))%>"); - $("#project_memu_list").html('<%= escape_javascript(render(:partial => 'projects/research_team', :locals => {:project => @project, :attaments_num => attaments_num})) %>'); + $("#project_memu_list").html('<%= escape_javascript(render(:partial => 'projects/research_team', :locals => {:project => @project})) %>'); $("#close_light").attr("onClick","close_window('research_group');"); } else if(data == 3) { $("#setting_project_type").replaceWith("<%= escape_javascript(project_type_link(l(:label_friend_organization), 3))%>"); - $("#project_memu_list").html('<%= escape_javascript(render(:partial => 'projects/friend_group', :locals => {:project => @project, :attaments_num => attaments_num})) %>'); + $("#project_memu_list").html('<%= escape_javascript(render(:partial => 'projects/friend_group', :locals => {:project => @project})) %>'); $("#close_light").attr("onClick","close_window('friend_organization');"); } else diff --git a/app/views/organizations/_org_course_create.html.erb b/app/views/organizations/_org_course_create.html.erb index dc1e0ee81..a5544ab07 100644 --- a/app/views/organizations/_org_course_create.html.erb +++ b/app/views/organizations/_org_course_create.html.erb @@ -17,9 +17,13 @@
<%= link_to activity.name, course_path(activity.id,:host=>Setting.host_course), :class => "postGrey" %>
-
+
创建时间:<%= format_time(activity.created_at) %>
+
+ 更新时间:<%= format_time(CourseActivity.where("course_act_type='#{activity.class}' and course_act_id =#{activity.id}").first.updated_at) %> +
+