orange 0.3.8 → 0.3.9

Sign up to get free protection for your applications and to get access to all the features.
@@ -6,8 +6,8 @@ class OrangeMember < Orange::Carton
6
6
  text :first_name
7
7
  text :last_name
8
8
  text :email
9
- text :position
10
- text :company
9
+ text :title
10
+ text :organization
11
11
  end
12
12
  text :hashed_password
13
13
  text :salt
@@ -15,7 +15,6 @@ class OrangeMember < Orange::Carton
15
15
  property :reset_on, DateTime
16
16
 
17
17
  def password=(val)
18
- salt = self.salt
19
18
  attribute_set(:hashed_password, Digest::MD5.hexdigest("#{salt}orange-is-awesome#{val}"))
20
19
  end
21
20
 
@@ -12,6 +12,7 @@ module Orange
12
12
  options[:mailchimp_key] = orange.options["mailchimp_key"] || false
13
13
  options[:mailchimp_list] = orange.options["mailchimp_list"] || false
14
14
  options[:mailchimp_interests] = orange.options["mailchimp_interests"] || false
15
+ options[:mailchimp_merge_fields] = orange.options["mailchimp_merge_fields"] || {}
15
16
  Spreedly.configure(options[:spreedly_site], options[:spreedly_key]) if options[:spreedly_key]
16
17
 
17
18
  orange[:admin, true].add_link("Settings", :resource => @my_orange_name, :text => 'Members')
@@ -99,10 +100,23 @@ module Orange
99
100
  old_email = member_params["old_email"] || email
100
101
  fname = member_params["first_name"] || ''
101
102
  lname = member_params["last_name"] || ''
103
+ others = {}
104
+ for key, val in options[:mailchimp_merge_fields]
105
+ others[val.upcase.to_sym] = member_params[key] || ''
106
+ end
102
107
  interests = member_params["groups"].blank? ? [] : member_params["groups"].map{|key, val|
103
108
  { "name" => key, "groups" => val.reject{|str| str.blank? }.map{|str| str.gsub(/,/, '\,')}.join(",") }
104
109
  }
105
- hominid.subscribe(options[:mailchimp_list], old_email, {:FNAME => fname, :LNAME => lname, :GROUPINGS => interests}, {:update_existing => true})
110
+ hominid.subscribe(options[:mailchimp_list], old_email, {:FNAME => fname, :LNAME => lname, :GROUPINGS => interests}.merge(others), {:update_existing => true})
111
+ end
112
+
113
+ def synchronize_from_mailchimp(packet, member)
114
+ email = member.email
115
+ member_info = mailchimp_member_info(packet, member)
116
+ for key, val in options[:mailchimp_merge_fields]
117
+ member.attribute_set(key, member_info["merges"][val])
118
+ end
119
+ member.save
106
120
  end
107
121
 
108
122
  def batch_update_interest_mailchimp(packet, emails, grouping_name, groups)
@@ -134,12 +148,19 @@ module Orange
134
148
  hominid.unsubscribe(options[:mailchimp_list], email)
135
149
  end
136
150
 
137
- def member_list_groups(packet, member)
151
+ def mailchimp_member_info(packet, member)
138
152
  # Can give member id, hydrate to member before continuing.
139
153
  unless member.is_a? model_class
140
154
  member = model_class.get(member)
141
155
  end
142
-
156
+ return [] unless member && options[:mailchimp_list]
157
+ list = options[:mailchimp_list]
158
+ begin
159
+ mailchimp_info = hominid.member_info(list, member.email)
160
+ rescue Hominid::ListError => e
161
+ mailchimp_info = {}
162
+ end
163
+ mailchimp_info
143
164
  end
144
165
 
145
166
  def login(packet, opts = {})
@@ -148,7 +169,8 @@ module Orange
148
169
  login = params["login_email"]
149
170
  password = params["login_password"]
150
171
  member = model_class.first({:email => login})
151
- tester = model_class.new({:password => password, :salt => member.salt})
172
+ tester = model_class.new({:salt => (member.salt || "")})
173
+ tester.password = password
152
174
  if member && tester.hashed_password == member.hashed_password
153
175
  packet.session["member"] = member.id
154
176
  packet.reroute(@my_orange_name, :orange, :profile)
@@ -165,7 +187,12 @@ module Orange
165
187
  def register(packet, opts = {})
166
188
  if packet.request.post?
167
189
  params = packet.request.params["members"]
168
-
190
+ unless params["name"].blank?
191
+ # Problem, stay on registration
192
+ packet.flash("error", "It looks like you might be a spam robot. Make sure you didn't fill out an extra field by mistake.")
193
+ return do_view(packet, :register, opts.merge(:list_groups => list_groups(packet)))
194
+ end
195
+ params.delete("name")
169
196
  member = model_class.first(:email => params["email"])
170
197
  if member
171
198
  # Existing member... do they already have password?
@@ -201,7 +228,13 @@ module Orange
201
228
  new(packet, {:no_reroute => true, :params => params})
202
229
  # success ?
203
230
  member = model_class.first(:email => params["email"])
204
- if member
231
+ if member && !(mailchimp_member_info(packet, member).blank?)
232
+ packet.session["member"] = member.id
233
+ synchronize_from_mailchimp(packet, member)
234
+ synchronize_with_mailchimp(packet, params.merge("groups" => groups)) if mailing_list
235
+ packet.flash("info", "Looks like this email address was already on our mailing list. Please take the time to correct our details about you.")
236
+ packet.reroute(@my_orange_name, :orange, :profile)
237
+ elsif member
205
238
  packet.session["member"] = member.id
206
239
  params.merge!("groups" => groups)
207
240
  synchronize_with_mailchimp(packet, params.merge("groups" => groups)) if mailing_list
@@ -7,6 +7,12 @@
7
7
  %label Email
8
8
  %br
9
9
  %input{:type => "text", :name => "members[email]"}
10
+ %p.registration-name
11
+ %label Name*
12
+ %br
13
+ *Ignore this field unless you are a spam robot.
14
+ %br
15
+ %input{:type => "text", :name => "members[name]"}
10
16
  %p
11
17
  %label Password
12
18
  %br
metadata CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
5
5
  segments:
6
6
  - 0
7
7
  - 3
8
- - 8
9
- version: 0.3.8
8
+ - 9
9
+ version: 0.3.9
10
10
  platform: ruby
11
11
  authors:
12
12
  - David Haslem
@@ -14,7 +14,7 @@ autorequire:
14
14
  bindir: bin
15
15
  cert_chain: []
16
16
 
17
- date: 2010-06-02 00:00:00 -04:00
17
+ date: 2010-06-03 00:00:00 -04:00
18
18
  default_executable:
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency