diff --git a/app/Events/UserSettingsChanged.php b/app/Events/UserSettingsChanged.php index 02c3a0195875..ead79b390898 100644 --- a/app/Events/UserSettingsChanged.php +++ b/app/Events/UserSettingsChanged.php @@ -8,14 +8,16 @@ class UserSettingsChanged extends Event { use SerializesModels; + public $user; + /** * Create a new event instance. * * @return void */ - public function __construct() + public function __construct($user = false) { - // + $this->user = $user; } } diff --git a/app/Listeners/HandleUserSettingsChanged.php b/app/Listeners/HandleUserSettingsChanged.php index 993e30141db0..42598334990f 100644 --- a/app/Listeners/HandleUserSettingsChanged.php +++ b/app/Listeners/HandleUserSettingsChanged.php @@ -6,6 +6,7 @@ use App\Events\UserSettingsChanged; use App\Ninja\Repositories\AccountRepository; use Illuminate\Queue\InteractsWithQueue; use Illuminate\Contracts\Queue\ShouldBeQueued; +use App\Ninja\Mailers\UserMailer; class HandleUserSettingsChanged { @@ -14,9 +15,10 @@ class HandleUserSettingsChanged { * * @return void */ - public function __construct(AccountRepository $accountRepo) + public function __construct(AccountRepository $accountRepo, UserMailer $userMailer) { $this->accountRepo = $accountRepo; + $this->userMailer = $userMailer; } /** @@ -27,12 +29,19 @@ class HandleUserSettingsChanged { */ public function handle(UserSettingsChanged $event) { - if (Auth::check()) { - $account = Auth::user()->account; - $account->loadLocalizationSettings(); + if (!Auth::check()) { + return; + } - $users = $this->accountRepo->loadAccounts(Auth::user()->id); - Session::put(SESSION_USER_ACCOUNTS, $users); + $account = Auth::user()->account; + $account->loadLocalizationSettings(); + + $users = $this->accountRepo->loadAccounts(Auth::user()->id); + Session::put(SESSION_USER_ACCOUNTS, $users); + + if ($event->user && $event->user->isEmailBeingChanged()) { + $this->userMailer->sendConfirmation($event->user); + Session::flash('warning', trans('texts.verify_email')); } } diff --git a/app/Models/User.php b/app/Models/User.php index 454a1c3f6900..1a469db403aa 100644 --- a/app/Models/User.php +++ b/app/Models/User.php @@ -130,27 +130,6 @@ class User extends Model implements AuthenticatableContract, CanResetPasswordCon { return Session::get(SESSION_COUNTER, 0); } - - /* - public function getPopOverText() - { - if (!Utils::isNinja() || !Auth::check() || Session::has('error')) { - return false; - } - - $count = self::getRequestsCount(); - - if ($count == 1 || $count % 5 == 0) { - if (!Utils::isRegistered()) { - return trans('texts.sign_up_to_save'); - } elseif (!Auth::user()->account->name) { - return trans('texts.set_name'); - } - } - - return false; - } - */ public function afterSave($success = true, $forced = false) { @@ -204,6 +183,12 @@ class User extends Model implements AuthenticatableContract, CanResetPasswordCon 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) @@ -214,7 +199,14 @@ class User extends Model implements AuthenticatableContract, CanResetPasswordCon event(new UserSignedUp()); } - event(new UserSettingsChanged()); + event(new UserSettingsChanged($user)); + } + + public function isEmailBeingChanged() + { + return Utils::isNinjaProd() + && $this->email != $this->getOriginal('email') + && $this->getOriginal('confirmed'); } } diff --git a/resources/lang/en/texts.php b/resources/lang/en/texts.php index eadaeab5afa4..8e6cc99cc112 100644 --- a/resources/lang/en/texts.php +++ b/resources/lang/en/texts.php @@ -817,6 +817,7 @@ return array( 'custom_invoice_link' => 'Custom Invoice Link', 'total_invoiced' => 'Total Invoiced', 'open_balance' => 'Open Balance', + 'verify_email' => 'Please visit the link in the account confirmation email to verify your email address.', );