/**
  * Create, update or delete OG membership based on field values.
  */
 public function OgMembershipCrud($entity_type, $entity, $field, $instance, $langcode, &$items)
 {
     $diff = $this->groupAudiencegetDiff($entity_type, $entity, $field, $instance, $langcode, $items);
     if (!$diff) {
         return;
     }
     $field_name = $field['field_name'];
     $group_type = $field['settings']['target_type'];
     $diff += array('insert' => array(), 'delete' => array());
     // Delete first, so we don't trigger cardinality errors.
     if ($diff['delete']) {
         og_membership_delete_multiple($diff['delete']);
     }
     foreach ($diff['insert'] as $gid) {
         $values = array('entity_type' => $entity_type, 'entity' => $entity, 'field_name' => $field_name);
         og_group($group_type, $gid, $values);
     }
 }
Пример #2
0
 /**
  * Create, update or delete OG membership based on field values.
  */
 public function OgMembershipCrud($entity_type, $entity, $field, $instance, $langcode, &$items)
 {
     if (!user_access('administer group') && !field_access('edit', $field, $entity_type, $entity)) {
         // User has no access to field.
         return;
     }
     if (!($diff = $this->groupAudiencegetDiff($entity_type, $entity, $field, $instance, $langcode, $items))) {
         return;
     }
     $field_name = $field['field_name'];
     $group_type = $field['settings']['target_type'];
     $diff += array('insert' => array(), 'delete' => array());
     // Delete first, so we don't trigger cardinality errors.
     if ($diff['delete']) {
         og_membership_delete_multiple($diff['delete']);
     }
     if (!$diff['insert']) {
         return;
     }
     // Prepare an array with the membership state, if it was provided in the widget.
     $states = array();
     foreach ($items as $item) {
         $gid = $item['target_id'];
         if (empty($item['state']) || !in_array($gid, $diff['insert'])) {
             // State isn't provided, or not an "insert" operation.
             continue;
         }
         $states[$gid] = $item['state'];
     }
     foreach ($diff['insert'] as $gid) {
         $values = array('entity_type' => $entity_type, 'entity' => $entity, 'field_name' => $field_name);
         if (!empty($states[$gid])) {
             $values['state'] = $states[$gid];
         }
         og_group($group_type, $gid, $values);
     }
 }
<?php

$expire_time = REQUEST_TIME - 60 * 60 * 24 * 180;
$sql = "select distinct u.uid, name from {users} u inner join {og_users_roles} o on u.uid = o.uid where access < :expire_time limit 10;";
$query = db_query($sql, array(':expire_time' => $expire_time));
$data = $query->fetchAllAssoc('uid');
$mids = array();
foreach ($data as $row) {
    $uid = $row->uid;
    $name = $row->name;
    drush_log('Removing all memberships of ' . $name . ' (' . $uid . ')');
    $account = user_load($uid);
    $groups = og_get_groups_by_user($account);
    if ($groups) {
        foreach ($groups as $group_type => $gids) {
            foreach ($gids as $gid) {
                // Load membership.
                $membership = og_get_membership($group_type, $gid, 'user', $uid);
                if ($membership) {
                    $mids[$membership->id] = $membership->id;
                }
            }
        }
    }
    // Remove stale records in the {og_users_roles} table.
    db_delete('og_users_roles')->condition('uid', $uid)->execute();
    // Remove all roles from user.
    user_save($account, array('roles' => array('2' => 'authenticated user')));
}
og_membership_delete_multiple($mids);