| 53 | 53 |   attr_protected :login, :admin, :password, :password_confirmation, :hashed_password | 
  | 54 | 54 | 	 | 
  | 55 | 55 |   validates_presence_of :login, :firstname, :lastname, :mail, :if => Proc.new { |user| !user.is_a?(AnonymousUser) } | 
  | 56 |  |   validates_uniqueness_of :login, :if => Proc.new { |user| !user.login.blank? } | 
  | 57 |  |   validates_uniqueness_of :mail, :if => Proc.new { |user| !user.mail.blank? } | 
  |  | 56 |   validates_uniqueness_of :login, :if => Proc.new { |user| !user.login.blank? }, :case_sensitive => false | 
  |  | 57 |   validates_uniqueness_of :mail, :if => Proc.new { |user| !user.mail.blank? }, :case_sensitive => false | 
  | 58 | 58 |   # Login must contain lettres, numbers, underscores only | 
  | 59 | 59 |   validates_format_of :login, :with => /^[a-z0-9_\-@\.]*$/i | 
  | 60 | 60 |   validates_length_of :login, :maximum => 30 | 
  | ... | ... |  | 
  | 84 | 84 |   def self.try_to_login(login, password) | 
  | 85 | 85 |     # Make sure no one can sign in with an empty password | 
  | 86 | 86 |     return nil if password.to_s.empty? | 
  | 87 |  |     user = find(:first, :conditions => ["login=?", login]) | 
  |  | 87 |     user = find_by_login(login) | 
  | 88 | 88 |     if user | 
  | 89 | 89 |       # user is already in local database | 
  | 90 | 90 |       return nil if !user.active? | 
  | ... | ... |  | 
  | 183 | 183 |   def self.find_by_mail(mail) | 
  | 184 | 184 |     find(:first, :conditions => ["LOWER(mail) = ?", mail.to_s.downcase]) | 
  | 185 | 185 |   end | 
  |  | 186 |    | 
  |  | 187 |   # Makes find_by_login case-insensitive | 
  |  | 188 |   def self.find_by_login(login) | 
  |  | 189 |     find(:first, :conditions => ["LOWER(login) = ?", login.to_s.downcase]) | 
  |  | 190 |   end | 
  | 186 | 191 |  | 
  | 187 | 192 |   # Sort users by their display names | 
  | 188 | 193 |   def <=>(user) |