function lti_tool_provider_memberships_alter_member in LTI Tool Provider 7
Alter membership for a member.
Parameters
array $member: An array of data for the member including changed roles and groups.
1 call to lti_tool_provider_memberships_alter_member()
- lti_tool_provider_memberships_batch_process_altered_memberships in lti_tool_provider_memberships/
lti_tool_provider_memberships.batch.inc - Batch Operation Callback to process altered memberships.
File
- lti_tool_provider_memberships/
lti_tool_provider_memberships.module, line 1353 - lti_tool_provider_memberships hook implementations and support functions.
Code
function lti_tool_provider_memberships_alter_member($member) {
dpm($member, 'member to alter');
// Find membership.
$query = new EntityFieldQuery();
$result = $query
->entityCondition('entity_type', 'lti_tool_provider_memberships')
->propertyCondition('lti_tool_provider_memberships_user_id', $member['user_id'], '=')
->propertyCondition('lti_tool_provider_memberships_context_id', $_SESSION['lti_tool_provider_context_info']['context_id'], '=')
->execute();
if (empty($result)) {
// Missing membership.
drupal_set_message(t('%name\'s membership not found.', array(
'%name' => $member['user_id'],
)));
return;
}
$membership = reset(entity_load('lti_tool_provider_memberships', array_keys($result['lti_tool_provider_memberships'])));
$account = user_load($membership->lti_tool_provider_memberships_uid);
$existing_roles = $member['existing_roles'];
// If handling context groups.
if (module_exists('lti_tool_provider_og') && isset($_SESSION['lti_tool_provider_context_info']['course_entity_type'])) {
$group_entity = $_SESSION['lti_tool_provider_context_info']['course_entity_type'];
$group_eid = $_SESSION['lti_tool_provider_context_info']['course_entity_eid'];
// if roles have changed.
if (!empty($member['old_roles']) || !empty($member['new_roles'])) {
// Remove current roles from context group.
$current_roles = og_get_user_roles($group_entity, $group_eid, $account->uid, FALSE);
foreach ($current_roles as $rid => $dropped_role) {
og_role_revoke($group_entity, $group_eid, $account->uid, $rid);
}
$current_roles = og_get_user_roles($group_entity, $group_eid, $account->uid, FALSE);
// Add roles to context group.
$found_roles = lti_tool_provider_og_search_roles($member['new_roles']);
foreach ($found_roles as $lti_role => $found_role) {
og_role_grant($group_entity, $group_eid, $account->uid, $found_role);
}
}
// If handling subgroups
if (variable_get('lti_tool_provider_memberships_subgroups') && ($selected_subgroup_bundle = variable_get('lti_tool_provider_memberships_subgroup_mapping_bundle')) != 'none:None') {
list($subgroup_entity, $subgroup_bundle) = explode(':', $selected_subgroup_bundle);
// if roles have changed.
if (!empty($member['old_roles']) || !empty($member['new_roles'])) {
$subgroups = lti_tool_provider_memberships_get_subgroups();
// Find the subgroup nids that match the member data groups.
// Get users current groups.
$users_groups = reset(og_get_entity_groups('user', $account->uid));
$old_subgroups = array_intersect($subgroups, $users_groups);
$subgroup_roles = lti_tool_provider_memberships_search_roles($member['new_roles']);
foreach ($old_subgroups as $old_subgroup) {
// Remove old roles from subgroups.
$current_roles = og_get_user_roles($subgroup_entity, $old_subgroup, $account->uid, FALSE);
foreach ($current_roles as $rid => $dropped_role) {
og_role_revoke($subgroup_entity, $old_subgroup, $account->uid, $rid);
}
// Add new roles to subgroups.
foreach ($subgroup_roles as $lti_role => $subgroup_role) {
og_role_grant($subgroup_entity, $old_subgroup, $account->uid, $subgroup_role);
}
}
}
// Drop user from dropped subgroups.
foreach ($member['dropped_subgroups'] as $dropped_subgroup) {
// Find the subgroup that matches the dropped_group.
$subgroup_eid = lti_tool_provider_memberships_get_subgroup($subgroup_entity, $subgroup_bundle, $dropped_subgroup);
if ($mid = og_get_membership($subgroup_entity, $subgroup_eid, 'user', $account->uid)) {
og_membership_delete($mid->id);
}
}
// Add user to added subgroups (creating them as necessary).
lti_tool_provider_memberships_add_user_to_membership_groups($account->uid, $member['added_subgroups'], $existing_roles);
}
}
if (!empty($old_roles) || !empty($new_roles)) {
// Update global roles.
lti_tool_provider_unassign_global_roles_from_user($member['old_roles'], $account->uid);
lti_tool_provider_assign_global_roles_to_user($member['new_roles'], $account->uid);
}
// Update membership as updated.
$membership->lti_tool_provider_memberships_status = 'Active';
if (!empty($member['old_roles']) || !empty($member['new_roles'])) {
$membership->lti_tool_provider_memberships_role = $member['new_roles'];
}
$membership->date_updated = REQUEST_TIME;
lti_tool_provider_memberships_save($membership);
drupal_set_message(t('%name\'s membership updated.', array(
'%name' => $membership->lti_tool_provider_memberships_user_id,
)));
}