acquia_vwo-1.0.x-dev/src/Form/ExtractIDForm.php

src/Form/ExtractIDForm.php
<?php

namespace Drupal\acquia_vwo\Form;

use Drupal\Core\Form\ConfigFormBase;
use Drupal\Core\Form\FormStateInterface;

/**
 * Defines the Extract ID Form.
 */
class ExtractIDForm extends ConfigFormBase {

  /**
   * {@inheritdoc}
   */
  public function getFormId() {
    return 'acquia_vwo_settings_vwoid';
  }

  /**
   * {@inheritdoc}
   */
  public function buildForm(array $form, FormStateInterface $form_state) {
    $form = parent::buildForm($form, $form_state);

    $h[] = $this->t('Your VWO Account ID can be extracted from the "VWO Smart Code" available from the VWO site.');
    $hl[] = $this->t('Log into your VWO account.');
    $hl[] = $this->t('Locate the <em><strong>Settings</strong></em> menu down the left side of the site.');
    $hl[] = $this->t('Click on <em><strong>Smart Code</strong></em> located along the top tabs.');
    $hl[] = $this->t('Copy and paste the <em><strong>VWO Smart Code</strong></em> contents into the text box below.');
    $h[] = $this->t('This can be found by following these simple directions:') . '<ul><li>' . implode('</li><li>', $hl) . '</li></ul>';
    $form['help'] = [
      '#markup' => '<p>' . implode('</p><p>', $h) . '</p>',
    ];

    $form['current_id'] = [
      '#type' => 'textfield',
      '#title' => $this->t('Current Account ID'),
      '#disabled' => TRUE,
      '#config_target' => 'acquia_vwo.settings:id',
      '#size' => 15,
    ];

    $form['parse_area'] = [
      '#type' => 'textarea',
      '#title' => $this->t('VWO Smart Code'),
      '#description' => $this->t('Paste the full VWO Smart Code and submit the form to extract the ID.'),
      '#rows' => '15',
    ];

    $form['actions'] = [
      '#type' => 'actions',
      'extract' => [
        '#type' => 'submit',
        '#value' => $this->t('Extract Account ID from pasted VWO Smart Code'),
        '#button_type' => 'primary',
      ],
    ];

    return $form;
  }

  /**
   * {@inheritdoc}
   */
  public function validateForm(array &$form, FormStateInterface $form_state) {
    $pasted_code = $form_state->getValue('parse_area');

    // Synchronous version of code.
    if (preg_match('/var\s*_vis_opt_account_id\s*=\s*(\d+);/', $pasted_code, $matches)) {
      $form_state->set('parsed_id', $matches[1]);
    }

    // Asynchronous version of code.
    elseif (preg_match('/var\s*account_id\s*=\s*(\d+);/', $pasted_code, $matches)) {
      $form_state->set('parsed_id', $matches[1]);
    }

    // Failure.
    else {
      $form_state->setErrorByName(
        'parse_area',
        $this->t('Unable to locate Account ID in pasted code.')
      );
    }
  }

  /**
   * {@inheritdoc}
   */
  public function submitForm(array &$form, FormStateInterface $form_state) {
    // Grab the editable configuration.
    $config = $this->config('acquia_vwo.settings');

    // Set the parsed value.
    $config->set('id', $form_state->get('parsed_id'));

    // Commit saved configuration.
    $config->save();

    // Redirect back to main settings page.
    $form_state->setRedirect('acquia_vwo.settings');

    $this->messenger()
      ->addStatus($this->t('Saved Account ID as @id', ['@id' => $form_state->get('parsed_id')]));
  }

  /**
   * {@inheritdoc}
   */
  protected function getEditableConfigNames() {
    return [
      'acquia_vwo.settings',
    ];
  }

}

Главная | Обратная связь

drupal hosting | друпал хостинг | it patrol .inc