Commit b20c2bec authored by Adam Shepherd's avatar Adam Shepherd
Browse files

Issue #3272683 by AdamPS: Policy importing GUI

parent 0a9744de
Loading
Loading
Loading
Loading
+14 −0
Original line number Diff line number Diff line
@@ -42,4 +42,18 @@ class EmailBuilder extends Plugin {
   */
  public $common_adjusters = [];

  /**
   * Human-readable name of config to import.
   *
   * @var string
   */
  public $import = '';

  /**
   * Human-readable warning for importing.
   *
   * @var string
   */
  public $import_warning = '';

}
+118 −0
Original line number Diff line number Diff line
@@ -3,8 +3,11 @@
namespace Drupal\symfony_mailer\Controller;

use Drupal\Core\Controller\ControllerBase;
use Drupal\Core\Url;
use Drupal\symfony_mailer\Entity\MailerPolicy;
use Drupal\symfony_mailer\MailerTransportInterface;
use Drupal\symfony_mailer\Processor\EmailBuilderManagerInterface;
use Symfony\Component\DependencyInjection\ContainerInterface;
use Symfony\Component\HttpFoundation\Request;

/**
@@ -12,6 +15,121 @@ use Symfony\Component\HttpFoundation\Request;
 */
class SymfonyMailerController extends ControllerBase {

  /**
   * The email builder manager.
   *
   * @var \Drupal\symfony_mailer\Processor\EmailBuilderManagerInterface
   */
  protected $builderManager;

  /**
   * Constructs the MailerCommands object.
   *
   * @param \Drupal\symfony_mailer\Processor\EmailBuilderManagerInterface $email_builder_manager
   *   The email builder manager.
   */
  public function __construct(EmailBuilderManagerInterface $email_builder_manager) {
    $this->builderManager = $email_builder_manager;
  }

  /**
   * {@inheritdoc}
   */
  public static function create(ContainerInterface $container) {
    return new static(
      $container->get('plugin.manager.email_builder')
    );
  }

  /**
   * Returns a page about the config import status.
   *
   * @return array
   *   Render array.
   */
  public function importStatus() {
    $build = [
      '#type' => 'table',
      '#header' => [
        'name' => $this->t('Name'),
        'state_name' => $this->t('State'),
        'warning' => $this->t('Warning'),
        'operations' => $this->t('Operations'),
      ],
      //'#title' => $this->getTitle(),
      '#rows' => $this->builderManager->getImportInfo(),
      '#empty' => $this->t('There is no config to import.'),
    ];

    foreach ($build['#rows'] as $id => &$row) {
      $state = $row['state'];
      unset($row['state']);

      $operations['import'] = [
        'title' => ($state == EmailBuilderManagerInterface::IMPORT_COMPLETE) ? $this->t('Re-import') : $this->t('Import'),
        'url' => Url::fromRoute('symfony_mailer.import.import', ['id' => $id]),
      ];

      if ($state == EmailBuilderManagerInterface::IMPORT_READY) {
        $operations['skip'] = [
          'title' => $this->t('Skip'),
          'url' => Url::fromRoute('symfony_mailer.import.skip', ['id' => $id]),
        ];
      }

      $row['operations']['data'] = [
        '#type' => 'operations',
        '#links' => $operations,
      ];
    }

    return $build;
  }

  /**
   * Imports all config not yet imported.
   *
   * @return \Symfony\Component\HttpFoundation\RedirectResponse
   *   A redirect to the import status page.
   */
  public function importAll() {
    $this->builderManager->importAll();
    $this->messenger()->addStatus($this->t('Imported all configuration'));
    return $this->redirect('symfony_mailer.import.status');
  }

  /**
   * Imports config for the specified id.
   *
   * @param string $id
   *   The ID.
   *
   * @return \Symfony\Component\HttpFoundation\RedirectResponse
   *   A redirect to the import status page.
   */
  public function import(string $id) {
    $this->builderManager->import($id);
    $label = $this->builderManager->getDefinition($id)['label'];
    $this->messenger()->addStatus($this->t('Imported configuration for %label.', ['%label' => $label]));
    return $this->redirect('symfony_mailer.import.status');
  }

  /**
   * Skips importing config for the specified id.
   *
   * @param string $id
   *   The ID.
   *
   * @return \Symfony\Component\HttpFoundation\RedirectResponse
   *   A redirect to the import status page.
   */
  public function skip(string $id) {
    $this->builderManager->setImportState($id, EmailBuilderManagerInterface::IMPORT_SKIPPED);
    $label = $this->builderManager->getDefinition($id)['label'];
    $this->messenger()->addStatus($this->t('Skipped importing configuration for %label.', ['%label' => $label]));
    return $this->redirect('symfony_mailer.import.status');
  }

  /**
   * Sets the transport as the default.
   *
+6 −0
Original line number Diff line number Diff line
@@ -3,3 +3,9 @@ symfony_mailer.mailer_policy.add:
  title: 'Add policy'
  appears_on:
    - entity.mailer_policy.collection

symfony_mailer.import.all:
  route_name: symfony_mailer.import.all
  title: 'Import all'
  appears_on:
    - symfony_mailer.import.status
+10 −4
Original line number Diff line number Diff line
entity.mailer_policy.collection:
  title: Policy
  description: 'Listing of Mailer policy.'
  base_route: entity.mailer_policy.collection
  route_name: entity.mailer_policy.collection

symfony_mailer.mailer_transport.collection:
  title: Transports
  description: 'Listing of Mailer transports.'
  base_route: entity.mailer_policy.collection
  route_name: entity.mailer_transport.collection

entity.mailer_policy.collection:
  title: Policy
  description: 'Listing of Mailer policy.'
symfony_mailer.import.status:
  title: Import
  description: 'Import configuration.'
  base_route: entity.mailer_policy.collection
  route_name: entity.mailer_policy.collection
  route_name: symfony_mailer.import.status

entity.mailer_policy.edit_form:
  title: Edit
+31 −0
Original line number Diff line number Diff line
@@ -76,3 +76,34 @@ entity.mailer_policy.delete_form:
  requirements:
    _entity_access: 'mailer_policy.delete'

symfony_mailer.import.status:
  path: '/admin/config/system/mailer/import'
  defaults:
    _controller: '\Drupal\symfony_mailer\Controller\SymfonyMailerController::importStatus'
    _title: 'Import configuration'
  requirements:
    _permission: 'administer mailer'

symfony_mailer.import.all:
  path: '/admin/config/system/mailer/import-all'
  defaults:
    _controller: '\Drupal\symfony_mailer\Controller\SymfonyMailerController::importAll'
    _title: 'Import all'
  requirements:
    _permission: 'administer mailer'

symfony_mailer.import.import:
  path: '/admin/config/system/mailer/import/{id}'
  defaults:
    _controller: '\Drupal\symfony_mailer\Controller\SymfonyMailerController::import'
    _title: 'Import'
  requirements:
    _permission: 'administer mailer'

symfony_mailer.import.skip:
  path: '/admin/config/system/mailer/import/{id}/skip'
  defaults:
    _controller: '\Drupal\symfony_mailer\Controller\SymfonyMailerController::skip'
    _title: 'Skip'
  requirements:
    _permission: 'administer mailer'