私はDrupal開発に不慣れで、これについて頭を悩ませています。私の会社は、企業に市場調査を提供するサブスクリプションベースのサイトを運営しています。会社はサブスクリプションの料金を支払い、特定の数のユーザー。プライマリユーザーとして指定されたユーザーは、残りのユーザーを自分で追加できます。次に、会社に存在しないユーザーを削除できるようにする機能を追加する必要があります。これを行うには、起こるために続く:
以前の開発者は、いくつかの異なる状況でユーザーを追加できるアカウント管理用のカスタムモジュールを作成しました。たとえば、ユーザーはそれを追加する会社にとってまったく新しいものです。つまり、すでに接続されているユーザーにDrupalアカウントを提供するのではなく、他の接続されていないシステムにも追加する必要があります。他のシステムでは。
現在、JavaScriptで_Drupal.parseJson
_を使用して、クリックされたURLのセグメントに基づいてリクエストを処理するために多くのことが行われています。これは、完全に更新せずにユーザーリストでページを更新できるという唯一の理由で行われました。私は個人的に、この新しい機能がそのように機能するのか、それともサーバーにアクセスしてページを更新する必要があるのかは気にしません。上記のリストのすべてをワンクリックで実行する方法を見つける必要があります。
私はAPIを調べて_user_delete
_を見つけましたが、これには_$edit
_と_$uid
_の2つのパラメーターが必要です。 uidは問題ありませんが、_$edit
_について私が見つけることができるのは、それが「送信されたフォーム値の配列」であることだけです。ただし、フォームは使用していません。ユーザーリストは静的テキストであり、アクションはすべて(この時点で)hrefのクリック時に発生します。何も提出されていません。 _$edit
_の値を偽造できる方法はありますか?またはこれを行う別の方法はありますか?私はhook_user()
について読んでいて、実際の削除を行うためにuser_delete()
をどこかで呼び出すと思います。その後、私のhook_user()
実装は、 _$op = delete
_パラメータ。しかし、他のことを行う方法について心配する前に、user_delete()
を呼び出す方法についてのガイダンスが必要です。
user_delete()
を使用する価値さえありますか?ユーザーレコードを削除してコンテンツレコードを「匿名」に変更する独自のクエリを作成する方が簡単でしょうか?
これはそれほど難しくありません。D6の場合、次のようになります。
Drupalデータベースユーザーテーブルからレコードを削除します;
user_delete(array(), $uid);
削除されたユーザーが作成したコンテンツの作成者を匿名に変更します。
ノードモジュールによって処理されます。
ユーザーを他の接続されていないシステムから削除する必要があることを知らせるために、内部サポートアドレスにメールを送信します
drupal_mail(...);
見る - hook_mail
詳細については。
User_delete()を使用する価値さえありますか?ユーザーレコードを削除してコンテンツレコードを「匿名」に変更する独自のクエリを作成する方が簡単でしょうか?
ユーザーアカウントを削除し、ユーザーが作成したすべてのノードを匿名ユーザーに割り当てるには、ユーザーオブジェクトがあるかどうかに応じて、user_delete(array(), $account->uid)
またはuser_delete(array(), $uid)
を呼び出すだけです。ユーザーID。
削除されるユーザーアカウントで作成されたノードの割り当てに関しては、user_delete()
はhook_user()
のすべての実装を呼び出し、「delete」を_$op
_の値として渡します。 Nodeモジュールは、次のコードを使用してフックを実装します。
_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);
}
}
_
ご覧のとおり、この関数は、削除されるユーザーアカウントによって作成されたノードと、そのユーザーアカウントに関連付けられているノードリビジョンを既に更新しています。
_$op
_パラメータが "delete"に設定されている場合、user_delete()
に必要な最初のパラメータは、hook_user()
の実装では通常使用されません。ほとんどの場合、モジュールは_$account->uid
_を使用して、独自のデータベーステーブルに書き込んだユーザーデータを識別します。モジュールがユーザーアカウントを識別するために別の値を使用してデータを保存したとしても、それはユーザーオブジェクトに含まれる値です。
ユーザーアカウントを削除するために独自のクエリを作成する場合、ユーザーアカウントが削除されたときに通知する必要があるモジュールがあり、通常はそのアカウントに関連付けられているモジュールのデータを削除するため、それを行うことはお勧めしません。この特定の目的のための関数が既に存在する場合にコードを書き換えると、新しいDrupalバージョンに渡すときにコードを更新することもできます。コードは、Drupalですでに使用されているコードほど一般的ではありません。 。
非コーディング方法:
必要なモジュール:トリガー(コアの一部)
手順1:トリガーモジュールを有効にする
ステップ2:メール送信アクションを作成する
ステップ3:トリガーを作成する
これで完了です。デフォルトでは、ユーザーを削除すると、すべての投稿がanonymousになります。
改訂:
ユーザーを今すぐ削除する場所を選択できます。
/admin/user/user
にアクセスすると、ユーザーを一括削除できますこれらの方法はすべて、削除されたすべてのユーザーに自動的にメールを送信します。コードを編集せずにメールの本文と受信者を変更できるため、この方法の方が柔軟性があると思います。