Witam,
poszukuję artykułu na temat obsługi poczty wewnętrznej, coś jak np w goldenline lub gotowego plugin - nic nie znalazłem na googlu
Witam,
poszukuję artykułu na temat obsługi poczty wewnętrznej, coś jak np w goldenline lub gotowego plugin - nic nie znalazłem na googlu
Posklejane na szybko, powinno działać.
Przychodzaca, wychodzaca, kosz, obustronne kasowanie wiadomosci zanim zostanie całkowicie usunieta jest umieszczana w koszu.
[code]# Table name: messages
class Message < ActiveRecord::Base
belongs_to :sender, :class_name => “User”, :foreign_key => “sender_id”
belongs_to :receiver, :class_name => “User”, :foreign_key => “receiver_id”
validates_presence_of :receiver_id, :subject, :body
def validate_on_create
u = User.find_by_id(receiver_id)
errors.add(:receiver_id, “nieprawidłowy właściciel wiadomości”) if u.nil?
end
def before_create
u = User.find_by_id(receiver_id)
self.receiver_id = u.id
self.subject.strip!
end
def after_create
User.increment_counter(:new_messages, self.receiver_id)
end
def sender
User.find(sender_id) || “”
end
def receiver
User.find(receiver_id) || “”
end
def sent_at
created_at
end
def new_messages?
new_messages > 0
end
end[/code]
[code]# Table name: users
class User < ActiveRecord::Base
has_many :messages_as_sender, :class_name => “Message”, :foreign_key => “sender_id”
has_many :messages_as_receiver, :class_name => “Message”, :foreign_key => “receiver_id”
has_many :users_who_messaged_me, :through => :messages_as_receiver, :source => :sender
has_many :users_whom_i_have_messaged, :through => :messages_as_sender, :source => :receiver
has_many :unread_messages, :through => :messages_as_receiver, :source => :sender, :conditions => “messages.read_at IS NULL”
has_many :read_messages, :through => :messages_as_receiver, :source => :sender, :conditions => “messages.read_at IS NOT NULL”
has_many :inbox_messages, :class_name => “Message”, :foreign_key => “receiver_id”, :conditions => “receiver_deleted IS NULL”, :order => “created_at DESC”
has_many :outbox_messages, :class_name => “Message”, :foreign_key => “sender_id”, :conditions => “sender_deleted IS NULL”, :order => “created_at DESC”
has_many :trashbin_messages, :class_name => “Message”, :foreign_key => “receiver_id”, :conditions => “receiver_deleted = true and receiver_purged IS NULL”, :order => “created_at DESC”
[code]class MessagesController < BaseController
before_filter :login_required
verify :method => :post, :only => [:create, :reply], :redirect_to => :messages_url
verify :method => :delete, :only => [:destroy], :redirect_to => :messages_url
def index
inbox
end
def new
@user = User.find_by_id_or_login(params[:user_id])
@message = Message.new
end
def show
@message = Message.find_by_id(params[:id])
if !@message.nil? && can_view(@message)
if current_user.id == @message.receiver_id
if @message.read_at.blank?
User.decrement_counter(:new_messages, current_user.id)
current_user.reload
end
@message.read_at = Time.now
@message.save(false)
end
else
flash[:notice] = "Nie możesz przeglądać tej wiadomości"
redirect_to(:action => "inbox")
end
end
def create
@message = Message.new(params[:message])
@message.sender = current_user
@user = @message.receiver
if @message.save
redirect_to :action => "outbox"
else
render :action => "new"
end
end
def destroy
if request.delete? && (!params[:to_delete].nil? or params[:id])
messages = (params[:to_delete] || params[:id]).map { |m| Message.find_by_id(m) }
messages.delete(nil)
messages.each do |m|
if can_view(m)
case session[:mail_box]
when “inbox”
m.receiver_deleted = true
m.save(false)
flash[:notice] = “Wiadomość została przenesiona do kosza”
when “outbox”
m.sender_deleted = true
m.sender_purged = true
m.save(false)
flash[:notice] = “Wiadomość została przenesiona do kosza”
when “trashbin”
m.receiver_purged = true
m.save(false)
flash[:notice] = “Wiadomość została usunięta”
end
purge_message(m)
end
end
end
redirect_to(:action => session[:mail_box])
end
def reply
@message = Message.find_by_id(params[:id])
if !@message.nil? && can_view(@message)
session[:mail_box] = "reply"
@message.receiver = @message.sender
@message.subject = "Odp: " << @message.subject
@message.body = "\n\n\n" << "_"*30 << "\n" << @message.sender.publicname << " napisał:\n\n" + @message.body
else
flash[:notice] = "Nie możesz przeglądać tej wiadomości"
redirect_to(:action => "inbox")
end
end
def inbox
@messages = current_user.inbox_messages
session[:mail_box] = “inbox”
render(:action => “index”)
end
def outbox
@messages = current_user.outbox_messages
session[:mail_box] = “outbox”
render(:action => “index”)
end
def trashbin
@messages = current_user.trashbin_messages
session[:mail_box] = “trashbin”
render(:action => “index”)
end
protected
def can_view(message)
true if current_user.id == message.sender_id || current_user.id == message.receiver_id
end
def purge_message(message)
if message.sender_purged && message.receiver_purged
message.destroy
flash[:notice] = “Wiadomość została usunięta”
end
end
end[/code]