diff --git a/app/controllers/users_controller.rb b/app/controllers/users_controller.rb index 989727825..f677bc4d4 100644 --- a/app/controllers/users_controller.rb +++ b/app/controllers/users_controller.rb @@ -45,14 +45,14 @@ class UsersController < ApplicationController :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, :user_resource,:user_resource_create,:user_resource_delete,:rename_resource,:search_user_course,:add_exist_file_to_course, - :search_user_project,:resource_preview,:resource_search,:add_exist_file_to_project,:user_messages] + :search_user_project,:resource_preview,:resource_search,:add_exist_file_to_project,:user_messages, :user_messages_new] #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, :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,:user_resource, - :user_courses4show,:user_projects4show,:user_course_activities,:user_project_activities,:user_feedback4show,:user_visitorlist,:user_messages,:edit_brief_introduction] + :user_courses4show,:user_projects4show,:user_course_activities,:user_project_activities,:user_feedback4show,:user_visitorlist,:user_messages,:edit_brief_introduction, :user_messages_new] before_filter :auth_user_extension, only: :show #before_filter :rest_user_score, only: :show #before_filter :select_entry, only: :user_projects @@ -122,6 +122,7 @@ class UsersController < ApplicationController @new_message_count = @user.forge_messages.count + @user.memo_messages.count + @user.course_messages.count + @user.user_feedback_messages.count case params[:type] when nil + @all_message = MessageAll.where("user_id =?",@user).order("created_at desc") @user_course_messages = CourseMessage.where("user_id =?",@user).order("created_at desc") @user_forge_messages = ForgeMessage.where("user_id =?",@user).order("created_at desc") @user_memo_messages = MemoMessage.where("user_id =?",@user).order("created_at desc") @@ -181,6 +182,78 @@ class UsersController < ApplicationController end end + def user_messages_new + unless User.current.logged? + render_403 + return + end + # 当前用户查看消息,则设置消息为已读 + course_querys = @user.course_messages + forge_querys = @user.forge_messages + user_querys = @user.user_feedback_messages + forum_querys = @user.memo_messages + # if User.current.id == @user.id + # course_querys.update_all(:viewed => true) + # forge_querys.update_all(:viewed => true) + # user_querys.update_all(:viewed => true) + # forum_querys.update_all(:viewed => true) + # end + @new_message_count = @user.forge_messages.count + @user.memo_messages.count + @user.course_messages.count + @user.user_feedback_messages.count + case params[:type] + when nil + @user_message_all = MessageAll.where("user_id =?", @user).order("created_at desc") + @user_message_all_count = @user_message_all.count + when 'homework' + @user_course_messages = CourseMessage.where("course_message_type =? and user_id =?", "HomeworkCommon", @user).order("created_at desc") + @user_course_messages_count = @user_course_messages.count + when 'course_message' + @user_course_messages = CourseMessage.where("course_message_type =? and user_id =?", "Message", @user).order("created_at desc") + @user_course_messages_count = @user_course_messages.count + when 'forge_message' + @user_forge_messages = ForgeMessage.where("forge_message_type =? and user_id =?", "Message", @user).order("created_at desc") + @user_forge_messages_count = @user_forge_messages.count + when 'course_news' + @user_course_messages = CourseMessage.where("course_message_type =? and user_id =?", "News", @user).order("created_at desc") + @user_course_messages_count = @user_course_messages.count + when 'forge_news' + @user_forge_messages = ForgeMessage.where("forge_message_type =? and user_id =?", "News", @user).order("created_at desc") + @user_forge_messages_count = @user_forge_messages.count + when 'course_news_reply' + @user_course_messages = CourseMessage.where("course_message_type =? and user_id =?", "Comment", @user).order("created_at desc") + @user_course_messages_count = @user_course_messages.count + when 'forge_news_reply' + @user_forge_messages = ForgeMessage.where("forge_message_type =? and user_id =?", "Comment", @user).order("created_at desc") + @user_forge_messagess_count = @user_forge_messages.count + when 'poll' + @user_course_messages = CourseMessage.where("course_message_type =? and user_id =?", "Poll", @user).order("created_at desc") + @user_course_messages_count = @user_course_messages.count + when 'works_reviewers' + @user_course_messages = CourseMessage.where("course_message_type =? and user_id =?", "StudentWorksScore", @user).order("created_at desc") + @user_course_messages_count = @user_course_messages.count + when 'works_reply' + @user_course_messages = CourseMessage.where("course_message_type =? and user_id =?", "JournalsForMessage", @user).order("created_at desc") + @user_course_messages_count = @user_course_messages.count + when 'issue' + @user_forge_messages = ForgeMessage.where("forge_message_type =? and user_id =?", "Issue", @user).order("created_at desc") + @user_forge_messages_count = @user_forge_messages.count + when 'issue_update' # 缺陷状态更新、留言 + @user_forge_messages = ForgeMessage.where("forge_message_type =? and user_id =?", "Journal", @user).order("created_at desc") + @user_forge_messages_count = @user_forge_messages.count + when 'forum' + @user_memo_messages = MemoMessage.where("memo_type =? and user_id =?", "Memo", @user).order("created_at desc") + @user_memo_messages_count = @user_memo_messages.count + when 'user_feedback' + @user_feedback_messages = UserFeedbackMessage.where("journals_for_message_type =? and user_id =?", "JournalsForMessage", @user).order("created_at desc") + @user_feedback_messages_count = @user_feedback_messages.count + else + render_404 + return + end + respond_to do |format| + format.html{render :layout=>'new_base_user'} + end + end + def user_projects_index if User.current.admin? memberships = @user.memberships.all(conditions: "projects.project_type = #{Project::ProjectType_project}").first diff --git a/app/models/course_message.rb b/app/models/course_message.rb index 59089829d..c15c2fc65 100644 --- a/app/models/course_message.rb +++ b/app/models/course_message.rb @@ -5,8 +5,15 @@ class CourseMessage < ActiveRecord::Base belongs_to :course_message ,:polymorphic => true belongs_to :course belongs_to :user + has_many :message_alls, :class_name => 'MessageAll',:as =>:message, :dependent => :destroy + validates :user_id,presence: true validates :course_id,presence: true validates :course_message_id,presence: true validates :course_message_type, presence: true + after_create :add_user_message + + def add_user_message + self.message_alls << MessageAll.new(:user_id => self.user_id) + end end diff --git a/app/models/forge_message.rb b/app/models/forge_message.rb index 3f83383e9..2d05972ab 100644 --- a/app/models/forge_message.rb +++ b/app/models/forge_message.rb @@ -13,24 +13,15 @@ class ForgeMessage < ActiveRecord::Base belongs_to :forge_message ,:polymorphic => true belongs_to :project belongs_to :user - has_many :message_alls, :class_name => 'MessageAll',:as =>:message + has_many :message_alls, :class_name => 'MessageAll',:as =>:message, :dependent => :destroy + validates :user_id,presence: true validates :project_id,presence: true validates :forge_message_id,presence: true validates :forge_message_type, presence: true - after_save :add_user_activity + after_create :add_user_message - def add_user_activity - message_all = MessageAll.where("message_type = '#{self.class.to_s}' and message_id = '#{self.id}'").first - if message_all - message_all.save - else - message_all = MessageAll.new - message_all.message_id = self.id - message_all.message_type = self.class.to_s - message_all.container_type = "Project" - message_all.container_id = self.project_id - message_all.save - end + def add_user_message + self.message_alls << MessageAll.new(:user_id => self.user_id) end end diff --git a/app/models/memo.rb b/app/models/memo.rb index f1f9029c1..c30616558 100644 --- a/app/models/memo.rb +++ b/app/models/memo.rb @@ -79,7 +79,7 @@ class Memo < ActiveRecord::Base receivers << self.forum.creator end # 添加发帖人 - if self.forum.creator_id != self.parent.author_id + if self.author_id != self.parent.author_id receivers << self.parent.author end end diff --git a/app/models/memo_message.rb b/app/models/memo_message.rb index 051fac317..9be00ce14 100644 --- a/app/models/memo_message.rb +++ b/app/models/memo_message.rb @@ -3,9 +3,15 @@ class MemoMessage < ActiveRecord::Base belongs_to :memo belongs_to :user + has_many :message_alls, :class_name => 'MessageAll',:as =>:message, :dependent => :destroy validates :user_id,presence: true validates :forum_id,presence: true validates :memo_id,presence: true validates :memo_type, presence: true + after_create :add_user_message + + def add_user_message + self.message_alls << MessageAll.new(:user_id => self.user_id) + end end diff --git a/app/models/message_all.rb b/app/models/message_all.rb index 28982d004..6e0276875 100644 --- a/app/models/message_all.rb +++ b/app/models/message_all.rb @@ -1,7 +1,5 @@ class MessageAll < ActiveRecord::Base - attr_accessible :container_id, :container_type, :message_id, :message_type + attr_accessible :message_id, :message_type, :user_id # 虚拟关联---项目消息表/课程消息表/用户留言消息表/贴吧消息表 belongs_to :message ,:polymorphic => true - # 虚拟关联---项目/课程 - belongs_to :container ,:polymorphic => true end diff --git a/app/models/user_feedback_message.rb b/app/models/user_feedback_message.rb index 98b53e973..1dda157d6 100644 --- a/app/models/user_feedback_message.rb +++ b/app/models/user_feedback_message.rb @@ -3,8 +3,14 @@ class UserFeedbackMessage < ActiveRecord::Base belongs_to :journals_for_message belongs_to :user + has_many :message_alls, :class_name => 'MessageAll',:as =>:message, :dependent => :destroy validates :user_id,presence: true validates :journals_for_message_id,presence: true validates :journals_for_message_type, presence: true + after_create :add_user_message + + def add_user_message + self.message_alls << MessageAll.new(:user_id => self.user_id) + end end diff --git a/app/views/users/user_messages_new.html.erb b/app/views/users/user_messages_new.html.erb new file mode 100644 index 000000000..d861f867d --- /dev/null +++ b/app/views/users/user_messages_new.html.erb @@ -0,0 +1,233 @@ +
+
+
+
消息
+ +
+<% if params[:type].nil? %> +
+ 有 8 封未读全部设为已读 +
+<% end %> +
+<% if @new_message_count >0 %> + <%# 课程消息 %> + <% unless @user_message_all.nil? %> + <% @user_message_all.each do |uma| %> + <% if uma.message.course_message_type == "News" %> +
    +
  • <%= image_tag(url_to_avatar(uma.message.course_message.author), :width => "30", :height => "30") %>
  • +
  • <%=link_to uma.message.course_message.author, user_path(uma.message.course_message.author), :class => "newsBlue" %>
  • +
  • ">发布通知
  • +
  • + <%= link_to uma.message.course_message.title, {:controller => 'news', :action => 'show', :id => uma.message.course_message.id }, + :class =>"#{uma.message.viewed == 0 ? "newsBlack" : "newsGrey"}", + :title => "#{uma.message.course_message.title}" %>
  • +
  • <%= time_tag(uma.message.course_message.created_on).html_safe %>
  • +
