prepopulate-8.x-2.3/modules/og_prepopulate/og_prepopulate.module
modules/og_prepopulate/og_prepopulate.module
<?php
/**
* @file
* The module file for og_prepopulate.
*/
use Drupal\Core\Form\FormStateInterface;
/**
* Implements hook_field_widget_WIDGET_TYPE_form_alter() for og_complex.
*/
function og_prepopulate_field_widget_og_complex_form_alter(&$element, FormStateInterface $form_state, $context) {
// If this is a subsequent step of a multi-step form, the prepopulate values
// have done their work, and the user may have modified them: bail.
if ($form_state->isRebuilding()) {
return;
}
/** @var \Drupal\Core\Field\FieldItemList $field */
$field = $context['items'];
if (\Drupal::request()->query->has($field->getName())) {
$element['#after_build'][] = 'og_prepopulate_after_build';
}
// If a value is already assigned, then hide the og audience field.
elseif (!$field->isEmpty()) {
$element['#access'] = FALSE;
}
}
/**
* An #after_build function to set the values prepopulated in the request.
*/
function og_prepopulate_after_build($element) {
$field_name = reset($element['#parents']);
$entity_id = \Drupal::request()->query->get($field_name);
/** @var \Drupal\prepopulate\Populate $populate */
$populate = \Drupal::service('og_prepopulate.populator');
// This lets us use URLs like example.com/node/add/page?og_audience=1.
$populate->populateForm($element, ['target_id' => $entity_id]);
return $element;
}
