Drupal → Как с помощью VBO сгенерировать пользователям новый пароль и отправить его на почту

26.03.2012

Настраиваемый экшен для VBO, генерирующий пользователям новый пароль и отправляющий его на почту:

/**
 * Implements hook_action_info().
 */
function mymodule_action_info() {
  return array(
    'mymodule_change_password' => array(
      'type' => 'user',
      'label' => 'Сменить пароль',
      'configurable' => TRUE,
      'triggers' => array('any'),
    ),
  );
}

/**
 * Action form.
 */
function mymodule_change_password_form($context) {
  $form['subject'] = array(
    '#type' => 'textfield',
    '#title' => 'Тема письма',
    '#default_value' => 'Уведомление о смене пароля',
  );
  
  $form['message'] = array(
    '#type' => 'textarea',
    '#title' => 'Сообщение',
    '#description' => 'Сообщение, которое будет отправлено пользователям',
    '#default_value' => 'Ваш пароль на сайте [site:url] изменён на [user:password]',
  );
  
  return $form;
}

/**
 * Action form submit.
 */
function mymodule_change_password_submit($form, $form_state) {
  return array(
    'subject' => $form_state['values']['subject'],
    'message' => $form_state['values']['message'],
  );
}

/**
 * Action callback.
 */
function mymodule_change_password($user, $context) {
  $new_password = user_password(8);
  user_save($user, array('pass' => $new_password));
  
  $context['message'] = str_replace('[user:password]', $new_password, $context['message']);
  drupal_mail('system', 'mail', $user->mail, language_default(), array(
    'context' => array(
      'subject' => token_replace($context['subject'], array('user' => $user)),
      'message' => token_replace($context['message'], array('user' => $user)),
    )
  ));
}

Полезно при миграции пользователей из других cms.

Написанное актуально для
Drupal 7.x
Похожие записи

Комментарии

Ксения
05.04.2012, 16:01

А можно ли использовать этот код для восстановления пароля?
И куда его вставлять? )

можно, но только зачем

вставлять в файл своего модуля

Добавить комментарий