Skip to content

Commit

Permalink
Merge pull request #1755 from open-orchestra/1-2_multilanguagetype
Browse files Browse the repository at this point in the history
Add MultiLanguagesTextType
  • Loading branch information
ngilain committed Jun 10, 2016
2 parents e801148 + df75714 commit 9f49011
Show file tree
Hide file tree
Showing 6 changed files with 192 additions and 17 deletions.
1 change: 0 additions & 1 deletion Backoffice/Form/Type/Component/ContentSearchType.php
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,6 @@
use Symfony\Component\Form\AbstractType;
use Symfony\Component\OptionsResolver\OptionsResolver;
use Symfony\Component\Form\FormBuilderInterface;
use OpenOrchestra\Backoffice\Exception\NotAllowedClassNameException;
use OpenOrchestra\Backoffice\EventSubscriber\ContentSearchSubscriber;
use OpenOrchestra\ModelInterface\Repository\ContentRepositoryInterface;
use OpenOrchestra\BaseBundle\Context\CurrentSiteIdInterface;
Expand Down
70 changes: 70 additions & 0 deletions Backoffice/Form/Type/Component/MultiLanguagesTextType.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,70 @@
<?php

namespace OpenOrchestra\Backoffice\Form\Type\Component;

use Symfony\Component\Form\AbstractType;
use Symfony\Component\OptionsResolver\OptionsResolver;
use Symfony\Component\Form\FormBuilderInterface;

/**
* Class MultiLanguagesTextType
*/
class MultiLanguagesTextType extends AbstractType
{
/**
* @param OptionsResolver $resolver
*/
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults(array(
'label_attr' => array('class' => 'translated-value'),
'languages' => array('en'),
'type' => 'text'
));
}

/**
* @param FormBuilderInterface $builder
* @param array $options
*/
public function buildForm(FormBuilderInterface $builder, array $options)
{
foreach ($this->getModelTransformers() as $transformer) {
$builder->addModelTransformer($transformer);
}

foreach ($this->getViewTransformers() as $transformer) {
$builder->addViewTransformer($transformer);
}

foreach ($options['languages'] as $language) {
$builder->add($language, $options['type'], array('label' => $language));
}
}

/**
* Return array<Symfony\Component\Form\DataTransformerInterface>
*/
protected function getModelTransformers()
{
return array();
}

/**
* Return array<Symfony\Component\Form\DataTransformerInterface>
*/
protected function getViewTransformers()
{
return array();
}

