Remove ReportSearch class and update services config

Removed the ReportSearch class from ChillReportBundle and updated the corresponding services configuration. This removal is part of a larger refactoring process to enhance maintainability, eliminate unused code and simplify application architecture. This will not affect the application's functionality as the class was not used.
This commit is contained in:
Julien Fastré 2023-12-14 23:05:18 +01:00
parent 312eb5ec7c
commit 4e1f46154c
Signed by: julienfastre
GPG Key ID: BDE2190974723FCB
2 changed files with 4 additions and 167 deletions

View File

@ -1,152 +0,0 @@
<?php
declare(strict_types=1);
/*
* 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.
*/
namespace Chill\ReportBundle\Search;
use Chill\MainBundle\Entity\Scope;
use Chill\MainBundle\Search\AbstractSearch;
use Chill\MainBundle\Search\ParsingException;
use Chill\MainBundle\Security\Authorization\AuthorizationHelper;
use Doctrine\ORM\EntityManagerInterface;
use Doctrine\ORM\QueryBuilder;
use Symfony\Component\DependencyInjection\ContainerAwareInterface;
use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface;
/**
* Search amongst reports.
*/
class ReportSearch extends AbstractSearch implements ContainerAwareInterface
{
use \Symfony\Component\DependencyInjection\ContainerAwareTrait;
private readonly \Chill\MainBundle\Entity\User $user;
public function __construct(
private readonly EntityManagerInterface $em,
private readonly AuthorizationHelper $helper,
TokenStorageInterface $tokenStorage
) {
if (!$tokenStorage->getToken()->getUser() instanceof \Chill\MainBundle\Entity\User) {
throw new \RuntimeException('an user must be associated with token');
}
$this->user = $tokenStorage->getToken()->getUser();
}
public function getOrder()
{
return 10000;
}
public function isActiveByDefault()
{
return false;
}
public function renderResult(array $terms, $start = 0, $limit = 50, array $options = [], $format = 'html')
{
return $this->container->get('templating')->render('@ChillReport/Search/results.html.twig', [
'reports' => $this->getReports($terms, $start, $limit),
'total' => $this->count($terms),
'pattern' => $this->recomposePattern($terms, ['date'], 'report'),
]);
}
public function supports($domain, $format = 'html')
{
return 'report' === $domain;
}
private function addACL(QueryBuilder $qb)
{
// adding join
$qb->join('r.person', 'p');
$role = 'CHILL_REPORT_SEE';
$reachableCenters = $this->helper->getReachableCenters($this->user, $role);
$whereElement = $qb->expr()->orX();
$i = 0;
foreach ($reachableCenters as $center) {
$reachableScopesId = array_map(
static fn (Scope $scope) => $scope->getId(),
$this->helper->getReachableScopes($this->user, $role, $center)
);
$whereElement->add(
$qb->expr()->andX(
$qb->expr()->eq('p.center', ':center_'.$i),
$qb->expr()->in('r.scope', ':reachable_scopes_'.$i)
)
);
$qb->setParameter('center_'.$i, $center);
$qb->setParameter('reachable_scopes_'.$i, $reachableScopesId);
}
return $whereElement;
}
/**
* @param array $terms the terms
*
* @return \Doctrine\ORM\QueryBuilder
*/
private function buildQuery(array $terms)
{
$query = $this->em->createQueryBuilder();
$query->from('ChillReportBundle:Report', 'r');
// throw a parsing exception if key 'date' and default is set
if (\array_key_exists('date', $terms) && '' !== $terms['_default']) {
throw new ParsingException('You may not set a date argument and a date in default');
}
// throw a parsing exception if no argument except report
if (!\array_key_exists('date', $terms) && '' === $terms['_default']) {
throw new ParsingException('You must provide either a date:YYYY-mm-dd argument or a YYYY-mm-dd default search');
}
if (\array_key_exists('date', $terms)) {
$query->andWhere($query->expr()->eq('r.date', ':date'))
->setParameter('date', $this->parseDate($terms['date']));
} elseif (\array_key_exists('_default', $terms)) {
$query->andWhere($query->expr()->eq('r.date', ':date'))
->setParameter('date', $this->parseDate($terms['_default']));
}
$query->andWhere($this->addACL($query));
return $query;
}
private function count(array $terms)
{
$qb = $this->buildQuery($terms);
$qb->select('COUNT(r.id)');
return $qb->getQuery()->getSingleScalarResult();
}
private function getReports(array $terms, $start, $limit)
{
$qb = $this->buildQuery($terms);
$qb->select('r')
->setMaxResults($limit)
->setFirstResult($start)
->orderBy('r.date', 'desc');
$reportQuery = $qb->getQuery();
$reportQuery->setFetchMode(\Chill\ReportBundle\Entity\Report::class, 'person', \Doctrine\ORM\Mapping\ClassMetadata::FETCH_EAGER);
return $reportQuery->getResult();
}
}

View File

@ -4,17 +4,6 @@ services:
# arguments: [@service_id, "plain_value", %parameter%] # arguments: [@service_id, "plain_value", %parameter%]
services: services:
chill.report.search:
class: Chill\ReportBundle\Search\ReportSearch
arguments:
- '@doctrine.orm.entity_manager'
- '@chill.main.security.authorization.helper'
- '@security.token_storage'
calls:
- [setContainer, ["@service_container"]]
tags:
- { name: chill.search, alias: 'report' }
chill.report.timeline: chill.report.timeline:
class: Chill\ReportBundle\Timeline\TimelineReportProvider class: Chill\ReportBundle\Timeline\TimelineReportProvider
arguments: arguments: