Guest User

Untitled

a guest
Apr 13th, 2018
105
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.20 KB | None | 0 0
  1. ## db/migrate/001_create_messages.rb
  2.  
  3. class CreateMessages < ActiveRecord::Migration
  4.  
  5. def self.up
  6. create_table :messages, :force => true do |t|
  7. t.column "sender_id", :integer, :null => false
  8. t.column "receiver_id", :integer, :null => false
  9. t.column "subject", :string, :null => false
  10. t.column "body", :text
  11. t.column "created_at", :datetime
  12. t.column "read_at", :datetime
  13. t.column "sender_deleted", :boolean
  14. t.column "receiver_deleted", :boolean
  15. t.column "sender_purged", :boolean
  16. t.column "receiver_purged", :boolean
  17. end
  18. add_index(:messages, "sender_id")
  19. add_index(:messages, "receiver_id")
  20. end
  21.  
  22. def self.down
  23. drop_table :messages
  24. end
  25.  
  26. end
  27.  
  28. ## app/models/message.rb
  29.  
  30. class Message < ActiveRecord::Base
  31. belongs_to :sender,
  32. :foreign_key => 'sender_id',
  33. :class_name => 'User'
  34.  
  35. belongs_to :receiver,
  36. :foreign_key => 'receiver_id',
  37. :class_name => 'User'
  38.  
  39. acts_as_textiled :body
  40.  
  41. validates_presence_of :subject, :body
  42.  
  43. cattr_reader :per_page
  44. @@per_page = 10
  45.  
  46. def read?
  47. !self.read_at.nil?
  48. end
  49.  
  50. end
  51.  
  52. ## app/controllers/messages_controller.rb
  53.  
  54. class MessagesController < ApplicationController
  55. before_filter :login_required, :find_user_and_message
  56. before_filter :protect_message, :except => [:new, :create]
  57.  
  58. tab :hub
  59. tab :community, :only => :new
  60.  
  61. def index
  62. @messages = @user.received_messages.paginate :page => params[:page]
  63. end
  64.  
  65. def sent
  66. @messages = @user.sent_messages.paginate :page => params[:page]
  67. end
  68.  
  69. def show
  70. if current_user == @message.receiver
  71. @message.read_at = Time.now
  72. @message.save
  73. end
  74. end
  75.  
  76. def new
  77. @message = Message.new
  78. end
  79.  
  80. def reply
  81. @old_message = @message
  82. @old_message.textiled = false
  83. @message = Message.new
  84. @message.receiver_id = @old_message.sender_id
  85. @message.subject = "RE: #{@old_message.subject}"
  86. @message.textiled = false
  87. @message.body = ""
  88. @message.body += "\r\n\r\n\r\n--------------------"
  89. @message.body += "\r\nReceived from #{@old_message.sender.full_name} at #{@old_message.created_at}"
  90. @message.body += "\r\n\r\n#{@old_message.body}"
  91. render :action => 'new'
  92. end
  93.  
  94. def create
  95. message = Message.new(params[:message])
  96. recipient = message.receiver || @user
  97. current_user.send_message(recipient, message)
  98. respond_to do |format|
  99. format.html do
  100. flash[:notice] = 'Message Sent'
  101. redirect_to messages_path(current_user)
  102. false;
  103. end
  104. end
  105. rescue ActiveRecord::RecordInvalid
  106. render :action => 'new'
  107. end
  108.  
  109. def destroy
  110.  
  111. end
  112.  
  113. private
  114.  
  115. def find_user_and_message
  116. @user = User.find(params[:user_id])
  117. @message = params[:id].nil? ? nil : @message = Message.find(params[:id])
  118. end
  119.  
  120. def protect_message
  121. unless @user == current_user || @message && @user == @message.sender || @message && @user == @message.receiver
  122. flash[:error] = "You don't have permission to see that page!"
  123. redirect_to hub_url
  124. return false
  125. end
  126. end
  127.  
  128. end
  129.  
  130. ## app/models/user.rb
  131.  
  132. has_many :messages_as_sender, :foreign_key => 'sender_id', :class_name => 'Message', :order => 'created_at DESC'
  133. has_many :messages_as_receiver, :foreign_key => 'receiver_id', :class_name => 'Message', :order => 'created_at DESC'
  134. has_many :unread_messages, :foreign_key => 'receiver_id', :class_name => 'Message', :conditions => 'read_at IS NULL', :order => 'created_at DESC'
  135. has_many :read_messages, :foreign_key => 'receiver_id', :class_name => 'Message', :conditions => 'read_at IS NOT NULL', :order => 'created_at DESC'
  136.  
  137. # Alias for all received messages
  138. def received_messages
  139. self.messages_as_receiver
  140. end
  141.  
  142. # Alias for all sent messages
  143. def sent_messages
  144. self.messages_as_sender
  145. end
  146.  
  147. # Alias for unread messages
  148. def new_messages
  149. self.unread_messages
  150. end
  151.  
  152. # Alias for read messages
  153. def old_messages
  154. self.read_messages
  155. end
  156.  
  157. # Accepts a message object and flags the message as deleted by sender
  158. def delete_from_sent(message)
  159. if message.sender_id == self.id
  160. message.update_attribute :sender_deleted, true
  161. return true
  162. else
  163. return false
  164. end
  165. end
  166.  
  167. # Accepts a message object and flags the message as deleted by the sender
  168. def delete_from_received(message)
  169. if message.receiver_id == self.id
  170. message.update_attribute :receiver_deleted, true
  171. return true
  172. else
  173. return false
  174. end
  175. end
  176.  
  177. # Accepts a user object as the receiver, and a message
  178. # and creates a message relationship joining the two users
  179. def send_message(receiver, message)
  180. Message.create!(:sender => self, :receiver => receiver, :subject => message.subject, :body => message.body)
  181. end
  182.  
  183. ## config/routes.rb
  184.  
  185. # User resources
  186. map.resources :users, :member => { :change_email => :put, :change_password => :put } do |user|
  187. ...
  188. user.resources :messages, :collection => { :sent => :get }, :member => { :reply => :get }
  189. end
Add Comment
Please, Sign In to add comment