Skip to content

Commit

Permalink
Merge 874aa9b into 0343c4c
Browse files Browse the repository at this point in the history
  • Loading branch information
alexander-schranz committed Oct 14, 2021
2 parents 0343c4c + 874aa9b commit 48926cf
Show file tree
Hide file tree
Showing 25 changed files with 749 additions and 13 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,83 @@
<?php

declare(strict_types=1);

/*
* This file is part of Sulu.
*
* (c) Sulu GmbH
*
* This source file is subject to the MIT license that is bundled
* with this source code in the file LICENSE.
*/

namespace Sulu\Bundle\ContentBundle\Content\Application\ContentDataMapper\DataMapper;

use Sulu\Bundle\ContentBundle\Content\Domain\Model\DimensionContentInterface;
use Sulu\Bundle\ContentBundle\Content\Domain\Model\WebspaceInterface;
use Sulu\Component\Webspace\Manager\WebspaceManagerInterface;

class WebspaceDataMapper implements DataMapperInterface
{
/**
* @var WebspaceManagerInterface
*/
private $webspaceManager;

/**
* @var string|null
*/
private $defaultWebspaceKey;

public function __construct(WebspaceManagerInterface $webspaceManager)
{
$this->webspaceManager = $webspaceManager;
}

public function map(
DimensionContentInterface $unlocalizedDimensionContent,
DimensionContentInterface $localizedDimensionContent,
array $data
): void {
if (!$localizedDimensionContent instanceof WebspaceInterface) {
return;
}

$this->setWebspaceData($localizedDimensionContent, $data);
}

/**
* @param mixed[] $data
*/
private function setWebspaceData(WebspaceInterface $dimensionContent, array $data): void
{
// TODO allow to configure another webspace with `<tag name="sulu_content.default_main_webspace" value="example" />`
// on the template itself which will be injected with ["type" => ["template-key" => "webspace-key"]] into this service.
if (\array_key_exists('mainWebspace', $data)) {
$dimensionContent->setMainWebspace($data['mainWebspace']);
}

if (!$dimensionContent->getMainWebspace()) {
// if no main webspace is yet set a default webspace will be set
$dimensionContent->setMainWebspace($this->getDefaultWebspaceKey());
}

if (\array_key_exists('additionalWebspaces', $data)) {
$dimensionContent->setAdditionalWebspaces($data['additionalWebspaces'] ?: []);
}
}

private function getDefaultWebspaceKey(): ?string
{
if (!$this->defaultWebspaceKey) {
$webspaces = $this->webspaceManager->getWebspaceCollection()->getWebspaces();
$webspace = \reset($webspaces);

if ($webspace) {
$this->defaultWebspaceKey = $webspace->getKey();
}
}

return $this->defaultWebspaceKey;
}
}
38 changes: 38 additions & 0 deletions Content/Application/ContentMerger/Merger/WebspaceMerger.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
<?php

declare(strict_types=1);

/*
* This file is part of Sulu.
*
* (c) Sulu GmbH
*
* This source file is subject to the MIT license that is bundled
* with this source code in the file LICENSE.
*/

namespace Sulu\Bundle\ContentBundle\Content\Application\ContentMerger\Merger;

use Sulu\Bundle\ContentBundle\Content\Domain\Model\WebspaceInterface;

class WebspaceMerger implements MergerInterface
{
public function merge(object $targetObject, object $sourceObject): void
{
if (!$targetObject instanceof WebspaceInterface) {
return;
}

if (!$sourceObject instanceof WebspaceInterface) {
return;
}

if ($mainWebspace = $sourceObject->getMainWebspace()) {
$targetObject->setMainWebspace($mainWebspace);
}

if ($additionalWebspaces = $sourceObject->getAdditionalWebspaces()) {
$targetObject->setAdditionalWebspaces($additionalWebspaces);
}
}
}
31 changes: 31 additions & 0 deletions Content/Domain/Model/WebspaceInterface.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
<?php

declare(strict_types=1);

/*
* This file is part of Sulu.
*
* (c) Sulu GmbH
*
* This source file is subject to the MIT license that is bundled
* with this source code in the file LICENSE.
*/

namespace Sulu\Bundle\ContentBundle\Content\Domain\Model;

interface WebspaceInterface
{
public function getMainWebspace(): ?string;

public function setMainWebspace(?string $mainWebspace): void;

/**
* @return string[]
*/
public function getAdditionalWebspaces(): array;

/**
* @param string[] $additionalWebspaces
*/
public function setAdditionalWebspaces(array $additionalWebspaces): void;
}
63 changes: 63 additions & 0 deletions Content/Domain/Model/WebspaceTrait.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
<?php

declare(strict_types=1);

/*
* This file is part of Sulu.
*
* (c) Sulu GmbH
*
* This source file is subject to the MIT license that is bundled
* with this source code in the file LICENSE.
*/

namespace Sulu\Bundle\ContentBundle\Content\Domain\Model;

trait WebspaceTrait
{
/**
* @var string|null
*/
protected $mainWebspace;

/**
* @var string[]|null
*/
protected $additionalWebspaces;

public function getMainWebspace(): ?string
{
return $this->mainWebspace;
}

public function setMainWebspace(?string $mainWebspace): void
{
$this->mainWebspace = $mainWebspace;

if ($mainWebspace && !\in_array($mainWebspace, $this->additionalWebspaces ?: [], true)) {
// additional webspace always include also the main webspace to make query simpler
$this->additionalWebspaces = \array_merge($this->additionalWebspaces ?: [], [$mainWebspace]);
}
}

/**
* @return string[]
*/
public function getAdditionalWebspaces(): array
{
return $this->additionalWebspaces ?: [];
}

/**
* @param string[] $additionalWebspaces
*/
public function setAdditionalWebspaces(array $additionalWebspaces): void
{
if ($this->mainWebspace && !\in_array($this->mainWebspace, $additionalWebspaces, true)) {
// additional webspace always include also the main webspace to make query simpler
$additionalWebspaces[] = $this->mainWebspace;
}

$this->additionalWebspaces = $additionalWebspaces;
}
}
6 changes: 6 additions & 0 deletions Content/Infrastructure/Doctrine/MetadataLoader.php
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@
use Sulu\Bundle\ContentBundle\Content\Domain\Model\ExcerptInterface;
use Sulu\Bundle\ContentBundle\Content\Domain\Model\SeoInterface;
use Sulu\Bundle\ContentBundle\Content\Domain\Model\TemplateInterface;
use Sulu\Bundle\ContentBundle\Content\Domain\Model\WebspaceInterface;
use Sulu\Bundle\ContentBundle\Content\Domain\Model\WorkflowInterface;
use Sulu\Bundle\MediaBundle\Entity\MediaInterface;
use Sulu\Bundle\TagBundle\Tag\TagInterface;
Expand Down Expand Up @@ -94,6 +95,11 @@ public function loadClassMetadata(LoadClassMetadataEventArgs $event): void
$this->addManyToMany($event, $metadata, 'excerptCategories', CategoryInterface::class, 'category_id');
}

if ($reflection->implementsInterface(WebspaceInterface::class)) {
$this->addField($metadata, 'mainWebspace', 'string', ['nullable' => true]);
$this->addField($metadata, 'additionalWebspaces', 'json', ['nullable' => true]);
}

