Skip to content

Commit

Permalink
WIP: FEATURE: Site configuration presets
Browse files Browse the repository at this point in the history
Resolves: #4582
  • Loading branch information
bwaidelich committed Nov 12, 2023
1 parent 1801fbb commit 7a220de
Show file tree
Hide file tree
Showing 15 changed files with 95 additions and 53 deletions.
24 changes: 21 additions & 3 deletions Neos.Neos/Classes/Domain/Model/Site.php
Expand Up @@ -17,8 +17,10 @@
use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\Common\Collections\Collection;
use Doctrine\ORM\Mapping as ORM;
use Neos\ContentRepositoryRegistry\Exception\InvalidConfigurationException;
use Neos\Flow\Annotations as Flow;
use Neos\Media\Domain\Model\AssetCollection;
use Neos\Utility\Arrays;

/**
* Domain model of a site
Expand All @@ -35,12 +37,19 @@ class Site
public const STATE_OFFLINE = 2;

/**
* @Flow\InjectConfiguration(path="sites")
* @var array
* @phpstan-var array<string,array<string,mixed>>
*/
#[Flow\InjectConfiguration(path: 'sites')]
protected $sitesConfiguration = [];

/**
* @var array
* @phpstan-var array<string,array<string,mixed>>
*/
#[Flow\InjectConfiguration(path: 'sitePresets')]
protected $sitePresetsConfiguration = [];

