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