Class: User

Inherits:
ActiveRecord::Base
  • Object
show all
Defined in:
app/models/users/user.rb

Overview

Copyright (c) 2008-2013 Michael Dvorkin and contributors.

Fat Free CRM is freely distributable under the terms of MIT license. See MIT-LICENSE file or http://www.opensource.org/licenses/mit-license.php

Schema Information

Table name: users

id :integer not null, primary key username :string(32) default(""), not null email :string(254) default(""), not null first_name :string(32) last_name :string(32) title :string(64) company :string(64) alt_email :string(64) phone :string(32) mobile :string(32) aim :string(32) yahoo :string(32) google :string(32) skype :string(32) encrypted_password :string(255) default(""), not null password_salt :string(255) default(""), not null last_sign_in_at :datetime current_sign_in_at :datetime last_sign_in_ip :string(255) current_sign_in_ip :string(255) sign_in_count :integer default(0), not null deleted_at :datetime created_at :datetime updated_at :datetime admin :boolean default(FALSE), not null suspended_at :datetime unconfirmed_email :string(254) default(""), not null reset_password_token :string(255) reset_password_sent_at :datetime remember_token :string(255) remember_created_at :datetime authentication_token :string(255) confirmation_token :string(255) confirmed_at :datetime confirmation_sent_at :datetime

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.can_signup?Boolean

Returns:

  • (Boolean)


201
202
203
# File 'app/models/users/user.rb', line 201

def can_signup?
  %i[allowed needs_approval].include? Setting.
end

.find_for_database_authentication(warden_conditions) ⇒ Object

Overrides Devise sign-in to use either username or email (case-insensitive)



207
208
209
210
211
212
# File 'app/models/users/user.rb', line 207

def find_for_database_authentication(warden_conditions)
  conditions = warden_conditions.dup
  if  = conditions.delete(:email)
    where(conditions.to_h).where(["lower(username) = :value OR lower(email) = :value", { value: .downcase }]).first
  end
end

Instance Method Details

#abilityObject

Returns permissions ability object.



171
172
173
# File 'app/models/users/user.rb', line 171

def ability
  @ability ||= Ability.new(self)
end

#active_for_authentication?Boolean

Returns:

  • (Boolean)


121
122
123
# File 'app/models/users/user.rb', line 121

def active_for_authentication?
  super && confirmed? && !awaits_approval? && !suspended?
end

#awaits_approval?Boolean


Returns:

  • (Boolean)


117
118
119
# File 'app/models/users/user.rb', line 117

def awaits_approval?
  suspended? &&  == 0 && Setting. == :needs_approval
end

#destroyable?(current_user) ⇒ Boolean

Returns true if this user is allowed to be destroyed.

Returns:

  • (Boolean)


177
178
179
# File 'app/models/users/user.rb', line 177

def destroyable?(current_user)
  current_user != self && !has_related_assets?
end

#emailable?Boolean

Send emails to active users only

Returns:

  • (Boolean)


139
140
141
# File 'app/models/users/user.rb', line 139

def emailable?
  confirmed? && !awaits_approval? && !suspended? && email.present?
end

#full_nameObject




107
108
109
# File 'app/models/users/user.rb', line 107

def full_name
  first_name.blank? && last_name.blank? ? email : "#{first_name} #{last_name}".strip
end

Prevent deleting a user unless she has no artifacts left.

Returns:

  • (Boolean)


189
190
191
192
193
194
195
196
# File 'app/models/users/user.rb', line 189

def has_related_assets?
  sum = %w[Account Campaign Lead Contact Opportunity Comment Task].detect do |asset|
    klass = asset.constantize

    asset != "Comment" && klass.assigned_to(self).exists? || klass.created_by(self).exists?
  end
  !sum.nil?
end

#inactive_messageObject



125
126
127
128
129
130
131
132
133
134
135
# File 'app/models/users/user.rb', line 125

def inactive_message
  if !confirmed?
    super
  elsif awaits_approval?
    I18n.t(:msg_account_not_approved)
  elsif suspended?
    I18n.t(:msg_invalig_login)
  else
    super
  end
end

#nameObject




102
103
104
# File 'app/models/users/user.rb', line 102

def name
  first_name.blank? ? username : first_name
end

#password_required?Boolean

Returns:

  • (Boolean)


165
166
167
# File 'app/models/users/user.rb', line 165

def password_required?
  !persisted? || !password.nil? || !password_confirmation.nil?
end

#preferenceObject Also known as: pref




144
145
146
# File 'app/models/users/user.rb', line 144

def preference
  @preference ||= preferences.build
end

#set_individual_localeObject

Override global I18n.locale if the user has individual local preference.



151
152
153
# File 'app/models/users/user.rb', line 151

def set_individual_locale
  I18n.locale = preference[:locale] if preference[:locale]
end

#suspend_if_needs_approvalObject

Suspend newly created user if signup requires an approval.



183
184
185
# File 'app/models/users/user.rb', line 183

def suspend_if_needs_approval
  self.suspended_at = Time.now if Setting. == :needs_approval && !admin
end

#suspended?Boolean


Returns:

  • (Boolean)


112
113
114
# File 'app/models/users/user.rb', line 112

def suspended?
  suspended_at != nil
end

#to_json(_options = nil) ⇒ Object

Generate the value of single access token if it hasn't been set already.



157
158
159
# File 'app/models/users/user.rb', line 157

def to_json(_options = nil)
  [name].to_json
end

#to_xml(_options = nil) ⇒ Object



161
162
163
# File 'app/models/users/user.rb', line 161

def to_xml(_options = nil)
  [name].to_xml
end