belongsTo('App\Models\Account'); } /** * @return mixed */ public function user() { return $this->belongsTo('App\Models\User')->withTrashed(); } /** * @return mixed */ public function client() { return $this->belongsTo('App\Models\Client')->withTrashed(); } /** * @return mixed */ public function getPersonType() { return PERSON_CONTACT; } /** * @return mixed|string */ public function getName() { return $this->getDisplayName(); } /** * @return mixed|string */ public function getDisplayName() { if ($this->getFullName()) { return $this->getFullName(); } else { return $this->email; } } /** * @param $contact_key * * @return mixed */ public function getContactKeyAttribute($contact_key) { if (empty($contact_key) && $this->id) { $this->contact_key = $contact_key = strtolower(str_random(RANDOM_KEY_LENGTH)); static::where('id', $this->id)->update(['contact_key' => $contact_key]); } return $contact_key; } /** * @return string */ public function getFullName() { if ($this->first_name || $this->last_name) { return trim($this->first_name.' '.$this->last_name); } else { return ''; } } /** * @return string */ public function getLinkAttribute() { if (! $this->account) { $this->load('account'); } $account = $this->account; $url = trim(SITE_URL, '/'); if ($account->hasFeature(FEATURE_CUSTOM_URL)) { if (Utils::isNinjaProd()) { $url = $account->present()->clientPortalLink(); } if ($this->account->subdomain) { $url = Utils::replaceSubdomain($url, $account->subdomain); } } return "{$url}/client/dashboard/{$this->contact_key}"; } } Contact::creating(function ($contact) { LookupContact::createNew($contact->account->account_key, [ 'contact_key' => $contact->contact_key, ]); }); Contact::deleted(function ($contact) { if ($contact->forceDeleting) { LookupContact::deleteWhere([ 'contact_key' => $contact->contact_key, ]); } });