cs: Fix code style (safe rules only).

This commit is contained in:
Pol Dellaiera
2021-11-23 14:06:38 +01:00
parent 149d7ce991
commit 8f96a1121d
1223 changed files with 65199 additions and 64625 deletions

View File

@@ -1,23 +1,30 @@
<?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\MainBundle\Search;
use Chill\MainBundle\Search\Entity\SearchUserApiProvider;
use Chill\MainBundle\Serializer\Model\Collection;
use Chill\MainBundle\Pagination\PaginatorFactory;
use Chill\PersonBundle\Search\SearchPersonApiProvider;
use Chill\ThirdPartyBundle\Search\ThirdPartyApiSearch;
use Chill\MainBundle\Serializer\Model\Collection;
use Doctrine\DBAL\Types\Types;
use Doctrine\ORM\EntityManagerInterface;
use Doctrine\ORM\Query\ResultSetMappingBuilder;
use Chill\MainBundle\Search\SearchProvider;
use Symfony\Component\VarDumper\Resources\functions\dump;
use function array_map;
use function array_merge;
use function implode;
use function strtr;
class SearchApi
{
private EntityManagerInterface $em;
private PaginatorFactory $paginator;
private iterable $providers = [];
@@ -54,111 +61,25 @@ class SearchApi
return new Collection($results, $paginator);
}
private function findQueries($pattern, array $types, array $parameters): array
{
return \array_map(
fn($p) => $p->provideQuery($pattern, $parameters),
$this->findProviders($pattern, $types, $parameters),
);
}
private function findProviders(string $pattern, array $types, array $parameters): array
{
$providers = [];
foreach ($this->providers as $provider) {
if ($provider->supportsTypes($pattern, $types, $parameters)) {
$providers[] = $provider;
}
}
return $providers;
}
private function countItems($providers, $types, $parameters): int
{
list($countQuery, $parameters) = $this->buildCountQuery($providers, $types, $parameters);
$rsmCount = new ResultSetMappingBuilder($this->em);
$rsmCount->addScalarResult('count', 'count');
$countNq = $this->em->createNativeQuery($countQuery, $rsmCount);
$countNq->setParameters($parameters);
return (int) $countNq->getSingleScalarResult();
}
private function buildCountQuery(array $queries, $types, $parameters)
{
$query = "SELECT SUM(c) AS count FROM ({union_unordered}) AS sq";
$query = 'SELECT SUM(c) AS count FROM ({union_unordered}) AS sq';
$unions = [];
$parameters = [];
foreach ($queries as $q) {
$unions[] = $q->buildQuery(true);
$parameters = \array_merge($parameters, $q->buildParameters(true));
$parameters = array_merge($parameters, $q->buildParameters(true));
}
$unionUnordered = \implode(" UNION ", $unions);
$unionUnordered = implode(' UNION ', $unions);
return [
\strtr($query, [ '{union_unordered}' => $unionUnordered ]),
$parameters
strtr($query, ['{union_unordered}' => $unionUnordered]),
$parameters,
];
}
private function buildUnionQuery(array $queries, $types, $parameters)
{
$query = "{unions} ORDER BY pertinence DESC";
$unions = [];
$parameters = [];
foreach ($queries as $q) {
$unions[] = $q->buildQuery();
$parameters = \array_merge($parameters, $q->buildParameters());
}
$union = \implode(" UNION ", $unions);
return [
\strtr($query, [ '{unions}' => $union]),
$parameters
];
}
private function fetchRawResult($queries, $types, $parameters, $paginator): array
{
list($union, $parameters) = $this->buildUnionQuery($queries, $types, $parameters);
$rsm = new ResultSetMappingBuilder($this->em);
$rsm->addScalarResult('key', 'key', Types::STRING)
->addScalarResult('metadata', 'metadata', Types::JSON)
->addScalarResult('pertinence', 'pertinence', Types::FLOAT)
;
$nq = $this->em->createNativeQuery($union, $rsm);
$nq->setParameters($parameters);
return $nq->getResult();
}
private function prepareProviders(array $rawResults)
{
$metadatas = [];
$providers = [];
foreach ($rawResults as $r) {
foreach ($this->providers as $k => $p) {
if ($p->supportsResult($r['key'], $r['metadata'])) {
$metadatas[$k][] = $r['metadata'];
$providers[$k] = $p;
break;
}
}
}
foreach ($metadatas as $k => $m) {
$providers[$k]->prepare($m);
}
}
private function buildResults(array $rawResults): array
{
$items = [];
@@ -170,6 +91,7 @@ class SearchApi
->setResult(
$p->getResult($r['key'], $r['metadata'], $r['pertinence'])
);
break;
}
}
@@ -177,4 +99,90 @@ class SearchApi
return $items;
}
private function buildUnionQuery(array $queries, $types, $parameters)
{
$query = '{unions} ORDER BY pertinence DESC';
$unions = [];
$parameters = [];
foreach ($queries as $q) {
$unions[] = $q->buildQuery();
$parameters = array_merge($parameters, $q->buildParameters());
}
$union = implode(' UNION ', $unions);
return [
strtr($query, ['{unions}' => $union]),
$parameters,
];
}
private function countItems($providers, $types, $parameters): int
{
[$countQuery, $parameters] = $this->buildCountQuery($providers, $types, $parameters);
$rsmCount = new ResultSetMappingBuilder($this->em);
$rsmCount->addScalarResult('count', 'count');
$countNq = $this->em->createNativeQuery($countQuery, $rsmCount);
$countNq->setParameters($parameters);
return (int) $countNq->getSingleScalarResult();
}
private function fetchRawResult($queries, $types, $parameters, $paginator): array
{
[$union, $parameters] = $this->buildUnionQuery($queries, $types, $parameters);
$rsm = new ResultSetMappingBuilder($this->em);
$rsm->addScalarResult('key', 'key', Types::STRING)
->addScalarResult('metadata', 'metadata', Types::JSON)
->addScalarResult('pertinence', 'pertinence', Types::FLOAT);
$nq = $this->em->createNativeQuery($union, $rsm);
$nq->setParameters($parameters);
return $nq->getResult();
}
private function findProviders(string $pattern, array $types, array $parameters): array
{
$providers = [];
foreach ($this->providers as $provider) {
if ($provider->supportsTypes($pattern, $types, $parameters)) {
$providers[] = $provider;
}
}
return $providers;
}
private function findQueries($pattern, array $types, array $parameters): array
{
return array_map(
fn ($p) => $p->provideQuery($pattern, $parameters),
$this->findProviders($pattern, $types, $parameters),
);
}
private function prepareProviders(array $rawResults)
{
$metadatas = [];
$providers = [];
foreach ($rawResults as $r) {
foreach ($this->providers as $k => $p) {
if ($p->supportsResult($r['key'], $r['metadata'])) {
$metadatas[$k][] = $r['metadata'];
$providers[$k] = $p;
break;
}
}
}
foreach ($metadatas as $k => $m) {
$providers[$k]->prepare($m);
}
}
}