+ <% end %> + <% if uma.message.course_message_type == "Comment" %> +
    +
  • <%= image_tag(url_to_avatar(uma.message.course_message.author), :width => "30", :height => "30") %>
  • +
  • <%=link_to uma.message.course_message.author, user_path(uma.message.course_message.author), :class => "newsBlue" %>
  • +
  • ">回复了通知
  • +
  • + <%= link_to uma.message.course_message.comments.html_safe, {:controller => 'news', :action => 'show', :id => uma.message.course_message.commented.id }, + :class =>"#{uma.message.viewed == 0 ? "newsBlack" : "newsGrey"}", + :title => "#{uma.message.course_message.comments.html_safe}" %>
  • +
  • <%= time_tag(uma.message.course_message.created_on).html_safe %>
  • +
+ <% end %> + <% if uma.message.course_message_type == "HomeworkCommon" %> + + <% end %> + <% if uma.message.course_message_type == "Poll" %> + + <% end %> + <% if uma.message.course_message_type == "Message" %> + + <% end %> + <% if uma.message.course_message_type == "StudentWorksScore" %> + + <% end %> + <% if uma.message.course_message_type == "JournalsForMessage" %> + + <% end %> + + + <% if uma.message.forge_message_type == "Issue" %> + + <% end %> + <% if uma.message.forge_message_type == "Journal" %> + + <% end %> + <% if uma.message.forge_message_type == "Message" %> + + <% end %> + <% if uma.message.forge_message_type == "News" %> + + <% end %> + <% if uma.message.forge_message_type == "Comment" %> +
    +
  • <%= image_tag(url_to_avatar(uma.message.forge_message.author), :width => "30", :height => "30") %>
  • +
  • <%=link_to uma.message.forge_message.author, user_path(uma.message.forge_message.author), :class => "newsBlue" %>
  • +
  • 回复了新闻
  • +
  • + <%= link_to "#{uma.message.forge_message.comments.html_safe}", + {:controller => 'news', :action => 'show', :id => uma.message.forge_message.commented.id },:class =>"#{uma.message.viewed == 0 ? "newsBlack" : "newsGrey"}", :title => "#{uma.message.forge_message.comments.html_safe}"%>
  • +
  • <%= time_tag(uma.message.forge_message.created_on).html_safe %>
  • +
