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