X-Git-Url: https://yaffs.net/gitweb/?a=blobdiff_plain;f=web%2Fmodules%2Fcontrib%2Fredirect%2Fmodules%2Fredirect_domain%2Fsrc%2FForm%2FRedirectDomainForm.php;fp=web%2Fmodules%2Fcontrib%2Fredirect%2Fmodules%2Fredirect_domain%2Fsrc%2FForm%2FRedirectDomainForm.php;h=ec7b20f696904927bfa815472cd6e729e1d1f340;hb=a2bd1bf0c2c1f1a17d188f4dc0726a45494cefae;hp=0000000000000000000000000000000000000000;hpb=57c063afa3f66b07c4bbddc2d6129a96d90f0aad;p=yaffs-website diff --git a/web/modules/contrib/redirect/modules/redirect_domain/src/Form/RedirectDomainForm.php b/web/modules/contrib/redirect/modules/redirect_domain/src/Form/RedirectDomainForm.php new file mode 100644 index 000000000..ec7b20f69 --- /dev/null +++ b/web/modules/contrib/redirect/modules/redirect_domain/src/Form/RedirectDomainForm.php @@ -0,0 +1,165 @@ +has('maximum_domains')) { + $form_state->set('maximum_domains', 1); + } + + $form['redirects'] = [ + '#type' => 'table', + '#tree' => TRUE, + '#header' => [ + $this->t('From domain'), + $this->t('Sub path'), + $this->t('Destination') + ], + '#prefix' => '
', + '#suffix' => '
', + ]; + + $rows = []; + // Obtain domain redirects from configuration. + if ($domain_redirects = $this->config('redirect_domain.domains')->get('domain_redirects')) { + foreach ($domain_redirects as $key => $value) { + foreach ($value as $item) { + $form['redirects'][] = [ + 'from' => [ + '#type' => 'textfield', + '#value' => str_replace(':','.',$key), + ], + 'sub_path' => [ + '#type' => 'textfield', + '#value' => $item['sub_path'], + ], + 'destination' => [ + '#type' => 'textfield', + '#value' => $item['destination'], + ], + ]; + } + } + } + + // Fields for the new domain redirects. + for ($i = 0; $i < $form_state->get('maximum_domains'); $i++) { + $form['redirects'][] = [ + 'from' => [ + '#type' => 'textfield', + ], + 'sub_path' => [ + '#type' => 'textfield', + '#value' => '/', + ], + 'destination' => [ + '#type' => 'textfield', + ], + ]; + } + + $form['add'] = [ + '#type' => 'submit', + '#value' => $this->t('Add another'), + '#submit' => ['::addAnotherSubmit'], + '#ajax' => [ + 'callback' => '::ajaxAddAnother', + 'wrapper' => 'redirect-domain-wrapper', + ], + ]; + $form['submit'] = [ + '#type' => 'submit', + '#button_type' => 'primary', + '#value' => $this->t('Save'), + ]; + return $form; + } + + /** + * Ajax callback for adding another domain redirect. + * + * @param array $form + * The form structure. + * @param \Drupal\Core\Form\FormStateInterface $form_state + * The form state. + * + * @return array + * The new domain redirect form part. + */ + public function ajaxAddAnother(array $form, FormStateInterface $form_state) { + return $form['redirects']; + } + + /** + * Submit callback for adding a new domain field. + */ + public function addAnotherSubmit(array $form, FormStateInterface $form_state) { + $form_state->set('maximum_domains', $form_state->get('maximum_domains') + 1); + $form_state->setRebuild(TRUE); + } + + /** + * {@inheritdoc} + */ + public function validateForm(array &$form, FormStateInterface $form_state) { + parent::validateForm($form, $form_state); + if ($redirects = $form_state->getValue('redirects')) { + foreach ($redirects as $redirect) { + if (strpos($redirect['from'], '://') !== FALSE) { + $form_state->setErrorByName('redirects', t('No protocol should be included in the redirect domain.')); + } + } + } + } + + /** + * {@inheritdoc} + */ + public function submitForm(array &$form, FormStateInterface $form_state) { + $domain_redirects = []; + $domain_config = $this->config('redirect_domain.domains'); + + if ($redirects = $form_state->getValue('redirects')) { + foreach ($redirects as $redirect) { + if (!empty($redirect['from']) && !empty($redirect['destination'])) { + // Replace '.' with ':' for an eligible key. + $redirect['from'] = str_replace('.', ':', $redirect['from']); + $domain_redirects[$redirect['from']][] = [ + 'sub_path' => '/' . ltrim($redirect['sub_path'], '/'), + 'destination' => $redirect['destination'] + ]; + } + } + } + $domain_config->set('domain_redirects', $domain_redirects); + $domain_config->save(); + drupal_set_message(t('The domain redirects have been saved.')); + } +}