Skip to content
Snippets Groups Projects

Issue #3476539 Carry over destination in relationship type selection

1 file
+ 30
5
Compare changes
  • Side-by-side
  • Inline
@@ -16,6 +16,7 @@ use Drupal\group\Entity\Storage\GroupRelationshipTypeStorageInterface;
@@ -16,6 +16,7 @@ use Drupal\group\Entity\Storage\GroupRelationshipTypeStorageInterface;
use Drupal\group\Plugin\Group\Relation\GroupRelationTypeManagerInterface;
use Drupal\group\Plugin\Group\Relation\GroupRelationTypeManagerInterface;
use Symfony\Component\DependencyInjection\ContainerInterface;
use Symfony\Component\DependencyInjection\ContainerInterface;
use Symfony\Component\HttpFoundation\RedirectResponse;
use Symfony\Component\HttpFoundation\RedirectResponse;
 
use Symfony\Component\HttpFoundation\RequestStack;
/**
/**
* Returns responses for GroupRelationship routes.
* Returns responses for GroupRelationship routes.
@@ -57,6 +58,13 @@ class GroupRelationshipController extends ControllerBase {
@@ -57,6 +58,13 @@ class GroupRelationshipController extends ControllerBase {
*/
*/
protected $renderer;
protected $renderer;
 
/**
 
* The request stack.
 
*
 
* @var \Symfony\Component\HttpFoundation\RequestStack
 
*/
 
protected $requestStack;
 
/**
/**
* Constructs a new GroupRelationshipController.
* Constructs a new GroupRelationshipController.
*
*
@@ -70,13 +78,16 @@ class GroupRelationshipController extends ControllerBase {
@@ -70,13 +78,16 @@ class GroupRelationshipController extends ControllerBase {
* The group relation type manager.
* The group relation type manager.
* @param \Drupal\Core\Render\RendererInterface $renderer
* @param \Drupal\Core\Render\RendererInterface $renderer
* The renderer.
* The renderer.
 
* @param \Symfony\Component\HttpFoundation\RequestStack $request_stack
 
* The request stack.
*/
*/
public function __construct(PrivateTempStoreFactory $temp_store_factory, EntityTypeManagerInterface $entity_type_manager, EntityFormBuilderInterface $entity_form_builder, GroupRelationTypeManagerInterface $groupRelationTypeManager, RendererInterface $renderer) {
public function __construct(PrivateTempStoreFactory $temp_store_factory, EntityTypeManagerInterface $entity_type_manager, EntityFormBuilderInterface $entity_form_builder, GroupRelationTypeManagerInterface $groupRelationTypeManager, RendererInterface $renderer, RequestStack $request_stack) {
$this->privateTempStoreFactory = $temp_store_factory;
$this->privateTempStoreFactory = $temp_store_factory;
$this->entityTypeManager = $entity_type_manager;
$this->entityTypeManager = $entity_type_manager;
$this->entityFormBuilder = $entity_form_builder;
$this->entityFormBuilder = $entity_form_builder;
$this->groupRelationTypeManager = $groupRelationTypeManager;
$this->groupRelationTypeManager = $groupRelationTypeManager;
$this->renderer = $renderer;
$this->renderer = $renderer;
 
$this->requestStack = $request_stack;
}
}
/**
/**
@@ -89,6 +100,7 @@ class GroupRelationshipController extends ControllerBase {
@@ -89,6 +100,7 @@ class GroupRelationshipController extends ControllerBase {
$container->get('entity.form_builder'),
$container->get('entity.form_builder'),
$container->get('group_relation_type.manager'),
$container->get('group_relation_type.manager'),
$container->get('renderer'),
$container->get('renderer'),
 
$container->get('request_stack')
);
);
}
}
@@ -134,12 +146,20 @@ class GroupRelationshipController extends ControllerBase {
@@ -134,12 +146,20 @@ class GroupRelationshipController extends ControllerBase {
$this->renderer->addCacheableDependency($build, $access);
$this->renderer->addCacheableDependency($build, $access);
}
}
 
// Carry over the destination, if present. It commonly directs the user back
 
// to the Views listing page that they from via an action link.
 
$query = $this->requestStack->getCurrentRequest()->query;
 
$destination = $query->has('destination') ? $query->get('destination') : FALSE;
 
// Redirect if there's only one bundle available.
// Redirect if there's only one bundle available.
if (count($relationship_types) == 1) {
if (count($relationship_types) == 1) {
$route_params = [
$route_params = [
'group' => $group->id(),
'group' => $group->id(),
'plugin_id' => reset($relationship_types)->getPluginId(),
'plugin_id' => reset($relationship_types)->getPluginId(),
];
];
 
if ($destination) {
 
$route_params['destination'] = $destination;
 
}
$url = Url::fromRoute($form_route, $route_params, ['absolute' => TRUE]);
$url = Url::fromRoute($form_route, $route_params, ['absolute' => TRUE]);
return new RedirectResponse($url->toString());
return new RedirectResponse($url->toString());
}
}
@@ -149,13 +169,18 @@ class GroupRelationshipController extends ControllerBase {
@@ -149,13 +169,18 @@ class GroupRelationshipController extends ControllerBase {
$ui_text_provider = $this->groupRelationTypeManager->getUiTextProvider($relationship_type->getPluginId());
$ui_text_provider = $this->groupRelationTypeManager->getUiTextProvider($relationship_type->getPluginId());
$label = $ui_text_provider->getAddPageLabel($create_mode);
$label = $ui_text_provider->getAddPageLabel($create_mode);
 
$route_params = [
 
'group' => $group->id(),
 
'plugin_id' => $relationship_type->getPluginId(),
 
];
 
if ($destination) {
 
$route_params['destination'] = $destination;
 
}
 
$build['#bundles'][$relationship_type_id] = [
$build['#bundles'][$relationship_type_id] = [
'label' => $label,
'label' => $label,
'description' => $ui_text_provider->getAddPageDescription($create_mode),
'description' => $ui_text_provider->getAddPageDescription($create_mode),
'add_link' => Link::createFromRoute($label, $form_route, [
'add_link' => Link::createFromRoute($label, $form_route, $route_params),
'group' => $group->id(),
'plugin_id' => $relationship_type->getPluginId(),
]),
];
];
}
}
Loading