Как я могу программно удалить пользователя в Drupal 6?

Я новичок в разработке Drupal и нахожусь над моей головой. Моя компания управляет сайтом на основе подписки, предлагающим исследования рынка корпорациям. Компания оплачивает подписку и получает определенное количество пользователей. Человек, назначенный как основной пользователь, имеет возможность добавлять остальных пользователей самостоятельно. Теперь нам нужно добавить функцию, которая позволит им удалить пользователя, который больше не находится в своей компании. При этом нам нужно следующее:

  1. Удалить запись из таблицы базы данных «пользователи»
  2. Измените автора на любом узле, созданном удаленным пользователем, на «Анонимный»
  3. Отправьте электронное письмо на наш внутренний адрес поддержки, сообщив им, что пользователь должен быть удален из других несвязанных систем.

Предыдущий разработчик создал настраиваемый модуль для управления учетными записями, который позволяет добавлять пользователей в нескольких разных обстоятельствах. Например, пользователь совершенно не знаком с добавлением компании, что означает, что они также должны быть добавлены в другие наши несвязанные системы, в отличие от предоставления учетной записи Drupal для пользователя, который уже находится в наших других системах.
В настоящее время многое делается с помощью JavaScript с помощью Drupal.parseJson для обработки запроса на основе сегментов URL-адреса. Это было сделано только по причине возможности обновить страницу с помощью списка пользователей без полного обновления. Мне лично все равно, работает ли эта новая функция, или если ей нужно попасть на сервер и обновить страницу. Мне просто нужно найти способ сделать все в приведенном выше списке одним нажатием.

Я просмотрел API и нашел user_delete, но для этого требуются два параметра - $edit и $uid. Uid не проблема, но все, что я могу найти о $edit, это то, что это «массив представленных форм». Однако мы не используем форму; наши списки пользователей - это статический текст, и все действия происходят при щелчке href (на данный момент); так что ничего не представлено. Есть ли способ подделать значения $edit? Или есть другой способ сделать это? Я читаю о hook_user() и думаю, что я бы назвал user_delete() где-то сделать фактическое удаление, а затем моя реализация hook_user() будет обрабатывать остальные с помощью $op = delete param. Но прежде чем я буду беспокоиться о том, как получить другой материал, мне нужно некоторое руководство о том, как вызвать user_delete().

Стоит ли даже использовать user_delete()? Было бы меньше проблем просто написать мои собственные запросы, чтобы удалить запись пользователя и изменить любые записи контента на «Аноним»?

6 голосов | спросил EmmyS 21 J000000Thursday11 2011, 22:01:19

3 ответа


6

Это не так сложно, для D6 это будет выглядеть так:

  1. Удалить запись из таблицы пользователей базы данных Drupal;

    user_delete(array(), $uid);
    
  2. Измените автора на любой контент, созданный удаленным пользователем, на Anonymous;

    обрабатывается узловым модулем.

  3. Отправьте электронное письмо на наш внутренний адрес поддержки, сообщив им, что пользователь должен быть удален из других несвязанных систем.

    drupal_mail(...);
    

    См. hook_mail .

ответил googletorp 21 J000000Thursday11 2011, 22:14:22
4
  

Можно ли использовать user_delete ()? Было бы меньше проблем просто написать мои собственные запросы, чтобы удалить запись пользователя и изменить любые записи контента на «Аноним»?

Чтобы удалить учетную запись пользователя и назначить все узлы, созданные пользователем анонимным пользователем, вам просто нужно вызвать user_delete(array(), $account->uid), или user_delete(array(), $uid), если у вас есть пользовательский объект или идентификатор пользователя.

Как для назначения узлов, созданных с удаляемой учетной записью пользователя, user_delete() вызывает все реализации hook_user() передача "delete" в качестве значения для $op. Модуль узла реализует крючок, используя следующий код:

function node_user($op, &$edit, &$user) {
  if ($op == 'delete') {
    db_query('UPDATE {node} SET uid = 0 WHERE uid = %d', $user->uid);
    db_query('UPDATE {node_revisions} SET uid = 0 WHERE uid = %d', $user->uid);
  }
}

Как вы видите, функция уже обновляет узлы, созданные удаляемой учетной записью пользователя, и любые изменения узлов, связанные с этой учетной записью пользователя.

Первый параметр, требуемый от user_delete(), обычно не используется из реализаций hook_user(), если для параметра $op установлено значение «удалить». В большинстве случаев модули просто используют $account->uid для идентификации пользовательских данных, которые они написали в своих собственных таблицах базы данных. Даже если модули сохраняют данные, используя другое значение для идентификации учетной записи пользователя, это значение, содержащееся в объекте пользователя.

Как и при написании собственных запросов для удаления учетной записи пользователя, я бы не предложил сделать это, так как могут быть модули, которые необходимо информировать, когда удаляется учетная запись пользователя, обычно для удаления данных, связанных с этим аккаунтом , Код перезаписи, когда есть уже функция для этой конкретной цели, может также означать обновление кода при переходе к новой версии Drupal. Код не будет таким общим, как код, уже используемый Drupal.

ответил kiamlaluno 21 J000000Thursday11 2011, 22:55:57
0

Метод без кодирования:

Необходимые модули: Триггеры (часть ядра)

Шаг 1: Включить триггерный модуль

Шаг 2: Создайте действие отправки электронной почты

  • goo admin /settings /actions
  • создать «Отправить письмо ...» действие
  • заполните форму

создать отправить письмо ... действие

Шаг 3. Создание триггера

  • goto admin /build /trigger /user
  • под Триггер: после удаления пользователя выберите действие, которое вы только что создали.

create trigger

И ваше дело! По умолчанию при удалении пользователя все их сообщения превращаются в анонимный .

Исправленный вариант:

Теперь у вас есть выбор, где вы хотите удалить пользователей.

  • Вы можете массово удалить пользователей, перейдя в /admin/user/user
  • Перейдите на страницу профиля пользователя и удалите
  • Создайте свой собственный модуль и функцию, которая вызывает user_delete (array (), $ uid)

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

ответил iStryker 21 J000000Thursday11 2011, 22:35:52

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132