-
Notifications
You must be signed in to change notification settings - Fork 7
/
Copy pathusers_controller.rb
174 lines (151 loc) · 4.61 KB
/
users_controller.rb
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
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
require_dependency "light/application_controller"
module Light
class UsersController < ApplicationController
respond_to :js, :json, :html
before_filter :user_with_token, only: [:remove, :unsubscribe, :subscribe]
def index
offset_val = params[:offset] || 0
limit_val = params[:limit] || 1000
@users = Light::User.all.offset(offset_val).limit(limit_val)
respond_with do |format|
format.json { render json: @users }
end
end
def show
@user = Light::User.find(params[:id])
end
def new
@user = Light::User.new
end
def create
@user = Light::User.new(users_params)
@user.sent_on = Array.new
if @user.save
@user.update(source: 'Manual', sent_on: Array.new, sidekiq_status: 'new user' )
redirect_to users_path
else
render action: 'new'
end
end
def testmail
end
def sendtest
emails = params[:email][:email_id].split(",")
Light::Enqueue.perform_async(emails)
redirect_to newsletters_path
end
def unsubscribe
if @user.present? && @user.sidekiq_status == Light::User::STATUS[:subscribed]
@user.update(
is_subscribed: false,
unsubscribed_at: DateTime.now,
sidekiq_status: Light::User::STATUS[:unsubscribed]
)
@message = 'Unsubscribed successfully!!'
else
@message = response_message('unsubscribed')
end
end
def subscribe
if @user.present? && @user.sidekiq_status == Light::User::STATUS[:unsubscribed]
@user.update(is_subscribed: true,
sidekiq_status: Light::User::STATUS[:subscribed],
subscribed_at: DateTime.now,
remote_ip: request.remote_ip,
user_agent: request.env['HTTP_USER_AGENT'])
@message = 'Subscribed successfully!!'
else
@message = response_message('subscribed')
end
end
def sendmailer
Light::UserWorker.perform_async
redirect_to newsletters_path
end
def edit
@user = Light::User.find(params[:id])
end
def update
@user = Light::User.find(params[:id])
if @user.update_attributes(users_params)
redirect_to users_path
else
render action: 'edit'
end
end
def destroy
@user = Light::User.find(params[:id])
@user.destroy
redirect_to users_path
end
def remove
if @user.present?
@user.destroy
@message = "We have removed you from our database!"
else
@message = "No user with this token exists!"
end
end
def import
if request.post?
current_user = current_user || nil # Need this bcz current_user is not exists in engine
message = Light::User.import(params[:file], current_user.try(&:email)).first
flash[message.first] = message.last
end
render action: :import
end
def auto_opt_in
@user = Light::User.new
@newsletters = Light::Newsletter.all.desc(:sent_on)
end
def opt_in
@user = Light::User.where(email_id: params[:email]).first
if @user.present?
@user.update_attributes(
is_subscribed: true,
sidekiq_status: Light::User::STATUS[:subscribed],
subscribed_at: DateTime.now
)
else
u_name = params[:username].blank? ? params[:email] : params[:username]
@user = Light::User.new(
username: u_name,
email_id: params[:email],
source: 'web subscription request',
subscribed_at: DateTime.now,
sidekiq_status: Light::User::STATUS[:subscribed]
)
end
respond_to do |format|
format.json { head :no_content }
format.html {redirect_to main_app.users_thank_you_path}
end
end
def thank_you
end
private
def users_params
params.require(:user).permit(
:id, :email_id, :is_subscribed, :joined_on, :is_blocked,
:sidekiq_status, :source, :username
)
end
def user_with_token
@user = Light::User.where(token: params[:token]).first
end
def dummy_token?
params[:token] == 'test_user_dummy_id'
end
def response_message(status)
if dummy_token?
"#{status.capitalize} successfully!!"
elsif @user.nil?
"Hey, it seems request you are trying to access is invalid. If you have any " +
"concerns about our newsletter's subscription, kindly get in touch with " +
"<a href='mailto:[email protected]' class='email'>[email protected]</a>"
else
"You have already #{status}!!"
end
end
end
end