/**
* Name of the site
*
Expand Down Expand Up @@ -372,7 +381,16 @@ public function emitSiteChanged()

public function getConfiguration(): SiteConfiguration
{
// we DO NOT want recursive merge here
return SiteConfiguration::fromArray($this->sitesConfiguration[$this->nodeName] ?? $this->sitesConfiguration['*']);
$siteSettingsPath = array_key_exists($this->nodeName, $this->sitesConfiguration) ? $this->nodeName : '*';
$siteSettings = $this->sitesConfiguration[$siteSettingsPath];
if (isset($siteSettings['preset'])) {
is_string($siteSettings['preset']) || throw new \RuntimeException(sprintf('Invalid "preset" configuration for "Neos.Neos.sites.%s". Expected string, got: %s', $siteSettingsPath, get_debug_type($siteSettings['preset'])), 1699785648);
if (!isset($this->sitePresetsConfiguration[$siteSettings['preset']]) || !is_array($this->sitePresetsConfiguration[$siteSettings['preset']])) {

Check failure on line 388 in Neos.Neos/Classes/Domain/Model/Site.php

View workflow job for this annotation

GitHub Actions / PHP 8.2 Test linting-unit-functionaltests-mysql (deps: highest)

Negated boolean expression is always false.
throw new \RuntimeException(sprintf('Site settings "Neos.Neos.sites.%s" refer to a preset "%s", but no corresponding preset is configured', $siteSettingsPath, $siteSettings['preset']), 1699785736);
}
$siteSettings = Arrays::arrayMergeRecursiveOverrule($this->sitePresetsConfiguration[$siteSettings['preset']], $siteSettings);
unset($siteSettings['preset']);
}
return SiteConfiguration::fromArray($siteSettings);
}
}
18 changes: 18 additions & 0 deletions Neos.Neos/Configuration/Settings.Sites.yaml
@@ -0,0 +1,18 @@
# #
# Site specific settings #
# #
# This file contains settings specific to Neos Sites #

Neos:

Neos:
sitePresets:
'default':
uriPathSuffix: '.html'
contentRepository: default
contentDimensions:
resolver:
factoryClassName: Neos\Neos\FrontendRouting\DimensionResolution\Resolver\AutoUriPathResolverFactory
sites:
'*':
preset: 'default'
16 changes: 0 additions & 16 deletions Neos.Neos/Configuration/Settings.yaml
Expand Up @@ -11,9 +11,6 @@
Neos:

Neos:
contentDimensions:
resolution:
uriPathSegmentDelimiter: '_'

fusion:
# if set to true, Fusion is cached on a per-site basis.
Expand Down Expand Up @@ -54,19 +51,6 @@ Neos:
More information and contribution opportunities at https://www.neos.io
-->
routing:
# Setting this to true allows to use an empty uriSegment for default dimensions.
# The only limitation is that all segments must be unique across all dimenions.
supportEmptySegmentForDimensions: true

sites:
'*':
uriPathSuffix: '.html'
contentRepository: default
contentDimensions:
resolver:
factoryClassName: Neos\Neos\FrontendRouting\DimensionResolution\Resolver\AutoUriPathResolverFactory

nodeTypes:
groups:
general:
Expand Down
4 changes: 2 additions & 2 deletions Neos.Neos/Migrations/Code/Version20230801154834.php
Expand Up @@ -4,7 +4,7 @@


/**
* Replace defaultUriSuffix configuration with uriPathSuffix in default site configuration
* Replace defaultUriSuffix configuration with uriPathSuffix in default site preset configuration
*/
class Version20230801154834 extends AbstractMigration
{
Expand All @@ -16,6 +16,6 @@ public function getIdentifier(): string

public function up(): void
{
$this->moveSettingsPaths(['Neos', 'Flow', 'mvc', 'routes', 'Neos.Neos', 'variables', 'defaultUriSuffix'], ['Neos', 'Neos', 'sites', '*', 'uriPathSuffix']);
$this->moveSettingsPaths(['Neos', 'Flow', 'mvc', 'routes', 'Neos.Neos', 'variables', 'defaultUriSuffix'], ['Neos', 'Neos', 'sitePresets', 'default', 'uriPathSuffix']);
}
}
Expand Up @@ -59,8 +59,9 @@ Feature: Basic routing functionality (match & resolve document nodes in one dime
Neos:
Neos:
sites:
'*':
contentRepository: default
'node1':
preset: 'default'
uriPathSuffix: ''
contentDimensions:
resolver:
factoryClassName: Neos\Neos\FrontendRouting\DimensionResolution\Resolver\NoopResolverFactory
Expand Down
Expand Up @@ -74,8 +74,9 @@ Feature: Routing functionality with multiple content dimensions
Neos:
Neos:
sites:
'*':
contentRepository: default
'node1':
preset: default
uriPathSuffix: ''
contentDimensions:
defaultDimensionSpacePoint:
market: DE
Expand Down Expand Up @@ -114,8 +115,9 @@ Feature: Routing functionality with multiple content dimensions
Neos:
Neos:
sites:
'*':
contentRepository: default
'node1':
preset: default
uriPathSuffix: ''
contentDimensions:
defaultDimensionSpacePoint:
market: DE
Expand Down Expand Up @@ -173,8 +175,9 @@ Feature: Routing functionality with multiple content dimensions
Neos:
Neos:
sites:
'*':
contentRepository: default
'node1':
preset: default
uriPathSuffix: ''
contentDimensions:
resolver:
factoryClassName: Neos\Neos\FrontendRouting\DimensionResolution\Resolver\UriPathResolverFactory
Expand Down Expand Up @@ -242,8 +245,9 @@ Feature: Routing functionality with multiple content dimensions
Neos:
Neos:
sites:
'*':
contentRepository: default
'node1':
preset: default
uriPathSuffix: ''
contentDimensions:
resolver:
factoryClassName: Neos\Neos\FrontendRouting\DimensionResolution\Resolver\UriPathResolverFactory
Expand Down Expand Up @@ -309,8 +313,9 @@ Feature: Routing functionality with multiple content dimensions
Neos:
Neos:
sites:
'*':
contentRepository: default
'node1':
preset: default
uriPathSuffix: ''
contentDimensions:
resolver:
factoryClassName: Neos\Neos\FrontendRouting\DimensionResolution\Resolver\UriPathResolverFactory
Expand Down Expand Up @@ -373,8 +378,9 @@ Feature: Routing functionality with multiple content dimensions
Neos:
Neos:
sites:
'*':
contentRepository: default
'node1':
preset: default
uriPathSuffix: ''
contentDimensions:
resolver:
factoryClassName: Neos\Neos\FrontendRouting\DimensionResolution\Resolver\UriPathResolverFactory
Expand Down
Expand Up @@ -60,8 +60,9 @@ Feature: Routing behavior of removed, disabled and re-enabled nodes
Neos:
Neos:
sites:
'*':
contentRepository: default
'node1':
preset: default
uriPathSuffix: ''
contentDimensions:
resolver:
factoryClassName: Neos\Neos\FrontendRouting\DimensionResolution\Resolver\NoopResolverFactory
Expand Down
Expand Up @@ -66,8 +66,15 @@ Feature: Linking between multiple websites
Neos:
Neos:
sites:
'*':
contentRepository: default
'site-1':
preset: default
uriPathSuffix: ''
contentDimensions:
resolver:
factoryClassName: Neos\Neos\FrontendRouting\DimensionResolution\Resolver\NoopResolverFactory
'site-2':
preset: default
uriPathSuffix: ''
contentDimensions:
resolver:
factoryClassName: Neos\Neos\FrontendRouting\DimensionResolution\Resolver\NoopResolverFactory
Expand Down
Expand Up @@ -58,8 +58,9 @@ Feature: Route cache invalidation
Neos:
Neos:
sites:
'*':
contentRepository: default
'node1':
preset: default
uriPathSuffix: ''
contentDimensions:
resolver:
factoryClassName: Neos\Neos\FrontendRouting\DimensionResolution\Resolver\NoopResolverFactory
Expand Down
Expand Up @@ -88,8 +88,9 @@ Feature: Routing behavior of shortcut nodes
Neos:
Neos:
sites:
'*':
contentRepository: default
'node1':
preset: default
uriPathSuffix: ''
contentDimensions:
resolver:
factoryClassName: Neos\Neos\FrontendRouting\DimensionResolution\Resolver\NoopResolverFactory
Expand Down
Expand Up @@ -47,8 +47,9 @@ Feature: Tests for site node child documents. These are special in that they hav
Neos:
Neos:
sites:
'*':
contentRepository: default
'site':
preset: default
uriPathSuffix: ''
contentDimensions:
resolver:
factoryClassName: Neos\Neos\FrontendRouting\DimensionResolution\Resolver\NoopResolverFactory
Expand Down
5 changes: 3 additions & 2 deletions Neos.Neos/Tests/Behavior/Features/Fusion/ContentCase.feature
Expand Up @@ -50,8 +50,9 @@ Feature: Tests for the "Neos.Neos:ContentCase" Fusion prototype
Neos:
Neos:
sites:
'*':
contentRepository: default
'a':
preset: default
uriPathSuffix: ''
contentDimensions:
resolver:
factoryClassName: Neos\Neos\FrontendRouting\DimensionResolution\Resolver\NoopResolverFactory
Expand Down
Expand Up @@ -57,8 +57,9 @@ Feature: Tests for the "Neos.Neos:ContentCollection" Fusion prototype
Neos:
Neos:
sites:
'*':
contentRepository: default
'a':
preset: default
uriPathSuffix: ''
contentDimensions:
resolver:
factoryClassName: Neos\Neos\FrontendRouting\DimensionResolution\Resolver\NoopResolverFactory
Expand Down
5 changes: 3 additions & 2 deletions Neos.Neos/Tests/Behavior/Features/Fusion/ConvertUris.feature
Expand Up @@ -47,8 +47,9 @@ Feature: Tests for the "Neos.Neos:ConvertUris" Fusion prototype
Neos:
Neos:
sites:
'*':
contentRepository: default
'a':
preset: default
uriPathSuffix: ''
contentDimensions:
resolver:
factoryClassName: Neos\Neos\FrontendRouting\DimensionResolution\Resolver\NoopResolverFactory
Expand Down
5 changes: 3 additions & 2 deletions Neos.Neos/Tests/Behavior/Features/Fusion/Menu.feature
Expand Up @@ -72,8 +72,9 @@ Feature: Tests for the "Neos.Neos:Menu" and related Fusion prototypes
Neos:
Neos:
sites:
'*':
contentRepository: default
'a':
preset: default
uriPathSuffix: ''
contentDimensions:
resolver:
factoryClassName: Neos\Neos\FrontendRouting\DimensionResolution\Resolver\NoopResolverFactory
Expand Down

0 comments on commit 7a220de

Please sign in to comment.