Class: Orange::MembersResource
Instance Attribute Summary
#model_class
Instance Method Summary
collapse
-
#add_attendee_group(packet, grouping_name, name, limit = 15) ⇒ Object
-
#batch_update_interest_mailchimp(packet, emails, grouping_name, groups) ⇒ Object
-
#beforeNew(packet, params) ⇒ Object
-
#beforeSave(packet, m, params) ⇒ Object
-
#hominid ⇒ Object
-
#hominid_list ⇒ Object
-
#list_groups(packet) ⇒ Object
-
#list_groups_for_email(packet, email) ⇒ Object
-
#login(packet, opts = {}) ⇒ Object
-
#logout(packet, opts = {}) ⇒ Object
-
#mailchimp_member_info(packet, member) ⇒ Object
-
#paid?(packet, member) ⇒ Boolean
-
#profile(packet, opts = {}) ⇒ Object
-
#register(packet, opts = {}) ⇒ Object
-
#stack_init ⇒ Object
-
#subscription_url(packet, member) ⇒ Object
-
#synchronize_from_mailchimp(packet, member) ⇒ Object
-
#synchronize_with_mailchimp(packet, member_params) ⇒ Object
def add_to_mailchimp(packet, member_params) email = member_params fname = member_params lname = member_params interests = member_params.map{|key, val| { “name” => key, “groups” => groups.map{|str| str.gsub(/,/, “,”)}.join(“,”) } } hominid.subscribe(options, email, => fname, :LNAME => lname, :INTERESTS => interests, => true) end.
-
#unsubscribe_from_mailchimp(packet, email) ⇒ Object
#afterDelete, #afterNew, #afterSave, #beforeDelete, #create, #delete, #do_list_view, #do_view, #edit, #find_list, #find_one, #index, #list, #new, new, #onDelete, #onNew, #onSave, #save, #show, #table_row, use, #view, #view_opts
#routable, #route
Methods inherited from Resource
#afterLoad, call_me, #do_view, #find_extras, #init, #initialize, #options, #orange, #orange_name, #routable, #set_orange, set_orange, #view, #view_opts
#cattr_accessor, #cattr_reader, #cattr_writer, eval_in_accessor_module, fetch_value, store_value
Instance Method Details
#add_attendee_group(packet, grouping_name, name, limit = 15) ⇒ Object
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
|
# File 'lib/orange-more/members/resources/members_resource.rb', line 128
def add_attendee_group(packet, grouping_name, name, limit = 15)
list = options[:mailchimp_list]
my_groups = hominid.call("listInterestGroupings", list)
grouping = my_groups.select{|a| a["name"] == grouping_name}.first
if grouping
return true if grouping["groups"].select{|a| a["name"] == name }.size > 0
if grouping["groups"].size > limit
remove = grouping["groups"].shift
hominid.call("listInterestGroupDel", list, remove["name"], grouping["id"])
end
hominid.call("listInterestGroupAdd", list, name, grouping["id"])
else
hominid.call("listInterestGroupingAdd", list, grouping_name, "checkboxes", [name] )
end
end
|
#batch_update_interest_mailchimp(packet, emails, grouping_name, groups) ⇒ Object
122
123
124
125
126
|
# File 'lib/orange-more/members/resources/members_resource.rb', line 122
def batch_update_interest_mailchimp(packet, emails, grouping_name, groups)
interests = [{ "name" => grouping_name, "groups" => groups }]
emails = emails.map{|e| {:EMAIL => e, :GROUPINGS => interests}}
hominid.subscribe_many(options[:mailchimp_list], emails, {:double_opt_in => true, :update_existing => true, :replace_interests => false})
end
|
#beforeNew(packet, params) ⇒ Object
299
300
301
302
303
304
305
306
307
308
309
310
311
|
# File 'lib/orange-more/members/resources/members_resource.rb', line 299
def beforeNew(packet, params)
unless params["password"] == params["repeat_password"]
packet.flash("error", "New password does not match repeated password")
return false
end
unless params["password"].blank? || params["password"].size >= 6
packet.flash("error", "Password should be over 6 characters")
return false
end
params.delete("password") if params["password"].blank?
params.delete("repeat_password")
true
end
|
#beforeSave(packet, m, params) ⇒ Object
313
314
315
316
317
318
319
320
321
322
323
324
325
|
# File 'lib/orange-more/members/resources/members_resource.rb', line 313
def beforeSave(packet, m, params)
unless params["password"] == params["repeat_password"]
packet.flash("error", "New password does not match repeated password")
return false
end
unless params["password"].blank? || params["password"].size >= 6
packet.flash("error", "Password should be over 6 characters")
return false
end
params.delete("password") if params["password"].blank?
params.delete("repeat_password")
true
end
|
53
54
55
|
# File 'lib/orange-more/members/resources/members_resource.rb', line 53
def hominid
@hominid ||= Hominid::Base.new({:api_key => options[:mailchimp_key]}) if options[:mailchimp_key]
end
|
#hominid_list ⇒ Object
57
58
59
|
# File 'lib/orange-more/members/resources/members_resource.rb', line 57
def hominid_list
@hominid_list ||= hominid.find_list_by_id(options[:mailchimp_list]) if options[:mailchimp_list] && hominid
end
|
#list_groups(packet) ⇒ Object
80
81
82
|
# File 'lib/orange-more/members/resources/members_resource.rb', line 80
def list_groups(packet)
hominid.call("listInterestGroupings", options[:mailchimp_list]).select{|g| options[:mailchimp_interests].include? g["name"]}
end
|
#list_groups_for_email(packet, email) ⇒ Object
84
85
86
|
# File 'lib/orange-more/members/resources/members_resource.rb', line 84
def list_groups_for_email(packet, email)
chimp_info = hominid.member_info(options[:mailchimp_list], email)
end
|
#login(packet, opts = {}) ⇒ Object
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
|
# File 'lib/orange-more/members/resources/members_resource.rb', line 166
def login(packet, opts = {})
if packet.request.post?
params = packet.request.params["members"]
login = params["login_email"]
password = params["login_password"]
member = model_class.first({:email => login})
tester = model_class.new({:salt => (member.salt || "")})
tester.password = password
if member && tester.hashed_password == member.hashed_password
packet.session["member"] = member.id
packet.reroute(@my_orange_name, :orange, :profile)
else
packet.flash("error", "Invalid email or password")
do_view(packet, :login, opts)
end
else
packet.reroute(@my_orange_name, :orange, :profile) if packet.session["member"]
do_view(packet, :login, opts)
end
end
|
#logout(packet, opts = {}) ⇒ Object
253
254
255
256
|
# File 'lib/orange-more/members/resources/members_resource.rb', line 253
def logout(packet, opts = {})
packet.session["member"] = nil
do_view(packet, :logout, opts)
end
|
#mailchimp_member_info(packet, member) ⇒ Object
151
152
153
154
155
156
157
158
159
160
161
162
163
164
|
# File 'lib/orange-more/members/resources/members_resource.rb', line 151
def mailchimp_member_info(packet, member)
unless member.is_a? model_class
member = model_class.get(member)
end
return [] unless member && options[:mailchimp_list]
list = options[:mailchimp_list]
begin
mailchimp_info = hominid.member_info(list, member.email)
rescue Hominid::ListError => e
mailchimp_info = {}
end
mailchimp_info
end
|
#paid?(packet, member) ⇒ Boolean
63
64
65
66
67
68
69
70
|
# File 'lib/orange-more/members/resources/members_resource.rb', line 63
def paid?(packet, member)
return true unless options[:spreedly_key]
unless member.is_a? model_class
member = model_class.get(member)
end
subscriber = Spreedly::Subscriber.find(member.id)
subscriber ? subscriber.active? : false
end
|
#profile(packet, opts = {}) ⇒ Object
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
|
# File 'lib/orange-more/members/resources/members_resource.rb', line 258
def profile(packet, opts = {})
no_reroute = opts.delete(:no_reroute)
unless packet.session["member"]
packet.flash("error", "You must log in to view this page")
packet.reroute(@my_orange_name, :orange, :login)
end
if packet.request.post?
params = packet.request.params["members"]
if params["current_password"].blank?
params.delete("password")
params.delete("repeat_password")
password_change = false
else
password_change = true
end
member = model_class.get(packet.session["member"])
check = model_class.new(:password => params.delete("current_password"))
if !password_change || member.hashed_password == check.hashed_password
mailing_list = params.delete("email_subscribe")
groups = params.delete("groups")
old_email = member.email
save(packet, {:resource_id => packet.session["member"], :no_reroute => true, :params => params})
if mailing_list == "1"
synchronize_with_mailchimp(packet, params.merge("groups" => groups, "old_email" => old_email))
else
unsubscribe_from_mailchimp(packet, params["email"])
end
else
packet.flash("error", "Your old password was not input correctly")
end
end
member = model_class.get(packet.session["member"])
opts[:model] = member
do_view(packet, :profile, opts.merge(:list_groups => list_groups(packet)))
end
|
#register(packet, opts = {}) ⇒ Object
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
|
# File 'lib/orange-more/members/resources/members_resource.rb', line 187
def register(packet, opts = {})
if packet.request.post?
params = packet.request.params["members"]
unless params["name"].blank?
packet.flash("error", "It looks like you might be a spam robot. Make sure you didn't fill out an extra field by mistake.")
return do_view(packet, :register, opts.merge(:list_groups => list_groups(packet)))
end
params.delete("name")
member = model_class.first(:email => params["email"])
if member
if member.hashed_password.blank?
email = params.delete("email")
mailing_list = params.delete("email_subscribe")
groups = params.delete("groups")
save(packet, {:resource_id => member.id, :params => params, :no_reroute => true})
member = model_class.first(:email => email)
if member.hashed_password.blank?
do_view(packet, :register, opts.merge(:list_groups => list_groups(packet)))
else
packet.flash("info", "Looks like this email address was already on our mailing list. Please take the time to correct our details about you.")
packet.session["member"] = member.id
params.merge!("groups" => groups)
synchronize_with_mailchimp(packet, params.merge("groups" => groups, "email" => email)) if mailing_list
packet.reroute(@my_orange_name, :orange, :profile)
end
else
packet.flash("error", "Looks like this email address already has an account. Try logging in instead.")
packet.reroute(@my_orange_name, :orange, :login)
end
else
mailing_list = params.delete("email_subscribe")
groups = params.delete("groups")
new(packet, {:no_reroute => true, :params => params})
member = model_class.first(:email => params["email"])
if member && !(mailchimp_member_info(packet, member).blank?)
packet.session["member"] = member.id
synchronize_from_mailchimp(packet, member)
synchronize_with_mailchimp(packet, params.merge("groups" => groups)) if mailing_list
packet.flash("info", "Looks like this email address was already on our mailing list. Please take the time to correct our details about you.")
packet.reroute(@my_orange_name, :orange, :profile)
elsif member
packet.session["member"] = member.id
params.merge!("groups" => groups)
synchronize_with_mailchimp(packet, params.merge("groups" => groups)) if mailing_list
packet.flash("info", "You've successfully created an account. Please take the time to fill in more details about yourself.")
packet.reroute(@my_orange_name, :orange, :profile)
else
do_view(packet, :register, opts.merge(:list_groups => list_groups(packet)))
end
end
else
do_view(packet, :register, opts.merge(:list_groups => list_groups(packet)))
end
end
|
#stack_init ⇒ Object
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
|
# File 'lib/orange-more/members/resources/members_resource.rb', line 8
def stack_init
options[:spreedly_key] = orange.options['spreedly_key'] || false
options[:spreedly_plan] = orange.options['spreedly_plan'] || false
options[:spreedly_site] = orange.options['spreedly_site'] || false
options[:mailchimp_key] = orange.options["mailchimp_key"] || false
options[:mailchimp_list] = orange.options["mailchimp_list"] || false
options[:mailchimp_interests] = orange.options["mailchimp_interests"] || false
options[:mailchimp_merge_fields] = orange.options["mailchimp_merge_fields"] || {}
Spreedly.configure(options[:spreedly_site], options[:spreedly_key]) if options[:spreedly_key]
orange[:admin, true].add_link("Settings", :resource => @my_orange_name, :text => 'Members')
orange[:radius, true].define_tag "if_member" do |tag|
packet = tag.locals.packet
if packet.session["member"]
tag.expand
else
if(tag.attr["else_view"])
orange[:members].do_view(packet, tag.attr["else_view"].to_sym)
else
""
end
end
end
orange[:radius, true].define_tag "if_paid_member" do |tag|
packet = tag.locals.packet
if packet.session["member"] && orange[:members].paid?(packet, packet.session["member"])
tag.expand
else
if(tag.attr["else_view"])
orange[:members].do_view(packet, tag.attr["else_view"].to_sym)
else
""
end
end
end
orange[:radius, true].define_tag "unless_member" do |tag|
packet = tag.locals.packet
unless packet.session["member"]
tag.expand
else
""
end
end
end
|
#subscription_url(packet, member) ⇒ Object
72
73
74
75
76
77
78
|
# File 'lib/orange-more/members/resources/members_resource.rb', line 72
def subscription_url(packet, member)
return "" unless options[:spreedly_key]
unless member.is_a? model_class
member = model_class.get(member)
end
Spreedly.subscribe_url(member.id, options[:spreedly_plan])
end
|
#synchronize_from_mailchimp(packet, member) ⇒ Object
113
114
115
116
117
118
119
120
|
# File 'lib/orange-more/members/resources/members_resource.rb', line 113
def synchronize_from_mailchimp(packet, member)
email = member.email
member_info = mailchimp_member_info(packet, member)
for key, val in options[:mailchimp_merge_fields]
member.attribute_set(key, member_info["merges"][val])
end
member.save
end
|
#synchronize_with_mailchimp(packet, member_params) ⇒ Object
def add_to_mailchimp(packet, member_params)
email = member_params[:email]
fname = member_params[:first_name]
lname = member_params[:last_name]
interests = member_params[:groups].map{|key, val|
{ "name" => key, "groups" => groups.map{|str| str.gsub(/,/, "\,")}.join(",") }
}
hominid.subscribe(options[:mailchimp_list], email, {:FNAME => fname, :LNAME => lname, :INTERESTS => interests}, {:update_existing => true})
end
98
99
100
101
102
103
104
105
106
107
108
109
110
111
|
# File 'lib/orange-more/members/resources/members_resource.rb', line 98
def synchronize_with_mailchimp(packet, member_params)
email = member_params["email"]
old_email = member_params["old_email"] || email
fname = member_params["first_name"] || ''
lname = member_params["last_name"] || ''
others = {}
for key, val in options[:mailchimp_merge_fields]
others[val.upcase.to_sym] = member_params[key] || ''
end
interests = member_params["groups"].blank? ? [] : member_params["groups"].map{|key, val|
{ "name" => key, "groups" => val.reject{|str| str.blank? }.map{|str| str.gsub(/,/, '\,')}.join(",") }
}
hominid.subscribe(options[:mailchimp_list], old_email, {:FNAME => fname, :LNAME => lname, :GROUPINGS => interests}.merge(others), {:update_existing => true})
end
|
#unsubscribe_from_mailchimp(packet, email) ⇒ Object
147
148
149
|
# File 'lib/orange-more/members/resources/members_resource.rb', line 147
def unsubscribe_from_mailchimp(packet, email)
hominid.unsubscribe(options[:mailchimp_list], email)
end
|