You are here

function support_ticket_form_support_ticket_type_edit_form_alter in Support Ticketing System 8

Implements hook_form_BASE_FORM_ID_alter().

File

modules/support_ticket/support_ticket.module, line 646
Enables use of support tickets with optional time tracking.

Code

function support_ticket_form_support_ticket_type_edit_form_alter(&$form, FormStateInterface $form_state) {
  $type = $form_state
    ->getFormObject()
    ->getEntity();
  if ($type
    ->id()) {
    $config = \Drupal::configFactory()
      ->get('support_ticket.settings');
    $form['diff'] = array(
      '#title' => t('Revision changes'),
      '#type' => 'details',
      '#group' => 'additional_settings',
      '#tree' => FALSE,
    );

    // Generate a unique wrapper HTML ID.
    $ajax_wrapper_id = Html::getUniqueId('ajax-wrapper');
    $options = array();
    $comment_field = $form_state
      ->getValue('comment_diff_field', _support_ticket_comment_diff_field($type
      ->id()));
    $fields = \Drupal::entityManager()
      ->getFieldDefinitions('support_ticket', $type
      ->id());
    foreach ($fields as $field) {
      if ($field
        ->getType() == 'comment') {
        $field_name = $field
          ->getName();
        $field_label = $field
          ->getLabel();
        $options[$field_name] = $field_label;
        if ($field_name == $comment_field) {
          $comment_field_label = $field_label;
        }
      }
    }

    // Prefix and suffix used for Ajax replacement.
    $form['diff']['comment_field'] = array(
      '#type' => 'container',
      '#prefix' => '<div id="' . $ajax_wrapper_id . '">',
      '#suffix' => '</div>',
      '#attached' => [
        'drupalSettings' => [
          'ajax' => [
            'edit-comment-diff-field' => [
              'wrapper' => $ajax_wrapper_id,
            ],
          ],
        ],
      ],
    );
    $form['diff']['comment_field']['comment_diff_field'] = array(
      '#type' => 'select',
      '#title' => t('Comment field'),
      '#description' => t('The comment field in the %type support ticket type where change comments will be written.', array(
        '%type' => $type
          ->label(),
      )),
      '#options' => $options,
      '#weight' => 12,
      '#default_value' => $comment_field,
      '#empty_value' => '',
      '#ajax' => [
        'callback' => '_support_ticket_comment_diff_ajax_callback',
        'wrapper' => $ajax_wrapper_id,
        'effect' => 'fade',
        'selector' => '[data-drupal-selector="edit-comment-diff-field"]',
      ],
    );
    if (!empty($comment_field)) {
      $revision_reference_options = $revision_changes_options = array();
      $field_storage = FieldStorageConfig::loadByName('support_ticket', $comment_field);
      $comment_type = $field_storage
        ->getSetting('comment_type');
      $fields = \Drupal::entityManager()
        ->getFieldDefinitions('comment', $comment_type);
      foreach ($fields as $field) {
        if ($field
          ->getType() == 'integer' && ($revision_reference_field = $field
          ->getName()) != 'cid') {
          $revision_reference_options[$revision_reference_field] = $field
            ->getLabel();
        }
        if ($field
          ->getType() == 'text_long' && ($revision_changes_field = $field
          ->getName())) {
          $revision_changes_options[$revision_changes_field] = $field
            ->getLabel();
        }
      }
      $form['diff']['comment_field']['comment_diff_revision_reference'] = array(
        '#type' => 'select',
        '#title' => t('Revision ID integer field'),
        '#description' => t('Integer field in %comment_field_label comment field to store the revision ID that caused these revision changes.', array(
          '%comment_field_label' => $comment_field_label,
        )),
        '#options' => $revision_reference_options,
        '#weight' => 14,
        '#default_value' => _support_ticket_comment_diff_revision_reference($type
          ->id(), $comment_type),
        '#empty_value' => '',
      );
      $form['diff']['comment_field']['comment_diff_revision_changes'] = array(
        '#type' => 'select',
        '#title' => t('Revision changes long text field'),
        '#description' => t('Long text field in %comment_field_label comment field to store the revision changes.', array(
          '%comment_field_label' => $comment_field_label,
        )),
        '#options' => $revision_changes_options,
        '#weight' => 14,
        '#default_value' => _support_ticket_comment_diff_revision_changes($type
          ->id(), $comment_type),
        '#empty_value' => '',
      );
    }
    $options = array();
    $formats = filter_formats();
    foreach ($formats as $name => $format) {
      $options[$format
        ->id()] = $name;
    }
    $form['diff']['filter_format'] = array(
      '#type' => 'select',
      '#title' => t('Filter format'),
      '#description' => t('Which filter format to apply to revision changes.'),
      '#options' => $options,
      '#weight' => 16,
      '#default_value' => $config
        ->get('support_ticket_type_settings.' . $type
        ->id() . '.filter_format'),
      '#empty_value' => '',
    );
    $form['actions']['submit']['#submit'][] = 'support_ticket_form_support_ticket_type_form_submit';
  }
}