/** * Gatekeeper function to check if poll is enabled * * @param ElggEntity $container the container to check for (defaults to page_owner) */ function poll_container_gatekeeper(ElggEntity $container = null) { if (empty($container)) { $container = elgg_get_page_owner_entity(); } if (poll_is_enabled_for_container($container)) { return; } if ($container instanceof ElggUser) { register_error(elgg_echo('poll:container_gatekeeper:user')); } elseif ($container instanceof ElggGroup) { register_error(elgg_echo('poll:container_gatekeeper:group')); } forward(REFERER); }
/** * Check if a user can write a poll in a group * * @param string $hook the name of the hook * @param string $type the type of the hook * @param bool $return_value current return value * @param array $params supplied params * * @return void|bool */ public static function canWriteContainer($hook, $type, $return_value, $params) { if (empty($params) || !is_array($params)) { return; } $subtype = elgg_extract('subtype', $params); if ($type !== 'object' || $subtype !== \Poll::SUBTYPE) { return; } $user = elgg_extract('user', $params); if (!$user instanceof \ElggUser) { return false; } $container = elgg_extract('container', $params); if (!$container instanceof \ElggGroup) { return; } // poll enabled? if (!poll_is_enabled_for_container($container)) { return false; } // site admin or group owner/admin? if ($container->canEdit($user->getGUID())) { return true; } if (!$container->isMember($user)) { return false; } // check group setting $poll_enable_group_members = $container->getPrivateSetting('poll_enable_group_members'); if (empty($poll_enable_group_members)) { if (poll_get_plugin_setting('group_create') === 'owners') { $poll_enable_group_members = 'no'; } } if ($poll_enable_group_members === 'no') { // not for group members return false; } return true; }
<?php $page_owner = elgg_get_page_owner_entity(); if (empty($page_owner)) { forward(REFERER); } if ($page_owner instanceof ElggGroup) { poll_container_gatekeeper($page_owner); elgg_group_gatekeeper(); } // breadcrumb elgg_push_breadcrumb($page_owner->name); if (poll_is_enabled_for_container($page_owner)) { // check if add button is allowed if (can_write_to_container(0, $page_owner->getGUID(), 'object', Poll::SUBTYPE)) { elgg_register_title_button(); } } // build page elements $title = elgg_echo('poll:owner:title', [$page_owner->name]); $options = ['type' => 'object', 'subtype' => Poll::SUBTYPE, 'no_results' => elgg_echo('poll:none')]; if ($page_owner instanceof ElggUser) { $options['owner_guid'] = $page_owner->getGUID(); $options['preload_containers'] = true; } elseif ($page_owner instanceof ElggGroup) { $options['container_guid'] = $page_owner->getGUID(); $options['preload_owners'] = true; } $contents = elgg_list_entities($options); // build page $page_data = elgg_view_layout('content', ['title' => $title, 'content' => $contents, 'filter' => $page_owner instanceof ElggGroup ? '' : null, 'filter_context' => $page_owner->getGUID === elgg_get_logged_in_user_guid() ? 'mine' : '']);
<?php $group = elgg_extract('entity', $vars); if (!$group instanceof ElggGroup) { return; } if (!poll_is_enabled_for_container($group)) { return; } $title = elgg_echo('poll:group_settings:title'); $content = elgg_view_form('poll/group_settings', [], ['entity' => $group]); echo elgg_view_module('info', $title, $content);
<?php $entity = elgg_extract('entity', $vars); if (!$entity instanceof ElggGroup) { return; } if (!poll_is_enabled_for_container($entity)) { return; } $yesno_options = ['yes' => elgg_echo('option:yes'), 'no' => elgg_echo('option:no')]; $value = $entity->getPrivateSetting('poll_enable_group_members'); if (empty($value)) { if (poll_get_plugin_setting('group_create') === 'owners') { $value = 'no'; } } // enable group members $members = elgg_echo('poll:group_settings:members'); $members .= elgg_view('input/select', ['name' => 'poll_enable_group_members', 'value' => $value, 'options_values' => $yesno_options, 'class' => 'mls']); $members .= elgg_format_element('div', ['class' => 'elgg-subtext'], elgg_echo('poll:group_settings:members:description')); echo elgg_format_element('div', [], $members); // form footer $footer = elgg_view('input/hidden', ['name' => 'group_guid', 'value' => $entity->getGUID()]); $footer .= elgg_view('input/submit', ['value' => elgg_echo('save')]); echo elgg_format_element('div', ['class' => 'elgg-foot'], $footer);