如何向 Drupal 7 Organic Groups 角色成员发送电子邮件?

Posted

技术标签:

【中文标题】如何向 Drupal 7 Organic Groups 角色成员发送电子邮件?【英文标题】:How to send an email to Drupal 7 Organic Groups Role Members? 【发布时间】:2013-05-24 20:12:21 【问题描述】:

在 Drupal 7 中,我想设置一个规则,根据操作向 ORGANIC GROUPS 角色中的所有用户发送电子邮件。我知道如何执行操作,我知道如何执行循环,我知道如何发送电子邮件。

在我的一生中,我无法弄清楚如何获取具有组角色“​​X”的组成员列表。

PS - 我已查看此链接:http://www.sthlmconnection.se/en/blog/rules-based-notifications-organic-groups,它适用于 D6。

【问题讨论】:

【参考方案1】:

啊啊啊啊! (后来拉了很多头发),这就是答案:

自定义模块 (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);


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

【讨论】:

【参考方案2】:

我已经为 OG https://drupal.org/node/1859698#comment-8719475 提交了一个类似问题的补丁,它应该允许您在规则中执行此操作,而无需自定义模块或需要知道角色 ID。

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

【讨论】:

以上是关于如何向 Drupal 7 Organic Groups 角色成员发送电子邮件?的主要内容,如果未能解决你的问题,请参考以下文章

允许 Drupal Organic Group Admins 删除和编辑对所有组节点的访问权限

使用 Drupal Organic Groups、LifeRay Social 或 Alfresco Share 创建安全的外联网

如何从 Drupal 7 向 Drupal 8 贡献一个模块

如何在drupal 7中向访问者推荐节点作者创建的其他内容?

Organic Groups - 允许创建的节点类型

在 Drupal 7 中向表单添加文本(只是文本!)[关闭]