Drupal 7 如何向Drupal 7有机团体角色成员发送电子邮件?

Drupal 7 如何向Drupal 7有机团体角色成员发送电子邮件?,drupal-7,organic-groups,drupal-rules,Drupal 7,Organic Groups,Drupal Rules,在Drupal7中,我想建立一个规则,根据一个动作向有机组角色中的所有用户发送电子邮件。我知道如何得到行动,我知道如何做循环,我知道如何发送电子邮件 在我的一生中,我无法弄清楚如何获得组角色为“X”的组成员列表 PS-我已经查看了此链接:,它是针对D6的。GAAHargh!(后来又扯了很多头发),下面是答案: 自定义模块(myutil.Module)-.Module文件为空,.info文件具有任何其他模块所需的相同稀疏信息 使用以下代码添加文件myutil.rules.inc: /** *@f

在Drupal7中,我想建立一个规则,根据一个动作向有机组角色中的所有用户发送电子邮件。我知道如何得到行动,我知道如何做循环,我知道如何发送电子邮件

在我的一生中,我无法弄清楚如何获得组角色为“X”的组成员列表

PS-我已经查看了此链接:,它是针对D6的。

GAAHargh!(后来又扯了很多头发),下面是答案:

自定义模块(
myutil.Module
)-
.Module
文件为空,
.info
文件具有任何其他模块所需的相同稀疏信息

使用以下代码添加文件
myutil.rules.inc

/**
*@file
*规则代码:操作、条件和事件。
*/
/**
*实现钩子\规则\操作\信息()。
*/
函数myutil\u规则\u操作\u信息(){
$actions=数组(
“myutil\u操作\u发送\u电子邮件\u至\u组\u编辑器”=>数组(
'label'=>t('Get group editors from group viewers'),
'group'=>t('My Utilities'),
“可配置”=>TRUE,
'参数'=>数组(
“组内容”=>数组(
'类型'=>'实体',
'label'=>t('Group content'),
'description'=>t('确定群受众的群内容'),
),
),
'提供'=>数组(
“组编辑器”=>array('type'=>'list','label'=>t(“组编辑器列表”),
),
'base'=>'myutil\u规则\u获取\u编辑器',
),
);
返回$actions;
}
函数myutil_规则_获取_编辑器($group_内容){
如果(!isset($group\u content->og\u membership)){
//不是一组内容。
返回;
}
$members=array();
foreach($group\u content->og\u membership->value()作为$og\u membership){
//获取组内容所属的组成员。
$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');
//对于此行,您需要从“og_ROLE”表中了解角色ID
$current_members->condition('ogur.rid',14);
$result=$current_members->execute();
而($res=$result->fetchAssoc()){
$members[]=$res['etid'];
}
}
//删除重复的项目。
$members=数组_键(数组_翻转($members));
返回数组('group_editors'=>$members);
}
像启用任何其他模块一样启用该模块。清除缓存。回到规则中去享受吧。

GAAH-ARGH!(后来又扯了很多头发),下面是答案:

自定义模块(
myutil.Module
)-
.Module
文件为空,
.info
文件具有任何其他模块所需的相同稀疏信息

使用以下代码添加文件
myutil.rules.inc

/**
*@file
*规则代码:操作、条件和事件。
*/
/**
*实现钩子\规则\操作\信息()。
*/
函数myutil\u规则\u操作\u信息(){
$actions=数组(
“myutil\u操作\u发送\u电子邮件\u至\u组\u编辑器”=>数组(
'label'=>t('Get group editors from group viewers'),
'group'=>t('My Utilities'),
“可配置”=>TRUE,
'参数'=>数组(
“组内容”=>数组(
'类型'=>'实体',
'label'=>t('Group content'),
'description'=>t('确定群受众的群内容'),
),
),
'提供'=>数组(
“组编辑器”=>array('type'=>'list','label'=>t(“组编辑器列表”),
),
'base'=>'myutil\u规则\u获取\u编辑器',
),
);
返回$actions;
}
函数myutil_规则_获取_编辑器($group_内容){
如果(!isset($group\u content->og\u membership)){
//不是一组内容。
返回;
}
$members=array();
foreach($group\u content->og\u membership->value()作为$og\u membership){
//获取组内容所属的组成员。
$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');
//对于此行,您需要从“og_ROLE”表中了解角色ID
$current_members->condition('ogur.rid',14);
$result=$current_members->execute();
而($res=$result->fetchAssoc()){
$members[]=$res['etid'];
}
}
//删除重复的项目。
$members=数组_键(数组_翻转($members));
返回数组('group_editors'=>$members);
}

像启用任何其他模块一样启用该模块。清除缓存。回到规则并享受。

我已经为OG提交了一个类似问题的补丁,它应该允许您在规则中执行此操作,而无需自定义模块或知道角色id


应用补丁后,您可以使用“从组观众中获取组成员”操作,现在按“成员状态”和“组角色”进行过滤。然后添加一个循环以浏览列表,并使用“发送邮件”操作向每个成员发送电子邮件。

我已为OG提交了一个类似问题的修补程序,该修补程序应允许您在规则中执行此操作,而无需自定义模块或知道角色id

应用补丁后,您可以使用“从组观众中获取组成员”操作,现在按“成员状态”和“组角色”进行过滤。然后添加一个循环来遍历列表,并使用“发送邮件”操作向每个成员发送电子邮件

/**
 * @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);

}