/** * Get all groups based on the email domain of the user from the group settings * * @param ElggUser $user The user used to base the search * @param int $site_guid (optional) the site guid to limit the search to, defaults to current site * * @return bool|ElggGroup[] false or an array of found groups */ function group_tools_get_domain_based_groups(ElggUser $user, $site_guid = 0) { $result = false; if (group_tools_domain_based_groups_enabled()) { if (empty($site_guid)) { $site_guid = elgg_get_site_entity()->getGUID(); } if (!empty($user) && elgg_instanceof($user, "user")) { list(, $domain) = explode("@", strtolower($user->email)); $options = array("type" => "group", "limit" => false, "site_guids" => $site_guid, "private_setting_name_value_pairs" => array("name" => "domain_based", "value" => "%|" . $domain . "|%", "operand" => "LIKE")); $groups = elgg_get_entities_from_private_settings($options); if (!empty($groups)) { $result = $groups; } } } return $result; }
/** * A hook on the ->canEdit() of a group. This is done to allow e-mail domain users to join a group * * Note: this is a very hacky way arround a short comming of Elgg core * * @param string $hook the name of the hook * @param string $type the type of the hook * @param bool $return_value current return value * @param null $params supplied params * * @return void|true */ public static function groupJoinPermission($hook, $type, $return_value, $params) { if (!empty($return_value)) { // already allowed return; } if (!group_tools_domain_based_groups_enabled()) { return; } // domain based groups are enabled, lets check if this user is allowed to join based on that $group = elgg_extract('entity', $params); $user = elgg_extract('user', $params); if (!$group instanceof \ElggGroup || !$user instanceof \ElggUser) { return; } if (!group_tools_check_domain_based_group($group, $user)) { return; } return true; }
<?php $group = elgg_extract('entity', $vars); if (!$group instanceof ElggGroup || !$group->canEdit() || !group_tools_domain_based_groups_enabled()) { return; } $title = elgg_echo('group_tools:domain_based:title'); // build form $form_body = elgg_format_element('div', ['class' => 'mbm'], elgg_echo('group_tools:domain_based:description')); $domains = $group->getPrivateSetting('domain_based'); if (!empty($domains)) { $domains = explode('|', trim($domains, '|')); } $form_body .= elgg_format_element('div', [], elgg_view('input/tags', ['name' => 'domains', 'value' => $domains])); $form_body .= '<div class="elgg-foot mtm">'; $form_body .= elgg_view('input/hidden', ['name' => 'group_guid', 'value' => $group->getGUID()]); $form_body .= elgg_view('input/submit', ['value' => elgg_echo('save')]); $form_body .= '</div>'; // make form $content = elgg_view('input/form', ['action' => 'action/group_tools/domain_based', 'body' => $form_body]); // show content echo elgg_view_module('info', $title, $content);
/** * A hook on the ->canEdit() of a group. This is done to allow e-mail domain users to join a group * * Note: this is a very hacky way arround a short comming of Elgg core * * @param string $hook 'permissions_check' * @param string $type 'group' * @param bool $return_value is the current user allowed to edit the group * @param mixed $params passed on params * * @return bool */ function group_tools_permissions_check_groups_join_hook($hook, $type, $return_value, $params) { $result = $return_value; if (!$result && group_tools_domain_based_groups_enabled()) { // domain based groups are enabled, lets check if this user is allowed to join based on that if (!empty($params) && is_array($params)) { $group = elgg_extract("entity", $params); $user = elgg_extract("user", $params); if (!empty($group) && elgg_instanceof($group, "group") && !empty($user) && elgg_instanceof($user, "user")) { if (group_tools_check_domain_based_group($group, $user)) { $result = true; } } } } return $result; }
/** * Get all groups based on the email domain of the user from the group settings * * @param ElggUser $user The user used to base the search * @param int $site_guid (optional) the site guid to limit the search to, defaults to current site * * @return false|ElggGroup[] */ function group_tools_get_domain_based_groups(ElggUser $user, $site_guid = 0) { if (!group_tools_domain_based_groups_enabled()) { return false; } if (!$user instanceof ElggUser) { return false; } $site_guid = sanitize_int($site_guid, false); if (empty($site_guid)) { $site_guid = elgg_get_site_entity()->getGUID(); } list(, $domain) = explode('@', strtolower($user->email)); $options = ['type' => 'group', 'limit' => false, 'site_guids' => $site_guid, 'private_setting_name_value_pairs' => ['name' => 'domain_based', 'value' => "%|{$domain}|%", 'operand' => 'LIKE']]; $groups = elgg_get_entities_from_private_settings($options); if (!empty($groups)) { return $groups; } return false; }
<?php $group = elgg_extract("entity", $vars); if (!empty($group) && elgg_instanceof($group, "group") && group_tools_domain_based_groups_enabled()) { $title = elgg_echo("group_tools:domain_based:title"); $form_body = "<div class='mbm'>" . elgg_echo("group_tools:domain_based:description") . "</div>"; $domains = $group->getPrivateSetting("domain_based"); if (!empty($domains)) { $domains = explode("|", trim($domains, "|")); } $form_body .= "<div>"; $form_body .= elgg_view("input/tags", array("name" => "domains", "value" => $domains)); $form_body .= "</div>"; $form_body .= "<div class='elgg-foot mtm'>"; $form_body .= elgg_view("input/hidden", array("name" => "group_guid", "value" => $group->getGUID())); $form_body .= elgg_view("input/submit", array("value" => elgg_echo("save"))); $form_body .= "</div>"; $content = elgg_view("input/form", array("action" => "action/group_tools/domain_based", "body" => $form_body)); echo elgg_view_module("info", $title, $content); }