Плагин активации юзеров

Сделал регистрацию пользователей на FormLister, все отлично, добился того чтобы когда пользователь регистрируется, он по умолчанию заблокирован, админу приходит письмо с уведомлением о новом юзере и ссылкой в админку для его разблокировки. Но теперь застопорился на том чтобы когда его админ разблокировал, юзеру приходило письмо на почту типа «Вы разблокированы, теперь можете зайти в кабинет бла-бла-бла». Понимаю что нужно написать плагин, только не знаю как.
Подозреваю что событие OnManagerSaveUser, а самим кодом туплю. Подскажите или натолкните на мысль.Спасибо!

9 комментариев

avatar
На мысль может натолкнуть контроллер Activate.
avatar
Я хотел его ииспользовать, но хотят именно активировать не по почте, а именно чтобы админ одобрял
avatar
Ну так нужно написать плагин, который установит logincount в -1, потом отправит ссылку для активации.
avatar
Блин, я что-то думал, что пользователю нужно отправить письмо для активации, после того, как админ его разблокирует. А так все совсем просто получается, но трюк с logincount (или другим полем) все равно нужен, чтобы письмо отправилось только один раз.
avatar
$e = &$modx->Event;
$blocked = $_POST['blocked'];
$id = $_POST['id'];
$email = $_POST['email'];

if (($e->name == 'OnWUsrFormSave')) {
	
	require_once (MODX_MANAGER_PATH.'includes/controls/phpmailer/class.phpmailer.php');
	
	
	$html = '
	Здравствуйте.
	Вам разрешен доступ в каталог сайта SITE.RU
	Приятной работы!
	
	<p><i>Данное письмо создано автоматически. Отвечать на него не нужно.</i></p> 
	';
	
	if ($blocked==0) {
	$mail = new PHPMailer();
	$mail->isHTML(true);
	$mail->CharSet = "UTF-8";					
	$mail->From		= 'robot@site.ru';
	$mail->FromName	= 'Robot';
	$mail->Subject	= 'Добро пожаловать в SITE.RU';
	$mail->Body		= $html;
	$mail->addAddress($email);
	if(!$mail->send()) echo 'mailer error';
	}
	
}


буду признателен за любой донат
webmoney R948295169787
avatar
Нужно его немного допилить иначе при каждом редактировании аккаунта будет отправляться письмо. Я лично добавил поле sent в таблицу modx_web_user_attributes и при отправке там ставится число и второй раз уже не отправится

$e = &$modx->Event;
$blocked = $_POST['blocked'];
$id = $_POST['id'];
$email = $_POST['email'];


if(($e->name == 'OnWUsrFormSave')){
	if($blocked == 0){

		
		$tb = $modx->getFullTableName('web_user_attributes');
		$select = $modx->db->select("sent", $tb,  "internalKey={$id}");
		$data = $modx->db->getRow($select);
		if($data['sent'] == 0){
			
			$fields = array('sent' => 1);
			$result = $modx->db->update($fields, $tb, "internalKey={$id}");
			$url = $modx->makeUrl(15, '', '', 'full');
			$subject = 'Вам разрешен доступ в личный кабинет сайта site.com';
			$message = '
				<html>
					<head>
						<title>'.$subject.'</title>
					</head>
					<body>
						<p><h3>Здравствуйте.</h3></p>
						<p>Вам разрешен доступ в <a href="'.$url.'" title="Перейти в личный кабинет" target="_blank">личный кабинет</a> сайта site.com</p>
						<p>Приятной работы!</p>
						<p><i>Данное письмо создано автоматически. Отвечать на него не нужно.</i></p> 
					</body>
				</html>
			';
			$to = $email;
			$headers  = "Content-type: text/html; charset=utf-8 \r\n";
			$headers .= "From: info@site.com";
			mail($to, $subject, $message, $headers);
		}	
	}
}
Комментарий отредактирован 2017-05-31 06:48:08 пользователем d-fm1301
avatar
Да, у меня самый примитивный вариант. Можно поднавернуть при необходимости.
avatar
добился того чтобы когда пользователь регистрируется, он по умолчанию заблокирован
как вы это сделали?
avatar
Способ конечно не из лучших, просто тупо в файле «assets/lib/MODxAPI/modUsers.php» в массиве по умолчанию добавил "'blocked' => 1," как будет время, попробую как посоветовал Pathologic так все-таки правильней будет, чем в ядре ковыряться
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.