Skip to content
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
27 changes: 27 additions & 0 deletions src/Mapper/BaseMapper.php
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,8 @@

use Contentful\Core\ResourceBuilder\MapperInterface;
use Contentful\Core\ResourceBuilder\ObjectHydrator;
use Contentful\Management\Resource\ContentType\Validation\AbstractCustomMessageValidation;
use Contentful\Management\Resource\ContentType\Validation\ValidationInterface;
use Contentful\Management\ResourceBuilder;

/**
Expand All @@ -38,4 +40,29 @@ public function __construct(ResourceBuilder $builder)
$this->builder = $builder;
$this->hydrator = new ObjectHydrator();
}

protected function mapValidation(array $data): ?ValidationInterface
{
$message = null;
if (isset($data['message'])) {
$message = $data['message'];
unset($data['message']);
}

if (empty(array_values($data)[0])) {
return null;
}

$fqcn = '\\Contentful\\Management\\Mapper\\ContentType\\Validation\\'.\ucfirst(key($data)).'Validation';

/** @var ValidationInterface $validation */
$validation = $this->builder->getMapper($fqcn)
->map(null, $data);

if ($validation instanceof AbstractCustomMessageValidation && $message) {
$validation->setMessage($message);
}

return $validation;
}
}
15 changes: 1 addition & 14 deletions src/Mapper/ContentType/Field/BaseField.php
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,6 @@
use Contentful\Management\Resource\ContentType\Field\RichTextField;
use Contentful\Management\Resource\ContentType\Field\SymbolField;
use Contentful\Management\Resource\ContentType\Field\TextField;
use Contentful\Management\Resource\ContentType\Validation\ValidationInterface;

/**
* BaseField class.
Expand Down Expand Up @@ -56,22 +55,10 @@ public function map($resource, array $data): FieldInterface
'disabled' => $data['disabled'] ?? null,
'omitted' => $data['omitted'] ?? null,
'validations' => isset($data['validations'])
? \array_map([$this, 'mapValidation'], $data['validations'])
? \array_filter(\array_map([$this, 'mapValidation'], $data['validations']))
: [],
]);

return $field;
}

protected function mapValidation(array $data): ValidationInterface
{
$fqcn = '\\Contentful\\Management\\Mapper\\ContentType\\Validation\\'.\ucfirst(\array_keys($data)[0]).'Validation';

/** @var ValidationInterface $validation */
$validation = $this->builder->getMapper($fqcn)
->map(null, $data)
;

return $validation;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,6 @@ class EnabledMarksValidation extends BaseMapper
*/
public function map($resource, array $data): ResourceClass
{
return new ResourceClass();
return new ResourceClass($data['enabledMarks']);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,6 @@ class EnabledNodeTypesValidation extends BaseMapper
*/
public function map($resource, array $data): ResourceClass
{
return new ResourceClass();
return new ResourceClass($data['enabledNodeTypes']);
}
}
18 changes: 17 additions & 1 deletion src/Mapper/ContentType/Validation/NodesValidation.php
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,22 @@ class NodesValidation extends BaseMapper
*/
public function map($resource, array $data): ResourceClass
{
return new ResourceClass();
return new ResourceClass(
isset($data['nodes']['asset-hyperlink']) ?
\array_map([$this, 'mapValidation'], $data['nodes']['asset-hyperlink']) :
[],
isset($data['nodes']['embedded-asset-block']) ?
\array_map([$this, 'mapValidation'], $data['nodes']['embedded-asset-block']) :
[],
isset($data['nodes']['embedded-entry-block']) ?
\array_map([$this, 'mapValidation'], $data['nodes']['embedded-entry-block']) :
[],
isset($data['nodes']['embedded-entry-inline']) ?
\array_map([$this, 'mapValidation'], $data['nodes']['embedded-entry-inline']) :
[],
isset($data['nodes']['entry-hyperlink']) ?
\array_map([$this, 'mapValidation'], $data['nodes']['entry-hyperlink']) :
[]
);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
<?php
declare(strict_types=1);

namespace Contentful\Management\Resource\ContentType\Validation;

abstract class AbstractCustomMessageValidation
{
/**
* @var string|null
*/
private $message;

public function setMessage(string $message): self
{
$this->message = $message;

return $this;
}

public function getMessage(): ?string
{
return $this->message;
}

public function jsonSerialize(): array
{
return $this->message ? ['message' => $this->message] : [];
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@
* Applicable to:
* - Link (to assets)
*/
class AssetFileSizeValidation implements ValidationInterface
class AssetFileSizeValidation extends AbstractCustomMessageValidation implements ValidationInterface
{
/**
* @var int|null
Expand Down Expand Up @@ -100,8 +100,9 @@ public function jsonSerialize(): array
$data['max'] = $this->max;
}

return [
return array_merge(
parent::jsonSerialize(), [
'assetFileSize' => $data,
];
]);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@
* Applicable to:
* - Link (to image assets)
*/
class AssetImageDimensionsValidation implements ValidationInterface
class AssetImageDimensionsValidation extends AbstractCustomMessageValidation implements ValidationInterface
{
/**
* @var int|null
Expand Down Expand Up @@ -161,8 +161,11 @@ public function jsonSerialize(): array
$data['height'] = $heightData;
}

return [
'assetImageDimensions' => $data,
];
return array_merge(
parent::jsonSerialize(),
[
'assetImageDimensions' => $data,
]
);
}
}
11 changes: 7 additions & 4 deletions src/Resource/ContentType/Validation/DateRangeValidation.php
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@
* Applicable to:
* - Date
*/
class DateRangeValidation implements ValidationInterface
class DateRangeValidation extends AbstractCustomMessageValidation implements ValidationInterface
{
/**
* @var string|null
Expand Down Expand Up @@ -97,8 +97,11 @@ public function jsonSerialize(): array
$data['max'] = $this->max;
}

return [
'dateRange' => $data,
];
return array_merge(
parent::jsonSerialize(),
[
'dateRange' => $data,
]
);
}
}
26 changes: 24 additions & 2 deletions src/Resource/ContentType/Validation/EnabledMarksValidation.php
Original file line number Diff line number Diff line change
Expand Up @@ -16,19 +16,41 @@
*/
class EnabledMarksValidation implements ValidationInterface
{
private const VALID_FIELD_TYPES = ['RichText'];

/**
* @var array
*/
private $enabledMarks;

public function __construct(array $enabledMarks)
{
$this->enabledMarks = $enabledMarks;
}

/**
* {@inheritdoc}
*/
public static function getValidFieldTypes(): array
{
return [];
return self::VALID_FIELD_TYPES;
}

public function getEnabledMarks(): array
{
return $this->enabledMarks;
}

public function setEnabledMarks(array $enabledMarks)
{
$this->enabledMarks = $enabledMarks;
}

/**
* {@inheritdoc}
*/
public function jsonSerialize()
{
return [];
return ['enabledMarks' => $this->enabledMarks];
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -16,19 +16,41 @@
*/
class EnabledNodeTypesValidation implements ValidationInterface
{
private const VALID_FIELD_TYPES = ['RichText'];

/**
* @var array
*/
private $enabledNodeTypes;

public function __construct(array $enabledNodeTypes)
{
$this->enabledNodeTypes = $enabledNodeTypes;
}

/**
* {@inheritdoc}
*/
public static function getValidFieldTypes(): array
{
return [];
return self::VALID_FIELD_TYPES;
}

public function getEnabledNodeTypes(): array
{
return $this->enabledNodeTypes;
}

public function setEnabledNodeTypes(array $enabledNodeTypes)
{
$this->enabledNodeTypes = $enabledNodeTypes;
}

/**
* {@inheritdoc}
*/
public function jsonSerialize()
{
return [];
return ['enabledNodeTypes' => $this->enabledNodeTypes];
}
}
11 changes: 7 additions & 4 deletions src/Resource/ContentType/Validation/InValidation.php
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@
* - Integer
* - Number
*/
class InValidation implements ValidationInterface
class InValidation extends AbstractCustomMessageValidation implements ValidationInterface
{
/**
* @var string[]
Expand Down Expand Up @@ -72,8 +72,11 @@ public static function getValidFieldTypes(): array
*/
public function jsonSerialize(): array
{
return [
'in' => $this->values,
];
return array_merge(
parent::jsonSerialize(),
[
'in' => $this->values,
]
);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,10 @@

namespace Contentful\Management\Resource\ContentType\Validation;

use Contentful\Management\Resource\ContentType\Validation\Nodes\EmbeddedEntryBlockValidationInterface;
use Contentful\Management\Resource\ContentType\Validation\Nodes\EmbeddedEntryInlineValidationInterface;
use Contentful\Management\Resource\ContentType\Validation\Nodes\EntryHyperlinkValidationInterface;

/**
* LinkContentTypeValidation class.
*
Expand All @@ -20,7 +24,10 @@
* Applicable to:
* - Link (to entries)
*/
class LinkContentTypeValidation implements ValidationInterface
class LinkContentTypeValidation extends AbstractCustomMessageValidation implements ValidationInterface,
EntryHyperlinkValidationInterface,
EmbeddedEntryBlockValidationInterface,
EmbeddedEntryInlineValidationInterface
{
/**
* @var string[]
Expand Down Expand Up @@ -70,8 +77,11 @@ public static function getValidFieldTypes(): array
*/
public function jsonSerialize(): array
{
return [
'linkContentType' => $this->contentTypes,
];
return array_merge(
parent::jsonSerialize(),
[
'linkContentType' => $this->contentTypes,
]
);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@
* Applicable to:
* - Link (to assets)
*/
class LinkMimetypeGroupValidation implements ValidationInterface
class LinkMimetypeGroupValidation extends AbstractCustomMessageValidation implements ValidationInterface
{
/**
* @var string[]
Expand Down Expand Up @@ -70,8 +70,11 @@ public static function getValidFieldTypes(): array
*/
public function jsonSerialize(): array
{
return [
'linkMimetypeGroup' => $this->mimeTypeGroups,
];
return array_merge(
parent::jsonSerialize(),
[
'linkMimetypeGroup' => $this->mimeTypeGroups,
]
);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
<?php
declare(strict_types=1);

namespace Contentful\Management\Resource\ContentType\Validation\Nodes;

use Contentful\Management\Resource\ContentType\Validation\ValidationInterface;

interface AssetHyperlinkValidationInterface extends ValidationInterface
{

}
Loading