Skip to content
GitLab
Menu
Projects
Groups
Snippets
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
Chill-project
Chill-Main
Commits
070b184d
Commit
070b184d
authored
Nov 28, 2014
by
Marc Ducobu
Browse files
Order countries in alphabetical order in every language - close #360
parent
654789d4
Changes
3
Hide whitespace changes
Inline
Side-by-side
Form/Type/DataTransformer/ObjectToIdTransformer.php
0 → 100644
View file @
070b184d
<?php
/*
* Chill is a software for social workers
* Copyright (C) 2014 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\MainBundle\Form\Type\DataTransformer
;
use
Symfony\Component\Form\DataTransformerInterface
;
use
Symfony\Component\Form\Exception\TransformationFailedException
;
use
Doctrine\Common\Persistence\ObjectManager
;
class
ObjectToIdTransformer
implements
DataTransformerInterface
{
/**
* @var ObjectManager
*/
private
$om
;
/**
* @var string
*/
private
$class
;
/**
* @param ObjectManager $om
*/
public
function
__construct
(
ObjectManager
$om
,
$class
)
{
$this
->
om
=
$om
;
$this
->
class
=
$class
;
}
/**
* Transforms an object to a string (id)
*
* @param Object|null $Object
* @return string
*/
public
function
transform
(
$object
)
{
if
(
!
$object
)
{
return
""
;
}
return
$object
->
getId
();
}
/**
* Transforms a string (id) to an object
*
* @param string $id
* @return Object|null
* @throws TransformationFailedException if object is not found.
*/
public
function
reverseTransform
(
$id
)
{
if
(
!
$id
)
{
return
null
;
}
$object
=
$this
->
om
->
getRepository
(
$this
->
class
)
->
find
(
$id
)
;
if
(
!
$object
)
{
throw
new
TransformationFailedException
();
}
return
$object
;
}
}
\ No newline at end of file
Form/Type/Select2CountryType.php
View file @
070b184d
...
...
@@ -2,7 +2,7 @@
/*
* Chill is a software for social workers
* Copyright (C) 2014
Julien Fastré <julien.fastre
@champs-libres.coop>
* Copyright (C) 2014
Champs-Libres <info
@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
...
...
@@ -25,6 +25,10 @@ use Chill\MainBundle\Templating\TranslatableStringHelper;
use
Symfony\Component\OptionsResolver\OptionsResolverInterface
;
use
Chill\MainBundle\Entity\Country
;
use
Symfony\Component\HttpFoundation\RequestStack
;
use
Doctrine\ORM\EntityRepository
;
use
Symfony\Component\Form\FormBuilderInterface
;
use
Chill\MainBundle\Form\Type\DataTransformer\ObjectToIdTransformer
;
use
Doctrine\Common\Persistence\ObjectManager
;
/**
* Extends choice to allow adding select2 library on widget
...
...
@@ -34,33 +38,52 @@ use Symfony\Component\HttpFoundation\RequestStack;
class
Select2CountryType
extends
AbstractType
{
/**
*
* @var RequestStack
*/
private
$requestStack
;
/**
* @var ObjectManager
*/
private
$em
;
public
function
__construct
(
RequestStack
$requestStack
)
public
function
__construct
(
RequestStack
$requestStack
,
ObjectManager
$em
)
{
$this
->
requestStack
=
$requestStack
;
$this
->
em
=
$em
;
}
public
function
getName
()
{
return
'select2_chill_country'
;
}
public
function
buildForm
(
FormBuilderInterface
$builder
,
array
$options
)
{
$transformer
=
new
ObjectToIdTransformer
(
$this
->
em
,
'Chill\MainBundle\Entity\Country'
);
$builder
->
addModelTransformer
(
$transformer
);
}
public
function
getParent
()
{
return
'select2_
entity
'
;
return
'select2_
choice
'
;
}
public
function
setDefaultOptions
(
OptionsResolverInterface
$resolver
)
{
$locale
=
$this
->
requestStack
->
getCurrentRequest
()
->
getLocale
();
$countries
=
$this
->
em
->
getRepository
(
'Chill\MainBundle\Entity\Country'
)
->
findAll
();
$choices
=
array
();
foreach
(
$countries
as
$c
)
{
$choices
[
$c
->
getId
()]
=
$c
->
getName
()[
$locale
];
}
asort
(
$choices
);
$resolver
->
setDefaults
(
array
(
'class'
=>
'Chill\MainBundle\Entity\Country'
,
'
property'
=>
'name['
.
$locale
.
']'
'
choices'
=>
$choices
));
}
}
Resources/config/services.yml
View file @
070b184d
...
...
@@ -52,6 +52,7 @@ services:
class
:
Chill\MainBundle\Form\Type\Select2CountryType
arguments
:
-
"
@request_stack"
-
"
@doctrine.orm.entity_manager"
tags
:
-
{
name
:
form.type
,
alias
:
select2_chill_country
}
...
...
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment