From 2eb30d2ae8d1a97a51eb05e11ac644175f55c7c9 Mon Sep 17 00:00:00 2001 From: Pol Dellaiera Date: Tue, 9 Nov 2021 15:17:24 +0100 Subject: [PATCH] Fix issues reported by PHPStan. --- .../AccompanyingCourseDocumentRepository.php | 6 +- .../CompilerPass/ACLFlagsCompilerPass.php | 19 +- .../Widget/AbstractWidgetsCompilerPass.php | 167 +++++++++--------- .../Repository/UserRepository.php | 1 + .../Util/DateRangeCovering.php | 16 +- .../OneToOneEntityPersonCRUDController.php | 46 ++--- .../Household/HouseholdMembersRepository.php | 6 +- 7 files changed, 124 insertions(+), 137 deletions(-) diff --git a/src/Bundle/ChillDocStoreBundle/EntityRepository/AccompanyingCourseDocumentRepository.php b/src/Bundle/ChillDocStoreBundle/EntityRepository/AccompanyingCourseDocumentRepository.php index 383529f52..7b7f1c1b1 100644 --- a/src/Bundle/ChillDocStoreBundle/EntityRepository/AccompanyingCourseDocumentRepository.php +++ b/src/Bundle/ChillDocStoreBundle/EntityRepository/AccompanyingCourseDocumentRepository.php @@ -1,8 +1,10 @@ - */ class ACLFlagsCompilerPass implements CompilerPassInterface { public function process(ContainerBuilder $container) { $permissionGroupType = $container->getDefinition(PermissionsGroupType::class); - + foreach($container->findTaggedServiceIds('chill_main.flags') as $id => $tags) { $reference = new Reference($id); - + foreach ($tags as $tag) { switch($tag['scope']) { case PermissionsGroupType::FLAG_SCOPE: - + $permissionGroupType->addMethodCall('addFlagProvider', [ $reference ]); break; default: - throw new \LogicalException(sprintf( + throw new LogicException(sprintf( "This tag 'scope' is not implemented: %s, on service with id %s", $tag['scope'], $id) ); } diff --git a/src/Bundle/ChillMainBundle/DependencyInjection/Widget/AbstractWidgetsCompilerPass.php b/src/Bundle/ChillMainBundle/DependencyInjection/Widget/AbstractWidgetsCompilerPass.php index d26e09293..e0dffdb21 100644 --- a/src/Bundle/ChillMainBundle/DependencyInjection/Widget/AbstractWidgetsCompilerPass.php +++ b/src/Bundle/ChillMainBundle/DependencyInjection/Widget/AbstractWidgetsCompilerPass.php @@ -30,27 +30,27 @@ use Chill\MainBundle\DependencyInjection\Widget\HasWidgetFactoriesExtensionInter /** * Compile the configurations and inject required service into container. - * + * * The widgets are services tagged with : - * + * * ``` * { name: chill_widget, alias: my_alias, place: my_place } * ``` - * - * Or, if the tag does not exist or if you need to add some config to your + * + * Or, if the tag does not exist or if you need to add some config to your * service depending on the config, you should use a `WidgetFactory` (see * `WidgetFactoryInterface`. - * - * To reuse this compiler pass, simple execute the doProcess metho in your + * + * To reuse this compiler pass, simple execute the doProcess metho in your * compiler. Example : - * + * * ``` * namespace Chill\MainBundle\DependencyInjection\CompilerPass; - * + * * use Symfony\Component\DependencyInjection\ContainerBuilder; * use Chill\MainBundle\DependencyInjection\Widget\AbstractWidgetsCompilerPass; * class WidgetsCompilerPass extends AbstractWidgetsCompilerPass { - * + * * public function process(ContainerBuilder $container) * { * $this->doProcess($container, 'chill_main', 'chill_main.widgets'); @@ -58,58 +58,58 @@ use Chill\MainBundle\DependencyInjection\Widget\HasWidgetFactoriesExtensionInter * } * ``` * - * + * */ abstract class AbstractWidgetsCompilerPass implements CompilerPassInterface { private $widgetServices = array(); - + /** * * @var WidgetFactoryInterface[] */ private $widgetFactories; - + /** * The service which will manage the widgets - * + * * @var string */ const WIDGET_MANAGER = 'chill.main.twig.widget'; - + /** * the method wich register the widget into give service. */ const WIDGET_MANAGER_METHOD_REGISTER = 'addWidget'; - + /** * the value of the `name` key in service definitions's tag - * + * * @var string */ const WIDGET_SERVICE_TAG_NAME = 'chill_widget'; - + /** - * the key used to collect the alias in the service definition's tag. - * the alias must be + * the key used to collect the alias in the service definition's tag. + * the alias must be * injected into the configuration under 'alias' key. - * + * * @var string */ const WIDGET_SERVICE_TAG_ALIAS = 'alias'; - + /** * the key used to collect the authorized place in the service definition's tag - * + * * @var string */ const WIDGET_SERVICE_TAG_PLACES = 'place'; - + /** * the key to use to order widget for a given place */ const WIDGET_CONFIG_ORDER = 'order'; - + /** * the key to use to identify widget for a given place */ @@ -118,24 +118,25 @@ abstract class AbstractWidgetsCompilerPass implements CompilerPassInterface /** * process the configuration and the container to add the widget available - * + * * @param ContainerBuilder $container * @param string $extension the extension of your bundle * @param string $containerWidgetConfigParameterName the key under which we can use the widget configuration * @throws \LogicException * @throws \UnexpectedValueException if the given extension does not implement HasWidgetExtensionInterface - * @throws \InvalidConfigurationException if there are errors in the config */ - public function doProcess(ContainerBuilder $container, $extension, - $containerWidgetConfigParameterName) - { + public function doProcess( + ContainerBuilder $container, + $extension, + $containerWidgetConfigParameterName + ) { if (!$container->hasDefinition(self::WIDGET_MANAGER)) { throw new \LogicException("the service ".self::WIDGET_MANAGER." should". " be present. It is required by ".self::class); } - + $managerDefinition = $container->getDefinition(self::WIDGET_MANAGER); - + // collect the widget factories /* @var $extensionClass HasWidgetFactoriesExtensionInterface */ $extensionClass = $container->getExtension($extension); @@ -148,19 +149,19 @@ abstract class AbstractWidgetsCompilerPass implements CompilerPassInterface HasWidgetFactoriesExtensionInterface::class, get_class($extensionClass))); } - - + + $this->widgetFactories = $extensionClass->getWidgetFactories(); - + // collect the availabled tagged services $this->collectTaggedServices($container); - + // collect the widgets and their config : $widgetParameters = $container->getParameter($containerWidgetConfigParameterName); - + // and add them to the delegated_block foreach($widgetParameters as $place => $widgets) { - + foreach ($widgets as $param) { $alias = $param[self::WIDGET_CONFIG_ALIAS]; // check that the service exists @@ -168,43 +169,43 @@ abstract class AbstractWidgetsCompilerPass implements CompilerPassInterface throw new InvalidConfigurationException(sprintf("The alias %s". " is not defined.", $alias)); } - + // check that the widget is allowed at this place if (!$this->isPlaceAllowedForWidget($place, $alias, $container)) { - throw new \InvalidConfigurationException(sprintf( + throw new InvalidConfigurationException(sprintf( "The widget with alias %s is not allowed at place %s", - $alias, + $alias, $place )); } - + // get the order, eventually corrected - $order = $this->cacheAndGetOrdering($place, $param[self::WIDGET_CONFIG_ORDER]); - + $order = $this->cacheAndGetOrdering($place, $param[self::WIDGET_CONFIG_ORDER]); + // register the widget with config to the service, using the method // `addWidget` if ($this->widgetServices[$alias] instanceof WidgetFactoryInterface) { /* @var $factory WidgetFactoryInterface */ $factory = $this->widgetServices[$alias]; // get the config (under the key which equals to widget_alias - $config = isset($param[$factory->getWidgetAlias()]) ? + $config = isset($param[$factory->getWidgetAlias()]) ? $param[$factory->getWidgetAlias()] : array(); // register the service into the container - $serviceId =$this->registerServiceIntoContainer($container, + $serviceId =$this->registerServiceIntoContainer($container, $factory, $place, $order, $config); - + $managerDefinition->addMethodCall(self::WIDGET_MANAGER_METHOD_REGISTER, array( - $place, - $order, - new Reference($serviceId), + $place, + $order, + new Reference($serviceId), $config )); } else { $managerDefinition->addMethodCall(self::WIDGET_MANAGER_METHOD_REGISTER, array( - $place, - $order, + $place, + $order, new Reference($this->widgetServices[$alias]), array() // the config is alway an empty array )); @@ -212,10 +213,10 @@ abstract class AbstractWidgetsCompilerPass implements CompilerPassInterface } } } - + /** * register the service into container. - * + * * @param ContainerBuilder $container * @param WidgetFactoryInterface $factory * @param string $place @@ -231,28 +232,28 @@ abstract class AbstractWidgetsCompilerPass implements CompilerPassInterface array $config ) { $serviceId = $factory->getServiceId($container, $place, $order, $config); - $definition = $factory->createDefinition($container, $place, + $definition = $factory->createDefinition($container, $place, $order, $config); $container->setDefinition($serviceId, $definition); - + return $serviceId; } - + /** * cache of ordering by place. - * + * * @internal used by function cacheAndGetOrdering * @var array */ private $cacheOrdering = array(); - + /** * check if the ordering has already be used for the given $place and, * if yes, correct the ordering by incrementation of 1 until the ordering * has not be used. - * + * * recursive method. - * + * * @param string $place * @param float $ordering * @return float @@ -262,7 +263,7 @@ abstract class AbstractWidgetsCompilerPass implements CompilerPassInterface if (!array_key_exists($place, $this->cacheOrdering)) { $this->cacheOrdering[$place] = array(); } - + // check if the order exists if (array_search($ordering, $this->cacheOrdering[$place])) { // if the order exists, increment of 1 and try again @@ -270,14 +271,14 @@ abstract class AbstractWidgetsCompilerPass implements CompilerPassInterface } else { // cache the ordering $this->cacheOrdering[$place][] = $ordering; - + return $ordering; } } - + /** * get the places where the service is allowed - * + * * @param Definition $definition * @return unknown */ @@ -288,7 +289,7 @@ abstract class AbstractWidgetsCompilerPass implements CompilerPassInterface ->getAllowedPlaces())) { return true; } - + } else { $definition = $container->findDefinition($this->widgetServices[$widgetAlias]); @@ -300,17 +301,17 @@ abstract class AbstractWidgetsCompilerPass implements CompilerPassInterface } } } - + return false; } - + /** * This method collect all service tagged with `self::WIDGET_SERVICE_TAG`, and * add also the widget defined by factories - * + * * This method also check that the service is correctly tagged with `alias` and * `places`, or the factory give a correct alias and more than one place. - * + * * @param ContainerBuilder $container * @throws InvalidConfigurationException * @throws InvalidArgumentException @@ -320,13 +321,13 @@ abstract class AbstractWidgetsCompilerPass implements CompilerPassInterface // first, check the service tagged in service definition foreach ($container->findTaggedServiceIds(self::WIDGET_SERVICE_TAG_NAME) as $id => $attrs) { foreach ($attrs as $attr) { - + // check the alias is set if (!isset($attr[self::WIDGET_SERVICE_TAG_ALIAS])) { throw new InvalidConfigurationException("you should add an ".self::WIDGET_SERVICE_TAG_ALIAS. " key on the service ".$id); } - + // check the place is set if (!isset($attr[self::WIDGET_SERVICE_TAG_PLACES])) { throw new InvalidConfigurationException(sprintf( @@ -335,54 +336,54 @@ abstract class AbstractWidgetsCompilerPass implements CompilerPassInterface $id )); } - + // check the alias does not exists yet if (array_key_exists($attr[self::WIDGET_SERVICE_TAG_ALIAS], $this->widgetServices)) { throw new InvalidArgumentException("a service has already be defined with the ". self::WIDGET_SERVICE_TAG_ALIAS." ".$attr[self::WIDGET_SERVICE_TAG_ALIAS]); } - + // register the service as available $this->widgetServices[$attr[self::WIDGET_SERVICE_TAG_ALIAS]] = $id; } } - + // add the services defined by factories foreach($this->widgetFactories as $factory) { /* @var $factory WidgetFactoryInterface */ $alias = $factory->getWidgetAlias(); - + // check the alias is not empty if (empty($alias)) { throw new \LogicException(sprintf( "the widget factory %s returns an empty alias", get_class($factory))); } - + // check the places are not empty if (!is_array($factory->getAllowedPlaces())) { throw new \UnexpectedValueException("the method 'getAllowedPlaces' " . "should return a non-empty array. Unexpected value on ". get_class($factory)); } - + if (count($factory->getAllowedPlaces()) == 0) { throw new \LengthException("The method 'getAllowedPlaces' should " . "return a non-empty array, but returned 0 elements on ". get_class($factory).'::getAllowedPlaces()'); } - + // check the alias does not exists yet if (array_key_exists($alias, $this->widgetServices)) { throw new InvalidArgumentException("a service has already be defined with the ". self::WIDGET_SERVICE_TAG_ALIAS." ".$alias); } - + // register the factory as available $this->widgetServices[$factory->getWidgetAlias()] = $factory; - + } } - - -} \ No newline at end of file + + +} diff --git a/src/Bundle/ChillMainBundle/Repository/UserRepository.php b/src/Bundle/ChillMainBundle/Repository/UserRepository.php index 825a1600e..80a9a08a5 100644 --- a/src/Bundle/ChillMainBundle/Repository/UserRepository.php +++ b/src/Bundle/ChillMainBundle/Repository/UserRepository.php @@ -4,6 +4,7 @@ declare(strict_types=1); namespace Chill\MainBundle\Repository; +use Chill\MainBundle\Entity\GroupCenter; use Chill\MainBundle\Entity\User; use Doctrine\ORM\EntityManagerInterface; use Doctrine\ORM\EntityRepository; diff --git a/src/Bundle/ChillMainBundle/Util/DateRangeCovering.php b/src/Bundle/ChillMainBundle/Util/DateRangeCovering.php index 2b168f18b..a10ebb883 100644 --- a/src/Bundle/ChillMainBundle/Util/DateRangeCovering.php +++ b/src/Bundle/ChillMainBundle/Util/DateRangeCovering.php @@ -5,15 +5,15 @@ namespace Chill\MainBundle\Util; /** * Utilities to compare date periods * - * This class allow to compare periods when there are period covering. The + * This class allow to compare periods when there are period covering. The * argument `minCovers` allow to find also when there are more than 2 period - * which intersects. + * which intersects. * - * Example: a team may have maximum 2 leaders on a same period: you will + * Example: a team may have maximum 2 leaders on a same period: you will * find here all periods where there are more than 2 leaders. * * Usage: - * + * * ```php * $cover = new DateRangeCovering(2); // 2 means we will have periods * // when there are 2+ periods intersecting @@ -73,7 +73,7 @@ class DateRangeCovering $this->addToSequence($start->getTimestamp(), $k, null); $this->addToSequence( NULL === $end ? PHP_INT_MAX : $end->getTimestamp(), null, $k - ); + ); return $this; } @@ -182,7 +182,7 @@ class DateRangeCovering $foundExisting = false; list($nStart, $nEnd, $nMetadata) = $intersection; - \array_walk($intersections, + \array_walk($intersections, function(&$i, $key) use ($nStart, $nEnd, $nMetadata, $foundExisting) { if ($foundExisting) { return; @@ -205,7 +205,7 @@ class DateRangeCovering { if (!$this->computed) { throw new \LogicException(sprintf("You cannot call the method %s before ". - "'process'", __METHOD)); + "'process'", __METHOD__)); } return count($this->intersections) > 0; @@ -215,7 +215,7 @@ class DateRangeCovering { if (!$this->computed) { throw new \LogicException(sprintf("You cannot call the method %s before ". - "'process'", __METHOD)); + "'process'", __METHOD__)); } return $this->intersections; diff --git a/src/Bundle/ChillPersonBundle/CRUD/Controller/OneToOneEntityPersonCRUDController.php b/src/Bundle/ChillPersonBundle/CRUD/Controller/OneToOneEntityPersonCRUDController.php index 720de560c..7a1379434 100644 --- a/src/Bundle/ChillPersonBundle/CRUD/Controller/OneToOneEntityPersonCRUDController.php +++ b/src/Bundle/ChillPersonBundle/CRUD/Controller/OneToOneEntityPersonCRUDController.php @@ -1,20 +1,7 @@ - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ + +declare(strict_types=1); + namespace Chill\PersonBundle\CRUD\Controller; use Chill\MainBundle\CRUD\Controller\CRUDController; @@ -23,11 +10,8 @@ use Chill\PersonBundle\Entity\Person; use Symfony\Component\Form\FormInterface; use Symfony\Component\HttpFoundation\Response; use Symfony\Component\HttpFoundation\RedirectResponse; +use BadMethodCallException; -/** - * Controller for entities attached as one-to-on to a person - * - */ class OneToOneEntityPersonCRUDController extends CRUDController { protected function getTemplateFor($action, $entity, Request $request) @@ -35,11 +19,11 @@ class OneToOneEntityPersonCRUDController extends CRUDController if (!empty($this->crudConfig[$action]['template'])) { return $this->crudConfig[$action]['template']; } - + switch ($action) { case 'new': return '@ChillPerson/CRUD/new.html.twig'; - case 'edit': + case 'edit': return '@ChillPerson/CRUD/edit.html.twig'; case 'index': return '@ChillPerson/CRUD/index.html.twig'; @@ -49,41 +33,41 @@ class OneToOneEntityPersonCRUDController extends CRUDController . "action"); } } - + protected function getEntity($action, $id, Request $request): ?object { $entity = parent::getEntity($action, $id, $request); - + if (NULL === $entity) { $entity = $this->createEntity($action, $request); $person = $this->getDoctrine() ->getManager() ->getRepository(Person::class) ->find($id); - + $entity->setPerson($person); } - + return $entity; } - + protected function onPreFlush(string $action, $entity, FormInterface $form, Request $request) { $this->getDoctrine()->getManager()->persist($entity); } - + protected function onPostFetchEntity($action, Request $request, $entity): ?Response { if (FALSE === $this->getDoctrine()->getManager()->contains($entity)) { return new RedirectResponse($this->generateRedirectOnCreateRoute($action, $request, $entity)); } - + return null; } - + protected function generateRedirectOnCreateRoute($action, Request $request, $entity) { - throw new BadMethodCallException("not implemtented yet"); + throw new BadMethodCallException('Not implemented yet.'); } } diff --git a/src/Bundle/ChillPersonBundle/Repository/Household/HouseholdMembersRepository.php b/src/Bundle/ChillPersonBundle/Repository/Household/HouseholdMembersRepository.php index 1a634f451..8fe6f2873 100644 --- a/src/Bundle/ChillPersonBundle/Repository/Household/HouseholdMembersRepository.php +++ b/src/Bundle/ChillPersonBundle/Repository/Household/HouseholdMembersRepository.php @@ -1,8 +1,10 @@ repository = $entityManager->getRepository(HouseholdMembers::class); + $this->repository = $entityManager->getRepository(HouseholdMember::class); } }