diff --git a/modules/recurring_events_registration/config/install/recurring_events_registration.registrant.config.yml b/modules/recurring_events_registration/config/install/recurring_events_registration.registrant.config.yml index 7be14970cc0aeb39e47a3ef9c37c65c7949fa3b2..9c2befa1889720cf9d005d63e168c29ddb345c20 100644 --- a/modules/recurring_events_registration/config/install/recurring_events_registration.registrant.config.yml +++ b/modules/recurring_events_registration/config/install/recurring_events_registration.registrant.config.yml @@ -1,4 +1,6 @@ show_capacity: true +insert_redirect_choice: current +insert_redirect_other: '' use_admin_theme: false limit: 10 date_format: 'F jS, Y h:iA' diff --git a/modules/recurring_events_registration/config/schema/recurring_events_registration.schema.yml b/modules/recurring_events_registration/config/schema/recurring_events_registration.schema.yml index 10022f2ac8c57110223ad0a8e1c0465f64e6433b..4382c197d7881c7d2a0b943203714154e58f8a18 100644 --- a/modules/recurring_events_registration/config/schema/recurring_events_registration.schema.yml +++ b/modules/recurring_events_registration/config/schema/recurring_events_registration.schema.yml @@ -5,6 +5,12 @@ recurring_events_registration.registrant.config: show_capacity: type: boolean label: 'Whether to display the remaining capacity for an event during registration' + insert_redirect_choice: + type: radios + label: 'Choose where registrant form redirects' + insert_redirect_other: + type: url + label: 'Type custom URL here' use_admin_theme: type: boolean label: 'Use the administration theme when managing registrations' diff --git a/modules/recurring_events_registration/recurring_events_registration.install b/modules/recurring_events_registration/recurring_events_registration.install index bd92862b8df37f119605d80447fb8527e5dc0421..e950bff77b0fe3dd7fff605c83f16cc4888300bf 100644 --- a/modules/recurring_events_registration/recurring_events_registration.install +++ b/modules/recurring_events_registration/recurring_events_registration.install @@ -514,3 +514,13 @@ function recurring_events_registration_update_8010() { $config->set('use_admin_theme', FALSE); $config->save(); } + +/** + * Set the default redirection after registration. + */ +function recurring_events_registration_update_8011() { + $config = \Drupal::configFactory()->getEditable('recurring_events_registration.registrant.config'); + $config->set('insert_redirect_choice', 'current'); + $config->set('insert_redirect_other', ''); + $config->save(); +} diff --git a/modules/recurring_events_registration/src/Form/RegistrantForm.php b/modules/recurring_events_registration/src/Form/RegistrantForm.php index 2a777c48965990f91b84d1bfb4a64c69e7970533..3a12cf0591e6a8b03d401fb21a0fa9ff99d3a79e 100644 --- a/modules/recurring_events_registration/src/Form/RegistrantForm.php +++ b/modules/recurring_events_registration/src/Form/RegistrantForm.php @@ -20,6 +20,7 @@ use Drupal\Component\Datetime\TimeInterface; use Drupal\Core\Entity\EntityTypeBundleInfoInterface; use Drupal\content_moderation\ModerationInformation; use Drupal\Component\Render\FormattableMarkup; +use Drupal\Core\Routing\TrustedRedirectResponse; use Drupal\recurring_events_registration\NotificationService; /** @@ -546,7 +547,27 @@ class RegistrantForm extends ContentEntityForm { $this->messenger->addMessage(new FormattableMarkup($this->notificationService->parseTokenizedString($message), [])); } - $form_state->setRedirectUrl(Url::fromRoute('<current>')); + $redirect_choice = $this->config('recurring_events_registration.registrant.config')->get('insert_redirect_choice'); + switch ($redirect_choice) { + + case 'instance': + $form_state->setRedirect('entity.eventinstance.canonical', ['eventinstance' => $event_instance->id()]); + break; + + case 'series': + $form_state->setRedirect('entity.eventseries.canonical', ['eventseries' => $event_series->id()]); + break; + + case 'other': + $url = $this->config('recurring_events_registration.registrant.config')->get('insert_redirect_other'); + $response = new TrustedRedirectResponse(Url::fromUri($url)->toString()); + $form_state->setResponse($response); + break; + + default: + $form_state->setRedirectUrl(Url::fromRoute('<current>')); + break; + } // @todo Remove when https://www.drupal.org/node/3173241 drops. if ($this->moderationInformation) { diff --git a/modules/recurring_events_registration/src/Form/RegistrantSettingsForm.php b/modules/recurring_events_registration/src/Form/RegistrantSettingsForm.php index 113aa2173fca1f6fe6fcb996fc9823c488738c75..c493770fa3466503a41300148681f95daf3a575d 100644 --- a/modules/recurring_events_registration/src/Form/RegistrantSettingsForm.php +++ b/modules/recurring_events_registration/src/Form/RegistrantSettingsForm.php @@ -111,6 +111,8 @@ class RegistrantSettingsForm extends ConfigFormBase { public function submitForm(array &$form, FormStateInterface $form_state) { $config = $this->config('recurring_events_registration.registrant.config') ->set('show_capacity', $form_state->getValue('show_capacity')) + ->set('insert_redirect_choice', $form_state->getValue('insert_redirect_choice')) + ->set('insert_redirect_other', $form_state->getValue('insert_redirect_other')) ->set('use_admin_theme', $form_state->getValue('use_admin_theme')) ->set('limit', $form_state->getValue('limit')) ->set('date_format', $form_state->getValue('date_format')) @@ -172,6 +174,32 @@ class RegistrantSettingsForm extends ConfigFormBase { '#default_value' => $config->get('show_capacity'), ]; + $form['process']['insert_redirect_choice'] = [ + '#type' => 'radios', + '#title' => $this->t('Choose where registrant form redirects'), + '#default_value' => $config->get('insert_redirect_choice'), + '#options' => [ + 'current' => $this->t('Current page where form appears'), + 'instance' => $this->t('Event instance page'), + 'series' => $this->t('Event series page'), + 'other' => $this->t('Custom URL'), + ], + ]; + + $form['process']['insert_redirect_other'] = [ + '#type' => 'url', + '#title' => $this->t('Type custom URL here'), + '#default_value' => $config->get('insert_redirect_other'), + '#states' => [ + 'visible' => [ + ':input[name="insert_redirect_choice"]' => ['value' => 'other'], + ], + 'required' => [ + ':input[name="insert_redirect_choice"]' => ['value' => 'other'], + ], + ], + ]; + $form['display'] = [ '#type' => 'details', '#title' => $this->t('Registrant Display'),