Skip to content

#867 - Make preview a per site configuration #868

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 1 commit into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 9 additions & 5 deletions modules/next/config/schema/next.schema.yml
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,11 @@ next.next_site.*:
revalidate_secret:
type: string
label: 'Revalidate secret'
site_previewer:
type: string
label: 'Site previewer'
site_previewer_configuration:
type: next.site_previewer.configuration.[%parent.site_previewer]

next.next_entity_type_config.*:
type: config_entity
Expand Down Expand Up @@ -77,11 +82,6 @@ next.settings:
type: config_object
label: 'Next settings'
mapping:
site_previewer:
type: string
label: 'Site previewer'
site_previewer_configuration:
type: next.site_previewer.configuration.[%parent.site_previewer]
preview_url_generator:
type: string
label: 'Preview URL generator'
Expand All @@ -103,6 +103,10 @@ next.site_previewer.configuration.iframe:
type: string
label: 'Sync route skip pages'

next.site_previewer.configuration.redirect:
type: mapping
mapping: {}

next.preview_url_generator.configuration.simple_oauth:
type: mapping
mapping:
Expand Down
36 changes: 36 additions & 0 deletions modules/next/next.install
Original file line number Diff line number Diff line change
Expand Up @@ -104,3 +104,39 @@ function next_update_9106() {
$config->set('debug', FALSE)
->save();
}

