mirror of
https://github.com/jbcr/ezmigrationbundle.git
synced 2026-03-26 01:32:24 +01:00
68 lines
2.4 KiB
PHP
68 lines
2.4 KiB
PHP
<?php
|
|
|
|
namespace Kaliop\eZMigrationBundle\Core\ComplexField;
|
|
|
|
use Kaliop\eZMigrationBundle\API\ComplexFieldInterface;
|
|
use eZ\Publish\API\Repository\FieldTypeService;
|
|
|
|
class ComplexFieldManager
|
|
{
|
|
/** @var ComplexFieldInterface[] */
|
|
protected $fieldTypeMap;
|
|
protected $fieldTypeService;
|
|
|
|
public function __construct(FieldTypeService $fieldTypeService)
|
|
{
|
|
$this->fieldTypeService = $fieldTypeService;
|
|
}
|
|
|
|
/**
|
|
* @param ComplexFieldInterface $complexField
|
|
* @param string $fieldTypeIdentifier
|
|
* @param string $contentTypeIdentifier
|
|
*/
|
|
public function addComplexField(ComplexFieldInterface $complexField, $fieldTypeIdentifier, $contentTypeIdentifier=null)
|
|
{
|
|
if ($contentTypeIdentifier == null) {
|
|
$contentTypeIdentifier = '*';
|
|
}
|
|
$this->fieldTypeMap[$contentTypeIdentifier][$fieldTypeIdentifier] = $complexField;
|
|
}
|
|
|
|
/**
|
|
* @param $fieldTypeIdentifier
|
|
* @param string $contentTypeIdentifier
|
|
* @return bool
|
|
*/
|
|
public function managesField($fieldTypeIdentifier, $contentTypeIdentifier)
|
|
{
|
|
return (isset($this->fieldTypeMap[$contentTypeIdentifier][$fieldTypeIdentifier]) ||
|
|
isset($this->fieldTypeMap['*'][$fieldTypeIdentifier]));
|
|
}
|
|
|
|
/**
|
|
* @param string $fieldTypeIdentifier
|
|
* @param string $contentTypeIdentifier
|
|
* @param mixed $fieldValue
|
|
* @param array $context
|
|
* @return mixed
|
|
*/
|
|
public function getComplexFieldValue($fieldTypeIdentifier, $contentTypeIdentifier, $fieldValue, array $context = array())
|
|
{
|
|
if (isset($this->fieldTypeMap[$contentTypeIdentifier][$fieldTypeIdentifier]) || isset($this->fieldTypeMap['*'][$fieldTypeIdentifier]))
|
|
{
|
|
$fieldService = isset($this->fieldTypeMap[$contentTypeIdentifier][$fieldTypeIdentifier]) ?
|
|
$this->fieldTypeMap[$contentTypeIdentifier][$fieldTypeIdentifier] :
|
|
$this->fieldTypeMap['*'][$fieldTypeIdentifier];
|
|
return $fieldService->createValue($fieldValue, $context);
|
|
}
|
|
else
|
|
{
|
|
$fieldType = $this->fieldTypeService->getFieldType($fieldTypeIdentifier);
|
|
return $fieldType->fromHash($fieldValue);
|
|
// was: error
|
|
//throw new \InvalidArgumentException("Field of type '$fieldTypeIdentifier' can not be handled as it does not have a complex field class defined");
|
|
}
|
|
}
|
|
}
|