poll_form
function poll_form
poll_form($node, &$form_state)
Implements hook_form().
File
- modules/poll/poll.module, line 235
- Enables your site to capture votes on different topics in the form of multiple choice questions.
Code
function poll_form($node, &$form_state) { global $user; $admin = user_access('bypass node access') || user_access('edit any poll content') || (user_access('edit own poll content') && $user->uid == $node->uid); $type = node_type_get_type($node); // The submit handlers to add more poll choices require that this form is // cached, regardless of whether Ajax is used. $form_state['cache'] = TRUE; $form['title'] = array( '#type' => 'textfield', '#title' => check_plain($type->title_label), '#required' => TRUE, '#default_value' => $node->title, '#maxlength' => 255, '#weight' => -5, ); if (isset($form_state['choice_count'])) { $choice_count = $form_state['choice_count']; } else { $choice_count = max(2, empty($node->choice) ? 2 : count($node->choice)); } // Add a wrapper for the choices and more button. $form['choice_wrapper'] = array( '#tree' => FALSE, '#weight' => -4, '#prefix' => '<div class="clearfix" id="poll-choice-wrapper">', '#suffix' => '</div>', ); // Container for just the poll choices. $form['choice_wrapper']['choice'] = array( '#prefix' => '<div id="poll-choices">', '#suffix' => '</div>', '#theme' => 'poll_choices', ); // Add the current choices to the form. $delta = 0; $weight = 0; if (isset($node->choice)) { $delta = count($node->choice); foreach ($node->choice as $chid => $choice) { $key = 'chid:' . $chid; $form['choice_wrapper']['choice'][$key] = _poll_choice_form($key, $choice['chid'], $choice['chtext'], $choice['chvotes'], $choice['weight'], $choice_count); $weight = max($choice['weight'], $weight); } } // Add initial or additional choices. $existing_delta = $delta; for ($delta; $delta < $choice_count; $delta++) { $key = 'new:' . ($delta - $existing_delta); // Increase the weight of each new choice. $weight++; $form['choice_wrapper']['choice'][$key] = _poll_choice_form($key, NULL, '', 0, $weight, $choice_count); } // We name our button 'poll_more' to avoid conflicts with other modules using // Ajax-enabled buttons with the id 'more'. $form['choice_wrapper']['poll_more'] = array( '#type' => 'submit', '#value' => t('More choices'), '#attributes' => array( 'title' => t("If the amount of boxes above isn't enough, click here to add more choices."), ), '#weight' => 1, '#limit_validation_errors' => array(array('choice')), '#submit' => array('poll_more_choices_submit'), '#ajax' => array( 'callback' => 'poll_choice_js', 'wrapper' => 'poll-choices', 'effect' => 'fade', ), ); // Poll attributes $duration = array( // 1-6 days. 86400, 2 * 86400, 3 * 86400, 4 * 86400, 5 * 86400, 6 * 86400, // 1-3 weeks (7 days). 604800, 2 * 604800, 3 * 604800, // 1-3,6,9 months (30 days). 2592000, 2 * 2592000, 3 * 2592000, 6 * 2592000, 9 * 2592000, // 1 year (365 days). 31536000, ); $duration = array(0 => t('Unlimited')) + drupal_map_assoc($duration, 'format_interval'); $active = array(0 => t('Closed'), 1 => t('Active')); $form['settings'] = array( '#type' => 'fieldset', '#collapsible' => TRUE, '#title' => t('Poll settings'), '#weight' => -3, '#access' => $admin, ); $form['settings']['active'] = array( '#type' => 'radios', '#title' => t('Poll status'), '#default_value' => isset($node->active) ? $node->active : 1, '#options' => $active, '#description' => t('When a poll is closed, visitors can no longer vote for it.'), '#access' => $admin, ); $form['settings']['runtime'] = array( '#type' => 'select', '#title' => t('Poll duration'), '#default_value' => isset($node->runtime) ? $node->runtime : 0, '#options' => $duration, '#description' => t('After this period, the poll will be closed automatically.'), ); return $form; }
© 2001–2016 by the original authors
Licensed under the GNU General Public License, version 2 and later.
Drupal is a registered trademark of Dries Buytaert.
https://api.drupal.org/api/drupal/modules!poll!poll.module/function/poll_form/7.x