在 Drupal 7 中,我想设置一个规则,根据操作向有机组角色中的所有用户发送电子邮件。我知道如何采取行动,我知道如何进行循环,我知道如何发送电子邮件。
对于我的生活,我无法弄清楚如何获取具有组角色“X”的组成员列表。
PS - 我已经查看了这个链接: http: //www.sthlmconnection.se/en/blog/rules-based-notifications-organic-groups,它适用于 D6。
在 Drupal 7 中,我想设置一个规则,根据操作向有机组角色中的所有用户发送电子邮件。我知道如何采取行动,我知道如何进行循环,我知道如何发送电子邮件。
对于我的生活,我无法弄清楚如何获取具有组角色“X”的组成员列表。
PS - 我已经查看了这个链接: http: //www.sthlmconnection.se/en/blog/rules-based-notifications-organic-groups,它适用于 D6。
啊啊啊!(后来拉了很多头发),这是答案:
自定义模块 ( myutil.module
) -.module
文件为空,.info
文件具有任何其他模块所需的相同稀疏信息。
myutil.rules.inc
使用以下代码添加文件:
/**
* @file
* Rules code: actions, conditions and events.
*/
/**
* Implements hook_rules_action_info().
*/
function myutil_rules_action_info() {
$actions = array(
'myutil_action_send_email_to_group_editors' => array(
'label' => t('Get group editors from group audience'),
'group' => t('My Utilities'),
'configurable' => TRUE,
'parameter' => array(
'group_content' => array(
'type' => 'entity',
'label' => t('Group content'),
'description' => t('The group content determining the group audience.'),
),
),
'provides' => array(
'group_editors' => array('type' => 'list<user>', 'label' => t('List of group editors')),
),
'base' => 'myutil_rules_get_editors',
),
);
return $actions;
}
function myutil_rules_get_editors($group_content) {
if (!isset($group_content->og_membership)) {
// Not a group content.
return;
}
$members = array();
foreach ($group_content->og_membership->value() as $og_membership) {
// Get the group members the group content belongs to.
$current_members = db_select('og_membership', 'om');
$current_members->join('og_users_roles', 'ogur', 'om.etid = ogur.uid');
$current_members->fields('om', array('etid'));
$current_members->condition('om.gid', $og_membership->gid);
$current_members->condition('om.entity_type', 'user');
// FOR THIS LINE, YOU'LL NEED TO KNOW THE ROLE ID FROM THE `og_role` TABLE
$current_members->condition('ogur.rid', 14);
$result = $current_members->execute();
while ($res = $result->fetchAssoc()) {
$members[] = $res['etid'];
}
}
// Remove duplicate items.
$members = array_keys(array_flip($members));
return array('group_editors' => $members);
}
像启用任何其他模块一样启用该模块。清除缓存。回到规则并享受。
我已经为 OG https://drupal.org/node/1859698#comment-8719475提交了一个类似问题的补丁,它应该允许您在规则中执行此操作,而无需自定义模块或需要知道角色 ID .
应用补丁后,您可以使用“从组受众中获取组成员”操作,现在按“成员状态”和“组角色”进行过滤。然后添加一个循环来遍历列表并使用“发送邮件”操作向每个成员发送一封电子邮件。