summaryrefslogtreecommitdiff
path: root/app/controllers/messages_controller.rb
blob: 5b1d7aa8471ce7fd01e305c2cbaf3f09cf26d4af (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
class MessagesController < ApplicationController

  before_filter :set_current
  def set_current
    User.current = current_user
  end

  before_filter :check_permission, only: [:show, :edit, :update, :destroy]

  def index
    if current_user
      @messages = Message.where("(user_sender_id = ? OR user_target_id = ?) AND (user_hidden_id != ? OR user_hidden_id IS NULL)", current_user.id, current_user.id, current_user.id).page(params[:page])
    else
      flash[:alert] = "Please log in to see your private messages."
      redirect_to blogposts_path
    end
  end

  def show
    Message.find(@message.id).update_attributes(user_unread: nil) unless @message.user_unread == current_user
    @replies = @message.replies.page(params[:page])
  end

  def edit
    unless mod? || @message.author.is?(current_user)
      flash[:alert] = "You are not allowed to edit this message!"
      redirect_to @message
    end
  end

  def new
    if current_user
      @message = Message.new
    else
      flash[:alert] = "Please log in to send a private message."
      redirect_to blogposts_path
    end
  end

  def create
    unless message_params[:user_target_id]
      flash[:alert] = "Please enter a valid IGN before sending."
      redirect_to new_message_path
      return
    end
    if message_params[:subject].blank?
      flash[:alert] = "Please write a subject before sending."
      redirect_to new_message_path
      return
    elsif message_params[:text].blank?
      flash[:alert] = "Please write a message before sending."
      redirect_to new_message_path
      return
    end
    @message = Message.new(message_params)
    @message.user_target = User.find(@message.user_target_id)
    @message.user_unread = User.find(@message.user_unread_id) if @message.user_unread_id
    if @message.save
      @message.send_new_message_mail
      flash[:notice] = "Message sent!"
      redirect_to messages_path
    else
      flash[:alert] = "Something went wrong while creating your message."
      render action: "new"
    end
  end

  def update
    if mod? || @message.user_sender.is?(current_user)
      @message.user_editor_id = current_user.id
      @message.attributes = message_params
      if @message.save
        redirect_to @message, notice: 'Message has been updated.'
      else
        flash[:alert] = "There was a problem while updating the message."
        render action: "edit"
      end
    else
      flash[:alert] = "You are not allowed to edit this message!"
      redirect_to @message
    end
  end

  def destroy
    if [@message.user_target, @message.user_sender].include?(current_user)
      if @message.destroy
        flash[:notice] = "Message deleted!"
      else
        unless @message.user_hidden
          flash[:alert] = "There was a problem while deleting this message."
        else
          Message.find(@message.id).update_attributes(user_hidden: current_user)
        end
      end
    else
      flash[:alert] = "You are not allowed to delete this message."
    end
    redirect_to messages_path
  end

  def destroy_all
    Message.destroy_all(user_target_id: current_user.id)
    if Message.where(user_target_id: current_user.id).empty?
      flash[:notice] = "Your messages have been deleted!"
    else
      flash[:alert] = "There was a problem while deleting your messages."
    end
    redirect_to messages_path
  end

  def message_params(add = [])
    params[:message][:user_target_id] = User.find_by(ign: params[:message][:user_target].strip).try(:id)
    params[:message][:user_sender_id] = User.find_by(ign: params[:message][:user_sender]).id
    params[:message][:user_hidden_id] = User.find_by(ign: params[:message][:user_hidden]).try(:id)
    params[:message][:user_unread_id] = User.find_by(ign: params[:message][:user_unread]).try(:id)
params.require(:message).permit([:subject, :text, :user_target_id, :user_sender_id, :user_hidden_id, :user_unread_id])
  end

  private

  def check_permission
    @message = Message.find(params[:id])
    unless [@message.user_target, @message.user_sender].include? current_user
      flash[:alert] = "You are not allowed to view this message"
      redirect_to home_statics_path
    end
  end
end