diff --git a/Export/Aggregator/GenderAggregator.php b/Export/Aggregator/GenderAggregator.php index bc75c4350..58e0df994 100644 --- a/Export/Aggregator/GenderAggregator.php +++ b/Export/Aggregator/GenderAggregator.php @@ -77,11 +77,18 @@ class GenderAggregator implements AggregatorInterface public function getLabels($key, array $values, $data) { - return array( - Person::FEMALE_GENDER => $this->translator->trans('woman'), - Person::MALE_GENDER => $this->translator->trans('man'), - '_header' => $this->translator->trans('Gender') - ); + return function($value) { + switch ($value) { + case Person::FEMALE_GENDER : + return $this->translator->trans('woman'); + case Person::MALE_GENDER : + return $this->translator->trans('man'); + case '_header' : + return $this->translator->trans('Gender'); + default: + throw new \LogicException(sprintf("The value %s is not valid", $value)); + } + }; } public function addRole() diff --git a/Export/Aggregator/NationalityAggregator.php b/Export/Aggregator/NationalityAggregator.php index 442aff978..772564f7e 100644 --- a/Export/Aggregator/NationalityAggregator.php +++ b/Export/Aggregator/NationalityAggregator.php @@ -164,12 +164,11 @@ class NationalityAggregator implements AggregatorInterface foreach($countries as $row) { $labels[$row['c_countryCode']] = $this->translatableStringHelper->localize($row['c_name']); } - - return $labels; + } elseif ($data['group_by_level'] === 'continent') { - return array( + $labels = array( 'EU' => $this->translator->trans('Europe'), 'AS' => $this->translator->trans('Asia'), 'AN' => $this->translator->trans('Antartica'), @@ -181,6 +180,11 @@ class NationalityAggregator implements AggregatorInterface '_header' => $this->translator->trans('Continent') ); } + + + return function($value) use ($labels) { + return $labels[$value]; + }; } } diff --git a/Export/Export/CountPerson.php b/Export/Export/CountPerson.php index c9d72a7eb..bb688e030 100644 --- a/Export/Export/CountPerson.php +++ b/Export/Export/CountPerson.php @@ -114,7 +114,9 @@ class CountPerson implements ExportInterface $labels = array_combine($values, $values); $labels['_header'] = 'Number of people'; - return $labels; + return function($value) use ($labels) { + return $labels[$value]; + }; } public function getAllowedFormattersTypes() diff --git a/Export/Filter/GenderFilter.php b/Export/Filter/GenderFilter.php index 81e6f731a..f321900e2 100644 --- a/Export/Filter/GenderFilter.php +++ b/Export/Filter/GenderFilter.php @@ -87,6 +87,11 @@ class GenderFilter implements FilterInterface public function describeAction($data, $format = 'string') { - + switch($data['accepted_genders']) { + case Person::MALE_GENDER: + return 'Filtering by gender: male only'; + case Person::FEMALE_GENDER: + return array('Filtering by gender: female only'); + } } } diff --git a/Resources/translations/messages.fr.yml b/Resources/translations/messages.fr.yml index 8f6f5d82c..643107d51 100644 --- a/Resources/translations/messages.fr.yml +++ b/Resources/translations/messages.fr.yml @@ -146,6 +146,8 @@ Fields to include in export: Champs à inclure dans l'export ## filters Filter by person gender: Filtrer par genre de la personne Accepted genders: Genres acceptés +'Filtering by gender: male only': 'Filtré par genre: hommes seulement' +'Filtering by gender: female only': 'Filtré par genre: femmes seulement' Filter by person's nationality: Filtrer par nationalité Nationalities: Nationalités diff --git a/Tests/Export/Export/CountPersonTest.php b/Tests/Export/Export/CountPersonTest.php new file mode 100644 index 000000000..e89250dfc --- /dev/null +++ b/Tests/Export/Export/CountPersonTest.php @@ -0,0 +1,62 @@ + + * + * 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 . + */ +namespace Chill\PersonBundle\Tests\Export\Export; + +use Chill\MainBundle\Test\AbstractExportTestHelper; + +/** + * Test CountPerson export + * + * @author julien.fastre@champs-libres.coop + */ +class CountPersonTest extends AbstractExportTestHelper +{ + /** + * + * @var + */ + private $export; + + public function setUp() + { + static::bootKernel(); + + /* @var $container \Symfony\Component\DependencyInjection\ContainerInterface */ + $container = self::$kernel->getContainer(); + + $this->export = $container->get('chill.person.export.export_count_person'); + } + + + public function getExport() + { + return $this->export; + } + + public function getFormData() + { + return array( + array() + ); + } + + public function getModifiersCombination() + { + return array( [ 'person' ] ); + } +} diff --git a/Tests/Export/Filter/GenderFilterTest.php b/Tests/Export/Filter/GenderFilterTest.php new file mode 100644 index 000000000..5e678c88f --- /dev/null +++ b/Tests/Export/Filter/GenderFilterTest.php @@ -0,0 +1,78 @@ + + * + * 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 . + */ +namespace Chill\PersonBundle\Tests\Export\Filter; + +use Chill\MainBundle\Test\Export\AbstractFilterTest; +use Chill\PersonBundle\Entity\Person; + +/** + * + * + * @author Julien Fastré + */ +class GenderFilterTest extends AbstractFilterTest +{ + /** + * + * @var \Chill\PersonBundle\Export\Filter\GenderFilter + */ + private $filter; + + public function setUp() + { + static::bootKernel(); + + $container = static::$kernel->getContainer(); + + $this->filter = $container->get('chill.person.export.filter_gender'); + } + + + public function getFilter() + { + return $this->filter; + } + + public function getFormData() + { + return array( + array( + 'accepted_genders' => Person::FEMALE_GENDER + ), + array( + 'accepted_genders' => Person::MALE_GENDER + ) + ); + } + + public function getQueryBuilders() + { + if (static::$kernel === null) { + static::bootKernel(); + } + + $em = static::$kernel->getContainer() + ->get('doctrine.orm.entity_manager'); + + return array( + $em->createQueryBuilder() + ->select('p.firstName') + ->from('ChillPersonBundle:Person', 'p') + ); + } +}