/**
* Returns the name of this type.
*
* @return string The name of this type
*/
public function getName()
{
return 'oo_multi_languages_text';
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,6 @@
use OpenOrchestra\BaseBundle\Tests\AbstractTest\AbstractBaseTestCase;
use Phake;
use OpenOrchestra\Backoffice\Form\Type\Component\ContentSearchType;
use OpenOrchestra\ModelInterface\Form\DataTransformer\ConditionFromBooleanToBddTransformerInterface;

/**
* Class ContentSearchTypeTest
Expand Down
70 changes: 70 additions & 0 deletions Backoffice/Tests/Form/Type/MultiLanguagesTextTypeTest.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,70 @@
<?php

namespace OpenOrchestra\Backoffice\Tests\Form\Type;

use OpenOrchestra\BaseBundle\Tests\AbstractTest\AbstractBaseTestCase;
use Phake;
use OpenOrchestra\Backoffice\Form\Type\Component\MultiLanguagesTextType;

/**
* Class MultiLanguagesTextTypeTest
*/
class MultiLanguagesTextTypeTest extends AbstractBaseTestCase
{
/**
* @var MultiLanguagesTextType
*/
protected $form;

/**
* Set up the test
*/
public function setUp()
{
$this->form = new MultiLanguagesTextType();
}

/**
* Test instance
*/
public function testInstance()
{
$this->assertInstanceOf('Symfony\Component\Form\AbstractType', $this->form);
}

/**
* Test name
*/
public function testName()
{
$this->assertSame('oo_multi_languages_text', $this->form->getName());
}

/**
* Test builder
*
* @dataProvider provideLanguages
*/
public function testBuilder($languages, $expectedBuildCount)
{
$builder = Phake::mock('Symfony\Component\Form\FormBuilder');
Phake::when($builder)->add(Phake::anyParameters())->thenReturn($builder);
Phake::when($builder)->addEventSubscriber(Phake::anyParameters())->thenReturn($builder);

$this->form->buildForm($builder, array('type' => 'text', 'languages' => $languages));

Phake::verify($builder, Phake::times($expectedBuildCount))->add(Phake::anyParameters());
}

/**
* @return array
*/
public function provideLanguages()
{
return array(
array(array(), 0),
array(array('fr', 'ch'), 2),
array(array('fr', 'de', 'en'), 3),
);
}
}
5 changes: 5 additions & 0 deletions BackofficeBundle/Resources/config/form.yml
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,7 @@ parameters:
open_orchestra_backoffice.type.internal_link.class: OpenOrchestra\Backoffice\Form\Type\Component\InternalLinkType
open_orchestra_backoffice.type.site_site_alias.class: OpenOrchestra\Backoffice\Form\Type\Component\SiteSiteAliasType
open_orchestra_backoffice.type.default_listable_checkbox.class: OpenOrchestra\Backoffice\Form\Type\Component\DefaultListableCheckboxType
open_orchestra_backoffice.type.multi_languages_text.class: OpenOrchestra\Backoffice\Form\Type\Component\MultiLanguagesTextType

open_orchestra_backoffice.tinymce:
tinymce_jquery: false
Expand Down Expand Up @@ -405,3 +406,7 @@ services:
class: %open_orchestra_backoffice.type.default_listable_checkbox.class%
tags:
- { name: form.type, alias: oo_default_listable_checkbox}
open_orchestra_backoffice.type.multi_languages_text:
class: %open_orchestra_backoffice.type.multi_languages_text.class%
tags:
- { name: form.type, alias: oo_multi_languages_text}
62 changes: 47 additions & 15 deletions BackofficeBundle/Resources/views/Form/form_div_layout.html.twig
Original file line number Diff line number Diff line change
Expand Up @@ -362,29 +362,61 @@
{{ block('form_area_container') }}
{% endblock %}


{% block form_area_container %}
{% spaceless %}
{% for key, child in form %}
{% if key != 'newAreas' %}
{{ form_row(child) }}
{% else %}
<div class="form-group{% if child.vars.errors|length > 0 %} has-error{% endif %}">
{{ form_label(child) }}
<div class="col-lg-9">
{% if form.vars.areas|length > 0 %}
<ul class="list-group">
{% for area in areas %}
<li class="list-group-item">
{{ area }}
</li>
{% endfor %}
{% endif %}
{{ form_widget(child) }}
{{ form_errors(child) }}
<div class="form-group{% if child.vars.errors|length > 0 %} has-error{% endif %}">
{{ form_label(child) }}
<div class="col-lg-9">
{% if form.vars.areas|length > 0 %}
<ul class="list-group">
{% for area in areas %}
<li class="list-group-item">
{{ area }}
</li>
{% endfor %}
</ul>
{% endif %}
{{ form_widget(child) }}
{{ form_errors(child) }}
</div>
</div>
</div>
{% endif %}
{% endfor %}
{% endspaceless %}
{% endblock %}

{% block oo_multi_languages_text_widget %}
{% spaceless %}
<div {{ block('widget_container_attributes') }}>
<ul class="nav nav-tabs" role="tablist" id="myTab">
{% for key, field in form %}
<li {% if loop.first %}class="active" {% endif %}>
<a href="#tab-{{ form.vars.id }}-{{ key }}" role="tab" data-toggle="tab">
<img
src="{{ asset('bundles/openorchestrabackoffice/smartadmin/img/blank.gif') }}"
class="flag flag-{{ key }}"
alt="{{ ('open_orchestra_backoffice.language.' ~ key)|trans }}"
>
{{ form_label(field) }}
</a>
</li>
{% endfor %}
</ul>
<div class="tab-content">
{% for key, field in form %}
<div class="tab-pane {% if loop.first %}active{% endif %}" id="tab-{{ form.vars.id }}-{{ key }}">
<div class="form-group{% if field.vars.errors|length > 0 %} has-error{% endif %}">
{{ form_widget(field) }}
{{ form_rest(field) }}
{{ form_errors(field) }}
</div>
</div>
{% endfor %}
</div>
</div>
{% endspaceless %}
{% endblock %}

0 comments on commit 9f49011

Please sign in to comment.