You are here

protected function SubscriptionsFormBase::actions in Simplenews 8.2

Same name and namespace in other branches
  1. 8 src/Form/SubscriptionsFormBase.php \Drupal\simplenews\Form\SubscriptionsFormBase::actions()
  2. 3.x src/Form/SubscriptionsFormBase.php \Drupal\simplenews\Form\SubscriptionsFormBase::actions()

Returns an array of supported actions for the current entity form.

This function generates a list of Form API elements which represent actions supported by the current entity form.

@todo Consider introducing a 'preview' action here, since it is used by many entity types.

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 An array of supported Form API action elements keyed by name.

Overrides EntityForm::actions

2 calls to SubscriptionsFormBase::actions()
SubscriptionsBlockForm::actions in src/Form/SubscriptionsBlockForm.php
Returns an array of supported actions for the current entity form.
SubscriptionsPageForm::actions in src/Form/SubscriptionsPageForm.php
Returns an array of supported actions for the current entity form.
2 methods override SubscriptionsFormBase::actions()
SubscriptionsBlockForm::actions in src/Form/SubscriptionsBlockForm.php
Returns an array of supported actions for the current entity form.
SubscriptionsPageForm::actions in src/Form/SubscriptionsPageForm.php
Returns an array of supported actions for the current entity form.

File

src/Form/SubscriptionsFormBase.php, line 157

Class

SubscriptionsFormBase
Entity form for Subscriber with common routines.

Namespace

Drupal\simplenews\Form

Code

protected function actions(array $form, FormStateInterface $form_state) {

  // There are three user groups for subscriptions forms:
  // 1) An authenticated subscriber updating existing subscriptions. The main
  // case is a logged in user, but it could also be an anonymous subscription
  // authenticated by means of a hash. In both cases, the email address is
  // set.
  // 2) An unauthenticated user who enters an email address in the form and
  // requests to subscribe or unsubscribe. In this case the email address
  // is not set.
  // 3) An administrator adding a new subscription. In this case the email
  // address is not set, but there is a logged in user.
  $has_widget = !$this
    ->getSubscriptionWidget($form_state)
    ->isHidden();
  $has_mail = (bool) $this->entity
    ->getMail();
  $actions = parent::actions($form, $form_state);
  if ($has_widget && ($has_mail || \Drupal::currentUser()
    ->isAuthenticated())) {

    // 1a) When authenticated with a widget
    // 3) An administrator adding a new subscription.
    // In both cases, show a single update button.
    $actions[static::SUBMIT_UPDATE] = $actions['submit'];
    $actions[static::SUBMIT_UPDATE]['#submit'][] = '::submitUpdate';
  }
  else {

    // 2) When not authenticated, show subscribe and unsubscribe buttons. The
    // user can check which newsletters to alter.
    //
    // 1b) The final case is when authenticated with no widget which is for a
    // form that applies to a single newsletter. In this case there will be a
    // single button either subscribe or unsubscribe depending on the current
    // subscription state.
    if ($has_widget || !$this->entity
      ->isSubscribed($this
      ->getOnlyNewsletterId())) {

      // Subscribe button.
      $actions[static::SUBMIT_SUBSCRIBE] = $actions['submit'];
      $actions[static::SUBMIT_SUBSCRIBE]['#value'] = $this
        ->t('Subscribe');
      $actions[static::SUBMIT_SUBSCRIBE]['#submit'][] = '::submitSubscribe';
    }
    if ($has_widget || $this->entity
      ->isSubscribed($this
      ->getOnlyNewsletterId())) {

      // Unsubscribe button.
      $actions[static::SUBMIT_UNSUBSCRIBE] = $actions['submit'];
      $actions[static::SUBMIT_UNSUBSCRIBE]['#value'] = $this
        ->t('Unsubscribe');
      $actions[static::SUBMIT_UNSUBSCRIBE]['#submit'][] = '::submitUnsubscribe';
    }
  }
  unset($actions['submit']);
  if (!$this->allowDelete) {
    unset($actions['delete']);
  }
  return $actions;
}