From a5065f798ac7d07889a7fcbf8b682eb990e39714 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julien=20Fastr=C3=A9?= Date: Thu, 14 Jan 2016 12:19:29 +0100 Subject: [PATCH] add gender aggregator --- Export/Aggregator/GenderAggregator.php | 85 ++++++++++++++++++++++++++ Resources/config/services.yml | 8 ++- 2 files changed, 92 insertions(+), 1 deletion(-) create mode 100644 Export/Aggregator/GenderAggregator.php diff --git a/Export/Aggregator/GenderAggregator.php b/Export/Aggregator/GenderAggregator.php new file mode 100644 index 000000000..d0be7295b --- /dev/null +++ b/Export/Aggregator/GenderAggregator.php @@ -0,0 +1,85 @@ + + * + * 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\Export\Aggregator; + +use Chill\MainBundle\Export\AggregatorInterface; +use Symfony\Component\Form\FormBuilderInterface; +use Doctrine\ORM\QueryBuilder; +use Symfony\Component\Translation\TranslatorInterface; +use Chill\PersonBundle\Entity\Person; + +/** + * + * + * @author Julien Fastré + */ +class GenderAggregator implements AggregatorInterface +{ + + /** + * + * @var TranslatorInterface + */ + protected $translator; + + public function __construct(TranslatorInterface $translator) + { + $this->translator = $translator; + } + + public function applyOn() + { + return 'person'; + } + + + public function buildForm(FormBuilderInterface $builder) + { + + } + + public function alterQuery(QueryBuilder $qb, $data) + { + + $qb->addSelect('person.gender as gender'); + + $qb->addGroupBy('gender'); + + } + + public function getTitle() + { + return "Group people by gender"; + } + + public function getQueryKeys($data) + { + return array('gender'); + } + + 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') + ); + } +} diff --git a/Resources/config/services.yml b/Resources/config/services.yml index 55e939020..0e15965de 100644 --- a/Resources/config/services.yml +++ b/Resources/config/services.yml @@ -87,4 +87,10 @@ services: - "@translator" tags: - { name: chill.export_aggregator, alias: person_nationality_aggregator } - \ No newline at end of file + + chill.person.export.aggregator_gender: + class: Chill\PersonBundle\Export\Aggregator\GenderAggregator + arguments: + - "@translator" + tags: + - { name: chill.export_aggregator, alias: person_gender_aggregator } \ No newline at end of file