mirror of
				https://github.com/invoiceninja/invoiceninja.git
				synced 2025-10-30 23:07:29 -04:00 
			
		
		
		
	
		
			
				
	
	
		
			244 lines
		
	
	
		
			5.4 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			244 lines
		
	
	
		
			5.4 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| <?php namespace App\Models;
 | |
| 
 | |
| use Session;
 | |
| use Auth;
 | |
| use Event;
 | |
| use App\Libraries\Utils;
 | |
| use App\Events\UserSettingsChanged;
 | |
| use App\Events\UserSignedUp;
 | |
| use Illuminate\Auth\Authenticatable;
 | |
| use Illuminate\Database\Eloquent\Model;
 | |
| use Illuminate\Auth\Passwords\CanResetPassword;
 | |
| use Illuminate\Contracts\Auth\Authenticatable as AuthenticatableContract;
 | |
| use Illuminate\Contracts\Auth\CanResetPassword as CanResetPasswordContract;
 | |
| use Illuminate\Database\Eloquent\SoftDeletes;
 | |
| 
 | |
| class User extends Model implements AuthenticatableContract, CanResetPasswordContract {
 | |
| 
 | |
|     use Authenticatable, CanResetPassword;
 | |
| 
 | |
|     /**
 | |
|      * The database table used by the model.
 | |
|      *
 | |
|      * @var string
 | |
|      */
 | |
|     protected $table = 'users';
 | |
| 
 | |
|     /**
 | |
|      * The attributes that are mass assignable.
 | |
|      *
 | |
|      * @var array
 | |
|      */
 | |
|     protected $fillable = ['first_name', 'last_name', 'email', 'password'];
 | |
| 
 | |
|     /**
 | |
|      * The attributes excluded from the model's JSON form.
 | |
|      *
 | |
|      * @var array
 | |
|      */
 | |
|     protected $hidden = ['password', 'remember_token', 'confirmation_code'];
 | |
| 
 | |
|     use SoftDeletes;
 | |
|     protected $dates = ['deleted_at'];
 | |
| 
 | |
|     public function account()
 | |
|     {
 | |
|         return $this->belongsTo('App\Models\Account');
 | |
|     }
 | |
| 
 | |
|     public function theme()
 | |
|     {
 | |
|         return $this->belongsTo('App\Models\Theme');
 | |
|     }
 | |
| 
 | |
|     public function getName()
 | |
|     {
 | |
|         return $this->getDisplayName();
 | |
|     }
 | |
| 
 | |
|     public function getPersonType()
 | |
|     {
 | |
|         return PERSON_USER;
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Get the unique identifier for the user.
 | |
|      *
 | |
|      * @return mixed
 | |
|      */
 | |
|     public function getAuthIdentifier()
 | |
|     {
 | |
|         return $this->getKey();
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Get the password for the user.
 | |
|      *
 | |
|      * @return string
 | |
|      */
 | |
|     public function getAuthPassword()
 | |
|     {
 | |
|         return $this->password;
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Get the e-mail address where password reminders are sent.
 | |
|      *
 | |
|      * @return string
 | |
|      */
 | |
|     public function getReminderEmail()
 | |
|     {
 | |
|         return $this->email;
 | |
|     }
 | |
| 
 | |
|     public function isPro()
 | |
|     {
 | |
|         return $this->account->isPro();
 | |
|     }
 | |
| 
 | |
|     public function maxInvoiceDesignId()
 | |
|     {
 | |
|         return $this->isPro() ? 11 : (Utils::isNinja() ? COUNT_FREE_DESIGNS : COUNT_FREE_DESIGNS_SELF_HOST);
 | |
|     }
 | |
| 
 | |
|     public function getDisplayName()
 | |
|     {
 | |
|         if ($this->getFullName()) {
 | |
|             return $this->getFullName();
 | |
|         } elseif ($this->email) {
 | |
|             return $this->email;
 | |
|         } else {
 | |
|             return 'Guest';
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     public function getFullName()
 | |
|     {
 | |
|         if ($this->first_name || $this->last_name) {
 | |
|             return $this->first_name.' '.$this->last_name;
 | |
|         } else {
 | |
|             return '';
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     public function showGreyBackground()
 | |
|     {
 | |
|         return !$this->theme_id || in_array($this->theme_id, [2, 3, 5, 6, 7, 8, 10, 11, 12]);
 | |
|     }
 | |
| 
 | |
|     public function getRequestsCount()
 | |
|     {
 | |
|         return Session::get(SESSION_COUNTER, 0);
 | |
|     }
 | |
|     
 | |
|     public function afterSave($success = true, $forced = false)
 | |
|     {
 | |
|         if ($this->email) {
 | |
|             return parent::afterSave($success = true, $forced = false);
 | |
|         } else {
 | |
|             return true;
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     public function getMaxNumClients()
 | |
|     {
 | |
|         if ($this->isPro()) {
 | |
|             return MAX_NUM_CLIENTS_PRO;
 | |
|         }
 | |
| 
 | |
|         if ($this->id < LEGACY_CUTOFF) {
 | |
|             return MAX_NUM_CLIENTS_LEGACY;
 | |
|         }
 | |
| 
 | |
|         return MAX_NUM_CLIENTS;
 | |
|     }
 | |
| 
 | |
|     public function getMaxNumVendors()
 | |
|     {
 | |
|         if ($this->isPro()) {
 | |
|             return MAX_NUM_VENDORS_PRO;
 | |
|         }
 | |
| 
 | |
|         if ($this->id < LEGACY_CUTOFF) {
 | |
|             return MAX_NUM_VENDORS_LEGACY;
 | |
|         }
 | |
| 
 | |
|         return MAX_NUM_VENDORS;
 | |
|     }
 | |
|     
 | |
|     
 | |
|     public function getRememberToken()
 | |
|     {
 | |
|         return $this->remember_token;
 | |
|     }
 | |
| 
 | |
|     public function setRememberToken($value)
 | |
|     {
 | |
|         $this->remember_token = $value;
 | |
|     }
 | |
| 
 | |
|     public function getRememberTokenName()
 | |
|     {
 | |
|         return 'remember_token';
 | |
|     }
 | |
| 
 | |
|     public function clearSession()
 | |
|     {
 | |
|         $keys = [
 | |
|             RECENTLY_VIEWED,
 | |
|             SESSION_USER_ACCOUNTS,
 | |
|             SESSION_TIMEZONE,
 | |
|             SESSION_DATE_FORMAT,
 | |
|             SESSION_DATE_PICKER_FORMAT,
 | |
|             SESSION_DATETIME_FORMAT,
 | |
|             SESSION_CURRENCY,
 | |
|             SESSION_LOCALE,
 | |
|         ];
 | |
| 
 | |
|         foreach ($keys as $key) {
 | |
|             Session::forget($key);
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     public static function onUpdatingUser($user)
 | |
|     {
 | |
|         if ($user->password != $user->getOriginal('password')) {
 | |
|             $user->failed_logins = 0;
 | |
|         }
 | |
| 
 | |
|         // if the user changes their email then they need to reconfirm it
 | |
|         if ($user->isEmailBeingChanged()) {
 | |
|             $user->confirmed = 0;
 | |
|             $user->confirmation_code = str_random(RANDOM_KEY_LENGTH);
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     public static function onUpdatedUser($user)
 | |
|     {
 | |
|         if (!$user->getOriginal('email')
 | |
|             || $user->getOriginal('email') == TEST_USERNAME
 | |
|             || $user->getOriginal('username') == TEST_USERNAME
 | |
|             || $user->getOriginal('email') == 'tests@bitrock.com') {
 | |
|             event(new UserSignedUp());
 | |
|         }
 | |
| 
 | |
|         event(new UserSettingsChanged($user));
 | |
|     }
 | |
| 
 | |
|     public function isEmailBeingChanged()
 | |
|     {
 | |
|         return Utils::isNinjaProd()
 | |
|                 && $this->email != $this->getOriginal('email')
 | |
|                 && $this->getOriginal('confirmed');
 | |
|     }
 | |
| 
 | |
| }
 | |
| 
 | |
| User::updating(function ($user) {
 | |
|     User::onUpdatingUser($user);
 | |
| });
 | |
| 
 | |
| User::updated(function ($user) {
 | |
|     User::onUpdatedUser($user);
 | |
| });
 |