Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
38 changes: 4 additions & 34 deletions phpstan-baseline.php
Original file line number Diff line number Diff line change
Expand Up @@ -965,32 +965,8 @@
'message' => '#^Parameter \\#2 \\$array of function implode expects array\\<string\\>, list given\\.$#',
'identifier' => 'argument.type',
'count' => 1,
'path' => __DIR__ . '/sources/AppBundle/Association/Model/CompanyMember.php',
];
$ignoreErrors[] = [
'message' => '#^Method AppBundle\\\\Association\\\\Model\\\\Repository\\\\CompanyMemberInvitationRepository\\:\\:initMetadata\\(\\) has parameter \\$options with no value type specified in iterable type array\\.$#',
'identifier' => 'missingType.iterableValue',
'count' => 1,
'path' => __DIR__ . '/sources/AppBundle/Association/Model/Repository/CompanyMemberInvitationRepository.php',
];
$ignoreErrors[] = [
'message' => '#^Method AppBundle\\\\Association\\\\Model\\\\Repository\\\\CompanyMemberInvitationRepository\\:\\:initMetadata\\(\\) should return M of CCMBenchmark\\\\Ting\\\\Repository\\\\Metadata but returns CCMBenchmark\\\\Ting\\\\Repository\\\\Metadata\\<object\\>\\.$#',
'identifier' => 'return.type',
'count' => 1,
'path' => __DIR__ . '/sources/AppBundle/Association/Model/Repository/CompanyMemberInvitationRepository.php',
];
$ignoreErrors[] = [
'message' => '#^Method AppBundle\\\\Association\\\\Model\\\\Repository\\\\CompanyMemberInvitationRepository\\:\\:loadPendingInvitationsByCompany\\(\\) return type with generic interface CCMBenchmark\\\\Ting\\\\Repository\\\\CollectionInterface does not specify its types\\: T$#',
'identifier' => 'missingType.generics',
'count' => 1,
'path' => __DIR__ . '/sources/AppBundle/Association/Model/Repository/CompanyMemberInvitationRepository.php',
];
$ignoreErrors[] = [
'message' => '#^Parameter \\#1 \\$databaseName of method CCMBenchmark\\\\Ting\\\\Repository\\\\Metadata\\<object\\>\\:\\:setDatabase\\(\\) expects string, mixed given\\.$#',
'identifier' => 'argument.type',
'count' => 1,
'path' => __DIR__ . '/sources/AppBundle/Association/Model/Repository/CompanyMemberInvitationRepository.php',
];
'path' => __DIR__ . '/sources/AppBundle/Association/Model/CompanyMember.php',
];
$ignoreErrors[] = [
'message' => '#^Cannot access offset \'id\' on mixed\\.$#',
'identifier' => 'offsetAccess.nonOffsetAccessible',
Expand Down Expand Up @@ -4933,12 +4909,6 @@
'count' => 1,
'path' => __DIR__ . '/sources/AppBundle/Controller/Website/Member/MembersAction.php',
];
$ignoreErrors[] = [
'message' => '#^Method AppBundle\\\\Controller\\\\Website\\\\Member\\\\MembersAction\\:\\:addUser\\(\\) has parameter \\$pendingInvitations with generic interface CCMBenchmark\\\\Ting\\\\Repository\\\\CollectionInterface but does not specify its types\\: T$#',
'identifier' => 'missingType.generics',
'count' => 1,
'path' => __DIR__ . '/sources/AppBundle/Controller/Website/Member/MembersAction.php',
];
$ignoreErrors[] = [
'message' => '#^Method AppBundle\\\\Controller\\\\Website\\\\Member\\\\MembersAction\\:\\:addUser\\(\\) has parameter \\$users with generic interface CCMBenchmark\\\\Ting\\\\Repository\\\\CollectionInterface but does not specify its types\\: T$#',
'identifier' => 'missingType.generics',
Expand Down Expand Up @@ -4976,13 +4946,13 @@
'path' => __DIR__ . '/sources/AppBundle/Controller/Website/Member/MembersAction.php',
];
$ignoreErrors[] = [
'message' => '#^Argument of an invalid type array\\<AppBundle\\\\Association\\\\Model\\\\CompanyMemberInvitation\\>\\|null supplied for foreach, only iterables are supported\\.$#',
'message' => '#^Argument of an invalid type array\\<AppBundle\\\\Association\\\\Entity\\\\CompanyMemberInvitation\\>\\|null supplied for foreach, only iterables are supported\\.$#',
'identifier' => 'foreach.nonIterable',
'count' => 1,
'path' => __DIR__ . '/sources/AppBundle/Controller/Website/Membership/CompanyAction.php',
];
$ignoreErrors[] = [
'message' => '#^Parameter \\#1 \\$value of function count expects array\\|Countable, array\\<AppBundle\\\\Association\\\\Model\\\\CompanyMemberInvitation\\>\\|null given\\.$#',
'message' => '#^Parameter \\#1 \\$value of function count expects array\\|Countable, array\\<AppBundle\\\\Association\\\\Entity\\\\CompanyMemberInvitation\\>\\|null given\\.$#',
'identifier' => 'argument.type',
'count' => 1,
'path' => __DIR__ . '/sources/AppBundle/Controller/Website/Membership/CompanyAction.php',
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
namespace AppBundle\Association\CompanyMembership;

use AppBundle\Association\Model\CompanyMember;
use AppBundle\Association\Model\CompanyMemberInvitation;
use AppBundle\Association\Entity\CompanyMemberInvitation;
use AppBundle\Email\Mailer\Mailer;
use AppBundle\Email\Mailer\MailUser;
use AppBundle\Email\Mailer\MailUserFactory;
Expand Down Expand Up @@ -36,7 +36,7 @@ public function sendInvitation(CompanyMember $companyMember, CompanyMemberInvita
'%lastname%' => $companyMember->getLastName(),
'%link%' => $this->router->generate(
'company_invitation',
['invitationId' => $invitation->getId(), 'token' => $invitation->getToken()],
['invitationId' => $invitation->id, 'token' => $invitation->token],
UrlGeneratorInterface::ABSOLUTE_URL,
),
],
Expand All @@ -45,7 +45,7 @@ public function sendInvitation(CompanyMember $companyMember, CompanyMemberInvita
return $this->mailer->sendTransactional(new Message(
sprintf('%s vous invite à profiter de son compte "Membre AFUP"', $companyMember->getCompanyName()),
MailUserFactory::sponsors(),
new MailUser($invitation->getEmail()),
new MailUser($invitation->email),
), $text);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
<?php

declare(strict_types=1);

namespace AppBundle\Association\Entity;

use AppBundle\Association\Entity\Repository\CompanyMemberInvitationRepository;
use AppBundle\Association\Enum\InvitationEtat;
use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\Validator\Constraints as Assert;

#[ORM\Entity(repositoryClass: CompanyMemberInvitationRepository::class)]
#[ORM\Table(name: 'afup_personnes_morales_invitations')]
class CompanyMemberInvitation
{
#[ORM\Id]
#[ORM\GeneratedValue]
#[ORM\Column]
public ?int $id = null;

#[ORM\Column(name: 'company_id', nullable: false)]
public int $companyId;

// Valeur par défaut : sans elle, la lecture de l'email sur une invitation fraîchement
// instanciée (CompanyAction pré-remplit la collection) lèverait une erreur de
// propriété non initialisée.
#[Assert\Email]
#[ORM\Column(nullable: false)]
public string $email = '';

#[ORM\Column(nullable: false)]
public string $token = '';

#[ORM\Column(nullable: false)]
public bool $manager = false;

#[ORM\Column(name: 'submitted_on', type: 'datetime', nullable: false)]
public \DateTime $submittedOn;

#[ORM\Column(nullable: false, enumType: InvitationEtat::class)]
public InvitationEtat $status = InvitationEtat::EnAttente;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
<?php

declare(strict_types=1);

namespace AppBundle\Association\Entity\Repository;

use AppBundle\Association\Entity\CompanyMemberInvitation;
use AppBundle\Association\Enum\InvitationEtat;
use AppBundle\Doctrine\EntityRepository;
use Doctrine\Persistence\ManagerRegistry;

/**
* @extends EntityRepository<CompanyMemberInvitation>
*/
final class CompanyMemberInvitationRepository extends EntityRepository
{
public function __construct(ManagerRegistry $registry)
{
parent::__construct($registry, CompanyMemberInvitation::class);
}

/**
* @return array<CompanyMemberInvitation>
*/
public function loadPendingInvitationsByCompany(int $companyId): array
{
return ($queryBuilder = $this->createQueryBuilder('i'))
->where($queryBuilder->expr()->eq('i.companyId', ':companyId'))
->setParameter('companyId', $companyId)
->andWhere($queryBuilder->expr()->eq('i.status', ':status'))
->setParameter('status', InvitationEtat::EnAttente)
->orderBy('i.submittedOn', 'ASC')
->getQuery()
->getResult();
}

public function findPendingByEmail(int $companyId, string $email): ?CompanyMemberInvitation
{
return $this->findOneBy([
'companyId' => $companyId,
'email' => $email,
'status' => InvitationEtat::EnAttente,
]);
}
}
12 changes: 12 additions & 0 deletions sources/AppBundle/Association/Enum/InvitationEtat.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
<?php

declare(strict_types=1);

namespace AppBundle\Association\Enum;

enum InvitationEtat: int
{
case EnAttente = 0;
case Acceptee = 1;
case Annulee = 2;
}
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@

namespace AppBundle\Association\Form;

use AppBundle\Association\Model\CompanyMemberInvitation;
use AppBundle\Association\Entity\CompanyMemberInvitation;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\Extension\Core\Type\CheckboxType;
use Symfony\Component\Form\Extension\Core\Type\EmailType;
Expand Down
4 changes: 2 additions & 2 deletions sources/AppBundle/Association/Form/CompanyMemberType.php
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,8 @@
namespace AppBundle\Association\Form;

use AppBundle\Association\CompanyMembership\SubscriptionManagement;
use AppBundle\Association\Entity\CompanyMemberInvitation;
use AppBundle\Association\Model\CompanyMember;
use AppBundle\Association\Model\CompanyMemberInvitation;
use EWZ\Bundle\RecaptchaBundle\Form\Type\EWZRecaptchaType;
use EWZ\Bundle\RecaptchaBundle\Validator\Constraints\IsTrue as RecaptchaIsValid;
use Symfony\Component\Form\AbstractType;
Expand Down Expand Up @@ -98,7 +98,7 @@ public function buildForm(FormBuilderInterface $builder, array $options): void
new Callback(static function (?array $invitations, ExecutionContextInterface $context): void {
$first = $invitations[0] ?? null;

if ($first instanceof CompanyMemberInvitation && '' !== trim($first->getEmail())) {
if ($first instanceof CompanyMemberInvitation && '' !== trim($first->email)) {
return;
}

Expand Down
1 change: 1 addition & 0 deletions sources/AppBundle/Association/Model/CompanyMember.php
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
namespace AppBundle\Association\Model;

use AppBundle\Association\CompanyMembership\SubscriptionManagement;
use AppBundle\Association\Entity\CompanyMemberInvitation;
use CCMBenchmark\Ting\Entity\NotifyProperty;
use CCMBenchmark\Ting\Entity\NotifyPropertyInterface;
use Cocur\Slugify\Slugify;
Expand Down
128 changes: 0 additions & 128 deletions sources/AppBundle/Association/Model/CompanyMemberInvitation.php

This file was deleted.

Loading
Loading