Index: app/models/topic.rb =================================================================== --- app/models/topic.rb (revision 2940) +++ app/models/topic.rb (working copy) @@ -2,7 +2,7 @@ belongs_to :forum belongs_to :user has_many :monitorships - has_many :monitors, :through => :monitorships, :conditions => ["#{Monitorship.table_name}.active = ?", true], :source => :user, :order => "#{User.table_name}.login" + has_many :monitors, :through => :monitorships, :conditions => ["#{Monitorship.table_name}.active = ?", true], :source => :user, :order => "#{User.table_name}.display_name" has_many :posts, :order => "#{Post.table_name}.created_at", :dependent => :destroy do def last Index: app/models/user.rb =================================================================== --- app/models/user.rb (revision 2940) +++ app/models/user.rb (working copy) @@ -9,18 +9,25 @@ has_many :monitorships has_many :monitored_topics, :through => :monitorships, :conditions => ["#{Monitorship.table_name}.active = ?", true], :order => "#{Topic.table_name}.replied_at desc", :source => :topic - validates_presence_of :login, :email - validates_length_of :login, :minimum => 2 - - with_options :if => :password_required? do |u| + validates_presence_of :email + + with_options :if => :login_and_password_required? do |u| + u.validates_presence_of :login, :email + u.validates_presence_of :password_hash u.validates_length_of :password, :minimum => 5, :allow_nil => true u.validates_confirmation_of :password, :on => :create u.validates_confirmation_of :password, :on => :update, :allow_nil => true end + + with_options :if => :openid_url_required? do |u| + u.validates_presence_of :openid_url + end + + validates_length_of :login, :minimum => 2, :allow_nil => true # names that start with #s really upset me for some reason - validates_format_of :login, :with => /^[a-z]{2}(?:\w+)?$/i + validates_format_of :login, :with => /^[a-z]{2}(?:\w+)?$/i, :allow_nil => true # names that start with #s really upset me for some reason validates_format_of :display_name, :with => /^[a-z]{2}(?:[.'\-\w ]+)?$/i, :allow_nil => true @@ -85,7 +92,15 @@ super end - def password_required? + def login_and_password_required? openid_url.nil? end + + def openid_url_required? + (not new_record?) and login.blank? + end + + def login_identifier + login or openid_url + end end Index: app/models/forum.rb =================================================================== --- app/models/forum.rb (revision 2940) +++ app/models/forum.rb (working copy) @@ -4,7 +4,7 @@ validates_presence_of :name has_many :moderatorships, :dependent => :destroy - has_many :moderators, :through => :moderatorships, :source => :user, :order => "#{User.table_name}.login" + has_many :moderators, :through => :moderatorships, :source => :user, :order => "#{User.table_name}.display_name" has_many :topics, :order => 'sticky desc, replied_at desc', :dependent => :destroy do def first Index: app/controllers/users_controller.rb =================================================================== --- app/controllers/users_controller.rb (revision 2940) +++ app/controllers/users_controller.rb (working copy) @@ -68,7 +68,7 @@ def update @user.attributes = params[:user] # temp fix to let people with dumb usernames change them - @user.login = params[:user][:login] if not @user.valid? and @user.errors.on(:login) + @user.login = params[:user][:login] if (not @user.valid? and @user.errors.on(:login)) or @user.login.blank? @user.save! and flash[:notice]="Your settings have been saved."[:settings_saved_message] respond_to do |format| format.html { redirect_to edit_user_path(@user) } @@ -103,4 +103,8 @@ def find_user @user = params[:id] ? User.find_by_id(params[:id]) : current_user end + + def openid_signup? + !params[:user].blank? and !params[:user][:openid_url].blank? and params[:user][:login].blank? + end end Index: app/controllers/sessions_controller.rb =================================================================== --- app/controllers/sessions_controller.rb (revision 2940) +++ app/controllers/sessions_controller.rb (working copy) @@ -18,12 +18,13 @@ protected def open_id_authentication - authenticate_with_open_id params[:openid_url] do |result, openid_url| + authenticate_with_open_id params[:openid_url], :required => ['nickname', 'email'] do |result, openid_url, sreg| if result.successful? if self.current_user = User.find_by_openid_url(openid_url) successful_login else - failed_login "Sorry, no user by the identity URL {openid_url} exists"[:openid_no_user_message, openid_url.inspect] + #failed_login "Sorry, no user by the identity URL {openid_url} exists"[:openid_no_user_message, openid_url.inspect] + redirect_to open_id_signup_path(:user => {:openid_url => openid_url, :email => sreg['email'], :display_name => sreg['nickname']}) end else failed_login result.message Index: app/views/layouts/_post.rss.builder =================================================================== --- app/views/layouts/_post.rss.builder (revision 2940) +++ app/views/layouts/_post.rss.builder (working copy) @@ -1,9 +1,9 @@ xm.item do key = post.topic.posts.size == 1 ? :topic_posted_by : :topic_replied_by - xm.title "{title} posted by {user} @ {date}"[key, h(post.respond_to?(:topic_title) ? post.topic_title : post.topic.title), h(post.user.login), post.created_at.rfc822] + xm.title "{title} posted by {user} @ {date}"[key, h(post.respond_to?(:topic_title) ? post.topic_title : post.topic.title), h(post.user.display_name), post.created_at.rfc822] xm.description post.body_html xm.pubDate post.created_at.rfc822 xm.guid [request.host_with_port+request.relative_url_root, post.forum_id.to_s, post.topic_id.to_s, post.id.to_s].join(":"), "isPermaLink" => "false" - xm.author "#{post.user.login}" + xm.author "#{post.user.display_name}" xm.link topic_url(post.forum_id, post.topic_id) end Index: app/views/layouts/_head.html.erb =================================================================== --- app/views/layouts/_head.html.erb (revision 2940) +++ app/views/layouts/_head.html.erb (working copy) @@ -28,7 +28,7 @@
<%= 'for {user}'[:for_user, @user.display_name] %> - <% if @user.login!=@user.display_name %> - (<%= @user.login %>) + <% if @user.login_identifier!=@user.display_name %> + (<%= @user.login_identifier %>) <% end %>
Index: app/views/users/_settings.html.erb =================================================================== --- app/views/users/_settings.html.erb (revision 2940) +++ app/views/users/_settings.html.erb (working copy) @@ -2,7 +2,7 @@Index: config/routes.rb =================================================================== --- config/routes.rb (revision 2940) +++ config/routes.rb (working copy) @@ -4,6 +4,7 @@ map.open_id_complete 'session', :controller => "sessions", :action => "create", :requirements => { :method => :get } map.resource :session + map.open_id_signup 'openid_signup', :controller => 'users', :action => 'create', :requirements => { :method => :get } map.resources :users, :member => { :admin => :post }, :has_many => [:moderators, :posts] map.resources :forums, :has_many => [:posts] do |forum|