私が取り組んでいるサイトは、適切なユーザーシステムを持っていなかったシステムからの移行であるため、多くの匿名ノードがあります。ユーザーはノードにアクセスしてノードを編集し、システムの作成者を変更することで記事を要求できますが、誰か(できれば管理者ではない人)が匿名の作成者がいるノードを編集するときは常にデフォルトでこれを実行します。フォームの変更またはフォームのプリプロセスフックを介してすぐに実行できるはずですが、drupalフォームシステムはまだ取得できません。ソリューションと優れた情報源へのポインタはどちらも歓迎します。
[〜#〜] update [〜#〜]ここでこの質問を調整しました: 匿名ノードのデフォルトのノード所有者を設定するにはどうすればよいですか?ノード編集フォームでは?
次のような hook_form_alter() 関数を使用できます。
/**
* Implements hook_form_alter().
*/
function mymodule_form_alter(&$form, &$form_state, $form_id) {
// If edit page is node
if (isset($form['#node_edit_form'])) {
$form['actions']['submit']['#submit'][] = 'mymodule_node_edit_submit';
}
}
/**
* Implements submit function for node edit.
*/
function mymodule_node_edit_submit($form, &$form_state) {
// Get node id
$nid = $form_state['values']['nid'];
// Get current user
$current_uid = $form_state['values']['uid'];
// Load node if owner is anonymous
if($current_uid == 0){
// Get logged in user id to append uid as owner to node.
global $user;
$node = node_load($nid);
// Set owner id as logged in user
$node->uid = $user->uid;
// Save node
node_save($node);
}
}
Rules モジュールを有効にしている場合は、次のようなルールを使用できます。
{ "rules_change_anonymous_user_to_current_user" : {
"LABEL" : "Change anonymous user to current user",
"PLUGIN" : "reaction rule",
"ACTIVE" : false,
"OWNER" : "rules",
"REQUIRES" : [ "rules" ],
"ON" : { "node_update" : [] },
"IF" : [
{ "data_is" : { "data" : [ "node-unchanged:author:uid" ], "value" : "0" } },
{ "user_has_role" : {
"account" : [ "site:current-user" ],
"roles" : { "value" : { "2" : "2" } }
}
},
{ "NOT user_has_role" : {
"account" : [ "site:current-user" ],
"roles" : { "value" : { "3" : "3" } }
}
}
],
"DO" : [
{ "data_set" : { "data" : [ "node:author" ], "value" : [ "site:current-user" ] } },
{ "drupal_message" : {
"message" : "Be aware: this was a node with an anonymous author. Since you just edited it, you are now considered as the author of it.",
"type" : "warning"
}
}
]
}
}
ルールUIを有効にすると、このルールを自分のサイトにインポートできるようになります。
このルールが何をするのか明確でない場合に備えて:
uid=0
を持っています。Done! ...オプション1付き。
「...誰か(できれば管理者ではない誰か)が匿名の作成者がいるノードを編集するときはいつでも...」)前のオプションには欠点:ノードを編集する必要があります。しかし、ノードのコンテンツが実際に問題なく、何も編集する必要がない場合はどうでしょうか。そのため、私は可能な選択肢をお勧めします。これは、前のオプションと一緒に使用するか、またはその代替として使用します。詳細については、以下をお読みください...
Flag モジュールを使用して、認証済みユーザーによる使用を許可された(非グローバル)フラグを作成することもできます。 "I am the author
"のようなラベルが付いたフラグをマシン名 "i_am_the_author
"で定義するとします。このようなフラグを設定すると、次のように、オプション1のルールのバリエーションを使用できます。
{ "rules_change_anonymous_user_to_flagging_user" : {
"LABEL" : "Change anonymous user to flagging user",
"PLUGIN" : "reaction rule",
"ACTIVE" : false,
"OWNER" : "rules",
"REQUIRES" : [ "rules", "flag" ],
"ON" : { "flag_flagged_i_am_the_author" : [] },
"IF" : [
{ "data_is" : { "data" : [ "flagged-node:author:uid" ], "value" : "0" } },
{ "user_has_role" : {
"account" : [ "site:current-user" ],
"roles" : { "value" : { "2" : "2" } }
}
},
{ "NOT user_has_role" : {
"account" : [ "site:current-user" ],
"roles" : { "value" : { "3" : "3" } }
}
}
],
"DO" : [
{ "data_set" : { "data" : [ "flagged-node:author" ], "value" : [ "site:current-user" ] } },
{ "drupal_message" : {
"message" : "Be aware: this was a node with an anonymous author. Since you just flagged it, you are now considered as the author of it.",
"type" : "warning"
}
}
]
}
}
ルールUIを有効にすると、このルールを自分のサイトにインポートできるようになります。
このルールが何をするのか明確でない場合に備えて:
uid=0
を持っています。完了! ...オプション2付き。
オプション2を実装する場合(「I am the author」フラグを使用)、オプション1のルールをそのバリエーションに置き換えることもできます。つまり、(まだ)あるノードの編集試行を単に許可しません。匿名ユーザー。このようなルールがどのように見えるかの要約を次に示します。
/node/nid/edit
のようになります(正規表現を使用)。I am the author
"フラグ。Voilà!
使用するソリューション(オプション)に関係なく、常に複数のユーザーがノードの作成者であると主張する可能性があります。
そのシナリオを考慮するために、オプション2からルールのバリエーションを作成することもできます。そのようなルールの詳細は次のとおりです。
uid=0
」に置き換えます。ゲームオーバー!?!?
hook_node_update を使用できます
/**
* Implements hook_node_update().
*/
function hook_node_update($node) {
global $user;
//administrator role id
$admin_rid = 3;
//To check if user is not admin
if (!array_key_exists( $admin_rid , $user->roles)) {
$node->uid = $user->uid;
node_save($node);
}
}