orange 0.3.8 → 0.3.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -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