web-dev-qa-db-ja.com

グループにフラグが付けられた後、グループのすべてのメンバーにメールを送信するにはどうすればよいですか?

Group モジュールを使用します。グループをマークするフラグを作成します。グループにマークが付けられると、そのグループのすべてのメンバーにメールが送信されます。これを行う方法 ?

次のルールを作成しましたが、グループに関する「条件」には何も見つかりません。

{ "rules_email_groupe" : {
    "LABEL" : "Email groupe",
    "PLUGIN" : "reaction rule",
    "OWNER" : "rules",
    "REQUIRES" : [ "rules", "flag" ],
    "ON" : { "flag_flagged_achats_groupes" : [] },
    "DO" : [
      { "mail" : {
          "to" : "[email protected]",
          "subject" : "Invitation \u00e0 la vente group\u00e9e de [flagged-group:title]",
          "message" : "Bonjour,\r\n\r\n\r\nle groupe [flagged-group:title], vous invite \u00e0 sa vente group\u00e9e.\r\nElle commencera [flagging:field-flag-date:value] et se terminera [flagging:field-flag-date:value2].\r\n\r\n\r\nCordialement,\r\nL\u0027\u00e9quipe [site:name]\r\n[site:url]\r\n\r\nPour rester inform\u00e9 des nouveaut\u00e9s et b\u00e9n\u00e9ficier de nos offres promotionnelles, suivez-nous sur :\r\nhttps:\/\/www.facebook.com\/S1biosecom\r\nhttps:\/\/Twitter.com\/S1biosecom\r\nhttps:\/\/plus.google.com\/+S1biosecom\r\nhttps:\/\/www.pinterest.com\/S1biosecom\r\n\r\nPS : ceci est un mail automatique, merci de ne pas y r\u00e9pondre.",
          "from" : "[site:mail]",
          "language" : [ "flagging-user:language" ]
        }
      }
    ]
  }
}

助言がありますか?

私のセットアップの詳細:

  • 定義したフラグの概要:

    enter image description here

  • 一部のフィールドに関する詳細情報(私は Display Suite も使用しています):

    enter image description here

  • 私が定義したフィールド Group Type "Entreprise":

    enter image description here

更新:「 フラグによってトリガーされたルールコンポーネントにフラグフィールドの値を渡す方法」の回答に含まれているルールコンポーネントを使用する? "近づきつつありますが、次に示すように、そのルールコンポーネントに渡す2つの日付変数をどうするかを見つける必要があります。

enter image description here

1
user54067

含めたルールを見ると、ルールイベントは問題ないようです。しかし、明らかに Rules アクション(電子メールを送信する)は、1(ハードコードされた)電子メールIDにのみ送信することです。これを機能させる方法の詳細については、以下をお読みください...

ステップ1:

グループにフラグを付けるために(あなたのものと同様の)フラグを作成します。私の場合、(サプライズ...) "Flag a group"と名付け、マシン名は "flag_a_group "(このフラグのこのマシン名に続くものを独自のフラグのマシン名に置き換えてください)。

ステップ2:

ルールコンポーネント "Send eMail to a all members of a Group"を作成します。これは次のように行うことができます。

  • このコンポーネントのタイプは「アクションセット」です(条件は必要ありません)。
  • アクション1は、フラグが設定されたグループのすべてのメンバーのリストを作成することです。 「プロパティによるエンティティのフェッチ」を使用し、次の追加仕様を使用します。
    • エンティティタイプの値=グループメンバーシップ。
    • プロパティ値=グループ。
    • データセレクターの値=グループ。
    • 結果数の制限=空白(結果の数を制限したくない)。
    • 提供される変数=「グループメンバー」(変数ラベル)および「group_members」(変数名)。
  • アクション2は、フラグが設定されたグループの各メンバーを反復(=ループ)することです。 「(ループ)ループの追加」を使用し、次の追加仕様を使用します:
    • ループするリスト= group-members
    • 現在のリストアイテム=「グループのメンバー」(変数ラベル)および「member_of_group」(変数名)。
    • このアクション2のサブアクション(i)は、メッセージタイプ=ステータスと次のようなメッセージを使用して、「サイトにメッセージを表示する」(このルールコンポーネントをQAテストしている)ことです。 "Group member named "[member-of-group:user:name]" and eMail "[member-of-group:user:mail]"will receive an eMail because of flagging this "[group:group-type]" group titled "[group:title]" and id "[group:gid]" (興味深いかもしれないさまざまなトークンに注意してください)。
    • このアクション2のサブアクション(ii)は、サブアクション(i)と同様のさまざまなトークンを使用して、ループで処理されている "member_of_group"に実際に電子メールを送信することです。

ルールコンポーネントは次のようになります(ルールエクスポート形式)。

