Skip to content

Commit

Permalink
EZP-27628: Implement editing support for RichText FieldType
Browse files Browse the repository at this point in the history
  • Loading branch information
Maciej Kobus committed Sep 5, 2017
1 parent afc4a97 commit 8a29ed0
Show file tree
Hide file tree
Showing 4 changed files with 119 additions and 5 deletions.
5 changes: 4 additions & 1 deletion bundle/Resources/config/services.yml
Original file line number Diff line number Diff line change
Expand Up @@ -217,8 +217,11 @@ services:

ezrepoforms.field_type.form_mapper.ezrichtext:
class: "%ezrepoforms.field_type.form_mapper.ezrichtext.class%"
arguments:
- "@ezpublish.api.service.field_type"
- "@ezpublish.fieldType.ezrichtext.converter.edit.xhtml5"
tags:
- { name: ez.fieldFormMapper.definition, fieldType: ezrichtext }
- { name: ez.fieldFormMapper.value, fieldType: ezrichtext }

ezrepoforms.field_type.form_mapper.ezselection:
class: "%ezrepoforms.field_type.form_mapper.ezselection.class%"
Expand Down
14 changes: 14 additions & 0 deletions doc/bc/changes-1.10.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
# Backwards compatibility changes

Changes affecting version compatibility with former or future versions.

## Changes
- EZP-27628: Implement editing support for RichText FieldType

What changed: `ezrepoforms.field_type.form_mapper.ezrichtext` requires `ezpublish.api.service.field_type` and `ezpublish.fieldType.ezrichtext.converter.edit.xhtml5` dependencies.

How it might affect your code: If you are implementing a subclass, make sure you are injecting required services.

## Deprecations

## Removed features
63 changes: 63 additions & 0 deletions lib/FieldType/DataTransformer/RichTextValueTransformer.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
<?php

/**
* This file is part of the eZ RepositoryForms package.
*
* @copyright Copyright (C) eZ Systems AS. All rights reserved.
* @license For full copyright and license information view LICENSE file distributed with this source code.
* @version //autogentag//
*/
namespace EzSystems\RepositoryForms\FieldType\DataTransformer;

use eZ\Publish\API\Repository\FieldType;
use eZ\Publish\Core\FieldType\RichText\Converter;
use eZ\Publish\Core\FieldType\RichText\Value;
use Symfony\Component\Form\DataTransformerInterface;

/**
* DataTransformer for RichText\Value.
*/
class RichTextValueTransformer implements DataTransformerInterface
{
/** @var FieldType */
private $fieldType;

/**
* @var \eZ\Publish\Core\FieldType\RichText\Converter
*/
protected $docbookToXhtml5EditConverter;

public function __construct(FieldType $fieldType, Converter $docbookToXhtml5EditConverter)
{
$this->fieldType = $fieldType;
$this->docbookToXhtml5EditConverter = $docbookToXhtml5EditConverter;
}

/**
* @param mixed $value
*
* @return string
*/
public function transform($value)
{
if (!$value instanceof Value) {
return '';
}

return $this->docbookToXhtml5EditConverter->convert($value->xml)->saveXML();
}

/**
* @param mixed $value
*
* @return Value|null
*/
public function reverseTransform($value)
{
if ($value === null || empty($value)) {
return $this->fieldType->getEmptyValue();
}

return $this->fieldType->fromHash(['xml' => $value]);
}
}
42 changes: 38 additions & 4 deletions lib/FieldType/Mapper/RichTextFormMapper.php
Original file line number Diff line number Diff line change
Expand Up @@ -8,15 +8,49 @@
*/
namespace EzSystems\RepositoryForms\FieldType\Mapper;

use EzSystems\RepositoryForms\Data\FieldDefinitionData;
use EzSystems\RepositoryForms\FieldType\FieldDefinitionFormMapperInterface;
use eZ\Publish\API\Repository\FieldTypeService;
use eZ\Publish\Core\FieldType\RichText\Converter;
use EzSystems\RepositoryForms\Data\Content\FieldData;
use EzSystems\RepositoryForms\FieldType\DataTransformer\RichTextValueTransformer;
use EzSystems\RepositoryForms\FieldType\FieldValueFormMapperInterface;
use Symfony\Component\Form\Extension\Core\Type\TextareaType;
use Symfony\Component\Form\FormInterface;
use Symfony\Component\OptionsResolver\OptionsResolver;

class RichTextFormMapper implements FieldDefinitionFormMapperInterface
class RichTextFormMapper implements FieldValueFormMapperInterface
{
public function mapFieldDefinitionForm(FormInterface $fieldDefinitionForm, FieldDefinitionData $data)
/**
* @var FieldTypeService
*/
private $fieldTypeService;

/**
* @var \eZ\Publish\Core\FieldType\RichText\Converter
*/
private $docbookToXhtml5EditConverter;

public function __construct(FieldTypeService $fieldTypeService, Converter $docbookToXhtml5EditConverter)
{
$this->fieldTypeService = $fieldTypeService;
$this->docbookToXhtml5EditConverter = $docbookToXhtml5EditConverter;
}

public function mapFieldValueForm(FormInterface $fieldForm, FieldData $data)
{
$fieldDefinition = $data->fieldDefinition;
$formConfig = $fieldForm->getConfig();

$fieldForm
->add(
$formConfig->getFormFactory()->createBuilder()
->create('value', TextareaType::class, [
'required' => $fieldDefinition->isRequired,
'label' => $fieldDefinition->getName($formConfig->getOption('languageCode')),
])
->addModelTransformer(new RichTextValueTransformer($this->fieldTypeService->getFieldType($fieldDefinition->fieldTypeIdentifier), $this->docbookToXhtml5EditConverter))
->setAutoInitialize(false)
->getForm()
);
}

/**
Expand Down

0 comments on commit 8a29ed0

Please sign in to comment.