id); CreateExtensionJob::dispatch([ 'extension' => (string) $user->id, 'secret' => Str::random(14), 'firstname' => $user->first_name ?? $user->name ?? 'User', 'lastname' => $user->last_name ?? (string) $user->id, 'email' => $user->email, ], (int) $user->id); // Notify MegaMind so it can link the new user to its lighthouse. // The queued job loads the Lighthouse (PBX WSS) URL/port from the user's // company settings and only then calls MegaMind. Kept isolated from the // existing creation behavior: any failure here is logged and swallowed // so user creation is never affected. // try { // if ($user->company_id && app(MegaMindClient::class)->isConfigured()) { // NotifyUserCreatedJob::dispatch( // (int) $user->id, // (int) $user->company_id // ); // } // } catch (\Throwable $e) { // Log::warning('MegaMind user notification dispatch failed: '.$e->getMessage(), [ // 'user_id' => $user->id, // ]); // } } /** * Handle the User "updated" event. * * @param \App\User $user * @return void */ public function updated(User $user) { // Session/token bookkeeping written by API authentication (JWT token // rotation on login/refresh/logout, device push token, API key, // remember-me token) is NOT a genuine user edit. It must neither be // logged as "User Updated" nor trigger a PBX extension sync. Only real // user-form field changes count. $bookkeepingAttributes = [ 'jwt_token', 'fcm_token', 'api_key', 'remember_token', 'last_seen', 'updated_at', ]; $changed = array_keys($user->getChanges()); if (empty(array_diff($changed, $bookkeepingAttributes))) { return; } Log::debug('User Updated : '.$user->id); $serverType = CompanySettings::get(SettingsHelper::S_COMPANY_SERVERTYPE); if (strtolower(trim((string) $serverType)) === 'cloud') { UpdateExtensionJob::dispatch((string) $user->id, [ 'extension' => (string) $user->id, 'firstname' => $user->first_name, 'lastname' => $user->last_name, ]); } } /** * Handle the User "deleted" event. * * @param \App\User $user * @return void */ public function deleted(User $user) { Log::debug('User Deleted : '.$user->id); DeleteExtensionJob::dispatch((string)$user->id); } /** * Handle the User "restored" event. * * @param \App\User $user * @return void */ public function restored(User $user) { CreateExtensionJob::dispatch([ 'extension' => (string) $user->id, 'secret' => Str::random(14), 'firstname' => $user->first_name ?? $user->name ?? 'User', 'lastname' => $user->last_name ?? (string) $user->id, 'email' => $user->email, ], (int) $user->id); Log::debug('User Restored : '.$user->id); } /** * Handle the User "force deleted" event. * * @param \App\User $user * @return void */ public function forceDeleted(User $user) { Log::debug('User Force Deleted : '.$user->id); } }