Skip to content
Snippets Groups Projects
Commit a41352e3 authored by Joshua Sedler's avatar Joshua Sedler :cartwheel_tone2: Committed by Oleksandr Kuzava
Browse files

Issue #3195679: Provide default options for each content type

parent 63e61f48
No related branches found
No related tags found
1 merge request!9Issue #3195679: Provide default options for each content type
......@@ -11,6 +11,7 @@ use Drupal\node\NodeInterface;
use Drupal\Core\Entity\EntityTypeInterface;
use Drupal\Core\Field\BaseFieldDefinition;
use Drupal\Core\Form\FormStateInterface;
use Drupal\node\NodeTypeInterface;
/**
* Implements hook_entity_base_field_info().
......@@ -166,3 +167,68 @@ function node_keep_node_access(NodeInterface $node, $op, AccountInterface $accou
return AccessResult::neutral()
->addCacheContexts(['user.permissions']);
}
/**
* Implements hook_form_FORM_ID_alter() for \Drupal\node\NodeTypeForm.
*
* Adds node keep default options for newly created nodes, to the node type
* form.
*
* @see NodeTypeForm::form()
* @see node_keep_form_node_type_form_builder()
*/
function node_keep_form_node_type_form_alter(&$form, FormStateInterface $form_state) {
/** @var \Drupal\node\NodeTypeInterface $type */
$type = $form_state->getFormObject()->getEntity();
$form['node_keep'] = [
'#type' => 'details',
'#title' => t('Node keep defaults'),
'#group' => 'additional_settings',
];
$form['node_keep']['node_keeper'] = [
'#type' => 'checkbox',
'#title' => t('Default option for "Prevent this node from being deleted"'),
'#default_value' => $type->getThirdPartySetting('node_keep', 'node_keeper', 0),
'#description' => t('Set the default option for preventing node deletion for newly created nodes of this type.'),
];
if (\Drupal::moduleHandler()->moduleExists('pathauto')) {
$form['node_keep']['alias_keeper'] = [
'#type' => 'checkbox',
'#title' => t(`Default option for "Prevent this node's alias from being changed"`),
'#default_value' => $type->getThirdPartySetting('node_keep', 'alias_keeper', 0),
'#description' => t('Set the default option for preventing node alias changes for newly created nodes of this type.'),
];
}
$form['#entity_builders'][] = 'node_keep_form_node_type_form_builder';
}
/**
* Entity builder for the node type form with node_keep options.
*
* @see node_keep_form_node_type_form_alter()
*/
function node_keep_form_node_type_form_builder($entity_type, NodeTypeInterface $type, &$form, FormStateInterface $form_state) {
/** @var \Drupal\node\NodeTypeInterface $node_type */
$node_type = $form_state->getBuildInfo()['callback_object']->getEntity();
/** @var Drupal\Core\Entity\EntityFieldManager $entityFieldManager */
$entityFieldManager = \Drupal::service('entity_field.manager');
$fields = $entityFieldManager->getFieldDefinitions('node', $node_type->id());
$nodeKeeperValue = (bool) $form_state->getValue('node_keeper');
$type->setThirdPartySetting('node_keep', 'node_keeper', $nodeKeeperValue);
/** @var Drupal\Core\Field\Entity\BaseFieldOverride $nodeKeeperFieldDefinition */
$nodeKeeperFieldDefinition = $fields['node_keeper'];
$nodeKeeperFieldDefinition->getConfig($node_type->id())->setDefaultValue($nodeKeeperValue)->save();
if (\Drupal::moduleHandler()->moduleExists('pathauto')) {
$aliasKeeperValue = (bool) $form_state->getValue('alias_keeper');
$type->setThirdPartySetting('node_keep', 'alias_keeper', $aliasKeeperValue);
/** @var Drupal\Core\Field\Entity\BaseFieldOverride $aliasKeeperFieldDefinition */
$aliasKeeperFieldDefinition = $fields['alias_keeper'];
$aliasKeeperFieldDefinition->getConfig($node_type->id())->setDefaultValue($aliasKeeperValue)->save();
}
$entityFieldManager->clearCachedFieldDefinitions();
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment