diff --git a/docroot/modules/custom/va_gov_content_release/src/Form/NextGitForm.php b/docroot/modules/custom/va_gov_content_release/src/Form/NextGitForm.php index d4642c6c31..aa577c7363 100644 --- a/docroot/modules/custom/va_gov_content_release/src/Form/NextGitForm.php +++ b/docroot/modules/custom/va_gov_content_release/src/Form/NextGitForm.php @@ -5,8 +5,6 @@ use Drupal\Core\Block\BlockManagerInterface; use Drupal\Core\Form\FormStateInterface; use Drupal\va_gov_build_trigger\Service\ReleaseStateManagerInterface; -use Drupal\va_gov_content_release\Frontend\Frontend; -use Drupal\va_gov_content_release\Frontend\FrontendInterface; use Drupal\va_gov_content_release\FrontendVersion\FrontendVersionInterface; use Drupal\va_gov_content_release\Reporter\ReporterInterface; use Drupal\va_gov_content_release\Request\RequestInterface; @@ -15,7 +13,7 @@ /** * A version of the form allowing selection of a Git branch, tag, or commit. */ -class NextGitForm extends BaseForm { +class NextGitForm extends GitForm { /** * The frontend version service. @@ -52,7 +50,7 @@ public function __construct( FrontendVersionInterface $frontendVersion, BlockManagerInterface $blockManager ) { - parent::__construct($request, $reporter, $releaseStateManager); + parent::__construct($request, $reporter, $releaseStateManager, $frontendVersion, $blockManager); $this->frontendVersion = $frontendVersion; $this->blockManager = $blockManager; } @@ -81,33 +79,12 @@ public static function create(ContainerInterface $container) { public function buildForm(array $form, FormStateInterface $form_state) { $form = parent::buildForm($form, $form_state); - $form['build_request']['actions']['#type'] = 'actions'; - $form['build_request']['actions']['submit'] = [ - '#type' => 'submit', - '#value' => $this->t('Release content'), - '#button_type' => 'primary', - ]; - - $form['description'] = [ - '#prefix' => '

', - '#markup' => $this->t('Release content to update the front end of this environment with the latest published content changes.'), - '#suffix' => '

', - '#weight' => -10, - ]; - - $form['build_request']['title'] = [ - '#type' => 'item', - '#prefix' => '

', - '#markup' => $this->t('Request a content release'), - '#suffix' => '

', - ]; - $form['build_request']['content_build_selection'] = [ - '#title' => $this->t('Which version of content-build would you like to use?'), + '#title' => $this->t('Which version of next-build would you like to use?'), '#type' => 'radios', '#options' => [ - 'default' => $this->t('Use default - the content-build version from the time this demo environment was created.'), - 'choose' => $this->t('Select a different content-build branch/pull request - for example, to see your content in a newer frontend design.'), + 'default' => $this->t('Use default - the next-build version from the time this demo environment was created.'), + 'choose' => $this->t('Select a different next-build branch/pull request - for example, to see your content in a newer frontend design.'), ], '#default_value' => 'default', ]; @@ -129,166 +106,7 @@ public function buildForm(array $form, FormStateInterface $form_state) { ], ]; - $form['build_request']['vets_website_selection'] = [ - '#title' => $this->t('Which version of vets-website would you like to use?'), - '#type' => 'radios', - '#options' => [ - 'default' => $this->t('Use default - the vets-website version from the time this demo environment was created.'), - 'choose' => $this->t('Select a different vets-website branch/pull request - for example, to see your content in a newer frontend design.'), - ], - '#default_value' => 'default', - ]; - - $form['build_request']['vets_website_git_ref'] = [ - '#type' => 'textfield', - '#title' => $this->t('Select branch/pull request'), - '#description' => $this->t('Start typing to select a branch for the vets-website version you want to use.'), - '#autocomplete_route_name' => 'va_gov_content_release.frontend_version_autocomplete', - '#autocomplete_route_parameters' => [ - 'frontend' => 'vets_website', - 'count' => 10, - ], - '#size' => 72, - '#maxlength' => 1024, - '#hidden' => TRUE, - '#states' => [ - 'visible' => [':input[name="vets_website_selection"]' => ['value' => 'choose']], - ], - ]; - - $form['content_release_status_block'] = $this->getContentReleaseStatusBlock(); - return $form; } - /** - * Get the rendered content release status block. - * - * @return array - * Block render array. - */ - protected function getContentReleaseStatusBlock() { - return $this->blockManager - ->createInstance('content_release_status_block', []) - ->build(); - } - - /** - * Submit the build trigger form. - * - * @param array $form - * Default form array structure. - * @param \Drupal\Core\Form\FormStateInterface $form_state - * Object containing current form state. - */ - public function submitForm(array &$form, FormStateInterface $form_state) { - $this->submitFormForFrontend(Frontend::ContentBuild, $form_state); - $this->submitFormForFrontend(Frontend::VetsWebsite, $form_state); - parent::submitForm($form, $form_state); - } - - /** - * Submit the form. - * - * @param \Drupal\va_gov_content_release\Frontend\FrontendInterface $frontend - * The frontend whose version we are managing. - * @param \Drupal\Core\Form\FormStateInterface $form_state - * Object containing current form state. - */ - protected function submitFormForFrontend(FrontendInterface $frontend, FormStateInterface $form_state) { - $selectionName = $frontend->getRawValue() . '_selection'; - if ($form_state->getValue($selectionName) === 'default') { - $this->resetFrontendVersion($frontend, $form_state); - } - else { - $this->setFrontendVersion($frontend, $form_state); - } - } - - /** - * {@inheritdoc} - */ - public function validateForm(array &$form, FormStateInterface $form_state) { - $this->validateFormForFrontend(Frontend::ContentBuild, $form_state); - $this->validateFormForFrontend(Frontend::VetsWebsite, $form_state); - } - - /** - * Validate the form. - * - * @param \Drupal\va_gov_content_release\Frontend\FrontendInterface $frontend - * The frontend whose version we are managing. - * @param \Drupal\Core\Form\FormStateInterface $form_state - * Object containing current form state. - */ - protected function validateFormForFrontend(FrontendInterface $frontend, FormStateInterface $form_state) { - $selectionName = $frontend->getRawValue() . '_selection'; - $gitRefName = $frontend->getRawValue() . '_git_ref'; - if ($form_state->getValue($selectionName) !== 'default') { - if (empty($this->getGitRef($frontend, $form_state))) { - $form_state->setErrorByName($gitRefName, $this->t('Invalid selection.')); - } - } - } - - /** - * Reset the frontend version. - * - * @param \Drupal\va_gov_content_release\Frontend\FrontendInterface $frontend - * The frontend whose version we are resetting. - * @param \Drupal\Core\Form\FormStateInterface $form_state - * Object containing current form state. - */ - public function resetFrontendVersion(FrontendInterface $frontend, FormStateInterface $form_state) { - if (!$this->isUnderTest($form_state)) { - $this->frontendVersion->resetVersion($frontend); - } - else { - $this->reporter->reportInfo($this->t('Reset :frontend version skipped; form is under test.', [ - ':frontend' => $frontend->getRawValue(), - ])); - } - } - - /** - * Set the frontend version according to the form. - * - * @param \Drupal\va_gov_content_release\Frontend\FrontendInterface $frontend - * The frontend whose version we are setting. - * @param \Drupal\Core\Form\FormStateInterface $form_state - * Object containing current form state. - */ - public function setFrontendVersion(FrontendInterface $frontend, FormStateInterface $form_state) { - if (!$this->isUnderTest($form_state)) { - $this->frontendVersion->setVersion($frontend, $this->getGitRef($frontend, $form_state)); - } - else { - $this->reporter->reportInfo($this->t('Set :frontend version skipped; form is under test.', [ - ':frontend' => $frontend->getRawValue(), - ])); - } - } - - /** - * Parse a git ref out of the `git_ref` field value. - * - * @param \Drupal\va_gov_content_release\Frontend\FrontendInterface $frontend - * The frontend whose version we are setting. - * @param \Drupal\Core\Form\FormStateInterface $form_state - * Object containing current form state. - * - * @return string - * A standalone git ref, or an empty string. - */ - public function getGitRef(FrontendInterface $frontend, FormStateInterface $form_state) : string { - // If they selected a specific git ref, use that. - $gitRefName = $frontend->getRawValue() . '_git_ref'; - $formValue = $form_state->getValue($gitRefName); - $result = ''; - if (preg_match("/.+\\s\\(([^\\)]+)\\)/", $formValue, $matches)) { - $result = $matches[1]; - } - return $result; - } - }