Olivier Massot vor 4 Monaten
Ursprung
Commit
c9d5382126

+ 4 - 7
src/ApiResources/Organization/OrganizationCreationRequest.php

@@ -12,6 +12,7 @@ use App\Enum\Organization\OrganizationIdsEnum;
 use App\Enum\Organization\PrincipalTypeEnum;
 use App\Enum\Organization\SettingsProductEnum;
 use App\State\Processor\Organization\OrganizationCreationRequestProcessor;
+use libphonenumber\PhoneNumber;
 use Symfony\Component\Validator\Constraints as Assert;
 
 /**
@@ -88,11 +89,7 @@ class OrganizationCreationRequest
 
     private int $countryId = self::FRANCE_COUNTRY_INTERNAL_ID;
 
-    #[Assert\Length(
-        min: 10,
-        minMessage: 'Phone number must be at least {{ limit }} characters long',
-    )]
-    private string $phoneNumber;
+    private PhoneNumber $phoneNumber;
 
     #[Assert\Email(
         message: 'The email {{ value }} is not a valid email.',
@@ -313,12 +310,12 @@ class OrganizationCreationRequest
         return $this;
     }
 
-    public function getPhoneNumber(): string
+    public function getPhoneNumber(): PhoneNumber
     {
         return $this->phoneNumber;
     }
 
-    public function setPhoneNumber(string $phoneNumber): self
+    public function setPhoneNumber(PhoneNumber $phoneNumber): self
     {
         $this->phoneNumber = $phoneNumber;
 

+ 7 - 14
src/ApiResources/Organization/OrganizationMemberCreationRequest.php

@@ -6,6 +6,7 @@ namespace App\ApiResources\Organization;
 
 use App\Enum\Core\FileTypeEnum;
 use App\Enum\Person\GenderEnum;
+use libphonenumber\PhoneNumber;
 use Symfony\Component\Validator\Constraints as Assert;
 
 /**
@@ -55,17 +56,9 @@ class OrganizationMemberCreationRequest
 
     private int $countryId = 72; // France's id
 
-    #[Assert\Length(
-        min: 10,
-        minMessage: 'Phone number must be at least {{ limit }} characters long',
-    )]
-    private ?string $phone = null;
+    private ?PhoneNumber $phone = null;
 
-    #[Assert\Length(
-        min: 10,
-        minMessage: 'Mobile phone number must be at least {{ limit }} characters long',
-    )]
-    private ?string $mobile = null;
+    private ?PhoneNumber $mobile = null;
 
     #[Assert\Email(
         message: 'The email {{ value }} is not a valid email.',
@@ -192,24 +185,24 @@ class OrganizationMemberCreationRequest
         return $this;
     }
 
-    public function getPhone(): ?string
+    public function getPhone(): ?PhoneNumber
     {
         return $this->phone;
     }
 
-    public function setPhone(?string $phone): self
+    public function setPhone(?PhoneNumber $phone): self
     {
         $this->phone = $phone;
 
         return $this;
     }
 
-    public function getMobile(): ?string
+    public function getMobile(): ?PhoneNumber
     {
         return $this->mobile;
     }
 
-    public function setMobile(?string $mobile): self
+    public function setMobile(?PhoneNumber $mobile): self
     {
         $this->mobile = $mobile;
 

+ 9 - 23
src/ApiResources/Shop/NewStructureArtistPremiumTrialRequest.php

@@ -10,6 +10,7 @@ use ApiPlatform\Metadata\Post;
 use App\Enum\Organization\LegalEnum;
 use App\Enum\Organization\PrincipalTypeEnum;
 use App\State\Processor\Shop\NewStructureArtistPremiumTrialRequestProcessor;
+use libphonenumber\PhoneNumber;
 use Symfony\Component\Validator\Constraints as Assert;
 
 /**
@@ -57,10 +58,7 @@ class NewStructureArtistPremiumTrialRequest implements ShopRequestData
     )]
     private string $postalCode;
 
-    #[Assert\Length(
-        min: 1,
-        minMessage: 'City must be at least {{ limit }} characters long',
-    )]
+    #[Assert\NotBlank]
     private string $city;
 
     #[Assert\NotBlank]
@@ -78,33 +76,21 @@ class NewStructureArtistPremiumTrialRequest implements ShopRequestData
     #[Assert\Regex(pattern: '/^|(\d{9})$/')]
     private string $siren;
 
-    #[Assert\Length(
-        min: 1,
-        minMessage: 'Representative first name must be at least {{ limit }} characters long',
-    )]
+    #[Assert\NotBlank]
     private string $representativeFirstName;
 
-    #[Assert\Length(
-        min: 1,
-        minMessage: 'Representative last name must be at least {{ limit }} characters long',
-    )]
+    #[Assert\NotBlank]
     private string $representativeLastName;
 
-    #[Assert\Length(
-        min: 1,
-        minMessage: 'Representative function must be at least {{ limit }} characters long',
-    )]
+    #[Assert\NotBlank]
     private string $representativeFunction;
 
     #[Assert\NotBlank]
     #[Assert\Email(message: 'The email {{ value }} is not a valid email.')]
     private string $representativeEmail;
 
-    #[Assert\Length(
-        min: 10,
-        minMessage: 'Phone number must be at least {{ limit }} characters long',
-    )]
-    private string $representativePhone;
+    #[Assert\NotBlank]
+    private ?PhoneNumber $representativePhone;
 
     #[Assert\IsTrue(message: 'terms-must-be-accepted')]
     private bool $termsAccepted = false;
@@ -306,12 +292,12 @@ class NewStructureArtistPremiumTrialRequest implements ShopRequestData
         return $this;
     }
 
-    public function getRepresentativePhone(): string
+    public function getRepresentativePhone(): ?PhoneNumber
     {
         return $this->representativePhone;
     }
 
-    public function setRepresentativePhone(string $representativePhone): self
+    public function setRepresentativePhone(?PhoneNumber $representativePhone): self
     {
         $this->representativePhone = $representativePhone;
 

+ 1 - 5
src/Service/Mailer/Builder/Shop/NewStructureArtistPremium/ConfirmationToRepresentativeBuilder.php

@@ -39,11 +39,7 @@ class ConfirmationToRepresentativeBuilder extends AbstractBuilder implements Bui
         $author = $this->entityManager->getRepository(Access::class)->find($mailerModel->getSenderId());
 
         $context = [
-            'trialRequest' => $mailerModel->getTrialRequest(),
-            'accountCreationUrl' => $mailerModel->getAccountCreationUrl(),
-            'faqUrl' => $mailerModel->getFaqUrl(),
-            'adminUsername' => $mailerModel->getAdminUsername(),
-            'adminLoginUrl' => $mailerModel->getAdminLoginUrl(),
+            'mailerModel' => $mailerModel,
         ];
 
         $content = $this->render('shop/NewStructureArtistPremium/confirmation-to-representative', $context);

+ 1 - 5
src/Service/Mailer/Builder/Shop/TokenValidationBuilder.php

@@ -38,11 +38,7 @@ class TokenValidationBuilder extends AbstractBuilder implements BuilderInterface
         $author = $this->entityManager->getRepository(Access::class)->find($mailerModel->getSenderId());
 
         $context = [
-            'token' => $mailerModel->getToken(),
-            'representativeFirstName' => $mailerModel->getRepresentativeFirstName(),
-            'representativeLastName' => $mailerModel->getRepresentativeLastName(),
-            'structureName' => $mailerModel->getStructureName(),
-            'validationUrl' => $mailerModel->getValidationUrl(),
+            'mailerModel' => $mailerModel,
         ];
 
         $content = $this->render('shop/token-validation', $context);

+ 1 - 6
src/Service/Organization/OrganizationFactory.php

@@ -468,15 +468,10 @@ class OrganizationFactory
      */
     protected function makeContactPoint(OrganizationCreationRequest $organizationCreationRequest): ContactPoint
     {
-        if (!$this->phoneNumberUtil->isPossibleNumber($organizationCreationRequest->getPhoneNumber())) {
-            throw new \RuntimeException('Phone number is invalid or missing');
-        }
-        $phoneNumber = $this->phoneNumberUtil->parse($organizationCreationRequest->getPhoneNumber());
-
         $contactPoint = new ContactPoint();
         $contactPoint->setContactType(ContactPointTypeEnum::PRINCIPAL);
         $contactPoint->setEmail($organizationCreationRequest->getEmail());
-        $contactPoint->setTelphone($phoneNumber);
+        $contactPoint->setTelphone($organizationCreationRequest->getPhoneNumber());
         $contactPoint->setCreateDate($organizationCreationRequest->getCreationDate());
         $contactPoint->setCreatedBy($organizationCreationRequest->getAuthorId());
 

+ 4 - 8
src/Service/Shop/ShopService.php

@@ -107,9 +107,10 @@ class ShopService
         // Dispatch appropriate job based on request type
         switch ($shopRequest->getType()->value) {
             case ShopRequestType::NEW_STRUCTURE_ARTIST_PREMIUM_TRIAL->value:
-                $this->messageBus->dispatch(
-                    new NewStructureArtistPremiumTrial($shopRequest->getToken())
-                );
+                $this->handleNewStructureArtistPremiumTrialRequest($shopRequest->getToken());
+//                $this->messageBus->dispatch(
+//                    new NewStructureArtistPremiumTrial($shopRequest->getToken())
+//                );
                 break;
             default:
                 throw new \RuntimeException('request type not supported');
@@ -258,11 +259,6 @@ class ShopService
             'json'
         );
 
-        // Validate phone number
-        if (!$this->phoneNumberUtil->isPossibleNumber($trialRequestObj->getRepresentativePhone())) {
-            throw new \RuntimeException('Invalid phone number');
-        }
-
         // Check if organization already exists
         $organizationCreationRequest = $this->createOrganizationCreationRequestFromTrialRequest($trialRequestObj);
         $this->organizationFactory->interruptIfOrganizationExists($organizationCreationRequest);

+ 3 - 3
src/State/Provider/Shop/ShopRequestProvider.php

@@ -49,12 +49,12 @@ final class ShopRequestProvider implements ProviderInterface
             throw new AccessDeniedHttpException('Invalid request status');
         }
 
