Skip to content

Commit 2cfd47d

Browse files
authored
Migre l'entité CompanyMemberInvitation de Ting vers Doctrine (#2405)
* Migre l'entité CompanyMemberInvitation de Ting vers Doctrine (#2383) * fix: remplace invitations.count par invitations|length dans le template membres (migration Doctrine)
1 parent 725cec0 commit 2cfd47d

17 files changed

Lines changed: 315 additions & 307 deletions

File tree

‎phpstan-baseline.php‎

Lines changed: 4 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -953,32 +953,8 @@
953953
'message' => '#^Parameter \\#2 \\$array of function implode expects array\\<string\\>, list given\\.$#',
954954
'identifier' => 'argument.type',
955955
'count' => 1,
956-
'path' => __DIR__ . '/sources/AppBundle/Association/Model/CompanyMember.php',
957-
];
958-
$ignoreErrors[] = [
959-
'message' => '#^Method AppBundle\\\\Association\\\\Model\\\\Repository\\\\CompanyMemberInvitationRepository\\:\\:initMetadata\\(\\) has parameter \\$options with no value type specified in iterable type array\\.$#',
960-
'identifier' => 'missingType.iterableValue',
961-
'count' => 1,
962-
'path' => __DIR__ . '/sources/AppBundle/Association/Model/Repository/CompanyMemberInvitationRepository.php',
963-
];
964-
$ignoreErrors[] = [
965-
'message' => '#^Method AppBundle\\\\Association\\\\Model\\\\Repository\\\\CompanyMemberInvitationRepository\\:\\:initMetadata\\(\\) should return M of CCMBenchmark\\\\Ting\\\\Repository\\\\Metadata but returns CCMBenchmark\\\\Ting\\\\Repository\\\\Metadata\\<object\\>\\.$#',
966-
'identifier' => 'return.type',
967-
'count' => 1,
968-
'path' => __DIR__ . '/sources/AppBundle/Association/Model/Repository/CompanyMemberInvitationRepository.php',
969-
];
970-
$ignoreErrors[] = [
971-
'message' => '#^Method AppBundle\\\\Association\\\\Model\\\\Repository\\\\CompanyMemberInvitationRepository\\:\\:loadPendingInvitationsByCompany\\(\\) return type with generic interface CCMBenchmark\\\\Ting\\\\Repository\\\\CollectionInterface does not specify its types\\: T$#',
972-
'identifier' => 'missingType.generics',
973-
'count' => 1,
974-
'path' => __DIR__ . '/sources/AppBundle/Association/Model/Repository/CompanyMemberInvitationRepository.php',
975-
];
976-
$ignoreErrors[] = [
977-
'message' => '#^Parameter \\#1 \\$databaseName of method CCMBenchmark\\\\Ting\\\\Repository\\\\Metadata\\<object\\>\\:\\:setDatabase\\(\\) expects string, mixed given\\.$#',
978-
'identifier' => 'argument.type',
979-
'count' => 1,
980-
'path' => __DIR__ . '/sources/AppBundle/Association/Model/Repository/CompanyMemberInvitationRepository.php',
981-
];
956+
'path' => __DIR__ . '/sources/AppBundle/Association/Model/CompanyMember.php',
957+
];
982958
$ignoreErrors[] = [
983959
'message' => '#^Cannot access offset \'id\' on mixed\\.$#',
984960
'identifier' => 'offsetAccess.nonOffsetAccessible',
@@ -4825,12 +4801,6 @@
48254801
'count' => 1,
48264802
'path' => __DIR__ . '/sources/AppBundle/Controller/Website/Member/MembersAction.php',
48274803
];
4828-
$ignoreErrors[] = [
4829-
'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$#',
4830-
'identifier' => 'missingType.generics',
4831-
'count' => 1,
4832-
'path' => __DIR__ . '/sources/AppBundle/Controller/Website/Member/MembersAction.php',
4833-
];
48344804
$ignoreErrors[] = [
48354805
'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$#',
48364806
'identifier' => 'missingType.generics',
@@ -4868,13 +4838,13 @@
48684838
'path' => __DIR__ . '/sources/AppBundle/Controller/Website/Member/MembersAction.php',
48694839
];
48704840
$ignoreErrors[] = [
4871-
'message' => '#^Argument of an invalid type array\\<AppBundle\\\\Association\\\\Model\\\\CompanyMemberInvitation\\>\\|null supplied for foreach, only iterables are supported\\.$#',
4841+
'message' => '#^Argument of an invalid type array\\<AppBundle\\\\Association\\\\Entity\\\\CompanyMemberInvitation\\>\\|null supplied for foreach, only iterables are supported\\.$#',
48724842
'identifier' => 'foreach.nonIterable',
48734843
'count' => 1,
48744844
'path' => __DIR__ . '/sources/AppBundle/Controller/Website/Membership/CompanyAction.php',
48754845
];
48764846
$ignoreErrors[] = [
4877-
'message' => '#^Parameter \\#1 \\$value of function count expects array\\|Countable, array\\<AppBundle\\\\Association\\\\Model\\\\CompanyMemberInvitation\\>\\|null given\\.$#',
4847+
'message' => '#^Parameter \\#1 \\$value of function count expects array\\|Countable, array\\<AppBundle\\\\Association\\\\Entity\\\\CompanyMemberInvitation\\>\\|null given\\.$#',
48784848
'identifier' => 'argument.type',
48794849
'count' => 1,
48804850
'path' => __DIR__ . '/sources/AppBundle/Controller/Website/Membership/CompanyAction.php',

‎sources/AppBundle/Association/CompanyMembership/InvitationMail.php‎

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
namespace AppBundle\Association\CompanyMembership;
66

77
use AppBundle\Association\Model\CompanyMember;
8-
use AppBundle\Association\Model\CompanyMemberInvitation;
8+
use AppBundle\Association\Entity\CompanyMemberInvitation;
99
use AppBundle\Email\Mailer\Mailer;
1010
use AppBundle\Email\Mailer\MailUser;
1111
use AppBundle\Email\Mailer\MailUserFactory;
@@ -36,7 +36,7 @@ public function sendInvitation(CompanyMember $companyMember, CompanyMemberInvita
3636
'%lastname%' => $companyMember->getLastName(),
3737
'%link%' => $this->router->generate(
3838
'company_invitation',
39-
['invitationId' => $invitation->getId(), 'token' => $invitation->getToken()],
39+
['invitationId' => $invitation->id, 'token' => $invitation->token],
4040
UrlGeneratorInterface::ABSOLUTE_URL,
4141
),
4242
],
@@ -45,7 +45,7 @@ public function sendInvitation(CompanyMember $companyMember, CompanyMemberInvita
4545
return $this->mailer->sendTransactional(new Message(
4646
sprintf('%s vous invite à profiter de son compte "Membre AFUP"', $companyMember->getCompanyName()),
4747
MailUserFactory::sponsors(),
48-
new MailUser($invitation->getEmail()),
48+
new MailUser($invitation->email),
4949
), $text);
5050
}
5151
}
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace AppBundle\Association\Entity;
6+
7+
use AppBundle\Association\Entity\Repository\CompanyMemberInvitationRepository;
8+
use AppBundle\Association\Enum\InvitationEtat;
9+
use Doctrine\ORM\Mapping as ORM;
10+
use Symfony\Component\Validator\Constraints as Assert;
11+
12+
#[ORM\Entity(repositoryClass: CompanyMemberInvitationRepository::class)]
13+
#[ORM\Table(name: 'afup_personnes_morales_invitations')]
14+
class CompanyMemberInvitation
15+
{
16+
#[ORM\Id]
17+
#[ORM\GeneratedValue]
18+
#[ORM\Column]
19+
public ?int $id = null;
20+
21+
#[ORM\Column(name: 'company_id', nullable: false)]
22+
public int $companyId;
23+
24+
// Valeur par défaut : sans elle, la lecture de l'email sur une invitation fraîchement
25+
// instanciée (CompanyAction pré-remplit la collection) lèverait une erreur de
26+
// propriété non initialisée.
27+
#[Assert\Email]
28+
#[ORM\Column(nullable: false)]
29+
public string $email = '';
30+
31+
#[ORM\Column(nullable: false)]
32+
public string $token = '';
33+
34+
#[ORM\Column(nullable: false)]
35+
public bool $manager = false;
36+
37+
#[ORM\Column(name: 'submitted_on', type: 'datetime', nullable: false)]
38+
public \DateTime $submittedOn;
39+
40+
#[ORM\Column(nullable: false, enumType: InvitationEtat::class)]
41+
public InvitationEtat $status = InvitationEtat::EnAttente;
42+
}
Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace AppBundle\Association\Entity\Repository;
6+
7+
use AppBundle\Association\Entity\CompanyMemberInvitation;
8+
use AppBundle\Association\Enum\InvitationEtat;
9+
use AppBundle\Doctrine\EntityRepository;
10+
use Doctrine\Persistence\ManagerRegistry;
11+
12+
/**
13+
* @extends EntityRepository<CompanyMemberInvitation>
14+
*/
15+
final class CompanyMemberInvitationRepository extends EntityRepository
16+
{
17+
public function __construct(ManagerRegistry $registry)
18+
{
19+
parent::__construct($registry, CompanyMemberInvitation::class);
20+
}
21+
22+
/**
23+
* @return array<CompanyMemberInvitation>
24+
*/
25+
public function loadPendingInvitationsByCompany(int $companyId): array
26+
{
27+
return ($queryBuilder = $this->createQueryBuilder('i'))
28+
->where($queryBuilder->expr()->eq('i.companyId', ':companyId'))
29+
->setParameter('companyId', $companyId)
30+
->andWhere($queryBuilder->expr()->eq('i.status', ':status'))
31+
->setParameter('status', InvitationEtat::EnAttente)
32+
->orderBy('i.submittedOn', 'ASC')
33+
->getQuery()
34+
->getResult();
35+
}
36+
37+
public function findPendingByEmail(int $companyId, string $email): ?CompanyMemberInvitation
38+
{
39+
return $this->findOneBy([
40+
'companyId' => $companyId,
41+
'email' => $email,
42+
'status' => InvitationEtat::EnAttente,
43+
]);
44+
}
45+
}
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace AppBundle\Association\Enum;
6+
7+
enum InvitationEtat: int
8+
{
9+
case EnAttente = 0;
10+
case Acceptee = 1;
11+
case Annulee = 2;
12+
}

