Skip to content

Commit 1af523b

Browse files
committed
HKI-766-71354 webform automatic redirect form node
1 parent 1b2a224 commit 1af523b

File tree

1 file changed

+36
-2
lines changed

1 file changed

+36
-2
lines changed

modules/os2forms_nemid/src/EventSubscriber/NemloginRedirectSubscriber.php

Lines changed: 36 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
use Drupal\Core\Session\AccountInterface;
66
use Drupal\Core\Url;
77
use Drupal\os2web_nemlogin\Service\AuthProviderService;
8+
use Drupal\webform\Entity\Webform;
89
use Symfony\Component\HttpFoundation\RedirectResponse;
910
use Symfony\Component\HttpKernel\KernelEvents;
1011
use Symfony\Component\HttpKernel\Event\GetResponseEvent;
@@ -56,12 +57,45 @@ public function redirectToNemlogin(GetResponseEvent $event) {
5657
// This is necessary because this also gets called on
5758
// webform sub-tabs such as "edit", "revisions", etc. This
5859
// prevents those pages from redirected.
59-
if ($request->attributes->get('_route') !== 'entity.webform.canonical') {
60+
$route = $request->attributes->get('_route');
61+
if ($route !== 'entity.webform.canonical' && $route !== 'entity.node.canonical') {
6062
return;
6163
}
6264

6365
/** @var \Drupal\webform\WebformInterface $webform */
64-
$webform = $request->attributes->get('webform');
66+
$webform = NULL;
67+
68+
if ($route === 'entity.webform.canonical') {
69+
$webform = $request->attributes->get('webform');
70+
}
71+
else {
72+
/** @var \Drupal\Core\Entity\EntityFieldManagerInterface $entityFieldManager */
73+
$entityFieldManager = \Drupal::service('entity_field.manager');
74+
75+
$node = $request->attributes->get('node');
76+
$nodeType = $node->getType();
77+
78+
// Search if this node type is related with field of type 'webform'.
79+
$webformFieldMap = $entityFieldManager->getFieldMapByFieldType('webform');
80+
if (isset($webformFieldMap['node'])) {
81+
foreach ($webformFieldMap['node'] as $field_name => $field_meta) {
82+
// We found field of type 'webform' in this node, let's try fetching
83+
// the webform.
84+
if (in_array($nodeType, $field_meta['bundles'])) {
85+
if ($webformId = $node->get($field_name)->target_id) {
86+
$webform = Webform::load($webformId);
87+
break;
88+
}
89+
}
90+
}
91+
}
92+
}
93+
94+
// If we don't have any webform.
95+
if (!$webform) {
96+
return;
97+
}
98+
6599
$webformNemidSettings = $webform->getThirdPartySetting('os2forms', 'os2forms_nemid');
66100

67101
// Getting nemlogin_auto_redirect setting.

0 commit comments

Comments
 (0)