{ "rules_send_email_to_all_members_of_a_group" : {
    "LABEL" : "Send eMail to all members of a Group",
    "PLUGIN" : "action set",
    "OWNER" : "rules",
    "TAGS" : [ "group" ],
    "REQUIRES" : [ "rules" ],
    "USES VARIABLES" : { "group" : { "label" : "Group", "type" : "group" } },
    "ACTION SET" : [
      { "entity_query" : {
          "USING" : {
            "type" : "group_membership",
            "property" : "group",
            "value" : [ "group" ]
          },
          "PROVIDE" : { "entity_fetched" : { "group_members" : "Group members" } }
        }
      },
      { "LOOP" : {
          "USING" : { "list" : [ "group-members" ] },
          "ITEM" : { "member_of_group" : "Member of group" },
          "DO" : [
            { "drupal_message" : { "message" : "Group member named \u0022[member-of-group:user:name]\u0022 and eMail \u0022[member-of-group:user:mail]\u0022 will receive an eMail because of flagging this \u0022[group:group-type]\u0022 group titled \u0022[group:title]\u0022 and id \u0022[group:gid]\u0022" } },
            { "mail" : {
                "to" : "[member-of-group:user:mail]",
                "subject" : "eMail notification to group [group:title]",
                "message" : "Hello [member-of-group:user:name],\r\n\r\nyou are a member of the group [group:title] (which is of type [group:group-type]).\r\n\r\nYou are receiving this eMail since user [site:current-user] just flagged this group.\r\n\r\nGreetings,\r\n\r\nPS: contact the site admin by eMail (via [site:mail]) for more details if needed",
                "language" : [ "" ]
              }
            }
          ]
        }
      }
    ]
  }
}

ルールUIを有効にしている場合は、上記のルールを自分のサイトにインポートするだけで、その中に何も微調整する必要はありませんが、実際の電子メールの件名とメッセージの内容を必要に応じて調整することができます(使用したいトークン)。

ステップ3:

グループに通知を送信してグループ通知を送信する」というルールを作成します。

  • ルールイベント:グループにステップ1のフラグが設定されたとき。
  • ルール条件:なし(必要ありません)。
  • ルールアクション:手順2のルールコンポーネントを実行します。

ルールは次のようになります(ここに示すように無効になっている、ルールのエクスポート形式)。

{ "rules_send_a_group_notification_by_flagging_a_group" : {
    "LABEL" : "Send a group notification by flagging a group",
    "PLUGIN" : "reaction rule",
    "ACTIVE" : false,
    "OWNER" : "rules",
    "REQUIRES" : [ "rules", "flag" ],
    "ON" : { "flag_flagged_flag_a_group" : [] },
    "DO" : [
      { "component_rules_send_email_to_all_members_of_a_group" : { "group" : [ "flagged-group" ] } }
    ]
  }
}

ルールUIを有効にしている場合は、フラグのマシン名を自分のマシン名に適合させた後、上記のルールを自分のサイトにインポートするだけで済みます。ルールもenableすることを忘れないでください。

ステップ4:

ルールコンポーネントに追加のパラメーターを追加して、関連する追加データをルール(ステップ3から)からルールコンポーネント(ステップ2から)に渡します。例えば。フラグに追加した電子メールに含める日付フィールド(質問のように、「」などの開始フィールド[フラグ:フィールド-フラグ-日付:値]など-flag-date:value2]。 "。

この詳細については、「 フラグによってトリガーされたルールコンポーネントにフラグフィールドの値を渡す方法は? 」の回答を参照してください。この質問のコンテキストでその回答を使用する方法についての詳細:

  • ここのルールで電子メールのメッセージを見ると、日付のように見える2つのトークンがあります:[flagging:field-flag-date:value]および[flagging:field-flag-date:value2]。しかし、あなたのスクリーンプリントはこれを示していません "field-flag-date "が定義されています。
  • 私の推測では、1つのフィールドに2つの値があります。もしそうなら、チェックするのに1つのルール条件のみが必要です "エンティティにはフィールドがあります"、これは "flagging:field_flag_date "。そして、ルールアクションで、両方に指定(ドリルダウン)できるようにする必要があります[flagging:field-flag-date:value]および[flagging:field-flag-date:value2]

ボイラ

だからここに行きます:3つだけの(堅牢な)モジュール( フラグルール および グループ )は、電子メールをトリガーするために必要なものです承認されたユーザー(カスタムコードが0)によってフラグが付けられたグループのすべてのメンバー。

確かに、実際の電子メールはルールコンポーネントにハードコードされています(フラグを付けるときに電子メールの実際の件名とメッセージの内容を指定するために、2つの追加のフラグ「フィールド」を使用してそれを何かに変換するといいでしょう)。

VBO代替

別の解決策は Rules[〜#〜] vbo [〜#〜] の組み合わせを使用することです。これには、電子メールで送信するグループメンバーをフィルタリングするために Views のすべての機能を利用できるという利点があります...

0
Pierre.Vriens