<?xml version="1.0" encoding="UTF-8"?>
<commit>
  <added type="array">
    <added>
      <filename>db/migrate/20091010132954_add_tos_to_users.rb</filename>
    </added>
  </added>
  <modified type="array">
    <modified>
      <diff>@@ -56,16 +56,6 @@ class ApplicationController &lt; ActionController::Base
                                  })
   end
 
-  # Users created with RPX can in some cases be invalid, e.g. they may have
-  # empty email addresses.
-  def valid_login_required
-    login_required
-    if current_user &amp;&amp; !current_user.valid?
-      flash[:notice] = &quot;Please update your profile with valid information.&quot;
-      redirect_to edit_user_url(current_user)
-    end
-  end
-
   def check_permissions
     case params[:action]
     when 'edit' then</diff>
      <filename>app/controllers/application_controller.rb</filename>
    </modified>
    <modified>
      <diff>@@ -52,7 +52,8 @@ class User &lt; ActiveRecord::Base
     c.merge_validates_format_of_login_field_options :if =&gt; Proc.new { |user| !user.from_rpx }
   end
 
-  validates_acceptance_of :tos, :if =&gt; Proc.new { |user| !user.from_rpx }
+  validates_acceptance_of :tos, :allow_nil =&gt; false, :accept =&gt; true,
+                          :if =&gt; Proc.new { |user| !user.from_rpx }
 
   has_role
 </diff>
      <filename>app/models/user.rb</filename>
    </modified>
    <modified>
      <diff>@@ -1,5 +1,8 @@
 &lt;% # We only enable live validations for user signups, since the plugin
    # fails on edits. (complains about values already being taken, etc) %&gt;
+
+&lt;%=  error_messages_for 'user' %&gt;
+
 &lt;% form_for(@user, :live_validations =&gt; (@user.new_record? ? true : false)) do |f| -%&gt;
 &lt;p&gt;&lt;label for=&quot;user_login&quot;&gt;User name&lt;/label&gt;
 &lt;%= error_message_for @user, :login %&gt;&lt;br/&gt;
@@ -38,14 +41,12 @@
 &lt;%= f.check_box :remember %&gt;
 &lt;em&gt;Automatically login in the future; not for shared computers!&lt;/em&gt;&lt;/p&gt;
 
-&lt;% if @user.new_record? -%&gt;
 &lt;p&gt;&lt;label for=&quot;user_tos&quot;&gt;My contributed texts (package reviews, etc) will be
     available under Creative Commons Attribution 3.0 except private data
     (password, email address)&lt;/label&gt;
 &lt;%= error_message_for @user, :tos  %&gt;&lt;br/&gt;
 &lt;%= f.check_box :tos %&gt;
-&lt;em&gt;You must accepts the license terms before continuing.&lt;/em&gt;&lt;/p&gt;
-&lt;% end %&gt;
+&lt;em&gt;You must accept the license terms.&lt;/em&gt;&lt;/p&gt;
 
 &lt;p&gt;&lt;%= f.submit(@user.new_record? ? 'Sign up' : 'Save details') %&gt;&lt;/p&gt;
 &lt;% end -%&gt;</diff>
      <filename>app/views/users/_form.html.erb</filename>
    </modified>
    <modified>
      <diff>@@ -9,7 +9,7 @@
 #
 # It's strongly recommended to check this file into your version control system.
 
-ActiveRecord::Schema.define(:version =&gt; 20090812104328) do
+ActiveRecord::Schema.define(:version =&gt; 20091010132954) do
 
   create_table &quot;author&quot;, :force =&gt; true do |t|
     t.string   &quot;name&quot;
@@ -214,6 +214,7 @@ ActiveRecord::Schema.define(:version =&gt; 20090812104328) do
     t.datetime &quot;current_login_at&quot;
     t.string   &quot;last_login_ip&quot;
     t.string   &quot;current_login_ip&quot;
+    t.boolean  &quot;tos&quot;
   end
 
   add_index &quot;user&quot;, [&quot;last_request_at&quot;], :name =&gt; &quot;index_user_on_last_request_at&quot;</diff>
      <filename>db/schema.rb</filename>
    </modified>
    <modified>
      <diff>@@ -18,7 +18,14 @@ module AuthenticatedSystem
   end
 
   def login_required
-    logged_in? || access_denied
+    return access_denied unless logged_in?
+    # Users created with RPX can in some cases be invalid, e.g. they may have
+    # empty email addresses.
+    unless current_user.valid? or ([&quot;edit&quot;, &quot;update&quot;].include?(request.params[&quot;action&quot;]) &amp;&amp;
+                                   request.params[&quot;controller&quot;] == &quot;users&quot;)
+      flash[:notice] = &quot;Please update your profile with valid information.&quot;
+      redirect_to edit_user_url(current_user)
+    end
   end
   alias :require_user :login_required
 </diff>
      <filename>lib/authenticated_system.rb</filename>
    </modified>
    <modified>
      <diff>@@ -16,6 +16,7 @@ User.blueprint do
   email
   password { &quot;test&quot; }
   password_confirmation { &quot;test&quot; }
+  tos { true }
 end
 
 Version.blueprint do</diff>
      <filename>spec/blueprints.rb</filename>
    </modified>
    <modified>
      <diff>@@ -94,7 +94,8 @@ describe UserMailer do
 
   before(:each) do
     @user = User.create(:login =&gt; &quot;Helene&quot;, :email =&gt; &quot;helene@helene.no&quot;,
-                        :password =&gt; &quot;1234&quot;, :password_confirmation =&gt; &quot;1234&quot;)
+                        :password =&gt; &quot;1234&quot;, :password_confirmation =&gt; &quot;1234&quot;,
+                        :tos =&gt; true)
   end
 
   describe &quot;when sending an e-mail&quot; do</diff>
      <filename>spec/models/user_spec.rb</filename>
    </modified>
    <modified>
      <diff>@@ -5,6 +5,7 @@ module AuthHelper
 
   def login_as(model, id_or_attributes = {})
     attributes = id_or_attributes.is_a?(Fixnum) ? {:id =&gt; id} : id_or_attributes
+    attributes.update({:valid? =&gt; true})
     @current_user = stub_model(model, attributes)
     target = controller rescue template
     target.instance_variable_set '@current_user', @current_user</diff>
      <filename>spec/support/auth_helper.rb</filename>
    </modified>
  </modified>
  <removed type="array"/>
  <parents type="array">
    <parent>
      <id>6a99b97a48846b79574ace50459b377f49b58b74</id>
    </parent>
  </parents>
  <author>
    <name>Bj&#248;rn Arild M&#230;land</name>
    <email>bjorn.maeland@gmail.com</email>
  </author>
  <url>http://github.com/hadley/crantastic/commit/aa50198f728e9b5b66eed3d4ea122f1392fcda59</url>
  <id>aa50198f728e9b5b66eed3d4ea122f1392fcda59</id>
  <committed-date>2009-10-10T06:56:27-07:00</committed-date>
  <authored-date>2009-10-10T06:56:27-07:00</authored-date>
  <message>Always confirm that the user's profile is valid (e.g. accepted terms of service, valid email, etc). To make this work, we're now storing TOS acceptance in the database. This means that everyone will have to accept the TOS again.</message>
  <tree>cdc205ed93535976858a4b11ef1f125a7b1b55ad</tree>
  <committer>
    <name>Bj&#248;rn Arild M&#230;land</name>
    <email>bjorn.maeland@gmail.com</email>
  </committer>
</commit>
