FIX [phonenumber][search] fix advanced search when using a phonenumber

This commit is contained in:
Julie Lenaerts 2023-01-25 16:14:59 +01:00
parent 583d7b24ba
commit c5f842076f
2 changed files with 20 additions and 2 deletions

View File

@ -70,6 +70,7 @@ class SearchController extends AbstractController
} }
if ($request->query->has('q')) { if ($request->query->has('q')) {
dump($request->query->get('q'));
$data = $search->convertTermsToFormData($searchProvider->parse( $data = $search->convertTermsToFormData($searchProvider->parse(
$request->query->get('q') $request->query->get('q')
)); ));

View File

@ -12,6 +12,7 @@ declare(strict_types=1);
namespace Chill\PersonBundle\Search; namespace Chill\PersonBundle\Search;
use Chill\MainBundle\Form\Type\ChillDateType; use Chill\MainBundle\Form\Type\ChillDateType;
use Chill\MainBundle\Form\Type\ChillPhoneNumberType;
use Chill\MainBundle\Pagination\PaginatorFactory; use Chill\MainBundle\Pagination\PaginatorFactory;
use Chill\MainBundle\Search\AbstractSearch; use Chill\MainBundle\Search\AbstractSearch;
use Chill\MainBundle\Search\HasAdvancedSearchFormInterface; use Chill\MainBundle\Search\HasAdvancedSearchFormInterface;
@ -24,6 +25,7 @@ use Chill\PersonBundle\Form\Type\GenderType;
use Chill\PersonBundle\Repository\PersonACLAwareRepositoryInterface; use Chill\PersonBundle\Repository\PersonACLAwareRepositoryInterface;
use DateTime; use DateTime;
use Exception; use Exception;
use libphonenumber\PhoneNumber;
use Symfony\Component\Form\Extension\Core\Type\TelType; use Symfony\Component\Form\Extension\Core\Type\TelType;
use Symfony\Component\Form\Extension\Core\Type\TextType; use Symfony\Component\Form\Extension\Core\Type\TextType;
use Symfony\Component\Form\FormBuilderInterface; use Symfony\Component\Form\FormBuilderInterface;
@ -94,7 +96,7 @@ class PersonSearch extends AbstractSearch implements HasAdvancedSearchFormInterf
'label' => 'Birthdate before', 'label' => 'Birthdate before',
'required' => false, 'required' => false,
]) ])
->add('phonenumber', TelType::class, [ ->add('phonenumber', ChillPhoneNumberType::class, [
'required' => false, 'required' => false,
'label' => 'Part of the phonenumber', 'label' => 'Part of the phonenumber',
]) ])
@ -116,11 +118,12 @@ class PersonSearch extends AbstractSearch implements HasAdvancedSearchFormInterf
$string .= empty($data['_default']) ? '' : $data['_default'] . ' '; $string .= empty($data['_default']) ? '' : $data['_default'] . ' ';
foreach (['firstname', 'lastname', 'gender', 'phonenumber', 'city'] as $key) { foreach (['firstname', 'lastname', 'gender', 'city'] as $key) {
$string .= empty($data[$key]) ? '' : $key . ':' . $string .= empty($data[$key]) ? '' : $key . ':' .
// add quote if contains spaces // add quote if contains spaces
(strpos($data[$key], ' ') !== false ? '"' . $data[$key] . '"' : $data[$key]) (strpos($data[$key], ' ') !== false ? '"' . $data[$key] . '"' : $data[$key])
. ' '; . ' ';
} }
foreach (['birthdate', 'birthdate-before', 'birthdate-after'] as $key) { foreach (['birthdate', 'birthdate-before', 'birthdate-after'] as $key) {
@ -130,6 +133,8 @@ class PersonSearch extends AbstractSearch implements HasAdvancedSearchFormInterf
$key . ':' . $data[$key]->format('Y-m-d') . ' '; $key . ':' . $data[$key]->format('Y-m-d') . ' ';
} }
$string .= empty($data['phonenumber']) ? '' : 'phonenumber:' . $data['phonenumber']->getNationalNumber();
return $string; return $string;
} }
@ -154,6 +159,18 @@ class PersonSearch extends AbstractSearch implements HasAdvancedSearchFormInterf
$data[$key] = $date ?? null; $data[$key] = $date ?? null;
} }
if (array_key_exists('phonenumber', $terms)) {
try {
$phonenumber = new PhoneNumber();
$phonenumber->setNationalNumber($terms['phonenumber']);
} catch (Exception $ex) {
throw new ParsingException("The date for {$key} is "
. 'not parsable', 0, $ex);
}
$data['phonenumber'] = $phonenumber ?? null;
}
return $data; return $data;
} }