mirror of
https://gitlab.com/Chill-Projet/chill-bundles.git
synced 2025-06-07 18:44:08 +00:00
fix: SA: Fix "...Switch condition type..." rule.
Also fix a critical bug in `ReportList.php`. SA stands for Static Analysis.
This commit is contained in:
parent
7462babbeb
commit
5a85d497ab
@ -160,46 +160,6 @@ parameters:
|
||||
count: 1
|
||||
path: src/Bundle/ChillPersonBundle/Repository/SocialWork/ResultRepository.php
|
||||
|
||||
-
|
||||
message: "#^Switch condition type \\(Chill\\\\ReportBundle\\\\Export\\\\Export\\\\type\\) does not match case condition 'person_address_country_name' \\(string\\)\\.$#"
|
||||
count: 1
|
||||
path: src/Bundle/ChillReportBundle/Export/Export/ReportList.php
|
||||
|
||||
-
|
||||
message: "#^Switch condition type \\(Chill\\\\ReportBundle\\\\Export\\\\Export\\\\type\\) does not match case condition 'person_birthdate' \\(string\\)\\.$#"
|
||||
count: 1
|
||||
path: src/Bundle/ChillReportBundle/Export/Export/ReportList.php
|
||||
|
||||
-
|
||||
message: "#^Switch condition type \\(Chill\\\\ReportBundle\\\\Export\\\\Export\\\\type\\) does not match case condition 'person_countryOfBirth' \\(string\\)\\.$#"
|
||||
count: 1
|
||||
path: src/Bundle/ChillReportBundle/Export/Export/ReportList.php
|
||||
|
||||
-
|
||||
message: "#^Switch condition type \\(Chill\\\\ReportBundle\\\\Export\\\\Export\\\\type\\) does not match case condition 'person_gender' \\(string\\)\\.$#"
|
||||
count: 1
|
||||
path: src/Bundle/ChillReportBundle/Export/Export/ReportList.php
|
||||
|
||||
-
|
||||
message: "#^Switch condition type \\(Chill\\\\ReportBundle\\\\Export\\\\Export\\\\type\\) does not match case condition 'person_nationality' \\(string\\)\\.$#"
|
||||
count: 1
|
||||
path: src/Bundle/ChillReportBundle/Export/Export/ReportList.php
|
||||
|
||||
-
|
||||
message: "#^Switch condition type \\(Chill\\\\ReportBundle\\\\Export\\\\Export\\\\type\\) does not match case condition 'report_date' \\(string\\)\\.$#"
|
||||
count: 1
|
||||
path: src/Bundle/ChillReportBundle/Export/Export/ReportList.php
|
||||
|
||||
-
|
||||
message: "#^Switch condition type \\(Chill\\\\ReportBundle\\\\Export\\\\Export\\\\type\\) does not match case condition 'report_scope' \\(string\\)\\.$#"
|
||||
count: 1
|
||||
path: src/Bundle/ChillReportBundle/Export/Export/ReportList.php
|
||||
|
||||
-
|
||||
message: "#^Switch condition type \\(Chill\\\\ReportBundle\\\\Export\\\\Export\\\\type\\) does not match case condition 'report_user' \\(string\\)\\.$#"
|
||||
count: 1
|
||||
path: src/Bundle/ChillReportBundle/Export/Export/ReportList.php
|
||||
|
||||
-
|
||||
message: "#^Chill\\\\TaskBundle\\\\Entity\\\\RecurringTask\\:\\:__construct\\(\\) does not call parent constructor from Chill\\\\TaskBundle\\\\Entity\\\\AbstractTask\\.$#"
|
||||
count: 1
|
||||
|
@ -1,7 +1,7 @@
|
||||
<?php
|
||||
/*
|
||||
*
|
||||
*/
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace Chill\ReportBundle\Export\Export;
|
||||
|
||||
use Chill\MainBundle\Export\ListInterface;
|
||||
@ -9,6 +9,7 @@ use Chill\CustomFieldsBundle\Entity\CustomFieldsGroup;
|
||||
use Chill\MainBundle\Templating\TranslatableStringHelper;
|
||||
use Chill\ReportBundle\Security\Authorization\ReportVoter;
|
||||
use Chill\PersonBundle\Export\Declarations;
|
||||
use Symfony\Component\Form\FormBuilderInterface;
|
||||
use Symfony\Component\Security\Core\Role\Role;
|
||||
use Symfony\Component\Translation\TranslatorInterface;
|
||||
use Chill\CustomFieldsBundle\Service\CustomFieldProvider;
|
||||
@ -26,49 +27,28 @@ use Doctrine\ORM\EntityManagerInterface;
|
||||
use Chill\MainBundle\Entity\User;
|
||||
use Chill\CustomFieldsBundle\CustomFields\CustomFieldChoice;
|
||||
|
||||
/**
|
||||
*
|
||||
*
|
||||
* @author Julien Fastré <julien.fastre@champs-libres.coop>
|
||||
*/
|
||||
class ReportList implements ListInterface, ExportElementValidatedInterface
|
||||
{
|
||||
/**
|
||||
*
|
||||
* @var CustomFieldsGroup
|
||||
*/
|
||||
protected $customfieldsGroup;
|
||||
protected CustomFieldsGroup $customfieldsGroup;
|
||||
|
||||
/**
|
||||
*
|
||||
* @var TranslatableStringHelper
|
||||
*/
|
||||
protected $translatableStringHelper;
|
||||
protected TranslatableStringHelper $translatableStringHelper;
|
||||
|
||||
/**
|
||||
*
|
||||
* @var TranslatorInterface
|
||||
*/
|
||||
protected $translator;
|
||||
protected TranslatorInterface $translator;
|
||||
|
||||
/**
|
||||
*
|
||||
* @var CustomFieldProvider
|
||||
*/
|
||||
protected $customFieldProvider;
|
||||
protected CustomFieldProvider $customFieldProvider;
|
||||
|
||||
protected $em;
|
||||
protected EntityManagerInterface $em;
|
||||
|
||||
protected $fields = array(
|
||||
protected array $fields = [
|
||||
'person_id', 'person_firstName', 'person_lastName', 'person_birthdate',
|
||||
'person_placeOfBirth', 'person_gender', 'person_memo', 'person_email', 'person_phonenumber',
|
||||
'person_countryOfBirth', 'person_nationality', 'person_address_street_address_1',
|
||||
'person_address_street_address_2', 'person_address_valid_from', 'person_address_postcode_label',
|
||||
'person_address_postcode_code', 'person_address_country_name', 'person_address_country_code',
|
||||
'report_id', 'report_user', 'report_date', 'report_scope'
|
||||
);
|
||||
];
|
||||
|
||||
protected $slugs = [];
|
||||
protected array $slugs = [];
|
||||
|
||||
function __construct(
|
||||
CustomFieldsGroup $customfieldsGroup,
|
||||
@ -85,7 +65,7 @@ class ReportList implements ListInterface, ExportElementValidatedInterface
|
||||
}
|
||||
|
||||
|
||||
public function buildForm(\Symfony\Component\Form\FormBuilderInterface $builder)
|
||||
public function buildForm(FormBuilderInterface $builder)
|
||||
{
|
||||
$choices = array_combine($this->fields, $this->fields);
|
||||
|
||||
@ -97,7 +77,7 @@ class ReportList implements ListInterface, ExportElementValidatedInterface
|
||||
}
|
||||
|
||||
// Add a checkbox to select fields
|
||||
$builder->add('fields', ChoiceType::class, array(
|
||||
$builder->add('fields', ChoiceType::class, [
|
||||
'multiple' => true,
|
||||
'expanded' => true,
|
||||
'choices' => $choices,
|
||||
@ -106,11 +86,11 @@ class ReportList implements ListInterface, ExportElementValidatedInterface
|
||||
// add a 'data-display-target' for address fields
|
||||
if (substr($val, 0, 8) === 'address_') {
|
||||
return ['data-display-target' => 'address_date'];
|
||||
} else {
|
||||
return [];
|
||||
}
|
||||
|
||||
return [];
|
||||
},
|
||||
'choice_label' => function($key, $label) {
|
||||
'choice_label' => function(string $key, string $label): string {
|
||||
switch (\substr($key, 0, 7)) {
|
||||
case 'person_':
|
||||
return $this->translator->trans(\substr($key, 7, \strlen($key) - 7)).
|
||||
@ -123,7 +103,7 @@ class ReportList implements ListInterface, ExportElementValidatedInterface
|
||||
' ('.$this->translator->trans("Report's question").')';;
|
||||
}
|
||||
},
|
||||
'constraints' => [new Callback(array(
|
||||
'constraints' => [new Callback([
|
||||
'callback' => function($selected, ExecutionContextInterface $context) {
|
||||
if (count($selected) === 0) {
|
||||
$context->buildViolation('You must select at least one element')
|
||||
@ -131,24 +111,25 @@ class ReportList implements ListInterface, ExportElementValidatedInterface
|
||||
->addViolation();
|
||||
}
|
||||
}
|
||||
))]
|
||||
));
|
||||
])]
|
||||
]);
|
||||
|
||||
// add a date field for addresses
|
||||
$builder->add('address_date', ChillDateType::class, array(
|
||||
$builder->add('address_date', ChillDateType::class, [
|
||||
'label' => "Address valid at this date",
|
||||
'data' => new \DateTime(),
|
||||
'required' => false,
|
||||
'block_name' => 'list_export_form_address_date'
|
||||
));
|
||||
]);
|
||||
}
|
||||
|
||||
public function validateForm($data, ExecutionContextInterface $context)
|
||||
{
|
||||
// get the field starting with address_
|
||||
$addressFields = array_filter(function($el) {
|
||||
return substr($el, 0, 8) === 'address_';
|
||||
}, $this->fields);
|
||||
$addressFields = array_filter(
|
||||
$this->fields,
|
||||
static fn(string $el): bool => substr($el, 0, 8) === 'address_'
|
||||
);
|
||||
|
||||
// check if there is one field starting with address in data
|
||||
if (count(array_intersect($data['fields'], $addressFields)) > 0) {
|
||||
@ -177,7 +158,7 @@ class ReportList implements ListInterface, ExportElementValidatedInterface
|
||||
|
||||
public function getAllowedFormattersTypes()
|
||||
{
|
||||
return array(FormatterInterface::TYPE_LIST);
|
||||
return [FormatterInterface::TYPE_LIST];
|
||||
}
|
||||
|
||||
public function getDescription()
|
||||
@ -190,13 +171,6 @@ class ReportList implements ListInterface, ExportElementValidatedInterface
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*
|
||||
* @param type $key
|
||||
* @param array $values
|
||||
* @param type $data
|
||||
*/
|
||||
public function getLabels($key, array $values, $data): \Closure
|
||||
{
|
||||
switch ($key) {
|
||||
@ -284,7 +258,7 @@ class ReportList implements ListInterface, ExportElementValidatedInterface
|
||||
->getRepository('ChillMainBundle:Country');
|
||||
|
||||
// load all countries in a single query
|
||||
$countryRepository->findBy(array('countryCode' => $values));
|
||||
$countryRepository->findBy(['countryCode' => $values]);
|
||||
|
||||
return function($value) use ($key, $countryRepository) {
|
||||
if ($value === '_header') { return \strtolower($key); }
|
||||
@ -317,9 +291,9 @@ class ReportList implements ListInterface, ExportElementValidatedInterface
|
||||
return $value;
|
||||
|
||||
};
|
||||
} else {
|
||||
return $this->getLabelForCustomField($key, $values, $data);
|
||||
}
|
||||
|
||||
return $this->getLabelForCustomField($key, $values, $data);
|
||||
}
|
||||
|
||||
}
|
||||
@ -330,7 +304,7 @@ class ReportList implements ListInterface, ExportElementValidatedInterface
|
||||
/* @var $cf CustomField */
|
||||
$cf = $this->em
|
||||
->getRepository(CustomField::class)
|
||||
->findOneBy(array('slug' => $this->DQLToSlug($key)));
|
||||
->findOneBy(['slug' => $this->DQLToSlug($key)]);
|
||||
|
||||
$cfType = $this->customFieldProvider->getCustomFieldByType($cf->getType());
|
||||
$defaultFunction = function($value) use ($cf) {
|
||||
@ -358,19 +332,19 @@ class ReportList implements ListInterface, ExportElementValidatedInterface
|
||||
|
||||
if ($slugChoice === '_other' and $cfType->isChecked($cf, $choiceSlug, $decoded)) {
|
||||
return $cfType->extractOtherValue($cf, $decoded);
|
||||
} else {
|
||||
return $cfType->isChecked($cf, $slugChoice, $decoded);
|
||||
}
|
||||
|
||||
return $cfType->isChecked($cf, $slugChoice, $decoded);
|
||||
};
|
||||
|
||||
} else {
|
||||
return $defaultFunction;
|
||||
}
|
||||
|
||||
return $defaultFunction;
|
||||
}
|
||||
|
||||
public function getQueryKeys($data)
|
||||
{
|
||||
$fields = array();
|
||||
$fields = [];
|
||||
|
||||
foreach ($data['fields'] as $key) {
|
||||
if (in_array($key, $this->fields)) {
|
||||
@ -382,16 +356,9 @@ class ReportList implements ListInterface, ExportElementValidatedInterface
|
||||
return \array_merge($fields, \array_keys($this->slugs));
|
||||
}
|
||||
|
||||
/**
|
||||
* clean a slug to be usable by DQL
|
||||
*
|
||||
* @param string $slugsanitize
|
||||
* @param string $type the type of the customfield, if required (currently only for choices)
|
||||
* @return string
|
||||
*/
|
||||
private function slugToDQL($slug, $type = "default", array $additionalInfos = [])
|
||||
{
|
||||
$uid = 'slug_'.\uniqid();
|
||||
$uid = 'slug_' . \uniqid('', true);
|
||||
|
||||
$this->slugs[$uid] = [
|
||||
'slug' => $slug,
|
||||
@ -407,11 +374,6 @@ class ReportList implements ListInterface, ExportElementValidatedInterface
|
||||
return $this->slugs[$cleanedSlug]['slug'];
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param type $cleanedSlug
|
||||
* @return an array with keys = 'slug', 'type', 'additionnalInfo'
|
||||
*/
|
||||
private function extractInfosFromSlug($slug)
|
||||
{
|
||||
return $this->slugs[$slug];
|
||||
@ -437,7 +399,7 @@ class ReportList implements ListInterface, ExportElementValidatedInterface
|
||||
return 'report';
|
||||
}
|
||||
|
||||
public function initiateQuery(array $requiredModifiers, array $acl, array $data = array())
|
||||
public function initiateQuery(array $requiredModifiers, array $acl, array $data = [])
|
||||
{
|
||||
$centers = array_map(function($el) { return $el['center']; }, $acl);
|
||||
|
||||
@ -533,17 +495,14 @@ class ReportList implements ListInterface, ExportElementValidatedInterface
|
||||
}
|
||||
}
|
||||
|
||||
$qb
|
||||
->from(Report::class, 'report')
|
||||
->leftJoin('report.person', 'person')
|
||||
->join('person.center', 'center')
|
||||
->andWhere($qb->expr()->eq('report.cFGroup', ':cFGroup'))
|
||||
->setParameter('cFGroup', $this->customfieldsGroup)
|
||||
->andWhere('center IN (:authorized_centers)')
|
||||
->setParameter('authorized_centers', $centers);
|
||||
;
|
||||
|
||||
return $qb;
|
||||
return $qb
|
||||
->from(Report::class, 'report')
|
||||
->leftJoin('report.person', 'person')
|
||||
->join('person.center', 'center')
|
||||
->andWhere($qb->expr()->eq('report.cFGroup', ':cFGroup'))
|
||||
->setParameter('cFGroup', $this->customfieldsGroup)
|
||||
->andWhere('center IN (:authorized_centers)')
|
||||
->setParameter('authorized_centers', $centers);
|
||||
}
|
||||
|
||||
public function requiredRole()
|
||||
|
Loading…
x
Reference in New Issue
Block a user