Уведомление пользователю о новом пароле при его изменении

Материал из Umicms
Перейти к:навигация, поиск

Актуально для версии 2.9


Задача: необходимо, чтобы пользователю сайта при изменении своего пароля в личном кабинете приходило об этом уведомление на почту с новым паролем.

Для решения задачи напишем кастомный макрос по событию users_settings_do, которое срабатывает при изменении настроек пользователя.

1) создадим в папке /classes/modules/users/ файл custom_events.php со следующим содержимым:

<?php
    new umiEventListener('users_settings_do', 'users', 'changePass');
?>

2) откроем файл /classes/modules/users/__custom.php и после слов //TODO: Write here your own macroses опишем свои методы. Сначала опишем метод по получению необходимых данных при сохранении изменений настроек пользователя и передадим их методу changePassMail:

public function changePass(iUmiEventPoint $oEventPoint) {
	if ($oEventPoint->getMode() === "before") return true;

	if ($oEventPoint->getMode() === "after") {
		// берем необходимые параметры
		$passform = getRequest('password');
		$iUserId = $oEventPoint->getParam("user_id");
		$objects = umiObjectsCollection::getInstance();
		$userObject = $objects->getObject($iUserId);
		if($userObject instanceof umiObject) {
			$login = $userObject->getValue("login");
			$email = $userObject->getValue("e-mail");
			self::changePassMail ($login,$passform,$email);
		}
	}
}

3) опишем метод changePassMail, который отправит письмо пользователю:

protected function changePassMail ($login,$passform,$email) {
	$recipient = regedit::getInstance()->getVal('//settings/admin_email');
	$subject = 'Ваш пароль был изменен';
	$from = 'UMI.CMS';
	$from_mail  = regedit::getInstance()->getVal('//settings/email_from');
	//Формируем сообщение
	$content = "
	<html>
		<body>
			<div>
			<p> Для пользователя {$login} был изменен пароль.
			<div>
				<p> <b>Новые данные для входа на сайт:</b>
				<p> <b>Логин:</b> {$login}
				<p> <b>Пароль:</b> {$passform}
			</div>
			</div>
		</body>
	</html>
	";
	//Формируем письмо                        
	$mail = new umiMail();
	$mail->addRecipient($email);
	$mail->setFrom($from_mail,$from);
	$mail->setSubject($subject);
	$mail->setContent($content);
	$mail->commit();
	$mail->send();
}