You are here

public function OgBehaviorHandler::groupAudiencegetDiff in Organic groups 7.2

Get the difference in group audience for a saved field.

Return value

Array with all the differences, or an empty array if none found.

1 call to OgBehaviorHandler::groupAudiencegetDiff()
OgBehaviorHandler::OgMembershipCrud in plugins/entityreference/behavior/OgBehaviorHandler.class.php
Create, update or delete OG membership based on field values.

File

plugins/entityreference/behavior/OgBehaviorHandler.class.php, line 154

Class

OgBehaviorHandler
OG behavior handler.

Code

public function groupAudiencegetDiff($entity_type, $entity, $field, $instance, $langcode, $items) {
  $return = FALSE;
  $field_name = $field['field_name'];
  $wrapper = entity_metadata_wrapper($entity_type, $entity);
  $og_memberships = $wrapper->{$field_name . '__og_membership'}
    ->value();
  $new_memberships = array();
  foreach ($items as $item) {
    $new_memberships[$item['target_id']] = TRUE;
  }
  foreach ($og_memberships as $og_membership) {
    $gid = $og_membership->gid;
    if (empty($new_memberships[$gid])) {

      // Membership was deleted.
      if ($og_membership->entity_type == 'user') {

        // Make sure this is not the group manager, if exists.
        $group = entity_load_single($og_membership->group_type, $og_membership->gid);
        if (!empty($group->uid) && $group->uid == $og_membership->etid) {
          continue;
        }
      }
      $return['delete'][] = $og_membership->id;
      unset($new_memberships[$gid]);
    }
    else {

      // Existing membership.
      unset($new_memberships[$gid]);
    }
  }
  if ($new_memberships) {

    // New memberships.
    $return['insert'] = array_keys($new_memberships);
  }
  return $return;
}