+ <% end %> + + + <% end %> + <% end %> + + + <%# 公共贴吧 %> + + <%# 用户留言消息 %> + +<% else %> +
暂无消息!
+<% end %> +
+
+
+
+ + + + + + + + + + + + diff --git a/config/routes.rb b/config/routes.rb index 61bac37cb..7ba09a83a 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -364,7 +364,10 @@ RedmineApp::Application.routes.draw do end match 'users/:id/user_newfeedback', :to => 'users#user_newfeedback', :via => :get, :as => "feedback" match 'users/:id/user_projects', :to => 'users#user_projects', :via => :get + #消息 match 'users/:id/user_messages', :to => 'users#user_messages', :via => :get, :as => "user_message" + match 'users/:id/user_messages_new', :to => 'users#user_messages_new', :via => :get, :as => "user_messages_new" + #match 'users/:id/user_messages/:homework', :to => 'users#user_messages_homework', :via => :get, :as => "user_message_homewrok" diff --git a/db/migrate/20150824092300_create_message_alls.rb b/db/migrate/20150824133916_create_message_alls.rb similarity index 76% rename from db/migrate/20150824092300_create_message_alls.rb rename to db/migrate/20150824133916_create_message_alls.rb index 0a1d51a78..aa4a986a8 100644 --- a/db/migrate/20150824092300_create_message_alls.rb +++ b/db/migrate/20150824133916_create_message_alls.rb @@ -1,10 +1,9 @@ class CreateMessageAlls < ActiveRecord::Migration def change create_table :message_alls do |t| - t.string :message_type + t.integer :user_id t.integer :message_id - t.string :container_type - t.integer :container_id + t.string :message_type t.timestamps end diff --git a/db/schema.rb b/db/schema.rb index 6301249d5..0bd96d52d 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -11,15 +11,14 @@ # # It's strongly recommended to check this file into your version control system. -ActiveRecord::Schema.define(:version => 20150824092300) do +ActiveRecord::Schema.define(:version => 20150824133916) do create_table "activities", :force => true do |t| - t.integer "act_id", :null => false - t.string "act_type", :null => false - t.integer "user_id", :null => false - t.integer "activity_container_id" - t.string "activity_container_type", :default => "" - t.datetime "created_at" + t.integer "act_id", :null => false + t.string "act_type", :null => false + t.integer "user_id", :null => false + t.integer "activity_container_id" + t.string "activity_container_type", :default => "" end add_index "activities", ["act_id", "act_type"], :name => "index_activities_on_act_id_and_act_type" @@ -572,16 +571,6 @@ ActiveRecord::Schema.define(:version => 20150824092300) do t.datetime "updated_at", :null => false end - create_table "forum_messages", :force => true do |t| - t.integer "user_id" - t.integer "forum_id" - t.integer "memo_message_id" - t.string "memo_message_type" - t.integer "viewed" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - end - create_table "forums", :force => true do |t| t.string "name", :null => false t.text "description" @@ -885,12 +874,19 @@ ActiveRecord::Schema.define(:version => 20150824092300) do end create_table "message_alls", :force => true do |t| - t.string "message_type" + t.integer "user_id" t.integer "message_id" - t.string "container_type" - t.integer "container_id" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false + t.string "message_type" + t.datetime "created_at", :null => false + t.datetime "updated_at", :null => false + end + + create_table "message_publics", :force => true do |t| + t.integer "message_id" + t.string "massage_type" + t.integer "user_id" + t.datetime "created_at", :null => false + t.datetime "updated_at", :null => false end create_table "messages", :force => true do |t| @@ -1543,7 +1539,6 @@ ActiveRecord::Schema.define(:version => 20150824092300) do t.string "identity_url" t.string "mail_notification", :default => "", :null => false t.string "salt", :limit => 64 - t.integer "gid" end add_index "users", ["auth_source_id"], :name => "index_users_on_auth_source_id" diff --git a/spec/factories/message_alls.rb b/spec/factories/message_alls.rb index 4805f0de3..c14c153cf 100644 --- a/spec/factories/message_alls.rb +++ b/spec/factories/message_alls.rb @@ -1,9 +1,8 @@ FactoryGirl.define do factory :message_all do - message_type "MyString" + user_id 1 message_id 1 -container_type "MyString" -container_id 1 +message_type "MyString" end end