-        // Check if the submission date is more than 15 minutes old
+        // Check if the submission date is more than 60 minutes old
         $now = new \DateTimeImmutable();
         $requestAge = $now->getTimestamp() - $shopRequest->getSubmissionDate()->getTimestamp();
 
-        if ($requestAge >= 15 * 60) {
-            throw new AccessDeniedHttpException('Request expired: submission date is more than 15 minutes old');
+        if ($requestAge >= 60 * 60) {
+            throw new AccessDeniedHttpException('Request expired: submission date is more than 60 minutes old');
         }
 
         // Validate the request using the ShopService

+ 6 - 6
templates/emails/shop/NewStructureArtistPremium/confirmation-to-representative.html.twig

@@ -4,32 +4,32 @@
 
 {% block header %}
 <div class="header">
-    {{ trialRequest.structureName }}
+    {{ mailerModel.trialRequest.structureName }}
 </div>
 {% endblock %}
 
 {% block content %}
-<p>Bonjour {{ trialRequest.representativeFirstName }},</p>
+<p>Bonjour {{ mailerModel.trialRequest.representativeFirstName }},</p>
 
 <p>Votre demande d'essai pour Opentalent Artist Premium a été validée.</p>
 
-<p>Votre compte administrateur a été créé avec l'identifiant <code style="background-color: #f4f4f4; padding: 3px 5px; border-radius: 4px; font-family: monospace; border: 1px solid #ddd;">{{ adminUsername }}</code>.</p>
+<p>Votre compte administrateur a été créé avec l'identifiant <code style="background-color: #f4f4f4; padding: 3px 5px; border-radius: 4px; font-family: monospace; border: 1px solid #ddd;">{{ mailerModel.adminUsername }}</code>.</p>
 
 <p>Pour accéder à votre espace, veuillez cliquer sur le lien ci-dessous :</p>
 
 <p class="center">
-    <a href="{{ adminLoginUrl }}" target="_blank" class="btn">
+    <a href="{{ mailerModel.adminLoginUrl }}" target="_blank" class="btn">
         ACCÉDER AU LOGICIEL
     </a>
 </p>
 
 <p>Si le bouton ne fonctionne pas, vous pouvez copier et coller le lien suivant dans votre navigateur :</p>
-<p>{{ adminLoginUrl }}</p>
+<p>{{ mailerModel.adminLoginUrl }}</p>
 
 <p>Besoin d'aide ? Consultez notre FAQ complète pour découvrir toutes les fonctionnalités du logiciel et trouver les réponses à vos questions :</p>
 
 <p class="center">
-    <a href="{{ faqUrl }}" target="_blank" class="btn" style="background-color: #324250;">
+    <a href="{{ mailerModel.faqUrl }}" target="_blank" class="btn" style="background-color: #324250;">
         TOUT SAVOIR SUR OPENTALENT ARTIST
     </a>
 </p>

+ 5 - 5
templates/emails/shop/token-validation.html.twig

@@ -4,25 +4,25 @@
 
 {% block header %}
 <div class="header">
-    {{ structureName }}
+    {{ mailerModel.structureName }}
 </div>
 {% endblock %}
 
 {% block content %}
-<p>Bonjour {{ representativeFirstName }},</p>
+<p>Bonjour {{ mailerModel.representativeFirstName }},</p>
 
-<p>Nous avons bien reçu votre demande d'essai pour la structure "{{ structureName }}".</p>
+<p>Nous avons bien reçu votre demande d'essai pour la structure "{{ mailerModel.structureName }}".</p>
 
 <p>Pour valider votre demande et commencer votre période d'essai, veuillez cliquer sur le lien ci-dessous :</p>
 
 <p class="center" style="margin-top: 15px; margin-bottom: 15px;">
-    <a href="{{ validationUrl }}" target="_blank" class="btn">
+    <a href="{{ mailerModel.validationUrl }}" target="_blank" class="btn">
         VALIDER MA DEMANDE
     </a>
 </p>
 
 <p>Si le bouton ne fonctionne pas, vous pouvez copier et coller le lien suivant dans votre navigateur :</p>
-<pre style="display: block; padding: 6px 12px;">{{ validationUrl }}</pre>
+<pre style="display: block; padding: 6px 12px;">{{ mailerModel.validationUrl }}</pre>
 <br>
 
 <p>Nous vous remercions pour votre confiance et restons à votre disposition pour toute question.</p>