You are here

function social_private_message_form_private_message_add_form_alter in Open Social 8.3

Same name and namespace in other branches
  1. 8.9 modules/social_features/social_private_message/social_private_message.module \social_private_message_form_private_message_add_form_alter()
  2. 8 modules/social_features/social_private_message/social_private_message.module \social_private_message_form_private_message_add_form_alter()
  3. 8.2 modules/social_features/social_private_message/social_private_message.module \social_private_message_form_private_message_add_form_alter()
  4. 8.4 modules/social_features/social_private_message/social_private_message.module \social_private_message_form_private_message_add_form_alter()
  5. 8.5 modules/social_features/social_private_message/social_private_message.module \social_private_message_form_private_message_add_form_alter()
  6. 8.6 modules/social_features/social_private_message/social_private_message.module \social_private_message_form_private_message_add_form_alter()
  7. 8.7 modules/social_features/social_private_message/social_private_message.module \social_private_message_form_private_message_add_form_alter()
  8. 8.8 modules/social_features/social_private_message/social_private_message.module \social_private_message_form_private_message_add_form_alter()
  9. 10.3.x modules/social_features/social_private_message/social_private_message.module \social_private_message_form_private_message_add_form_alter()
  10. 10.0.x modules/social_features/social_private_message/social_private_message.module \social_private_message_form_private_message_add_form_alter()
  11. 10.1.x modules/social_features/social_private_message/social_private_message.module \social_private_message_form_private_message_add_form_alter()
  12. 10.2.x modules/social_features/social_private_message/social_private_message.module \social_private_message_form_private_message_add_form_alter()

Implements hook_form_FORMID_alter().

File

modules/social_features/social_private_message/social_private_message.module, line 61
The Social Privagte Message module.

Code

function social_private_message_form_private_message_add_form_alter(&$form, FormStateInterface $form_state, $form_id) {
  $form['members']['widget']['target_id']['#description'] = t('The member(s) of the private message thread. Add multiple members by seperating them with a comma.');

  // Add CTRL/CMD + Enter is submit.
  $form['#attached']['library'][] = 'social_post/keycode-submit';
  $form['#attached']['library'][] = 'social_private_message/validator';
  $form['#attached']['drupalSettings']['social_private_message']['validator'] = t('Please select an item in the list.');

  // Determine if the form is an PMT edit form.
  $form_is_edit_form = $form_state
    ->has('thread_members');

  // There's an alternative submit. We need to change its value.
  foreach ($form['actions'] as $key => &$actions) {

    // Must be pretty sure it's a submit button.
    if (!(is_array($actions) && isset($actions['#submit']) && is_array($actions['#submit']))) {
      continue;
    }

    // Key must have submit in it.
    if (strpos($key, 'submit-') === FALSE) {
      continue;
    }
    $actions['#value'] = t('Send');
    $actions['#submit'][] = 'social_private_message_redirect';
    unset($actions['#ajax']);
    if (!($form_is_edit_form && \Drupal::routeMatch()
      ->getRouteName() == 'entity.private_message_thread.canonical' && \Drupal::routeMatch()
      ->getParameter('private_message_thread')
      ->get('members')
      ->count() != count($form_state
      ->get('thread_members')))) {
      continue;
    }
    $callbacks = $actions['#submit'];
    $actions['#submit'] = [];
    foreach ($callbacks as $callback) {
      if ($callback == '::save') {
        $actions['#submit'][] = '_social_private_message_members';
      }
      $actions['#submit'][] = $callback;
    }
  }

  // Alter the users widget.
  $form['members']['widget']['#required'] = TRUE;
  $form['members']['widget']['#description'] = '';

  // Add the required tag.
  $form['members']['widget']['#attributes']['required'] = 'required';

  // Unset the empty and anonymous option.
  unset($form['members']['widget']['#options']['0']);
  unset($form['members']['widget']['#options']['_none']);

  // Unset current user.
  unset($form['members']['widget']['#options'][Drupal::currentUser()
    ->id()]);

  // Alter the message widget.
  // Add the required tag.
  $form['message']['widget']['#attributes']['required'] = 'required';

  // Normal submit button shoud say 'Next'.
  $form['actions']['submit']['#value'] = t('Send');
  $form['actions']['submit']['#submit'][] = 'social_private_message_redirect';

  // Add form class based on form type (create/edit).
  if ($form_is_edit_form) {
    $form_class = 'message__thread_create';

    // In edit mode, remove the label from the message field.
    $form['message']['widget'][0]['#title'] = '';
  }
  else {
    $form_class = 'message__thread_edit';
  }
  $form['#attributes']['class'][] = $form_class;
}