You are here

auto_menutitle.module in Auto Menu Title 8

Same filename and directory in other branches
  1. 6.2 auto_menutitle.module
  2. 7 auto_menutitle.module

Allows content types to set default value of 'Provide a menu link' checkbox.

File

auto_menutitle.module
View source
<?php

/**
 * @file
 * Allows content types to set default value of 'Provide a menu link' checkbox.
 */
use Drupal\Core\Form\FormStateInterface;

/**
 * Implements hook_form_FORM_ID_alter().
 */
function auto_menutitle_form_node_type_form_alter(&$form, FormStateInterface $form_state) {

  // Add checkbox for setting the default value.
  $type = $form['type']['#default_value'];
  $form['menu']['auto_menutitle'] = [
    '#type' => 'checkbox',
    '#title' => t('Provide a menu link by default'),
    '#description' => t('Tick this box to create menu links for this content type by default.'),
    '#default_value' => \Drupal::state()
      ->get('auto_menutitle_' . $type),
    '#weight' => -1,
  ];
  $form['#validate'][] = 'auto_menutitle_node_type_form_validate';
  foreach (array_keys($form['actions']) as $action) {
    if ($action != 'preview' && isset($form['actions'][$action]['#type']) && $form['actions'][$action]['#type'] === 'submit') {
      $form['actions'][$action]['#submit'][] = 'auto_menutitle_node_form_submit';
    }
  }
}

/**
 * Form validation handler for auto_menutitle_form_node_type_form_alter().
 */
function auto_menutitle_node_type_form_validate(array &$form, FormStateInterface $form_state) {
  if ($form_state
    ->getValues()['auto_menutitle']) {

    // Get the selected menu(s)
    $selected = [];
    foreach ($form_state
      ->getValue('menu_options') as $menu) {
      if ($menu !== 0) {
        $selected[] = $menu;
      }
    }

    // Display error if menu link is provided by default, but no menu was
    // selected.
    if (empty($selected)) {
      $form_state
        ->setErrorByName('menu_options', t('To %menu_link you must also select one or more %available_menus.', [
        '%menu_link' => t('Provide menu link'),
        '%available_menus' => t('Available Menus'),
      ]));
    }
  }
}

/**
 * Submit handler to save value.
 */
function auto_menutitle_node_form_submit($form, FormStateInterface $form_state) {
  $type = $form_state
    ->getFormObject()
    ->getEntity()
    ->get("type");
  \Drupal::state()
    ->set('auto_menutitle_' . $type, $form_state
    ->getValues()['auto_menutitle']);
}

/**
 * Implements hook_form_BASE_FORM_ID_alter().
 */
function auto_menutitle_form_node_form_alter(&$form, FormStateInterface $form_state) {
  $node = $form_state
    ->getFormObject()
    ->getEntity();

  // Only set default value for new nodes, leave existing nodes alone (as users
  // might have manually set them)
  if ($node
    ->isNew()) {

    // This is a new node.
    $type = $node
      ->getType();
    $form['menu']['enabled']['#default_value'] = \Drupal::state()
      ->get('auto_menutitle_' . $type);
  }
}