You are here

public function AdminContentNotification::buildForm in Admin Content Notification 8.3

Same name and namespace in other branches
  1. 8 src/Form/AdminContentNotification.php \Drupal\admin_content_notification\Form\AdminContentNotification::buildForm()
  2. 8.2 src/Form/AdminContentNotification.php \Drupal\admin_content_notification\Form\AdminContentNotification::buildForm()

Build the Form.

@inheritDoc

Overrides ConfigFormBase::buildForm

File

src/Form/AdminContentNotification.php, line 52

Class

AdminContentNotification
Class AdminContentNotification implements settings for admin notification.

Namespace

Drupal\admin_content_notification\Form

Code

public function buildForm(array $form, FormStateInterface $form_state, Request $request = NULL) {
  $config = $this
    ->config('admin_content_notification.settings');
  $form = [];
  $form['admin_content_notification_content_types'] = [
    '#type' => 'fieldset',
    '#title' => $this
      ->t('Select the content types'),
    '#description' => $this
      ->t('Choose the content type for which you want notification on content insert/update.'),
  ];
  $default_content_types = $config
    ->get('admin_content_notification_node_types') ?: [];
  $form['admin_content_notification_content_types']['admin_content_notification_node_types'] = [
    '#type' => 'checkboxes',
    '#title' => $this
      ->t('Content types'),
    '#default_value' => $default_content_types,
    '#options' => node_type_get_names(),
  ];
  $trigger_node_update = $config
    ->get('admin_content_notification_trigger_on_node_update') ?: FALSE;
  $form['admin_content_notification_trigger_on_node_update'] = [
    '#type' => 'checkbox',
    '#title' => $this
      ->t('Enable on content update'),
    '#default_value' => $trigger_node_update,
    '#description' => $this
      ->t('Please check on it if you want to send notification on update action as well.'),
  ];
  $trigger_node_status = $config
    ->get('admin_content_notification_trigger_on_node_status') ?: 0;
  $content_status = [];
  $content_status[0] = $this
    ->t('Notify for both published and unpublished content.');
  $content_status[1] = $this
    ->t('Only notify for published content');
  $content_status[2] = $this
    ->t('Only notify for unpublished content');
  $form['admin_content_notification_trigger_on_node_status'] = [
    '#type' => 'radios',
    '#title' => $this
      ->t('Content status'),
    '#options' => $content_status,
    '#default_value' => $trigger_node_status,
    '#description' => $this
      ->t('Select if you want to limit notifications to only published or only unpublished content.'),
  ];
  $trigger_for_roles = $config
    ->get('admin_content_notification_allowed_roles') ?: [];
  $user_roles = user_role_names();
  $form['admin_content_notification_allowed_roles'] = [
    '#type' => 'checkboxes',
    '#title' => $this
      ->t('Select roles'),
    '#options' => $user_roles,
    '#default_value' => $trigger_for_roles,
    '#description' => $this
      ->t('Please select the roles for which email notifications should trigger on content insert/update'),
  ];
  $form['admin_content_notification_recepient_fieldset'] = [
    '#type' => 'fieldset',
    '#title' => $this
      ->t('Email Recipients'),
  ];
  $form['admin_content_notification_recepient_fieldset']['admin_content_notification_email_limit'] = [
    '#type' => 'textfield',
    '#title' => $this
      ->t('Recipients Limit (Max)'),
    '#default_value' => !empty($config
      ->get('admin_content_notification_email_limit')) ? $config
      ->get('admin_content_notification_email_limit') : 50,
    '#description' => $this
      ->t('Enter -1 if you want to ignore Recipients Limit'),
  ];
  $site_email = $config
    ->get('mail');
  $admin_content_notification_email = $config
    ->get('admin_content_notification_email');
  $form['admin_content_notification_recepient_fieldset']['admin_content_notification_email'] = [
    '#type' => 'textarea',
    '#title' => $this
      ->t("Email Id's to whom the notification is to be sent, add comma separated emails in case of multiple recipients"),
    '#default_value' => isset($admin_content_notification_email) ? $admin_content_notification_email : $site_email,
    '#description' => $this
      ->t('You can add emails upto Recipients Limit (Max)'),
  ];
  $form['admin_content_notification_recepient_fieldset']['admin_content_notification_email_or_markup']['#markup'] = '<strong>' . $this
    ->t('OR') . '</strong>';
  $roles_to_be_notified = $config
    ->get('admin_content_notification_roles_notified') ?: [];
  if (array_key_exists('anonymous', $user_roles)) {
    unset($user_roles['anonymous']);
  }
  $form['admin_content_notification_recepient_fieldset']['admin_content_notification_roles_notified'] = [
    '#type' => 'checkboxes',
    '#title' => $this
      ->t('Select roles'),
    '#options' => $user_roles,
    '#default_value' => $roles_to_be_notified,
    '#description' => $this
      ->t('Please select the roles to whom you want to send email, please remember to select roles in a way so that total user count should not be greater than You can add emails upto Recipients Limit (Max).'),
  ];
  $form['admin_content_notification_email_fieldset'] = [
    '#type' => 'fieldset',
    '#title' => $this
      ->t('Email Settings'),
  ];
  $form['admin_content_notification_email_fieldset']['admin_content_notification_email_subject'] = [
    '#type' => 'textfield',
    '#title' => $this
      ->t('Configurable email subject'),
    '#default_value' => $config
      ->get('admin_content_notification_email_subject'),
    '#description' => $this
      ->t('Enter subject of the email.'),
  ];
  $form['admin_content_notification_email_fieldset']['admin_content_notification_email_body'] = [
    '#type' => 'textarea',
    '#title' => $this
      ->t('Configurable email body'),
    '#default_value' => $config
      ->get('admin_content_notification_email_body'),
    '#description' => $this
      ->t('Email body for the email. Use the following tokens: @user_who_posted, @content_link, @content_title, @content_type, @action (posted or updated, will update accrodingly).'),
  ];
  if ($this->adminContentNotificationService
    ->isTokenEnabled()) {
    $form['admin_content_notification_email_fieldset']['admin_content_notification_email_tokens']['#markup'] = '<strong>' . $this
      ->t('You can use tokens provided by token module as well.') . '</strong><br>';

    // Add the token tree UI.
    $form['admin_content_notification_email_fieldset']['token_tree'] = [
      '#theme' => 'token_tree_link',
      '#token_types' => [
        'user',
        'node',
        'content-type',
        'current-date',
        'current-user',
      ],
      '#show_restricted' => TRUE,
      '#global_types' => FALSE,
      '#weight' => 90,
    ];
  }
  return parent::buildForm($form, $form_state);
}