Уведомление пользователю о новом пароле при его изменении
Материал из 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();
}