/** * Check if poll is enabled for groups * * @param ElggGroup $group (optional) the group to check for * * @return bool */ function poll_is_enabled_for_group(ElggGroup $group = null) { if (poll_get_plugin_setting('enable_group') === 'no') { return false; } if (!$group instanceof ElggGroup) { return true; } if ($group->poll_enable === 'yes') { return true; } return false; }
/** * 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; }
/** * Check if a user can vote for this poll * * @param int $user_guid (optional) user_guid to check, defaults to current user * * @return bool */ public function canVote($user_guid = 0) { $user_guid = sanitise_int($user_guid, false); if (empty($user_guid)) { $user_guid = elgg_get_logged_in_user_guid(); } if (empty($user_guid)) { return false; } if (!$this->getAnswers()) { return false; } if ($this->getVote() && poll_get_plugin_setting('vote_change_allowed') !== 'yes') { return false; } // check close date if ($this->close_date) { $close_date = (int) $this->close_date; if ($close_date < time()) { return false; } } return true; }
// build form elements // title $title = elgg_format_element('label', ['for' => 'poll-title'], elgg_echo('title')); $title .= elgg_view('input/text', ['name' => 'title', 'value' => elgg_extract('title', $vars), 'id' => 'poll-title', 'required' => true]); echo elgg_format_element('div', [], $title); // description $description = elgg_format_element('label', ['for' => 'poll-description'], elgg_echo('description')); $description .= elgg_view('input/longtext', ['name' => 'description', 'value' => elgg_extract('description', $vars), 'id' => 'poll-description']); echo elgg_format_element('div', [], $description); // answers $answers = elgg_format_element('label', [], elgg_echo('poll:edit:answers')); $answers .= elgg_view('poll/edit/answers', $vars); echo elgg_format_element('div', [], $answers); // close date $answers = elgg_format_element('label', ['for' => 'close_date'], elgg_echo('poll:edit:close_date')); $answers .= elgg_view('input/date', ['name' => 'close_date', 'value' => elgg_extract('close_date', $vars), 'timestamp' => true, 'required' => poll_get_plugin_setting('close_date_required') === 'yes' ? true : false]); echo elgg_format_element('div', [], $answers); // tags $tags = elgg_format_element('label', ['for' => 'poll-tags'], elgg_echo('tags')); $tags .= elgg_view('input/tags', ['name' => 'tags', 'value' => elgg_extract('tags', $vars), 'id' => 'poll-tags']); echo elgg_format_element('div', [], $tags); // results output $comments = elgg_format_element('label', ['for' => 'poll-results-output'], elgg_echo('poll:edit:results_output')); $comments .= elgg_view('input/select', ['name' => 'results_output', 'options_values' => $results_output_options, 'value' => elgg_extract('results_output', $vars), 'id' => 'poll-results-output', 'class' => 'mls']); echo elgg_format_element('div', [], $comments); // comments $comments = elgg_format_element('label', ['for' => 'poll-comments'], elgg_echo('comments')); $comments .= elgg_view('input/select', ['name' => 'comments_allowed', 'options_values' => $noyes_options, 'value' => elgg_extract('comments_allowed', $vars), 'id' => 'poll-comments', 'class' => 'mls']); echo elgg_format_element('div', [], $comments); // access $access = elgg_format_element('label', ['for' => 'poll-access-id'], elgg_echo('access'));
<?php // breadcrumb elgg_pop_breadcrumb(); elgg_push_breadcrumb(elgg_echo('poll:menu:site')); if (poll_get_plugin_setting('enable_site') === 'yes') { elgg_register_title_button(); } // build page elements $title = elgg_echo('poll:all:title'); $options = ['type' => 'object', 'subtype' => Poll::SUBTYPE, 'no_results' => elgg_echo('poll:none'), 'preload_owners' => true, 'preload_containers' => true]; $contents = elgg_list_entities($options); // build page $page_data = elgg_view_layout('content', ['title' => $title, 'content' => $contents]); // draw page echo elgg_view_page($title, $page_data);
<?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);