You are here

public function FivestarForm::buildForm in Fivestar 8

Form constructor.

Parameters

array $form: An associative array containing the structure of the form.

\Drupal\Core\Form\FormStateInterface $form_state: The current state of the form.

Return value

array The form structure.

Overrides FormInterface::buildForm

File

src/Form/FivestarForm.php, line 57

Class

FivestarForm
Fivestar form.

Namespace

Drupal\fivestar\Form

Code

public function buildForm(array $form, FormStateInterface $form_state, array $context = []) {
  $entity = $context['entity'];
  $uniq_id = Html::getUniqueId('vote');
  $field_definition = $context['field_definition'];
  $field_settings = $field_definition
    ->getSettings();
  $field_name = $field_definition
    ->getName();
  $voting_is_allowed = (bool) ($field_settings['rated_while'] == 'viewing');
  $form['vote'] = [
    '#type' => 'fivestar',
    '#stars' => $field_settings['stars'],
    '#allow_clear' => $field_settings['allow_clear'],
    '#allow_revote' => $field_settings['allow_revote'],
    '#allow_ownvote' => $field_settings['allow_ownvote'],
    '#vote_type' => $field_settings['vote_type'],
    '#widget' => $context['display_settings'],
    '#default_value' => $entity
      ->get($field_name)->rating,
    '#values' => $this->resultManager
      ->getResultsByVoteType($entity, $field_settings['vote_type']),
    '#settings' => $context['display_settings'],
    '#show_static_result' => !$voting_is_allowed,
    '#attributes' => [
      'class' => [
        'vote',
      ],
    ],
  ];

  // Click on this element triggered from JS side.
  $form['submit'] = [
    '#type' => 'submit',
    '#value' => $this
      ->t('Rate'),
    '#ajax' => [
      'event' => 'click',
      'callback' => '::fivestarAjaxVote',
      'method' => 'replace',
      'wrapper' => $uniq_id,
      'effect' => 'fade',
    ],
    '#attributes' => [
      'style' => 'display:none',
    ],
  ];
  $form_state
    ->set('context', $context);
  $form_state
    ->set('uniq_id', $uniq_id);
  $form['#attributes']['id'] = $uniq_id;
  return $form;
}