You are here

public function OgBehaviorHandler::OgMembershipCrud in Organic groups 7.2

Create, update or delete OG membership based on field values.

3 calls to OgBehaviorHandler::OgMembershipCrud()
OgBehaviorHandler::delete in plugins/entityreference/behavior/OgBehaviorHandler.class.php
Implements EntityReference_BehaviorHandler_Abstract::Delete()
OgBehaviorHandler::insert in plugins/entityreference/behavior/OgBehaviorHandler.class.php
Implements EntityReference_BehaviorHandler_Abstract::insert().
OgBehaviorHandler::update in plugins/entityreference/behavior/OgBehaviorHandler.class.php
Implements EntityReference_BehaviorHandler_Abstract::access().

File

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

Class

OgBehaviorHandler
OG behavior handler.

Code

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