RulesモジュールでOGメンバーにメールを送る方法

Events happening in the community are now at Drupal community events on www.drupal.org.
KRider's picture

こんばんは

タイトルの通りですが,あるコンテンツタイプを,OGを用いてグループコンテンツとしています。
そのコンテンツタイプで作られたAというコンテンツがアップデートされた場合,Aコンテンツの所属しているメンバーのみに,アップデートされたことをメールで送付したいと思っています。

OGをインストールした段階で,それらしいrule(rule名:OG new content notification)ができており,何とか改変して使えないかと試行錯誤しているのですが,なかなかうまくいきません。(例.所属していないユーザにまでメールがいく等)

皆様,どうかご教授ください。m(T_T)m

Comments

OG group content

blauerberg's picture

OG group content notificationの定義を見た感じだと、更新されたノードのgroup audienceからgroup memberを取得してメールを送信しているようなので、期待通り動くように見えます。

今使っているRulesの定義をエクスポートした結果を貼ってもらえれば何かわかるかもしれません。

私も rule ( OG new content

hgoto's picture

私も rule ( OG new content notification ) を見てみましたが、ざっと見たところでは blauerberg さんが言われているとおり本来 KRider さんのご期待どおりの動きをする rule のようです。これがうまく動かないということはバグで何らかのエラーが出ているのではないかと思います。 blauerberg さんがおっしゃるところ以外にログレポートを有効にして( /admin/config/workflow/rules/settings )ログを見られると問題の原因がわかるかもしれません。

KRider's picture

返信ありがとうございます。

一旦rulesを初期化して,ログを取り直してみました。
初期状態ではconditionに以下のようなエラーが有ります。

Entity is group content
Parameter: Entity: [node]
エラー: The data type of the configured argument does not match the parameter's entity requirement

これを以下のように変更した状態でイベントを起こしました。(actionは初期値のまま)

Entity is group content
Parameter: Entity: [node:members:0]

このイベントのログは以下のようになりました。
Rules evaluation log-Close all-
" Reacting on event After updating existing content.
0 ms Reacting on event After updating existing content.
7.405 ms Evaluating conditions of rule OG new content notification. [edit]
19.129 ms The condition og_entity_is_group_content evaluated to TRUE [edit]
19.137 ms AND evaluated to TRUE.
" Rule OG new content notification fires. [edit]
0 ms Rule OG new content notification fires.
0.087 ms Evaluating the action og_get_members. [edit]
2.081 ms Unable to get variable group_members, it is not defined.
4.504 ms Unable to evaluate loop. [edit]
4.545 ms Rule OG new content notification has fired.
23.713 ms Finished reacting on event After updating existing content.

ここから何かわかりますでしょうか・・・?

hgoto's picture

エラーメッセージをお出しいただきありがとうございます。私の環境でも試してみて、ざっくりとですが理解できたように思います。

  1. condition について

これを以下のように変更した状態でイベントを起こしました。(actionは初期値のまま)

Entity is group content
Parameter: Entity: [node:members:0]

こちらの変更を行うとロジックがおかしくてなってしまいますので、この変更は行わず condition はデフォルトのままで使ってみてください。

  1. 問題の解決方法について

condition に出るエラーについては、私の環境で再現したところ、 group content であるコンテンツタイプがひとつも存在しなければエラーのままですが、いったん group content であるコンテンツをひとつでも作成するとエラーがなくなりました( group content がないために出ているエラーのようです)。

その後、実際に group content のコンテンツを投稿すると問題なくメール送信されるようになりました。

ご参考になればと思います(ざっとやっただけですのでもしかしたら間違っている部分があるかもしれません・・その場合はすみません・・)。

KRider's picture

なるほど

確かにコンテンツタイプの設定欄からGroup Contentにチェックを入れたら,rulesのエラーメッセージがなくなりました。

またイベントの発生時(私はグループコンテンツの編集/更新をイベントとしています)にコンテンツのGroup Audienceフィールドに,編集/更新するコンテンツを選択することによって,該当コンテンツのOGメンバーにメールを送ることが確認できました。

このGroup Audienceフィールドを選択せずにメールを送ることは可能でしょうか?
ユーザに選択させたくない項目なので・・・
質問の連投になってしまい申し訳ありませんが,よろしくお願いします。(T_T)

hgoto's picture

問題解決されたとのことで何よりです。

このGroup Audienceフィールドを選択せずにメールを送ることは可能でしょうか?
ユーザに選択させたくない項目なので・・・

そうなんですね。こちらは「コンテンツ投稿時に【 Group Audience 】というフィールドの設定ができるが、これに何らかのデフォルト設定を行ってユーザが選択できないようにされたい」という理解でよろしいでしょうか?

KRider さんがコードを書かれるかどうかで、採るべきアプローチが分かれるように思います。

KRider さんがもしコードを書かれるのであれば、たとえば以下の方法で実現できるかと思います(おそらく、必要なコードもそれほど多くありません)。

  1. hook_form_alter() を実装: コンテンツ編集 / 更新時にそのフィールドを表示しないようにする
  2. hook_node_update() を実装: 保存時に自動で Group Aiduence を設定

コードを書かれないのであれば・・・すみません、ご要望のことを実現するモジュールがあるかどうかパッとはわかりません( 2 の部分については、もしかしたら以下のモジュールが使えるかもしれません)。。

Field default token
https://www.drupal.org/project/field_default_token

ご参考になればと思います。。

KRider's picture

そういうことですね。
やはりコードを書く必要がありましたか・・

承知しました。
ご助力ありがとうございました!

日本 コミュニティ: Drupal Japan User Group

Group organizers

Group categories

Group notifications

This group offers an RSS feed. Or subscribe to these personalized, sitewide feeds: