示例#1
0
 /**
  * Change the name/function of the group join button
  *
  * @param string          $hook         the name of the hook
  * @param string          $type         the type of the hook
  * @param \ElggMenuItem[] $return_value current return value
  * @param array           $params       supplied params
  *
  * @return void|\ElggMenuItem[]
  */
 public static function groupMembership($hook, $type, $return_value, $params)
 {
     if (!elgg_in_context('groups')) {
         return;
     }
     $page_owner = elgg_get_page_owner_entity();
     $user = elgg_get_logged_in_user_entity();
     if (!$page_owner instanceof \ElggGroup || !$user instanceof \ElggUser) {
         return;
     }
     if (empty($return_value) || !is_array($return_value)) {
         return;
     }
     foreach ($return_value as $menu_item) {
         // group join button?
         if ($menu_item->getName() !== 'groups:joinrequest') {
             continue;
         }
         if (check_entity_relationship($user->getGUID(), 'membership_request', $page_owner->getGUID())) {
             // user already requested to join this group
             $menu_item->setText(elgg_echo('group_tools:joinrequest:already'));
             $menu_item->setTooltip(elgg_echo('group_tools:joinrequest:already:tooltip'));
             $menu_item->setHref("action/groups/killrequest?user_guid={$user->getGUID()}&group_guid={$page_owner->getGUID()}");
             $menu_item->is_action = true;
         } elseif (check_entity_relationship($page_owner->getGUID(), 'invited', $user->getGUID())) {
             // the user was invited, so let him/her join
             $menu_item->setName('groups:join');
             $menu_item->setText(elgg_echo('groups:join'));
             $menu_item->setTooltip(elgg_echo('group_tools:join:already:tooltip'));
             $menu_item->setHref("action/groups/join?user_guid={$user->getGUID()}&group_guid={$page_owner->getGUID()}");
             $menu_item->is_action = true;
         } elseif (group_tools_check_domain_based_group($page_owner, $user)) {
             // user has a matching email domain
             $menu_item->setName('groups:join');
             $menu_item->setText(elgg_echo('groups:join'));
             $menu_item->setTooltip(elgg_echo('group_tools:join:domain_based:tooltip'));
             $menu_item->setHref("action/groups/join?user_guid={$user->getGUID()}&group_guid={$page_owner->getGUID()}");
             $menu_item->is_action = true;
         } elseif (group_tools_join_motivation_required($page_owner)) {
             // a join motivation is required
             elgg_load_js('lightbox');
             elgg_load_css('lightbox');
             $menu_item->setHref("ajax/view/group_tools/forms/motivation?guid={$page_owner->getGUID()}");
             $menu_item->addLinkClass('elgg-lightbox');
             $opts = 'data-colorbox-opts';
             $menu_item->{$opts} = json_encode(['width' => '500px']);
         }
         break;
     }
     return $return_value;
 }
示例#2
0
 /**
  * Change the join status menu item
  *
  * @param string          $hook         the name of the hook
  * @param string          $type         the type of the hook
  * @param \ElggMenuItem[] $return_value current return value
  * @param array           $params       supplied params
  *
  * @return void|\ElggMenuItem[]
  */
 public static function registerJoinStatus($hook, $type, $return_value, $params)
 {
     $entity = elgg_extract('entity', $params);
     if (!$entity instanceof \ElggGroup) {
         return;
     }
     $user = elgg_get_logged_in_user_entity();
     if (empty($user)) {
         return;
     }
     foreach ($return_value as $menu_item) {
         if ($menu_item->getName() !== 'membership_status') {
             continue;
         }
         if ($menu_item->getText() !== elgg_echo('groups:join')) {
             // @todo this should be nicer, but Elgg give the same name to 3 use cases??!!!
             continue;
         }
         if (check_entity_relationship($user->getGUID(), 'membership_request', $entity->getGUID())) {
             // user already requested to join this group
             $menu_item->setText(elgg_echo('group_tools:joinrequest:already'));
             $menu_item->setTooltip(elgg_echo('group_tools:joinrequest:already:tooltip'));
             $menu_item->setHref("action/groups/killrequest?user_guid={$user->getGUID()}&group_guid={$entity->getGUID()}");
             $menu_item->is_action = true;
         } elseif (check_entity_relationship($entity->getGUID(), 'invited', $user->getGUID())) {
             // the user was invited, so let him/her join
             $menu_item->setTooltip(elgg_echo('group_tools:join:already:tooltip'));
         } elseif (group_tools_check_domain_based_group($entity, $user)) {
             // user has a matching email domain
             $menu_item->setTooltip(elgg_echo('group_tools:join:domain_based:tooltip'));
         } elseif (group_tools_join_motivation_required($entity)) {
             // a join motivation is required
             elgg_load_js('lightbox');
             elgg_load_css('lightbox');
             $menu_item->setHref("ajax/view/group_tools/forms/motivation?guid={$entity->getGUID()}");
             $menu_item->addLinkClass('elgg-lightbox');
             $opts = 'data-colorbox-opts';
             $menu_item->{$opts} = json_encode(['width' => '500px']);
         }
     }
 }
示例#3
0
 /**
  * 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;
 }
示例#4
0
文件: hooks.php 项目: lorea/Hydra-dev
/**
 * 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;
}