‎sources/AppBundle/Association/Form/CompanyMemberInvitationType.php‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44

55
namespace AppBundle\Association\Form;
66

7-
use AppBundle\Association\Model\CompanyMemberInvitation;
7+
use AppBundle\Association\Entity\CompanyMemberInvitation;
88
use Symfony\Component\Form\AbstractType;
99
use Symfony\Component\Form\Extension\Core\Type\CheckboxType;
1010
use Symfony\Component\Form\Extension\Core\Type\EmailType;

‎sources/AppBundle/Association/Form/CompanyMemberType.php‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,8 @@
55
namespace AppBundle\Association\Form;
66

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

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

‎sources/AppBundle/Association/Model/CompanyMember.php‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
namespace AppBundle\Association\Model;
66

77
use AppBundle\Association\CompanyMembership\SubscriptionManagement;
8+
use AppBundle\Association\Entity\CompanyMemberInvitation;
89
use CCMBenchmark\Ting\Entity\NotifyProperty;
910
use CCMBenchmark\Ting\Entity\NotifyPropertyInterface;
1011
use Cocur\Slugify\Slugify;

‎sources/AppBundle/Association/Model/CompanyMemberInvitation.php‎

Lines changed: 0 additions & 128 deletions
This file was deleted.

0 commit comments

Comments
 (0)