/**
* Migrate global site previewer settings to site-level settings.
*/
function next_update_9107() {
// First, install the new fields for site previewer configuration.
$entity_definition_update = \Drupal::entityDefinitionUpdateManager();

$storage_definition = BaseFieldDefinition::create('string')
->setLabel(t('Site previewer'));
$entity_definition_update->installFieldStorageDefinition('site_previewer', 'next_site', 'next_site', $storage_definition);

$storage_definition = BaseFieldDefinition::create('map')
->setLabel(t('Site previewer configuration'));
$entity_definition_update->installFieldStorageDefinition('site_previewer_configuration', 'next_site', 'next_site', $storage_definition);

// Now migrate the global settings to site-level settings.
$config = \Drupal::configFactory()->get('next.settings');
$global_site_previewer = $config->get('site_previewer');
$global_site_previewer_configuration = $config->get('site_previewer_configuration') ?: [];

// Only migrate if there are global settings configured.
if ($global_site_previewer) {
/** @var \Drupal\next\Entity\NextSiteInterface[] $sites */
$sites = \Drupal::entityTypeManager()->getStorage('next_site')->loadMultiple();

foreach ($sites as $site) {
// Only set if the site doesn't already have a previewer configured.
if (!$site->getSitePreviewer()) {
$site->setSitePreviewer($global_site_previewer);
$site->setSitePreviewerConfiguration($global_site_previewer_configuration);
$site->save();
}
}
}
}
46 changes: 46 additions & 0 deletions modules/next/src/Entity/NextSite.php
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,8 @@
* "preview_secret",
* "revalidate_url",
* "revalidate_secret",
* "site_previewer",
* "site_previewer_configuration",
* },
* links = {
* "add-form" = "/admin/config/services/next/sites/add",
Expand Down Expand Up @@ -97,6 +99,20 @@ class NextSite extends ConfigEntityBase implements NextSiteInterface {
*/
protected $revalidate_secret;

/**
* The site previewer plugin ID.
*
* @var string
*/
protected $site_previewer;

/**
* The site previewer configuration.
*
* @var array
*/
protected $site_previewer_configuration;

/**
* {@inheritdoc}
*/
Expand Down Expand Up @@ -172,6 +188,36 @@ public function setRevalidateSecret(string $revalidate_secret): NextSiteInterfac
return $this;
}

/**
* {@inheritdoc}
*/
public function getSitePreviewer(): ?string {
return $this->site_previewer;
}

/**
* {@inheritdoc}
*/
public function setSitePreviewer(string $site_previewer): NextSiteInterface {
$this->set('site_previewer', $site_previewer);
return $this;
}

/**
* {@inheritdoc}
*/
public function getSitePreviewerConfiguration(): array {
return $this->site_previewer_configuration ?: [];
}

/**
* {@inheritdoc}
*/
public function setSitePreviewerConfiguration(array $site_previewer_configuration): NextSiteInterface {
$this->set('site_previewer_configuration', $site_previewer_configuration);
return $this;
}

/**
* {@inheritdoc}
*/
Expand Down
38 changes: 38 additions & 0 deletions modules/next/src/Entity/NextSiteInterface.php
Original file line number Diff line number Diff line change
Expand Up @@ -128,6 +128,44 @@ public function getRevalidateSecret(): ?string;
*/
public function setRevalidateSecret(string $revalidate_secret): self;

/**
* Returns the site_previewer for the next_site.
*
* @return string|null
* The site_previewer for the next_site.
*/
public function getSitePreviewer(): ?string;

/**
* Sets the site_previewer for the next_site.
*
* @param string $site_previewer
* The site_previewer.
*
* @return \Drupal\next\Entity\NextSiteInterface
* The next_site entity.
*/
public function setSitePreviewer(string $site_previewer): self;

/**
* Returns the site_previewer_configuration for the next_site.
*
* @return array
* The site_previewer_configuration for the next_site.
*/
public function getSitePreviewerConfiguration(): array;

/**
* Sets the site_previewer_configuration for the next_site.
*
* @param array $site_previewer_configuration
* The site_previewer_configuration.
*
* @return \Drupal\next\Entity\NextSiteInterface
* The next_site entity.
*/
public function setSitePreviewerConfiguration(array $site_previewer_configuration): self;

/**
* Returns the revalidate url for given path.
*
Expand Down
82 changes: 0 additions & 82 deletions modules/next/src/Form/NextSettingsForm.php
Original file line number Diff line number Diff line change
Expand Up @@ -6,23 +6,14 @@
use Drupal\Core\Form\FormStateInterface;
use Drupal\Core\Form\SubformState;
use Drupal\next\Plugin\ConfigurablePreviewUrlGeneratorInterface;
use Drupal\next\Plugin\ConfigurableSitePreviewerInterface;
use Drupal\next\Plugin\PreviewUrlGeneratorManagerInterface;
use Drupal\next\Plugin\SitePreviewerManagerInterface;
use Symfony\Component\DependencyInjection\ContainerInterface;

/**
* Provides the settings form for Next.
*/
class NextSettingsForm extends ConfigFormBase {

/**
* The site previewer manager.
*
* @var \Drupal\next\Plugin\SitePreviewerManagerInterface
*/
protected SitePreviewerManagerInterface $sitePreviewerManager;

/**
* The preview url generator manager.
*
Expand All @@ -36,7 +27,6 @@ class NextSettingsForm extends ConfigFormBase {
public static function create(ContainerInterface $container) {
$instance = parent::create($container);

$instance->sitePreviewerManager = $container->get('plugin.manager.next.site_previewer');
$instance->previewUrlGeneratorManager = $container->get('plugin.manager.next.preview_url_generator');

return $instance;
Expand Down Expand Up @@ -105,46 +95,6 @@ public function buildForm(array $form, FormStateInterface $form_state) {
}
}

$form['site_previewer_container'] = [
'#title' => $this->t('Site previewer'),
'#type' => 'details',
'#group' => 'settings',
];

$form['site_previewer_container']['site_previewer'] = [
'#title' => $this->t('Plugin'),
'#description' => $this->t('Select a plugin to use for the site preview.'),
'#type' => 'select',
'#options' => array_column($this->sitePreviewerManager->getDefinitions(), 'label', 'id'),
'#default_value' => $config->get('site_previewer'),
'#required' => TRUE,
'#limit_validation_errors' => [['site_previewer']],
'#submit' => ['::submitSitePreviewer'],
'#executes_submit_callback' => TRUE,
'#ajax' => [
'callback' => '::ajaxReplaceSitePreviewerSettingsForm',
'wrapper' => 'site-previewer-settings',
'method' => 'replace',
],
];

$form['site_previewer_container']['settings_container'] = [
'#type' => 'container',
'#prefix' => '<div id="site-previewer-settings">',
'#suffix' => '</div>',
];

if (($site_previewer_id = $form_state->getValue('site_previewer')) || ($site_previewer_id = $config->get('site_previewer'))) {
$site_previewer = $this->sitePreviewerManager->createInstance($site_previewer_id, $config->get('site_previewer_configuration'));
if ($site_previewer instanceof ConfigurableSitePreviewerInterface) {
$form['site_previewer_configuration'] = [
'#tree' => TRUE,
];
$subform_state = SubformState::createForSubform($form['site_previewer_configuration'], $form, $form_state);
$form['site_previewer_container']['settings_container']['site_previewer_configuration'] = $site_previewer->buildConfigurationForm($form['site_previewer_configuration'], $subform_state);
}
}

$form['development'] = [
'#title' => $this->t('Development'),
'#type' => 'details',
Expand All @@ -161,20 +111,6 @@ public function buildForm(array $form, FormStateInterface $form_state) {
return parent::buildForm($form, $form_state);
}

/**
* Handles submit call when site_previewer is selected.
*/
public function submitSitePreviewer(array $form, FormStateInterface $form_state) {
$form_state->setRebuild();
}

/**
* Handles switching the site_previewer selector.
*/
public function ajaxReplaceSitePreviewerSettingsForm($form, FormStateInterface $form_state) {
return $form['site_previewer_settings_container'];
}

/**
* Handles submit call when preview_url_generator is selected.
*/
Expand All @@ -195,14 +131,6 @@ public function ajaxReplacePreviewUrlGeneratorSettingsForm($form, FormStateInter
public function validateForm(array &$form, FormStateInterface $form_state) {
parent::validateForm($form, $form_state);

if ($site_previewer_id = $form_state->getValue('site_previewer')) {
$site_previewer = $this->sitePreviewerManager->createInstance($site_previewer_id);
if ($site_previewer instanceof ConfigurableSitePreviewerInterface) {
$subform_state = SubformState::createForSubform($form['site_previewer_configuration'], $form, $form_state);
$site_previewer->validateConfigurationForm($form, $subform_state);
}
}

if ($preview_url_generator_id = $form_state->getValue('preview_url_generator')) {
$preview_url_generator = $this->previewUrlGeneratorManager->createInstance($preview_url_generator_id);
if ($preview_url_generator instanceof ConfigurablePreviewUrlGeneratorInterface && isset($form['preview_url_generator_container']['settings_container'])) {
Expand All @@ -218,14 +146,6 @@ public function validateForm(array &$form, FormStateInterface $form_state) {
public function submitForm(array &$form, FormStateInterface $form_state) {
parent::submitForm($form, $form_state);

if ($site_previewer_id = $form_state->getValue('site_previewer')) {
$site_previewer = $this->sitePreviewerManager->createInstance($site_previewer_id);
if ($site_previewer instanceof ConfigurableSitePreviewerInterface) {
$subform_state = SubformState::createForSubform($form['site_previewer_configuration'], $form, $form_state);
$site_previewer->submitConfigurationForm($form, $subform_state);
}
}

if ($preview_url_generator_id = $form_state->getValue('preview_url_generator')) {
$preview_url_generator = $this->previewUrlGeneratorManager->createInstance($preview_url_generator_id);
if ($preview_url_generator instanceof ConfigurablePreviewUrlGeneratorInterface) {
Expand All @@ -235,8 +155,6 @@ public function submitForm(array &$form, FormStateInterface $form_state) {
}

$this->config('next.settings')
->set('site_previewer', $form_state->getValue('site_previewer'))
->set('site_previewer_configuration', $form_state->getValue('site_previewer_configuration'))
->set('preview_url_generator', $form_state->getValue('preview_url_generator'))
->set('preview_url_generator_configuration', $form_state->getValue('preview_url_generator_configuration'))
->set('debug', $form_state->getValue('debug'))
Expand Down
Loading