function hide_revision_field_form_user_form_alter in Hide Revision Field 8.2
Same name and namespace in other branches
- 8 hide_revision_field.module \hide_revision_field_form_user_form_alter()
Implements hook_form_FORM_ID_alter().
Add the personalizable settings to an individual user's account page.
File
- ./
hide_revision_field.module, line 18 - Manage hiding revision log field on revisionable entity edit/create forms.
Code
function hide_revision_field_form_user_form_alter(&$form, FormStateInterface $form_state) {
// Ensure user has necessary permission.
if (!\Drupal::currentUser()
->hasPermission('administer revision field personalization')) {
return;
}
/** @var \Drupal\user\UserInterface $user */
$user = $form_state
->getFormObject()
->getEntity();
if (!$user
->hasPermission('administer revision field personalization')) {
return;
}
$settings = unserialize($user
->get('revision_log_settings')->value);
$entity_type_manager = \Drupal::entityTypeManager();
/* @var \Drupal\Core\Entity\EntityDisplayRepositoryInterface $entity_display_repository */
$entity_display_repository = \Drupal::service('entity_display.repository');
/** @var \Drupal\Core\Entity\EntityTypeBundleInfoInterface $bundle_manager */
$bundle_manager = \Drupal::service('entity_type.bundle.info');
$config = [];
foreach ($entity_type_manager
->getDefinitions() as $entity_type) {
// Check that entity has revision_log_message field.
$keys = $entity_type
->get('revision_metadata_keys');
if (!isset($keys['revision_log_message'])) {
continue;
}
$type_id = $entity_type
->id();
$entity = [];
foreach ($bundle_manager
->getBundleInfo($type_id) as $bundle_id => $bundle) {
/** @var \Drupal\Core\Entity\Display\EntityFormDisplayInterface $form_display */
$form_display = $entity_display_repository
->getFormDisplay($type_id, $bundle_id, 'default');
$log = $form_display
->getComponent($keys['revision_log_message']);
if (!empty($log['settings']['allow_user_settings'])) {
$entity[$bundle_id] = [
'#type' => 'checkbox',
'#title' => t('Show Revision Log Field on "%bundle" forms', [
'%bundle' => $bundle['label'],
]),
'#default_value' => isset($settings[$type_id][$bundle_id]) ? $settings[$type_id][$bundle_id] : $log['settings']['show'],
];
}
}
if ($entity) {
$config[$type_id] = [
'#title' => $entity_type
->getLabel(),
'#type' => 'details',
'#open' => TRUE,
];
$config[$type_id] += $entity;
}
}
if ($config) {
$form['hide_revision_field'] = [
'#type' => 'details',
'#title' => t('Revision Field Settings'),
'#tree' => TRUE,
'#open' => FALSE,
'#weight' => 10,
];
$form['hide_revision_field'] += $config;
}
$form['revision_log_settings'] = [
'#type' => 'hidden',
'#value' => $user
->get('revision_log_settings')->value,
];
$form['actions']['submit']['#validate'][] = 'hide_revision_field_user_profile_form_submit';
$form['actions']['submit']['#validate'][] = '::validateForm';
}