Implements hook_field_widget_form_alter().
File
-
./
autofill_fields.module, line 40
Code
function autofill_fields_field_widget_form_alter(&$element, FormStateInterface $form_state, $context) {
// Only run for logged in users.
if (!($user_id = \Drupal::currentUser()->id())) {
return;
}
$entity = $form_state->getFormObject()
->getEntity();
// Only run for new entities; we don't want to overwrite desired data.
if (!$entity->isNew()) {
return;
}
$plugin = $context['widget'];
// Check that it is enabled for this field.
if (!$plugin->getThirdPartySetting('autofill_fields', 'autofill')) {
return;
}
$field_definition = $context['items']->getFieldDefinition();
$type = $field_definition->getType();
$plugin_id = $plugin->getPluginId();
$values = $plugin->getThirdPartySetting('autofill_fields', 'stored', []);
if (isset($values[$user_id])) {
$entity_type_manager = \Drupal::service('entity_type.manager');
if ($type == 'text_with_summary') {
$element['#default_value'] = $values[$user_id][0]['value'];
$element['#format'] = $values[$user_id][0]['format'];
$element['summary']['#default_value'] = $values[$user_id][0]['summary'];
}
elseif ($type == 'entity_reference') {
$value = isset($values[$user_id]['target_id']) ? $values[$user_id]['target_id'] : $values[$user_id];
if ($plugin_id == 'options_select' || $plugin_id == 'options_buttons') {
$element['#default_value'] = [];
foreach ($value as $reference) {
$element['#default_value'][] = $reference['target_id'];
}
}
elseif ($plugin_id == 'entity_reference_autocomplete') {
if (!$value[$element['target_id']['#delta']]['target_id']) {
return;
}
$element['target_id']['#default_value'] = $entity_type_manager->getStorage($element['target_id']['#target_type'])
->load($value[$element['target_id']['#delta']]['target_id']);
}
elseif ($plugin_id == 'entity_reference_autocomplete_tags') {
$element['target_id']['#default_value'] = [];
foreach ($value as $reference) {
$element['target_id']['#default_value'][] = $entity_type_manager->getStorage($element['target_id']['#target_type'])
->load($reference['target_id']);
}
}
}
elseif ($type == 'decimal') {
if ($plugin_id == 'number') {
$element['value']['#default_value'] = $values[$user_id][$element['value']['#delta']]['value'];
}
}
elseif ($type == 'datetime') {
if ($plugin_id == 'datetime_default') {
$element['value']['#default_value'] = new DrupalDateTime($values[$user_id]);
}
}
else {
var_dump($type);
var_dump($values[$user_id]);
var_dump($element);
}
}
}