Same name and namespace in other branches
- 8.x-1.x entity_redirect.module \entity_redirect_submit() 1 comment
Submit function to handle the redirection per entity create/edit action.
1 call to entity_redirect_submit()
- entity_redirect_new in ./
entity_redirect.module - Submit function to handle the redirection per entity create/edit action.
1 string reference to 'entity_redirect_submit'
- entity_redirect_form_alter in ./
entity_redirect.module - Implements hook_form_alter().
File
-
./
entity_redirect.module, line 200
Code
function entity_redirect_submit($form, FormStateInterface $form_state) {
/** @var \Drupal\Core\Entity\EntityFormInterface $form_object */
$form_object = $form_state->getFormObject();
if (!is_a($form_object, '\\Drupal\\Core\\Entity\\EntityFormInterface')) {
return;
}
$entity = $form_object->getEntity();
if (is_a($entity, '\\Drupal\\Core\\Entity\\ContentEntityBase')) {
/** @var \Drupal\Core\Entity\ContentEntityBase $entity */
$entity_type = $entity->getEntityType();
if (!($bundle_type = $entity_type->getBundleEntityType())) {
return;
}
/** @var \Drupal\Core\Config\Entity\ConfigEntityBundleBase $bundle */
$bundle = \Drupal::entityTypeManager()->getStorage($bundle_type)
->load($entity->bundle());
if (!($options = $bundle->getThirdPartySetting('entity_redirect', 'redirect'))) {
return;
}
$user = \Drupal::currentUser();
if ($user->isAnonymous() && !empty($options['anonymous']['active'])) {
$settings = $options['anonymous'];
}
elseif (is_a($form_object, 'Drupal\\Core\\Entity\\ContentEntityDeleteForm')) {
if (empty($options['delete']['active'])) {
return;
}
$settings = $options['delete'];
}
elseif ($form_state->has('entity_redirect_new')) {
if (empty($options['add']['active'])) {
return;
}
$entity->save();
$settings = $options['add'];
}
else {
if (empty($options['edit']['active'])) {
return;
}
$settings = $options['edit'];
}
if ($settings['destination'] != 'default') {
// Remove the default destination parameter.
\Drupal::request()->query
->remove('destination');
}
switch ($settings['destination']) {
case 'add_form':
$route_provider = \Drupal::service('router.route_provider');
$routes = array_keys($route_provider->getRoutesByNames([
"{$entity_type->id()}.add",
"entity.{$entity_type->id()}.add_form",
]));
$form_state->setRedirect($routes[0], [
$bundle_type => $bundle->id(),
]);
break;
case 'edit_form':
$route_provider = \Drupal::service('router.route_provider');
$routes = array_keys($route_provider->getRoutesByNames([
"{$entity_type->id()}.edit",
"entity.{$entity_type->id()}.edit_form",
]));
$form_state->setRedirect($routes[0], [
$entity_type->id() => $entity->id(),
]);
break;
case 'created':
$form_state->setRedirect("entity.{$entity_type->id()}.canonical", [
$entity_type->id() => $entity->id(),
]);
break;
case 'url':
if (empty($settings['url'])) {
return;
}
$form_state->setRedirectUrl(Url::fromUri('internal:' . $settings['url']));
break;
case 'previous_page':
$http_referer = $form_state->getValue('http_referer');
$pos = strpos($http_referer, \Drupal::request()->getHost());
$referer_path = substr($http_referer, $pos + strlen(\Drupal::request()->getHost()));
$form_state->setRedirectUrl(Url::fromUri('internal:' . $referer_path));
break;
case 'layout_builder':
$form_state->setRedirectUrl(Url::fromUri('internal:' . $entity->toUrl()
->toString() . '/layout'));
break;
case 'external':
if (empty($settings['external'])) {
return;
}
$response = new TrustedRedirectResponse($settings['external']);
$form_state->setResponse($response);
}
}
}