|
5 | 5 | use Drupal\Core\Session\AccountInterface; |
6 | 6 | use Drupal\Core\Url; |
7 | 7 | use Drupal\os2web_nemlogin\Service\AuthProviderService; |
| 8 | +use Drupal\webform\Entity\Webform; |
8 | 9 | use Symfony\Component\HttpFoundation\RedirectResponse; |
9 | 10 | use Symfony\Component\HttpKernel\KernelEvents; |
10 | 11 | use Symfony\Component\HttpKernel\Event\GetResponseEvent; |
@@ -56,12 +57,45 @@ public function redirectToNemlogin(GetResponseEvent $event) { |
56 | 57 | // This is necessary because this also gets called on |
57 | 58 | // webform sub-tabs such as "edit", "revisions", etc. This |
58 | 59 | // 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') { |
60 | 62 | return; |
61 | 63 | } |
62 | 64 |
|
63 | 65 | /** @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 | + |
65 | 99 | $webformNemidSettings = $webform->getThirdPartySetting('os2forms', 'os2forms_nemid'); |
66 | 100 |
|
67 | 101 | // Getting nemlogin_auto_redirect setting. |
|
0 commit comments