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';
}
}