preview_site-1.1.2/tests/modules/preview_site_test/src/Plugin/PreviewSite/Deploy/TestDeploy.php

tests/modules/preview_site_test/src/Plugin/PreviewSite/Deploy/TestDeploy.php
<?php

namespace Drupal\preview_site_test\Plugin\PreviewSite\Deploy;

use Drupal\Core\File\FileSystemInterface;
use Drupal\Core\Form\FormStateInterface;
use Drupal\file\FileInterface;
use Drupal\preview_site\Deploy\DeployPluginBase;
use Drupal\preview_site\Entity\PreviewSiteBuildInterface;
use Symfony\Component\DependencyInjection\ContainerInterface;

/**
 * Defines a test deploy plugin.
 *
 * @PreviewSiteDeploy(
 *   id = "test",
 *   title = @Translation("Test"),
 *   description = @Translation("Test deploy plugin."),
 * )
 *
 * @codeCoverageIgnore
 */
class TestDeploy extends DeployPluginBase {

  const DECOMISSION_STEP = 'preview_site_test_deploy_decomission';
  const DELETE_STEP = 'preview_site_test_deploy_delete';

  /**
   * File system.
   *
   * @var \Drupal\Core\File\FileSystem
   */
  protected $fileSystem;

  /**
   * State.
   *
   * @var \Drupal\Core\State\StateInterface
   */
  protected $state;

  /**
   * {@inheritdoc}
   */
  public static function create(ContainerInterface $container, array $configuration, $plugin_id, $plugin_definition) {
    $instance = parent::create($container, $configuration, $plugin_id, $plugin_definition);
    $instance->fileSystem = $container->get('file_system');
    $instance->state = $container->get('state');
    return $instance;
  }

  /**
   * {@inheritdoc}
   */
  public function defaultConfiguration() {
    return ['prefix' => ''];
  }

  /**
   * {@inheritdoc}
   */
  public function buildConfigurationForm(array $form, FormStateInterface $form_state) {
    return [
      'prefix' => [
        '#type' => 'textfield',
        '#title' => $this->t('Prefix'),
        '#default_value' => $this->configuration['prefix'],
        '#required' => TRUE,
      ],
    ];
  }

  /**
   * {@inheritdoc}
   */
  public function submitConfigurationForm(array &$form, FormStateInterface $form_state) {
    $this->configuration['prefix'] = $form_state->getValue('prefix');
  }

  /**
   * {@inheritdoc}
   */
  public function deployArtifact(PreviewSiteBuildInterface $build, FileInterface $file): void {
    $destination = 'public://preview-site-test/' . $this->configuration['prefix'] . '/' . ltrim(parse_url($file->getFileUri(), PHP_URL_PATH) ?? '', '/');
    $directory = dirname($destination);
    $this->fileSystem->prepareDirectory($directory, FileSystemInterface::CREATE_DIRECTORY | FileSystemInterface::MODIFY_PERMISSIONS);
    $this->fileSystem->copy($file->getFileUri(), $destination, FileSystemInterface::EXISTS_REPLACE);
  }

  /**
   * {@inheritdoc}
   */
  public function completeDeployment(PreviewSiteBuildInterface $build): void {
    $file_uris = [];
    foreach ($build->get('artifacts') as $item) {
      if ($file = $item->entity) {
        assert($file instanceof FileInterface);
        $file_uris[] = $file->getFileUri();
      }
    }
    $this->state->set(sprintf('preview_site_build_files:%s', $build->uuid()), $file_uris);
    $this->state->set(sprintf('preview_site_build_paths:%s', $build->uuid()), array_column($build->get('paths')->getValue(), 'value'));
    parent::completeDeployment($build);
  }

  /**
   * {@inheritdoc}
   */
  public function getDeploymentBaseUri(PreviewSiteBuildInterface $build): ?string {
    return sprintf('https://example.com/%s/', $this->configuration['prefix']);
  }

  /**
   * {@inheritdoc}
   */
  public function decommissionPreviewSiteBuild(PreviewSiteBuildInterface $build): void {
    parent::decommissionPreviewSiteBuild($build);
    $this->state->set(self::DECOMISSION_STEP, TRUE);
  }

  /**
   * {@inheritdoc}
   */
  public function deletePreviewSiteBuild(PreviewSiteBuildInterface $build): void {
    parent::deletePreviewSiteBuild($build);
    $this->state->set(self::DELETE_STEP, TRUE);
  }

  /**
   * {@inheritdoc}
   */
  public function alterUrlToDeployedItem(string $url, PreviewSiteBuildInterface $build): string {
    return $this->getDeploymentBaseUri($build) . $url;
  }

  /**
   * {@inheritdoc}
   */
  public function deployFilePath(PreviewSiteBuildInterface $build, string $path): void {
    $destination = 'public://preview-site-test/' . $this->configuration['prefix'] . '/' . ltrim($path ?? '', '/');
    $directory = dirname($destination);
    $this->fileSystem->prepareDirectory($directory, FileSystemInterface::CREATE_DIRECTORY | FileSystemInterface::MODIFY_PERMISSIONS);
    $this->fileSystem->copy($path, $destination, FileSystemInterface::EXISTS_REPLACE);
  }

}

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

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