Add possibility to hide empty value in customfield group view rendering

A new parameter is defined :

```
chill_custom_fields:
    show_empty_values_in_views = true|false
```

A new method is added to CustomFieldInterface: `isEmptyValue`. To ease
the dev of new classes, an AbstractCustomField class is created, which
implements the most commons function (currently, only isEmptyValue).

A new Twig Filter is added: `chill_custom_field_is_empty`

The twig filter `chill_custom_fields_group_widget` has a new possibility
in array option : `show_empty`. Default to
chill_custom_fields.show_empty_values_in_view. May be forced by
true/false.
This commit is contained in:
2015-12-15 11:11:36 +01:00
parent 9ca2be78eb
commit fe73a64e9d
14 changed files with 131 additions and 27 deletions

View File

@@ -0,0 +1,37 @@
<?php
/*
* Copyright (C) 2015 Julien Fastré <julien.fastre@champs-libres.coop>
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
namespace Chill\CustomFieldsBundle\CustomFields;
use Chill\CustomFieldsBundle\CustomFields\CustomFieldInterface;
use Chill\CustomFieldsBundle\Entity\CustomField;
/**
*
*
* @author Julien Fastré <julien.fastre@champs-libres.coop>
*/
abstract class AbstractCustomField implements CustomFieldInterface
{
public function isEmptyValue($value, CustomField $customField)
{
return (empty($value) and $value !== FALSE);
}
}

View File

@@ -38,7 +38,7 @@ use Symfony\Component\Translation\Translator;
* @author Julien Fastré <julien.fastre@champs-libres.coop>
* @author Marc Ducobu <marc@champs-libes.coop>
*/
class CustomFieldChoice implements CustomFieldInterface
class CustomFieldChoice extends AbstractCustomField
{
const ALLOW_OTHER = 'other';
const OTHER_VALUE_LABEL = 'otherValueLabel';
@@ -174,6 +174,11 @@ class CustomFieldChoice implements CustomFieldInterface
{
return 'Choices';
}
public function isEmptyValue($value, CustomField $customField)
{
return $value['_choices'] === NULL;
}
/**
*

View File

@@ -58,4 +58,12 @@ interface CustomFieldInterface
* @return \Symfony\Component\Form\FormTypeInterface|null the form type
*/
public function buildOptionsForm(FormBuilderInterface $builder);
/**
* Return if the value can be considered as empty
*
* @param mixed $value the value passed throug the deserialize function
* @param CustomField $customField
*/
public function isEmptyValue($value, CustomField $customField);
}

View File

@@ -33,7 +33,7 @@ use Symfony\Bridge\Twig\TwigEngine;
*
* @author Julien Fastré <julien.fastre@champs-libres.coop>
*/
class CustomFieldLongChoice implements CustomFieldInterface
class CustomFieldLongChoice extends AbstractCustomField
{
/**
*

View File

@@ -39,7 +39,7 @@ use Chill\MainBundle\Templating\TranslatableStringHelper;
* @author Julien Fastré <julien.fastre@champs-libres.coop>
* @author Marc Ducobu <marc@champs-libres.coop>
*/
class CustomFieldNumber implements CustomFieldInterface
class CustomFieldNumber extends AbstractCustomField
{
/**
* key for the minimal value of the field

View File

@@ -33,7 +33,7 @@ use Chill\MainBundle\Templating\TranslatableStringHelper;
* @author Julien Fastré <julien.fastre@champs-libres.coop>
* @author Marc Ducobu <marc@champs-libres.coop>
*/
class CustomFieldText implements CustomFieldInterface
class CustomFieldText extends AbstractCustomField
{
private $requestStack;

View File

@@ -28,7 +28,7 @@ use Symfony\Component\HttpFoundation\RequestStack;
use Symfony\Bundle\TwigBundle\TwigEngine;
use Chill\MainBundle\Templating\TranslatableStringHelper;
class CustomFieldTitle implements CustomFieldInterface
class CustomFieldTitle extends AbstractCustomField
{
const TYPE = 'type';
const TYPE_TITLE = 'title';
@@ -92,6 +92,11 @@ class CustomFieldTitle implements CustomFieldInterface
{
return 'title';
}
public function isEmptyValue($value, CustomField $customField)
{
return false;
}
public function buildOptionsForm(FormBuilderInterface $builder)
{