Commit 81340e011ae72e8331e4f955ab7e5b2573926a31
1 parent
4ee513ea
Exists in
master
and in
29 other branches
ActionItem12: making use of ActiveRecord validation to check acceptance of terms
git-svn-id: https://svn.colivre.coop.br/svn/noosfero/trunk@485 3f533792-8f58-4932-b0fe-aaf55b0a4547
Showing
5 changed files
with
23 additions
and
16 deletions
Show diff stats
app/controllers/account_controller.rb
... | ... | @@ -26,20 +26,18 @@ class AccountController < ApplicationController |
26 | 26 | # action to register an user to the application |
27 | 27 | def signup |
28 | 28 | begin |
29 | - @terms_of_use = virtual_community.terms_of_use | |
30 | - terms_accepted = params[:terms_accepted] | |
31 | 29 | @user = User.new(params[:user]) |
32 | - return unless request.post? | |
33 | - if @terms_of_use and !terms_accepted | |
34 | - flash[:notice] = _("You have to accept the terms of service to signup") | |
35 | - return | |
30 | + @user.terms_of_use = virtual_community.terms_of_use | |
31 | + @terms_of_use = virtual_community.terms_of_use | |
32 | + | |
33 | + if request.post? | |
34 | + @user.save! | |
35 | + @user.person.virtual_community = virtual_community | |
36 | + @user.person.save! | |
37 | + self.current_user = @user | |
38 | + redirect_back_or_default(:controller => 'account', :action => 'index') | |
39 | + flash[:notice] = _("Thanks for signing up!") | |
36 | 40 | end |
37 | - @user.save! | |
38 | - @user.person.virtual_community = virtual_community | |
39 | - @user.person.save! | |
40 | - self.current_user = @user | |
41 | - redirect_back_or_default(:controller => 'account', :action => 'index') | |
42 | - flash[:notice] = _("Thanks for signing up!") | |
43 | 41 | rescue ActiveRecord::RecordInvalid |
44 | 42 | render :action => 'signup' |
45 | 43 | end | ... | ... |
app/models/user.rb
... | ... | @@ -27,6 +27,8 @@ class User < ActiveRecord::Base |
27 | 27 | validates_uniqueness_of :login, :email, :case_sensitive => false |
28 | 28 | before_save :encrypt_password |
29 | 29 | |
30 | + validates_inclusion_of :terms_accepted, :in => [ '1' ], :if => lambda { |u| ! u.terms_of_use.blank? }, :message => N_('%{fn} must be checked in order to signup.') | |
31 | + | |
30 | 32 | # Authenticates a user by their login name and unencrypted password. Returns the user or nil. |
31 | 33 | def self.authenticate(login, password) |
32 | 34 | u = find_by_login(login) # need to get the salt | ... | ... |
app/views/account/signup.rhtml
... | ... | @@ -9,9 +9,13 @@ |
9 | 9 | <%= f.password_field :password_confirmation %> |
10 | 10 | |
11 | 11 | <% if @terms_of_use %> |
12 | - <p> <%= @terms_of_use %> </p> | |
13 | - <p> <%= check_box_tag 'terms_accepted' %> | |
14 | - <label for="terms_accepted"><%= _('I accept the terms of use') %></label> </p> | |
12 | + <p> | |
13 | + <%= @terms_of_use %> | |
14 | + </p> | |
15 | + <p> | |
16 | + <%= check_box 'user', 'terms_accepted' %> | |
17 | + <%= _('I accept the terms of use') %> | |
18 | + </p> | |
15 | 19 | <% end %> |
16 | 20 | |
17 | 21 | <p><%= submit_tag 'Sign up' %></p> | ... | ... |
db/migrate/006_create_users.rb
... | ... | @@ -9,6 +9,9 @@ class CreateUsers < ActiveRecord::Migration |
9 | 9 | t.column :updated_at, :datetime |
10 | 10 | t.column :remember_token, :string |
11 | 11 | t.column :remember_token_expires_at, :datetime |
12 | + | |
13 | + t.column :terms_of_use, :text | |
14 | + t.column :terms_accepted, :string, :limit => 1 | |
12 | 15 | end |
13 | 16 | end |
14 | 17 | ... | ... |
test/functional/account_controller_test.rb
... | ... | @@ -79,7 +79,7 @@ class AccountControllerTest < Test::Unit::TestCase |
79 | 79 | def test_shoud_save_with_acceptance_of_terms_of_use_on_signup |
80 | 80 | assert_difference User, :count do |
81 | 81 | VirtualCommunity.default.update_attributes(:terms_of_use => 'some terms ...') |
82 | - create_user(:terms_accepted => true) | |
82 | + create_user(:terms_accepted => '1') | |
83 | 83 | assert_response :redirect |
84 | 84 | end |
85 | 85 | end | ... | ... |