return false; } /** * Is called when authorizing a user for an item with the special access level $group. * this method should return all the levels above $group (especially any admin levels) * @param string $group always 'site-planning' * @return array<string> list of super groups that can see/execute on things marked with $group level */ function groupMembersOf($group) { /** * */ if ($group == 'fb-member') { return array("special", "fb-admin"); } return array("special"); /** * */ } /** * Test */ include_once __DIR__ . '/core.php'; if (isMemberOf('fb-admin')) { echo 'user is fb-admin'; } if (isMemberOf('fb-member')) { echo 'user is fb-member'; }
/** * @param $guid * @return mixed * @throws InvalidParameterException */ function group_join_group($guid) { global $CONFIG; $user = elgg_get_logged_in_user_entity(); if (!$user) { throw new InvalidParameterException('registration:usernamenotvalid'); } /* @var ElggGroup $group */ $group = get_entity($guid); if (!$group instanceof ElggGroup) { $return['joined'] = false; $return['message'] = 'Group Not Found'; exit; } // access bypass for getting invisible group $ia = elgg_set_ignore_access(true); elgg_set_ignore_access($ia); if ($user && $group instanceof ElggGroup) { // join or request $join = false; if ($group->isPublicMembership() || $group->canEdit($user->guid)) { // anyone can join public groups and admins can join any group $join = true; } else { if (check_entity_relationship($group->guid, 'invited', $user->guid)) { // user has invite to closed group $join = true; } } if ($join) { if (groups_join_group($group, $user)) { $return['member'] = 'joined'; $return['message'] = 'joined'; } else { $isMember = isMemberOf($group, $user); if ($isMember) { $return['member'] = 'joined'; $return['message'] = 'isMemberOf'; } else { $return['member'] = 'cantjoin'; $return['message'] = 'cantjoin'; } } } else { add_entity_relationship($user->guid, 'membership_request', $group->guid); $owner = $group->getOwnerEntity(); $url = "{$CONFIG->url}groups/requests/{$group->guid}"; $subject = elgg_echo('groups:request:subject', array($user->name, $group->name), $owner->language); $body = elgg_echo('groups:request:body', array($group->getOwnerEntity()->name, $user->name, $group->name, $user->getURL(), $url), $owner->language); // Notify group owner if (notify_user($owner->guid, $user->getGUID(), $subject, $body)) { $return['member'] = 'cantjoin'; $return['message'] = 'joinrequestmade'; } else { $return['member'] = 'cantjoin'; $return['message'] = 'joinrequestnotmade'; } } } else { $isMember = isMemberOf($group, $user); if ($isMember) { $return['member'] = 'joined'; $return['message'] = 'isMemberOf'; } else { $return['member'] = 'cantjoin'; $return['message'] = 'cantjoin'; } } return $return; }