Commit 877d26aed512bae12a51b557166664e3e827b1a6
1 parent
b18cb4fe
Exists in
master
and in
29 other branches
Environment admin can configure the message after signup
Added field sigup_welcome_text on environment New tab on admin panel to edit the text When the environment doesn't have a text, will use the default text Added content_type to email (ActionItem2497)
Showing
11 changed files
with
279 additions
and
2 deletions
Show diff stats
app/models/environment.rb
... | ... | @@ -124,6 +124,7 @@ class Environment < ActiveRecord::Base |
124 | 124 | 'show_zoom_button_on_article_images' => _('Show a zoom link on all article images'), |
125 | 125 | 'captcha_for_logged_users' => _('Ask captcha when a logged user comments too'), |
126 | 126 | 'skip_new_user_email_confirmation' => _('Skip e-mail confirmation for new users'), |
127 | + 'send_welcome_email_to_new_users' => _('Send welcome e-mail to new users'), | |
127 | 128 | 'allow_change_of_redirection_after_login' => _('Allow users to set the page to redirect after login') |
128 | 129 | } |
129 | 130 | end |
... | ... | @@ -542,6 +543,31 @@ class Environment < ActiveRecord::Base |
542 | 543 | signup_fields |
543 | 544 | end |
544 | 545 | |
546 | + serialize :signup_welcome_text, Hash | |
547 | + def signup_welcome_text | |
548 | + self[:signup_welcome_text] ||= {} | |
549 | + end | |
550 | + | |
551 | + def signup_welcome_text_subject | |
552 | + self.signup_welcome_text[:subject] | |
553 | + end | |
554 | + | |
555 | + def signup_welcome_text_subject=(subject) | |
556 | + self.signup_welcome_text[:subject] = subject | |
557 | + end | |
558 | + | |
559 | + def signup_welcome_text_body | |
560 | + self.signup_welcome_text[:body] | |
561 | + end | |
562 | + | |
563 | + def signup_welcome_text_body=(body) | |
564 | + self.signup_welcome_text[:body] = body | |
565 | + end | |
566 | + | |
567 | + def has_signup_welcome_text? | |
568 | + signup_welcome_text && !signup_welcome_text_body.blank? | |
569 | + end | |
570 | + | |
545 | 571 | # ################################################# |
546 | 572 | # Validations |
547 | 573 | # ################################################# | ... | ... |
app/models/user.rb
... | ... | @@ -73,6 +73,18 @@ class User < ActiveRecord::Base |
73 | 73 | :environment => user.environment.name, |
74 | 74 | :url => user.environment.top_url |
75 | 75 | end |
76 | + | |
77 | + def signup_welcome_email(user) | |
78 | + email_body = user.environment.signup_welcome_text_body.gsub('{user_name}', user.name) | |
79 | + email_subject = user.environment.signup_welcome_text_subject | |
80 | + | |
81 | + content_type 'text/html' | |
82 | + recipients user.email | |
83 | + | |
84 | + from "#{user.environment.name} <#{user.environment.contact_email}>" | |
85 | + subject email_subject.blank? ? _("Welcome to environment %s") % [user.environment.name] : email_subject | |
86 | + body email_body | |
87 | + end | |
76 | 88 | end |
77 | 89 | |
78 | 90 | def signup! |
... | ... | @@ -117,7 +129,17 @@ class User < ActiveRecord::Base |
117 | 129 | self.activated_at = Time.now.utc |
118 | 130 | self.activation_code = nil |
119 | 131 | self.person.visible = true |
120 | - self.person.save! && self.save! | |
132 | + begin | |
133 | + self.person.save! && self.save! | |
134 | + rescue Exception => exception | |
135 | + logger.error(exception.to_s) | |
136 | + false | |
137 | + else | |
138 | + if environment.enabled?('send_welcome_email_to_new_users') && environment.has_signup_welcome_text? | |
139 | + User::Mailer.delay.deliver_signup_welcome_email(self) | |
140 | + end | |
141 | + true | |
142 | + end | |
121 | 143 | end |
122 | 144 | |
123 | 145 | def activated? | ... | ... |
... | ... | @@ -0,0 +1,7 @@ |
1 | +<div class='description'> | |
2 | + <%= _('This text will be sent to new users if the feature "Send welcome e-mail to new users" is enabled on environment.') %><br/><br/> | |
3 | + <%= _('Including %s on body, it will be replaced by the real name of the e-mail recipient.') % content_tag('code', '{user_name}') %> | |
4 | +</div> | |
5 | + | |
6 | +<%= labelled_form_field(_('Subject'), text_field(:environment, :signup_welcome_text_subject, :style => 'width:100%')) %> | |
7 | +<%= labelled_form_field(_('Body'), text_area(:environment, :signup_welcome_text_body, :cols => 40, :style => 'width: 100%', :class => 'mceEditor')) %> | ... | ... |
app/views/admin_panel/site_info.rhtml
... | ... | @@ -10,6 +10,8 @@ |
10 | 10 | :content => (render :partial => 'site_info', :locals => {:f => f})} %> |
11 | 11 | <% tabs << {:title => _('Terms of use'), :id => 'terms-of-use', |
12 | 12 | :content => (render :partial => 'terms_of_use', :locals => {:f => f})} %> |
13 | + <% tabs << {:title => _('Signup welcome text'), :id => 'signup-welcome-text', | |
14 | + :content => (render :partial => 'signup_welcome_text', :locals => {:f => f})} %> | |
13 | 15 | <%= render_tabs(tabs) %> |
14 | 16 | <% button_bar do %> |
15 | 17 | <%= submit_button(:save, _('Save'), :cancel => {:action => 'index'}) %> | ... | ... |
db/schema.rb
... | ... | @@ -9,7 +9,7 @@ |
9 | 9 | # |
10 | 10 | # It's strongly recommended to check this file into your version control system. |
11 | 11 | |
12 | -ActiveRecord::Schema.define(:version => 20120825185219) do | |
12 | +ActiveRecord::Schema.define(:version => 20121008185303) do | |
13 | 13 | |
14 | 14 | create_table "abuse_reports", :force => true do |t| |
15 | 15 | t.integer "reporter_id" |
... | ... | @@ -262,6 +262,7 @@ ActiveRecord::Schema.define(:version => 20120825185219) do |
262 | 262 | t.datetime "updated_at" |
263 | 263 | t.integer "reports_lower_bound", :default => 0, :null => false |
264 | 264 | t.string "redirection_after_login", :default => "keep_on_same_page" |
265 | + t.text "signup_welcome_text" | |
265 | 266 | end |
266 | 267 | |
267 | 268 | create_table "external_feeds", :force => true do |t| | ... | ... |
public/stylesheets/application.css
... | ... | @@ -2436,6 +2436,13 @@ div#activation_enterprise label, div#activation_enterprise input, div#activation |
2436 | 2436 | .controller-admin_panel #portal-folders select { |
2437 | 2437 | width: 50%; |
2438 | 2438 | } |
2439 | + | |
2440 | +.description { | |
2441 | + background-color: #E6E6E6; | |
2442 | + border: 1px solid #CCC; | |
2443 | + padding: 5px; | |
2444 | +} | |
2445 | + | |
2439 | 2446 | /* ==> public/stylesheets/controller_catalog.css <== */ |
2440 | 2447 | /* ==> @import url('products.css'); <== */ |
2441 | 2448 | /* * * Products catalog * * * * * * * * * * * * */ | ... | ... |
test/functional/admin_panel_controller_test.rb
... | ... | @@ -71,6 +71,8 @@ class AdminPanelControllerTest < ActionController::TestCase |
71 | 71 | assert_template 'site_info' |
72 | 72 | assert_tag :tag => 'textarea', :attributes => { :name => 'environment[description]'} |
73 | 73 | assert_tag :tag => 'textarea', :attributes => { :name => 'environment[terms_of_use]'} |
74 | + assert_tag :tag => 'input', :attributes => { :name => 'environment[signup_welcome_text_subject]'} | |
75 | + assert_tag :tag => 'textarea', :attributes => { :name => 'environment[signup_welcome_text_body]'} | |
74 | 76 | end |
75 | 77 | |
76 | 78 | should 'display form for editing message for disabled enterprise' do |
... | ... | @@ -110,6 +112,25 @@ class AdminPanelControllerTest < ActionController::TestCase |
110 | 112 | assert !Environment.default.has_terms_of_use? |
111 | 113 | end |
112 | 114 | |
115 | + should 'save subject and body of signup welcome text' do | |
116 | + subject = "This is my welcome subject" | |
117 | + body = "This is my welcome body" | |
118 | + post :site_info, :environment => { :signup_welcome_text_subject => subject, :signup_welcome_text_body => body } | |
119 | + assert_redirected_to :action => 'index' | |
120 | + | |
121 | + assert_equal subject, Environment.default.signup_welcome_text[:subject] | |
122 | + assert_equal body, Environment.default.signup_welcome_text[:body] | |
123 | + assert !Environment.default.signup_welcome_text.blank? | |
124 | + end | |
125 | + | |
126 | + should 'not save empty string as signup welcome text' do | |
127 | + content = "" | |
128 | + post :site_info, :environment => { :signup_welcome_text_body => content } | |
129 | + assert_redirected_to :action => 'index' | |
130 | + | |
131 | + assert !Environment.default.has_signup_welcome_text? | |
132 | + end | |
133 | + | |
113 | 134 | should 'sanitize message for disabled enterprise with white_list' do |
114 | 135 | post :site_info, :environment => { :message_for_disabled_enterprise => "This <strong>is</strong> <script>alert('alow')</script>my new environment" } |
115 | 136 | assert_redirected_to :action => 'index' | ... | ... |
test/unit/environment_test.rb
... | ... | @@ -1242,4 +1242,82 @@ class EnvironmentTest < ActiveSupport::TestCase |
1242 | 1242 | end |
1243 | 1243 | end |
1244 | 1244 | |
1245 | + should 'respond to signup_welcome_text' do | |
1246 | + assert_respond_to Environment.new, :signup_welcome_text | |
1247 | + end | |
1248 | + | |
1249 | + should 'store welcome text in a hash serialized' do | |
1250 | + environment = Environment.default | |
1251 | + | |
1252 | + environment.signup_welcome_text = { | |
1253 | + :subject => 'Welcome to the environment', | |
1254 | + :body => 'Thanks for signing up!', | |
1255 | + } | |
1256 | + environment.save | |
1257 | + environment.reload | |
1258 | + | |
1259 | + assert_kind_of Hash, environment.signup_welcome_text | |
1260 | + assert_equal ['Welcome to the environment', 'Thanks for signing up!'], [environment.signup_welcome_text[:subject], environment.signup_welcome_text[:body]] | |
1261 | + end | |
1262 | + | |
1263 | + should 'not consider signup welcome text if not defined' do | |
1264 | + env = Environment.default | |
1265 | + assert !env.has_signup_welcome_text? | |
1266 | + end | |
1267 | + | |
1268 | + should 'not consider signup welcome text if nil' do | |
1269 | + env = Environment.default | |
1270 | + | |
1271 | + env.signup_welcome_text = nil | |
1272 | + assert !env.has_signup_welcome_text? | |
1273 | + end | |
1274 | + | |
1275 | + should 'not consider signup welcome text if body is nil' do | |
1276 | + env = Environment.default | |
1277 | + | |
1278 | + env.signup_welcome_text = { | |
1279 | + :subject => 'Welcome to the environment', | |
1280 | + } | |
1281 | + assert !env.has_signup_welcome_text? | |
1282 | + end | |
1283 | + | |
1284 | + should 'consider signup welcome text if subject is nil but body is defined' do | |
1285 | + env = Environment.default | |
1286 | + | |
1287 | + env.signup_welcome_text = { | |
1288 | + :body => 'Thanks for signing up!', | |
1289 | + } | |
1290 | + assert env.has_signup_welcome_text? | |
1291 | + end | |
1292 | + | |
1293 | + should 'consider signup welcome text if subject and body are defined' do | |
1294 | + env = Environment.default | |
1295 | + | |
1296 | + env.signup_welcome_text = { | |
1297 | + :subject => 'Welcome to the environment', | |
1298 | + :body => 'Thanks for signing up!', | |
1299 | + } | |
1300 | + assert env.has_signup_welcome_text? | |
1301 | + end | |
1302 | + | |
1303 | + should 'store welcome text subject' do | |
1304 | + environment = Environment.default | |
1305 | + | |
1306 | + environment.signup_welcome_text_subject = 'Welcome to the environment' | |
1307 | + environment.save | |
1308 | + environment.reload | |
1309 | + | |
1310 | + assert_equal environment.signup_welcome_text[:subject], environment.signup_welcome_text_subject | |
1311 | + end | |
1312 | + | |
1313 | + should 'store welcome text body' do | |
1314 | + environment = Environment.default | |
1315 | + | |
1316 | + environment.signup_welcome_text_body = 'Thanks for signing up!' | |
1317 | + environment.save | |
1318 | + environment.reload | |
1319 | + | |
1320 | + assert_equal environment.signup_welcome_text[:body], environment.signup_welcome_text_body | |
1321 | + end | |
1322 | + | |
1245 | 1323 | end | ... | ... |
test/unit/user_test.rb
... | ... | @@ -522,6 +522,101 @@ class UserTest < ActiveSupport::TestCase |
522 | 522 | assert user.save! |
523 | 523 | end |
524 | 524 | |
525 | + should 'not deliver welcome e-mail after user activation if not enabled on environment' do | |
526 | + env = Environment.default | |
527 | + env.signup_welcome_text = { | |
528 | + :subject => 'Welcome to the environment', | |
529 | + :body => 'Thanks for signing up!' | |
530 | + } | |
531 | + env.disable('send_welcome_email_to_new_users') | |
532 | + env.save | |
533 | + | |
534 | + user = new_user :email => 'pending@activation.com' | |
535 | + assert_no_difference(ActionMailer::Base.deliveries, :size) do | |
536 | + user.activate | |
537 | + end | |
538 | + end | |
539 | + | |
540 | + should 'deliver welcome e-mail after user activation if enabled on environment' do | |
541 | + env = Environment.default | |
542 | + env.signup_welcome_text = { | |
543 | + :subject => 'Welcome to this environment', | |
544 | + :body => 'Thanks for signing up!' | |
545 | + } | |
546 | + env.enable('send_welcome_email_to_new_users') | |
547 | + env.save | |
548 | + | |
549 | + user = new_user :email => 'pending@activation.com' | |
550 | + assert_difference(ActionMailer::Base.deliveries, :size, 1) do | |
551 | + user.activate | |
552 | + end | |
553 | + | |
554 | + sent = ActionMailer::Base.deliveries.last | |
555 | + assert_equal ['pending@activation.com'], sent.to | |
556 | + assert_equal 'Welcome to this environment', sent.subject | |
557 | + assert_equal 'Thanks for signing up!', sent.body | |
558 | + end | |
559 | + | |
560 | + should 'deliver welcome e-mail after user activation if enabled on environment with default subject if not defined' do | |
561 | + env = Environment.default | |
562 | + env.signup_welcome_text = { | |
563 | + :body => 'Thanks for signing up!' | |
564 | + } | |
565 | + env.enable('send_welcome_email_to_new_users') | |
566 | + env.save | |
567 | + | |
568 | + user = new_user :email => 'pending@activation.com' | |
569 | + assert_difference(ActionMailer::Base.deliveries, :size, 1) do | |
570 | + user.activate | |
571 | + end | |
572 | + | |
573 | + sent = ActionMailer::Base.deliveries.last | |
574 | + assert_equal "Welcome to environment #{env.name}", sent.subject | |
575 | + end | |
576 | + | |
577 | + should 'deliver welcome e-mail after user activation if enabled on environment and replace user_name' do | |
578 | + env = Environment.default | |
579 | + env.signup_welcome_text = { | |
580 | + :subject => 'Welcome to the environment', | |
581 | + :body => 'Thanks for signing up, {user_name}!', | |
582 | + } | |
583 | + env.enable('send_welcome_email_to_new_users') | |
584 | + env.save | |
585 | + | |
586 | + user = new_user :name => 'John Doe', :email => 'pending@activation.com' | |
587 | + assert_difference(ActionMailer::Base.deliveries, :size, 1) do | |
588 | + user.activate | |
589 | + end | |
590 | + | |
591 | + sent = ActionMailer::Base.deliveries.last | |
592 | + assert_equal "Thanks for signing up, #{user.name}!", sent.body | |
593 | + end | |
594 | + | |
595 | + should 'not deliver welcome e-mail after user activation if enabled on environment but body not filled in' do | |
596 | + env = Environment.default | |
597 | + env.signup_welcome_text = { | |
598 | + :subject => 'Welcome to the environment', | |
599 | + } | |
600 | + env.enable('send_welcome_email_to_new_users') | |
601 | + env.save | |
602 | + | |
603 | + user = new_user :email => 'pending@activation.com' | |
604 | + assert_no_difference(ActionMailer::Base.deliveries, :size) do | |
605 | + user.activate | |
606 | + end | |
607 | + end | |
608 | + | |
609 | + should 'not deliver welcome e-mail after user activation if enabled on environment but welcome text not defined' do | |
610 | + env = Environment.default | |
611 | + env.enable('send_welcome_email_to_new_users') | |
612 | + env.save | |
613 | + | |
614 | + user = new_user :email => 'pending@activation.com' | |
615 | + assert_no_difference(ActionMailer::Base.deliveries, :size) do | |
616 | + user.activate | |
617 | + end | |
618 | + end | |
619 | + | |
525 | 620 | protected |
526 | 621 | def new_user(options = {}) |
527 | 622 | user = User.new({ :login => 'quire', :email => 'quire@example.com', :password => 'quire', :password_confirmation => 'quire' }.merge(options)) | ... | ... |