if ($reflection->implementsInterface(AuthorInterface::class)) {
$this->addField($metadata, 'authored', 'datetime_immutable', ['nullable' => true]);
$this->addManyToOne($event, $metadata, 'author', ContactInterface::class, true);
Expand Down
45 changes: 45 additions & 0 deletions Content/Infrastructure/Sulu/Page/Select/WebspaceSelect.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
<?php

declare(strict_types=1);

/*
* This file is part of Sulu.
*
* (c) Sulu GmbH
*
* This source file is subject to the MIT license that is bundled
* with this source code in the file LICENSE.
*/

namespace Sulu\Bundle\ContentBundle\Content\Infrastructure\Sulu\Page\Select;

use Sulu\Component\Webspace\Manager\WebspaceManagerInterface;

class WebspaceSelect
{
/**
* @var WebspaceManagerInterface
*/
private $webspaceManager;

public function __construct(WebspaceManagerInterface $webspaceManager)
{
$this->webspaceManager = $webspaceManager;
}

/**
* @return array<array{name: string, title: string}>
*/
public function getValues(): array
{
$values = [];
foreach ($this->webspaceManager->getWebspaceCollection() as $webspace) {
$values[] = [
'name' => $webspace->getKey(),
'title' => $webspace->getName(),
];
}

return $values;
}
}
6 changes: 6 additions & 0 deletions Resources/config/data-mapper.xml
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,12 @@
</service>

<service id="sulu_content.workflow_data_mapper" class="Sulu\Bundle\ContentBundle\Content\Application\ContentDataMapper\DataMapper\WorkflowDataMapper">
<tag name="sulu_content.data_mapper" priority="24"/>
</service>

<service id="sulu_content.webspace_data_mapper" class="Sulu\Bundle\ContentBundle\Content\Application\ContentDataMapper\DataMapper\WebspaceDataMapper">
<argument type="service" id="sulu_core.webspace.webspace_manager"/>

<tag name="sulu_content.data_mapper" priority="16"/>
</service>

Expand Down
3 changes: 2 additions & 1 deletion Resources/config/forms/content_settings_author.xml
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
>
<key>content_settings_author</key>

<tag name="sulu_content.content_settings_form" instanceOf="Sulu\Bundle\ContentBundle\Content\Domain\Model\AuthorInterface" priority="50"/>
<tag name="sulu_content.content_settings_form" instanceOf="Sulu\Bundle\ContentBundle\Content\Domain\Model\AuthorInterface" priority="-50"/>

<properties>
<section name="author">
Expand All @@ -18,6 +18,7 @@
<title>sulu_content.authored_date</title>
</meta>
</property>

<property name="author" type="single_contact_selection" colspan="6">
<meta>
<title>sulu_content.author</title>
Expand Down
47 changes: 47 additions & 0 deletions Resources/config/forms/content_settings_webspace.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
<?xml version="1.0" ?>
<form xmlns="http://schemas.sulu.io/template/template"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://schemas.sulu.io/template/template http://schemas.sulu.io/template/form-1.0.xsd"
>
<key>content_settings_webspace</key>

<tag name="sulu_content.content_settings_form" instanceOf="Sulu\Bundle\ContentBundle\Content\Domain\Model\WebspaceInterface" priority="-30"/>

<properties>
<section name="webspace">
<meta>
<title>sulu_content.webspace</title>
</meta>

<properties>
<property name="mainWebspace" type="single_select" colspan="6">
<meta>
<title>sulu_content.main_webspace</title>
</meta>

<params>
<param
name="values"
type="expression"
value="service('sulu_content.webspace_select').getValues()"
/>
</params>
</property>

<property name="additionalWebspaces" type="select" colspan="6">
<meta>
<title>sulu_content.additional_webspaces</title>
</meta>

<params>
<param
name="values"
type="expression"
value="service('sulu_content.webspace_select').getValues()"
/>
</params>
</property>
</properties>
</section>
</properties>
</form>
4 changes: 4 additions & 0 deletions Resources/config/merger.xml
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,10 @@
</service>

<service id="sulu_content.seo_merger" class="Sulu\Bundle\ContentBundle\Content\Application\ContentMerger\Merger\SeoMerger">
<tag name="sulu_content.merger" priority="24"/>
</service>

<service id="sulu_content.webspace_merger" class="Sulu\Bundle\ContentBundle\Content\Application\ContentMerger\Merger\WebspaceMerger">
<tag name="sulu_content.merger" priority="16"/>
</service>

Expand Down
7 changes: 7 additions & 0 deletions Resources/config/services.xml
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,13 @@
</service>

<service id="Sulu\Bundle\ContentBundle\Content\Infrastructure\Sulu\Admin\ContentViewBuilderFactoryInterface" alias="sulu_content.content_view_builder_factory"/>
<service
id="sulu_content.webspace_select"
class="Sulu\Bundle\ContentBundle\Content\Infrastructure\Sulu\Page\Select\WebspaceSelect"
public="true"
>
<argument type="service" id="sulu_core.webspace.webspace_manager"/>
</service>

<!-- ContentMerger -->
<service id="sulu_content.content_merger" class="Sulu\Bundle\ContentBundle\Content\Application\ContentMerger\ContentMerger">
Expand Down
7 changes: 5 additions & 2 deletions Resources/translations/admin.de.json
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,9 @@
"sulu_content.excerpt": "Auszug & Taxonomien",
"sulu_content.content": "Inhalt",
"sulu_content.published": "Veröffentlicht am",
"sulu_content.author": "Author",
"sulu_page.authored_date": "Authored Date"
"sulu_content.author": "Autor",
"sulu_content.authored_date": "Verfasst am",
"sulu_content.webspace": "Webspace",
"sulu_content.main_webspace": "Hauptwebspace",
"sulu_content.additional_webspaces": "Weitere Webspaces"
}
Loading

0 comments on commit 48926cf

Please sign in to comment.