mirror of
				https://gitlab.com/Chill-Projet/chill-bundles.git
				synced 2025-10-31 01:08:26 +00:00 
			
		
		
		
	Compare commits
	
		
			6 Commits
		
	
	
		
			v3.0.0-RC9
			...
			20-update-
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
|  | bddb6e615e | ||
|  | a18ea30c8f | ||
|  | 2ba240525c | ||
|  | 5b76338fb0 | ||
|  | ce8399945a | ||
|  | 1605bc5d08 | 
| @@ -41,6 +41,11 @@ class Configuration implements ConfigurationInterface | ||||
|  | ||||
|         $rootNode | ||||
|             ->children() | ||||
|             ->scalarNode('phonenumber_default_country_code') | ||||
|             ->cannotBeEmpty() | ||||
|             ->isRequired() | ||||
|             ->defaultValue('+32') | ||||
|             ->end() // end of scalar 'phonenumber_default_country_code' | ||||
|             ->scalarNode('installation_name') | ||||
|             ->cannotBeEmpty() | ||||
|             ->defaultValue('Chill') | ||||
|   | ||||
| @@ -0,0 +1,47 @@ | ||||
| <?php | ||||
|  | ||||
| /** | ||||
|  * Chill is a software for social workers | ||||
|  * | ||||
|  * For the full copyright and license information, please view | ||||
|  * the LICENSE file that was distributed with this source code. | ||||
|  */ | ||||
|  | ||||
| declare(strict_types=1); | ||||
|  | ||||
| namespace Chill\PersonBundle\Form\DataTransformer; | ||||
|  | ||||
| use Symfony\Component\Form\DataTransformerInterface; | ||||
|  | ||||
| final class PhoneNumberTypeDataTransformer implements DataTransformerInterface | ||||
| { | ||||
|     private string $countryCodePrefix; | ||||
|  | ||||
|     public function __construct(string $countryCodePrefix) | ||||
|     { | ||||
|         $this->countryCodePrefix = $countryCodePrefix; | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * @param string $phoneNumber | ||||
|      */ | ||||
|     public function reverseTransform($phoneNumber): string | ||||
|     { | ||||
|         $phoneNumber = preg_replace('/[^0-9+]/', '', $phoneNumber); | ||||
|  | ||||
|         if (0 === strpos($phoneNumber, '00', 0)) { | ||||
|             $phoneNumber = substr_replace($phoneNumber, '+', 0, 2); | ||||
|         } | ||||
|  | ||||
|         if (0 === strpos($phoneNumber, '0', 0)) { | ||||
|             $phoneNumber = substr_replace($phoneNumber, $this->countryCodePrefix, 0, 1); | ||||
|         } | ||||
|  | ||||
|         return $phoneNumber; | ||||
|     } | ||||
|  | ||||
|     public function transform($phoneNumber) | ||||
|     { | ||||
|         return $phoneNumber; | ||||
|     } | ||||
| } | ||||
| @@ -15,7 +15,6 @@ use Chill\MainBundle\Phonenumber\PhonenumberHelper; | ||||
| use Chill\PersonBundle\Entity\PersonPhone; | ||||
| use Doctrine\ORM\EntityManagerInterface; | ||||
| use Symfony\Component\Form\AbstractType; | ||||
| use Symfony\Component\Form\Extension\Core\Type\TelType; | ||||
| use Symfony\Component\Form\Extension\Core\Type\TextType; | ||||
| use Symfony\Component\Form\FormBuilderInterface; | ||||
| use Symfony\Component\Form\FormEvent; | ||||
| @@ -36,7 +35,7 @@ class PersonPhoneType extends AbstractType | ||||
|  | ||||
|     public function buildForm(FormBuilderInterface $builder, array $options) | ||||
|     { | ||||
|         $builder->add('phonenumber', TelType::class, [ | ||||
|         $builder->add('phonenumber', PhoneNumberType::class, [ | ||||
|             'label' => 'Other phonenumber', | ||||
|             'required' => true, | ||||
|         ]); | ||||
|   | ||||
							
								
								
									
										53
									
								
								src/Bundle/ChillPersonBundle/Form/Type/PhoneNumberType.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										53
									
								
								src/Bundle/ChillPersonBundle/Form/Type/PhoneNumberType.php
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,53 @@ | ||||
| <?php | ||||
|  | ||||
| /** | ||||
|  * Chill is a software for social workers | ||||
|  * | ||||
|  * For the full copyright and license information, please view | ||||
|  * the LICENSE file that was distributed with this source code. | ||||
|  */ | ||||
|  | ||||
| declare(strict_types=1); | ||||
|  | ||||
| namespace Chill\PersonBundle\Form\Type; | ||||
|  | ||||
| use Chill\PersonBundle\Form\DataTransformer\PhoneNumberTypeDataTransformer; | ||||
| use Symfony\Component\DependencyInjection\ParameterBag\ParameterBagInterface; | ||||
| use Symfony\Component\Form\AbstractType; | ||||
| use Symfony\Component\Form\Extension\Core\Type\TelType; | ||||
| use Symfony\Component\Form\FormBuilderInterface; | ||||
| use Symfony\Component\OptionsResolver\OptionsResolver; | ||||
|  | ||||
| final class PhoneNumberType extends AbstractType | ||||
| { | ||||
|     private ParameterBagInterface $parameterBag; | ||||
|  | ||||
|     public function __construct(ParameterBagInterface $parameterBag) | ||||
|     { | ||||
|         $this->parameterBag = $parameterBag; | ||||
|     } | ||||
|  | ||||
|     public function buildForm(FormBuilderInterface $builder, array $options) | ||||
|     { | ||||
|         $builder | ||||
|             ->addViewTransformer( | ||||
|                 new PhoneNumberTypeDataTransformer($options['default_country_prefix']) | ||||
|             ); | ||||
|     } | ||||
|  | ||||
|     public function configureOptions(OptionsResolver $resolver) | ||||
|     { | ||||
|         $resolver | ||||
|             ->setDefined('default_country_prefix') | ||||
|             ->setAllowedTypes('default_country_prefix', 'string') | ||||
|             ->setDefaults([ | ||||
|                 // TODO: Is it the best way to do that? | ||||
|                 'default_country_prefix' => $this->parameterBag->get('chill_main.phonenumber_default_country_code') ?? '+32', | ||||
|             ]); | ||||
|     } | ||||
|  | ||||
|     public function getParent(): string | ||||
|     { | ||||
|         return TelType::class; | ||||
|     } | ||||
| } | ||||
| @@ -0,0 +1,89 @@ | ||||
| <?php | ||||
|  | ||||
| /** | ||||
|  * Chill is a software for social workers | ||||
|  * | ||||
|  * For the full copyright and license information, please view | ||||
|  * the LICENSE file that was distributed with this source code. | ||||
|  */ | ||||
|  | ||||
| declare(strict_types=1); | ||||
|  | ||||
| namespace Chill\PersonBundle\Tests\Form\Type; | ||||
|  | ||||
| use Chill\PersonBundle\Form\Type\PhoneNumberType; | ||||
| use Locale; | ||||
| use Symfony\Component\DependencyInjection\ParameterBag\ParameterBagInterface; | ||||
| use Symfony\Component\Form\PreloadedExtension; | ||||
| use Symfony\Component\Form\Test\TypeTestCase; | ||||
|  | ||||
| /** | ||||
|  * @internal | ||||
|  * @coversNothing | ||||
|  */ | ||||
| final class PhoneNumberTypeTest extends TypeTestCase | ||||
| { | ||||
|     private ParameterBagInterface $parameterBag; | ||||
|  | ||||
|     protected function setUp(): void | ||||
|     { | ||||
|         Locale::setDefault('en'); | ||||
|  | ||||
|         // mock any dependencies | ||||
|         $this->parameterBag = $this->createMock(ParameterBagInterface::class); | ||||
|  | ||||
|         // Mandatory | ||||
|         parent::setUp(); | ||||
|     } | ||||
|  | ||||
|     public function singleFieldProvider() | ||||
|     { | ||||
|         yield ['abc', [], '']; | ||||
|  | ||||
|         yield ['abc', ['default_country_prefix' => '+34'], '']; | ||||
|  | ||||
|         yield ['123', [], '123']; | ||||
|  | ||||
|         yield ['0,-03f212@%3g4 g5k 6789', [], '+32123456789']; | ||||
|  | ||||
|         yield ['0032 123456789', [], '+32123456789']; | ||||
|  | ||||
|         yield ['+32 123456789', ['default_country_prefix' => '+34'], '+32123456789']; | ||||
|  | ||||
|         yield ['0123456789', ['default_country_prefix' => '+33'], '+33123456789']; | ||||
|  | ||||
|         yield ['0486/540660', [], '+32486540660']; | ||||
|  | ||||
|         yield ['0486/540.660', ['default_country_prefix' => '+36'], '+36486540660']; | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * @dataProvider singleFieldProvider | ||||
|      */ | ||||
|     public function testSingleField(string $input, array $options, string $output) | ||||
|     { | ||||
|         $form = $this->factory->create(PhoneNumberType::class, null, $options); | ||||
|  | ||||
|         $form->submit($input); | ||||
|  | ||||
|         if (method_exists($form, 'getTransformationFailure') && $failure = $form->getTransformationFailure()) { | ||||
|             throw $failure; | ||||
|         } | ||||
|  | ||||
|         self::assertTrue($form->isSynchronized()); | ||||
|  | ||||
|         $view = $form->createView(); | ||||
|  | ||||
|         self::assertSame($output, $view->vars['value']); | ||||
|     } | ||||
|  | ||||
|     protected function getExtensions() | ||||
|     { | ||||
|         // create a type instance with the mocked dependencies | ||||
|         $type = new PhoneNumberType($this->parameterBag); | ||||
|  | ||||
|         return [ | ||||
|             new PreloadedExtension([$type], []), | ||||
|         ]; | ||||
|     } | ||||
| } | ||||
| @@ -98,3 +98,8 @@ services: | ||||
|         autowire: true | ||||
|         autoconfigure: true | ||||
|         resource: '../Workflow/' | ||||
|  | ||||
|     Chill\PersonBundle\Form\Type\: | ||||
|         resource: '../Form/Type' | ||||
|         tags: | ||||
|             - form.type | ||||
|   | ||||
| @@ -27,3 +27,34 @@ services: | ||||
|             $config: "%chill_person.accompanying_period_fields%" | ||||
|         tags: | ||||
|             - { name: form.type } | ||||
|  | ||||
|     chill.person.form.type.pick_person: | ||||
|         class: Chill\PersonBundle\Form\Type\PickPersonType | ||||
|         arguments: | ||||
|             - "@chill.person.repository.person" | ||||
|             - "@security.token_storage" | ||||
|             - "@chill.main.security.authorization.helper" | ||||
|             - '@Symfony\Component\Routing\Generator\UrlGeneratorInterface' | ||||
|             - '@Symfony\Component\Translation\TranslatorInterface' | ||||
|         tags: | ||||
|             - { name: form.type } | ||||
|  | ||||
|     Chill\PersonBundle\Form\Type\PersonAltNameType: | ||||
|         arguments: | ||||
|             $configHelper: '@Chill\PersonBundle\Config\ConfigPersonAltNamesHelper' | ||||
|             $translatableStringHelper: '@chill.main.helper.translatable_string' | ||||
|         tags: | ||||
|             - { name: form.type } | ||||
|  | ||||
|     Chill\PersonBundle\Form\Type\PersonPhoneType: | ||||
|         arguments: | ||||
|             $phonenumberHelper: '@Chill\MainBundle\Phonenumber\PhonenumberHelper' | ||||
|             $em: '@Doctrine\ORM\EntityManagerInterface' | ||||
|         tags: | ||||
|             - { name: form.type } | ||||
|  | ||||
|     Chill\PersonBundle\Form\Type\PhoneNumberType: | ||||
|         autowire: true | ||||
|         autoconfigure: true | ||||
|         tags: | ||||
|             - { name: form.type } | ||||
|   | ||||
| @@ -0,0 +1,64 @@ | ||||
| <?php | ||||
|  | ||||
| /** | ||||
|  * Chill is a software for social workers | ||||
|  * | ||||
|  * For the full copyright and license information, please view | ||||
|  * the LICENSE file that was distributed with this source code. | ||||
|  */ | ||||
|  | ||||
| declare(strict_types=1); | ||||
|  | ||||
| namespace Chill\Migrations\Person; | ||||
|  | ||||
| use Doctrine\DBAL\Schema\Schema; | ||||
| use Doctrine\Migrations\AbstractMigration; | ||||
|  | ||||
| /** | ||||
|  * Auto-generated Migration: Please modify to your needs! | ||||
|  */ | ||||
| final class Version20210518135515 extends AbstractMigration | ||||
| { | ||||
|     public function down(Schema $schema): void | ||||
|     { | ||||
|         $this->addSql('UPDATE chill_person_person SET phonenumber = :pn WHERE phonenumber IS NULL', ['pn' => '']); | ||||
|         $this->addSql('UPDATE chill_person_person SET mobilenumber = :pn WHERE mobilenumber IS NULL', ['pn' => '']); | ||||
|  | ||||
|         $this->addSql('ALTER TABLE chill_person_person ALTER phonenumber TYPE TEXT'); | ||||
|         $this->addSql('ALTER TABLE chill_person_person ALTER phonenumber DROP DEFAULT'); | ||||
|         $this->addSql('ALTER TABLE chill_person_person ALTER phonenumber SET NOT NULL'); | ||||
|         $this->addSql('COMMENT ON COLUMN chill_person_person.phonenumber IS NULL'); | ||||
|  | ||||
|         $this->addSql('ALTER TABLE chill_person_phone ALTER phonenumber TYPE TEXT'); | ||||
|         $this->addSql('ALTER TABLE chill_person_phone ALTER phonenumber DROP DEFAULT'); | ||||
|         $this->addSql('COMMENT ON COLUMN chill_person_phone.phonenumber IS NULL'); | ||||
|  | ||||
|         $this->addSql('ALTER TABLE chill_person_person ALTER mobilenumber TYPE TEXT'); | ||||
|         $this->addSql('ALTER TABLE chill_person_person ALTER mobilenumber DROP DEFAULT'); | ||||
|         $this->addSql('COMMENT ON COLUMN chill_person_person.mobilenumber IS NULL'); | ||||
|     } | ||||
|  | ||||
|     public function getDescription(): string | ||||
|     { | ||||
|         return ''; | ||||
|     } | ||||
|  | ||||
|     public function up(Schema $schema): void | ||||
|     { | ||||
|         $this->addSql('ALTER TABLE chill_person_person ALTER phonenumber TYPE VARCHAR(35)'); | ||||
|         $this->addSql('ALTER TABLE chill_person_person ALTER phonenumber DROP DEFAULT'); | ||||
|         $this->addSql('ALTER TABLE chill_person_person ALTER phonenumber DROP NOT NULL'); | ||||
|         $this->addSql('COMMENT ON COLUMN chill_person_person.phonenumber IS \'(DC2Type:phone_number)\''); | ||||
|  | ||||
|         $this->addSql('ALTER TABLE chill_person_phone ALTER phonenumber TYPE VARCHAR(35)'); | ||||
|         $this->addSql('ALTER TABLE chill_person_phone ALTER phonenumber DROP DEFAULT'); | ||||
|         $this->addSql('COMMENT ON COLUMN chill_person_phone.phonenumber IS \'(DC2Type:phone_number)\''); | ||||
|  | ||||
|         $this->addSql('ALTER TABLE chill_person_person ALTER mobilenumber TYPE VARCHAR(35)'); | ||||
|         $this->addSql('ALTER TABLE chill_person_person ALTER mobilenumber DROP DEFAULT'); | ||||
|         $this->addSql('COMMENT ON COLUMN chill_person_person.mobilenumber IS \'(DC2Type:phone_number)\''); | ||||
|  | ||||
|         $this->addSql('UPDATE chill_person_person SET phonenumber = NULL WHERE phonenumber=:pn', ['pn' => '']); | ||||
|         $this->addSql('UPDATE chill_person_person SET mobilenumber = NULL WHERE mobilenumber=:pn', ['pn' => '']); | ||||
|     } | ||||
| } | ||||
		Reference in New Issue
	
	Block a user