Drupal 7 如何向Drupal 7有机团体角色成员发送电子邮件?
在Drupal7中,我想建立一个规则,根据一个动作向有机组角色中的所有用户发送电子邮件。我知道如何得到行动,我知道如何做循环,我知道如何发送电子邮件 在我的一生中,我无法弄清楚如何获得组角色为“X”的组成员列表 PS-我已经查看了此链接:,它是针对D6的。GAAHargh!(后来又扯了很多头发),下面是答案: 自定义模块(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
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);
}