From a2430e40222b4d1c302694ebc4166c66054100c1 Mon Sep 17 00:00:00 2001 From: endless_wander <git@users.noreply.drupalcode.org> Date: Thu, 19 Jan 2023 18:07:18 -0700 Subject: [PATCH] Issue #3332196 by endless_wander, owenbush: Add ability to choose registration form redirect from settings --- ..._events_registration.registrant.config.yml | 2 ++ .../recurring_events_registration.schema.yml | 6 ++++ .../recurring_events_registration.install | 10 +++++++ .../src/Form/RegistrantForm.php | 23 ++++++++++++++- .../src/Form/RegistrantSettingsForm.php | 28 +++++++++++++++++++ 5 files changed, 68 insertions(+), 1 deletion(-) 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 7be14970..9c2befa1 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 10022f2a..4382c197 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 bd92862b..e950bff7 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 2a777c48..3a12cf05 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 113aa217..c493770f 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'), -- GitLab