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