Skip to content

Commit

Permalink
Increase PHPStan to level 8 and Psalm to level 4
Browse files Browse the repository at this point in the history
  • Loading branch information
jordisala1991 committed Dec 21, 2021
1 parent 52c0929 commit ca5c682
Show file tree
Hide file tree
Showing 47 changed files with 495 additions and 143 deletions.
2 changes: 1 addition & 1 deletion phpstan.neon.dist
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ includes:
- phpstan-baseline.neon

parameters:
level: 4
level: 8
symfony:
console_application_loader: ./phpstan-console-application.php
paths:
Expand Down
2 changes: 1 addition & 1 deletion psalm.xml
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<psalm xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="https://getpsalm.org/schema/config" errorLevel="7" findUnusedPsalmSuppress="true" resolveFromConfigFile="true" xsi:schemaLocation="https://getpsalm.org/schema/config vendor/vimeo/psalm/config.xsd">
<psalm xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="https://getpsalm.org/schema/config" errorLevel="4" findUnusedPsalmSuppress="true" resolveFromConfigFile="true" xsi:schemaLocation="https://getpsalm.org/schema/config vendor/vimeo/psalm/config.xsd">
<projectFiles>
<directory name="src"/>
<directory name="tests"/>
Expand Down
3 changes: 3 additions & 0 deletions src/Action/ResetAction.php
Original file line number Diff line number Diff line change
Expand Up @@ -97,6 +97,9 @@ public function __construct(
$this->tokenTtl = $tokenTtl;
}

