improvements-2.x-dev/modules/improvements_node/improvements_node.module
modules/improvements_node/improvements_node.module
<?php
use Drupal\Core\Entity\EntityTypeInterface;
use Drupal\Core\Field\BaseFieldDefinition;
use Drupal\Core\Form\FormStateInterface;
use Drupal\node\NodeForm;
use Drupal\node\NodeInterface;
use Drupal\node\NodeTypeForm;
use Drupal\node\NodeTypeInterface;
/**
* Implements hook_form_BASE_FORM_ID_alter(): node_type_form.
*/
function improvements_node_form_node_type_form_alter(array &$form, FormStateInterface $form_state, string $form_id): void {
$node_type_form_object = $form_state->getFormObject(); /** @var NodeTypeForm $node_type_form_object */
$node_type_entity = $node_type_form_object->getEntity(); /** @var NodeTypeInterface $node_type_entity */
$form['submission']['hide_revision_group'] = [
'#type' => 'checkbox',
'#title' => t('Hide revision group'),
'#default_value' => $node_type_entity->getThirdPartySetting('improvements', 'hide_revision_group'),
];
$form['submission']['move_status_to_vertical_tab'] = [
'#type' => 'checkbox',
'#title' => t('Move "Status" field to vertical tab'),
'#default_value' => $node_type_entity->getThirdPartySetting('improvements', 'move_status_to_vertical_tab'),
];
if ($node_type_entity->isNew()) {
$node_type_entity->setThirdPartySetting('menu_ui', 'available_menus', []);
$form['submission']['preview_mode']['#default_value'] = 0;
$form['workflow']['options']['#default_value']['promote'] = FALSE;
$form['workflow']['options']['#default_value']['revision'] = FALSE;
$form['display']['display_submitted']['#default_value'] = FALSE;
}
$form['#entity_builders'][] = 'improvements_node_type_form_entity_builder';
}
/**
* Node type form entity builder callback.
*/
function improvements_node_type_form_entity_builder(string $entity_type, NodeTypeInterface $node_type, array &$form, FormStateInterface $form_state): void {
$node_type->setThirdPartySetting('improvements', 'hide_revision_group', $form_state->getValue('hide_revision_group'));
$node_type->setThirdPartySetting('improvements', 'move_status_to_vertical_tab', $form_state->getValue('move_status_to_vertical_tab'));
}
/**
* Implements hook_form_BASE_FORM_ID_alter(): node_form.
*/
function improvements_node_form_node_form_alter(array &$form, FormStateInterface $form_state, string $form_id): void {
$form_object = $form_state->getFormObject(); /** @var NodeForm $form_object */
$node = $form_object->getEntity(); /** @var NodeInterface $node */
$node_type_entity = $node->get('type')->entity; /** @var NodeTypeInterface $node_type_entity */
// Add autofocus to title field
if ($node->isNew() && isset($form['title']['widget'][0]['value'])) {
$form['title']['widget'][0]['value']['#attributes']['autofocus'] = 'autofocus';
}
// Hide revision group
if (
$node_type_entity->getThirdPartySetting('improvements', 'hide_revision_group') &&
!$form['revision']['#default_value'] &&
isset($form['revision_information'])
) {
$form['revision_information']['#access'] = FALSE;
}
// Move status field to fieldset
if ($node_type_entity->getThirdPartySetting('improvements', 'move_status_to_vertical_tab')) {
$form['status']['#group'] = 'options';
$form['options']['#title'] = t('Publishing options');
}
// Trigger hook_form_node_BUNDLE_form_alter for edit form
// @TODO Add test
if ($form_object->getOperation() == 'edit') {
\Drupal::moduleHandler()->alter('form_node_' . $node->bundle() . '_form', $form, $form_state, $form_id);
}
}
/**
* Implements hook_entity_base_field_info_alter().
*
* @param BaseFieldDefinition[] $fields
* @param EntityTypeInterface $entity_type
*
* @see Node::baseFieldDefinitions()
*/
function improvements_node_entity_base_field_info_alter(array &$fields, EntityTypeInterface $entity_type): void {
if ($entity_type->id() == 'node') {
$fields['title']->setDisplayConfigurable('view', TRUE);
$fields['uid']->setDisplayConfigurable('view', TRUE); // @TODO Add test
$fields['created']->setDisplayConfigurable('view', TRUE)->setLabel(t('Date of creation'));
$fields['changed']->setLabel(t('Date of change'));
}
}
/**
* Implements hook_entity_type_build().
*/
function improvements_node_entity_type_build(array &$entity_types): void {
// See https://www.drupal.org/node/3043840
if (isset($entity_types['node'])) {
$entity_types['node']->set('enable_base_field_custom_preprocess_skipping', TRUE);
}
}