/**
* @param string $token
*/
public function __invoke(Request $request, $token): Response
{
if ($this->authorizationChecker->isGranted('IS_AUTHENTICATED_FULLY')) {
Expand Down
18 changes: 10 additions & 8 deletions src/Action/SendEmailAction.php
Original file line number Diff line number Diff line change
Expand Up @@ -66,16 +66,18 @@ public function __invoke(Request $request): Response
{
$username = $request->request->get('username');

$user = $this->userManager->findUserByUsernameOrEmail($username);
if (\is_string($username)) {
$user = $this->userManager->findUserByUsernameOrEmail($username);

if (null !== $user && $user->isEnabled() && !$user->isPasswordRequestNonExpired($this->retryTtl) && $user->isAccountNonLocked()) {
if (null === $user->getConfirmationToken()) {
$user->setConfirmationToken($this->tokenGenerator->generateToken());
}
if (null !== $user && $user->isEnabled() && !$user->isPasswordRequestNonExpired($this->retryTtl) && $user->isAccountNonLocked()) {
if (null === $user->getConfirmationToken()) {
$user->setConfirmationToken($this->tokenGenerator->generateToken());
}

$this->mailer->sendResettingEmailMessage($user);
$user->setPasswordRequestedAt(new \DateTime());
$this->userManager->save($user);
$this->mailer->sendResettingEmailMessage($user);
$user->setPasswordRequestedAt(new \DateTime());
$this->userManager->save($user);
}
}

return new RedirectResponse($this->urlGenerator->generate('sonata_user_admin_resetting_check_email', [
Expand Down
24 changes: 18 additions & 6 deletions src/DependencyInjection/SonataUserExtension.php
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,7 @@ public function load(array $configs, ContainerBuilder $container): void
$config = $this->fixImpersonating($config);

$bundles = $container->getParameter('kernel.bundles');
\assert(\is_array($bundles));

$loader = new PhpFileLoader($container, new FileLocator(__DIR__.'/../Resources/config'));

Expand All @@ -66,7 +67,7 @@ public function load(array $configs, ContainerBuilder $container): void
$loader->load('util.php');
$loader->load('validator.php');

if ($config['security_acl']) {
if (true === $config['security_acl']) {
$loader->load('security_acl.php');
}

Expand All @@ -93,9 +94,11 @@ public function load(array $configs, ContainerBuilder $container): void
}

/**
* @param array<string, mixed> $config
*
* @throws \RuntimeException
*
* @return array
* @return array<string, mixed>
*/
public function fixImpersonating(array $config)
{
Expand All @@ -122,7 +125,7 @@ public function fixImpersonating(array $config)
}

/**
* @param array $config
* @param array<string, mixed> $config
*/
public function configureClass($config, ContainerBuilder $container): void
{
Expand All @@ -131,7 +134,7 @@ public function configureClass($config, ContainerBuilder $container): void
}

/**
* @param array $config
* @param array<string, mixed> $config
*/
public function configureAdminClass($config, ContainerBuilder $container): void
{
Expand All @@ -140,7 +143,7 @@ public function configureAdminClass($config, ContainerBuilder $container): void
}

/**
* @param array $config
* @param array<string, mixed> $config
*/
public function configureTranslationDomain($config, ContainerBuilder $container): void
{
Expand All @@ -149,7 +152,7 @@ public function configureTranslationDomain($config, ContainerBuilder $container)
}

/**
* @param array $config
* @param array<string, mixed> $config
*/
public function configureController($config, ContainerBuilder $container): void
{
Expand All @@ -170,6 +173,9 @@ private function configureResetting(ContainerBuilder $container, array $config):
$container->setParameter('sonata.user.resetting.email.template', $config['resetting']['email']['template']);
}

/**
* @param array<string, mixed> $config
*/
private function checkManagerTypeToModelTypesMapping(array $config): void
{
$managerType = $config['manager_type'];
Expand Down Expand Up @@ -210,11 +216,17 @@ private function prohibitModelTypeMapping(
}
}

/**
* @param array<string, mixed> $config
*/
private function configureMailer(array $config, ContainerBuilder $container): void
{
$container->setAlias('sonata.user.mailer', $config['mailer']);
}

/**
* @param array<string, mixed> $config
*/
private function registerSonataDoctrineMapping(array $config): void
{
foreach ($config['class'] as $type => $class) {
Expand Down
2 changes: 1 addition & 1 deletion src/Document/UserManager.php
Original file line number Diff line number Diff line change
Expand Up @@ -57,7 +57,7 @@ public function findUserByEmail(string $email): ?UserInterface

public function findUserByUsernameOrEmail(string $usernameOrEmail): ?UserInterface
{
if (preg_match('/^.+\@\S+\.\S+$/', $usernameOrEmail)) {
if (1 === preg_match('/^.+\@\S+\.\S+$/', $usernameOrEmail)) {
$user = $this->findUserByEmail($usernameOrEmail);
if (null !== $user) {
return $user;
Expand Down
2 changes: 1 addition & 1 deletion src/Entity/UserManager.php
Original file line number Diff line number Diff line change
Expand Up @@ -57,7 +57,7 @@ public function findUserByEmail(string $email): ?UserInterface

public function findUserByUsernameOrEmail(string $usernameOrEmail): ?UserInterface
{
if (preg_match('/^.+\@\S+\.\S+$/', $usernameOrEmail)) {
if (1 === preg_match('/^.+\@\S+\.\S+$/', $usernameOrEmail)) {
$user = $this->findUserByEmail($usernameOrEmail);
if (null !== $user) {
return $user;
Expand Down
21 changes: 12 additions & 9 deletions src/Form/Transformer/RestoreRolesTransformer.php
Original file line number Diff line number Diff line change
Expand Up @@ -17,38 +17,41 @@
use Symfony\Component\Form\DataTransformerInterface;

/**
* @phpstan-implements DataTransformerInterface<array, array>
* @phpstan-implements DataTransformerInterface<string[], string[]>
*/
class RestoreRolesTransformer implements DataTransformerInterface
{
/**
* @var array|null
* @var EditableRolesBuilder
*/
protected $originalRoles = null;
protected $rolesBuilder;

/**
* @var EditableRolesBuilder|null
* @var string[]|null
*/
protected $rolesBuilder = null;
protected $originalRoles = null;

public function __construct(EditableRolesBuilder $rolesBuilder)
{
$this->rolesBuilder = $rolesBuilder;
}

/**
* @param string[]|null $originalRoles
*/
public function setOriginalRoles(?array $originalRoles = null): void
{
$this->originalRoles = $originalRoles ?? [];
}

/**
* @return array|null
* @return string[]|null
*/
#[\ReturnTypeWillChange]
public function transform($value)
{
if (null === $value) {
return $value;
return null;
}

if (null === $this->originalRoles) {
Expand All @@ -59,7 +62,7 @@ public function transform($value)
}

/**
* @return array|null
* @return string[]|null
*/
#[\ReturnTypeWillChange]
public function reverseTransform($selectedRoles)
Expand All @@ -72,6 +75,6 @@ public function reverseTransform($selectedRoles)

$hiddenRoles = array_diff($this->originalRoles, array_keys($availableRoles));

return array_merge($selectedRoles, $hiddenRoles);
return array_merge($selectedRoles ?? [], $hiddenRoles);
}
}
6 changes: 6 additions & 0 deletions src/Listener/UserListener.php
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,9 @@

use Doctrine\Common\EventSubscriber;
use Doctrine\ODM\MongoDB\DocumentManager;
use Doctrine\ODM\MongoDB\Mapping\ClassMetadata as ODMClassMetadata;
use Doctrine\ORM\EntityManager;
use Doctrine\ORM\Mapping\ClassMetadata as ORMClassMetadata;
use Doctrine\Persistence\Event\LifecycleEventArgs;
use Doctrine\Persistence\ObjectManager;
use Sonata\UserBundle\Model\UserInterface;
Expand Down Expand Up @@ -107,8 +109,12 @@ private function recomputeChangeSet(ObjectManager $om, UserInterface $user): voi
$meta = $om->getClassMetadata(\get_class($user));

if ($om instanceof EntityManager) {
\assert($meta instanceof ORMClassMetadata);

$om->getUnitOfWork()->recomputeSingleEntityChangeSet($meta, $user);
} elseif ($om instanceof DocumentManager) {
\assert($meta instanceof ODMClassMetadata);

$om->getUnitOfWork()->recomputeSingleDocumentChangeSet($meta, $user);
}
}
Expand Down
16 changes: 13 additions & 3 deletions src/Mailer/Mailer.php
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@ final class Mailer implements MailerInterface
private $mailer;

/**
* @var array
* @var array<string, string>
*/
private $fromEmail;

Expand All @@ -46,8 +46,16 @@ final class Mailer implements MailerInterface
*/
private $emailTemplate;

public function __construct(UrlGeneratorInterface $urlGenerator, Environment $twig, SymfonyMailerInterface $mailer, array $fromEmail, string $emailTemplate)
{
/**
* @param array<string, string> $fromEmail
*/
public function __construct(
UrlGeneratorInterface $urlGenerator,
Environment $twig,
SymfonyMailerInterface $mailer,
array $fromEmail,
string $emailTemplate
) {
$this->urlGenerator = $urlGenerator;
$this->twig = $twig;
$this->mailer = $mailer;
Expand All @@ -68,6 +76,8 @@ public function sendResettingEmailMessage(UserInterface $user): void

// Render the email, use the first line as the subject, and the rest as the body
$renderedLines = preg_split('/\R/', trim($rendered), 2, \PREG_SPLIT_NO_EMPTY);
\assert(false !== $renderedLines && [] !== $renderedLines);

$subject = array_shift($renderedLines);
$body = implode('', $renderedLines);
$fromName = current($this->fromEmail);
Expand Down
14 changes: 13 additions & 1 deletion src/Model/User.php
Original file line number Diff line number Diff line change
Expand Up @@ -207,6 +207,9 @@ public function __toString()
return $this->getUsername();
}

/**
* @return mixed[]
*/
public function __serialize(): array
{
return [
Expand All @@ -221,6 +224,9 @@ public function __serialize(): array
];
}

/**
* @param mixed[] $data
*/
public function __unserialize(array $data): void
{
[
Expand Down Expand Up @@ -444,11 +450,17 @@ public function setRoles(array $roles): void
}
}

/**
* @return Collection<int, GroupInterface>
*/
public function getGroups(): Collection
{
return $this->groups;
}

/**
* @return string[]
*/
public function getGroupNames(): array
{
$names = [];
Expand Down Expand Up @@ -768,7 +780,7 @@ public function setRealRoles(array $roles)
/**
* Returns the gender list.
*
* @return array
* @return array<string, string>
*/
public static function getGenderList()
{
Expand Down
8 changes: 5 additions & 3 deletions src/Model/UserInterface.php
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ public function setUsername(string $username): void;

public function getUsernameCanonical(): ?string;

public function setUsernameCanonical(string $usernameCanonical): void;
public function setUsernameCanonical(?string $usernameCanonical): void;

public function setSalt(?string $salt): void;

Expand Down Expand Up @@ -123,7 +123,7 @@ public function getUpdatedAt();
/**
* Sets the user groups.
*
* @param array $groups
* @param GroupInterface[] $groups
*
* @return UserInterface
*/
Expand Down Expand Up @@ -351,11 +351,13 @@ public function getWebsite();
public function getFullname();

/**
* @return array
* @return string[]
*/
public function getRealRoles();

/**
* @param string[] $roles
*
* @return UserInterface
*/
public function setRealRoles(array $roles);
Expand Down
Loading

0 comments on commit ca5c682

Please sign in to comment.