THELIA Forum

Welcome to the THELIA support and discusssion forum

Announcement

Rejoignez la communauté sur le Discord Thelia : https://discord.gg/YgwpYEE3y3

Offline


Hello !

Dans l'un de mes modules, j'ajoute des champs au formulaire de création de compte sauf qu'en cas d'erreur, ça me crée tout de même le client et son adresse.

En détails :

public static function getSubscribedEvents()
{
	return [
		TheliaEvents::FORM_AFTER_BUILD . ".thelia_customer_create" => ['addAdditionalField', 128],
		TheliaEvents::FORM_AFTER_BUILD . ".thelia_customer_profile_update" => ['addAdditionalField', 128],
		TheliaEvents::FORM_AFTER_BUILD . ".thelia_customer_update" => ['addAdditionalField', 128],
		TheliaEvents::CUSTOMER_CREATEACCOUNT => ["createCustomer", 128],
		TheliaEvents::CUSTOMER_UPDATEPROFILE => ["updateProfile", 128],
		TheliaEvents::CUSTOMER_UPDATEACCOUNT => ["updateCustomer", 128],
	];
}
public function addAdditionalField(TheliaFormEvent $event)
{
//code qui ajoute les champs avec les contraintes voulues
}
public function createCustomer(CustomerCreateOrUpdateEvent $event){
	$this->createOrUpdateCustomer($event,'thelia_customer_create');
}
public function createOrUpdateCustomer(CustomerCreateOrUpdateEvent $event, $formName)
{
	//code qui ajoute les champs supplémentaires dans la BDD
	//sauf que si y'a une erreur dans le code, côté front j'ai l'erreur
	//mais l'utilisateur est créé ainsi que l'adresse et le mail est envoyé
	//les champs ne sont pas créés (car erreur au traitement du premier champ ajouté)
}

y'a pas moyen de bloquer la création du compte en cas d'erreur ?

Si je mets une priorité plus élevé, le code s'exécute bien avant (donc ça pourrait bloquer le processus en cas d'erreur) MAIS j'ai besoin de l'ID du compte créé...

Une solution? A part mettre un ID fictif et le mettre à jour après ?

Last edited by Elyos (Yesterday 18:27:13)


Aide les autres, ils t'aideront en retour.

Offline


Quelle version de Thelia utilises-tu ?

Si je mets une priorité plus élevé, le code s'exécute bien avant (donc ça pourrait bloquer le processus en cas d'erreur) MAIS j'ai besoin de l'ID du compte créé...

Peux-tu développer sur le besoin de l'ID du compte ? Cela paraît difficile d'utiliser un ID qui n'a pas encore été défini non ?

Offline


Salut Nog!

Je suis en 2.5.3 (j'arrive d'ailleurs pas à passer en 2.5.4)

Dans la BDD, j'ai un champ customer_id pour faire la liaison entre les données enregistrées et le compte client.

Comme j'ai dit, mis à part mettre un ID fictif (et unique) et le mettre à jour quand le compte est réellement créé je vois pas trop comment on peut faire.

Mais cela s'est produit pendant le développement du module (erreur de typage array => string) et ça ne devrait normalement plus se produire.

C'était juste pour savoir s'il y avait quelque chose de spécifique à faire pour éviter cela.

Et je viens de remarquer, dans la continuité, que si on demande une confirmation du compte par mail, on revient sur la page de connexion, sans message... du coup le client ne s'est pas trop ce qu'il s'est passé.

Last edited by Elyos (26-03-2024 09:14:37)


Aide les autres, ils t'aideront en retour.

Offline


Tu peux enregistrer deux listeners, un avec une priorité supérieur à Thelia pour faire tes contrôles d'erreur, et un autre avec une priorité inférieure pour faire ta tambouille en base de données. Exemple :

TheliaEvents::CUSTOMER_CREATEACCOUNT => [
    ["checkCreateCustomer", 130],
    ["saveCreateCustomer", 124],
]

OpenStudio Toulouse

Offline


Et je viens de remarquer, dans la continuité, que si on demande une confirmation du compte par mail, on revient sur la page de connexion

Utilise le champ success_url dans la form de création de compte pour rediriger le client vers la page qui t'arranges, par exemple une page de contenu qui demande de vérifier la boite mail.


OpenStudio Toulouse

Offline


Salut roadster31,

roadster31 wrote:

Tu peux enregistrer deux listeners, un avec une priorité supérieur à Thelia pour faire tes contrôles d'erreur, et un autre avec une priorité inférieure pour faire ta tambouille en base de données. Exemple :

TheliaEvents::CUSTOMER_CREATEACCOUNT => [
    ["checkCreateCustomer", 130],
    ["saveCreateCustomer", 124],
]

Oui c'est ce que je fais (enfin je passe par les Constraints\Callback pour contrôler les erreurs).
Mais j'avais une erreur de traitement sur un champ date formé par 3 liste déroulantes qui me sortait, forcément, un Array, et que j'essayais d'enregistrer en tant que String. Du coup, erreur "code" mais ça bloquait pas le process. C'est pas grave sinon, ça ne devrait plus se produire.

roadster31 wrote:

Et je viens de remarquer, dans la continuité, que si on demande une confirmation du compte par mail, on revient sur la page de connexion

Utilise le champ success_url dans la form de création de compte pour rediriger le client vers la page qui t'arranges, par exemple une page de contenu qui demande de vérifier la boite mail.

Je pense pas...
Vu que le code est :

if (ConfigQuery::isCustomerEmailConfirmationEnable() && !$newCustomer->getEnable()) {
	$response = $this->generateRedirectFromRoute('customer.login.view');
} else {
	$this->processLogin($eventDispatcher, $customerCreateEvent->getCustomer());

	$cart = $this->getSession()->getSessionCart($eventDispatcher);
	if ($cart->getCartItems()->count() > 0) {
		$response = $this->generateRedirectFromRoute('cart.view');
	} else {
		$response = $this->generateSuccessRedirect($customerCreation);
	}
}

Donc en cas d'envoi de mail de confirmation, ça ne prendra jamais pas le success_url.

Il faudrait modifier ce bout de code pour ajouter un paramètre GET à la redirection du genre confirmation_sent=1.

Je vais modifier sur Github, mais j'ai l'impression que je ne m'y prends pas bien car toutes les modifications proposées (corrections d'erreur notamment) ne sont jamais prises en compte sur la branche master...


Aide les autres, ils t'aideront en retour.

Offline


Elyos wrote:

Je vais modifier sur Github, mais j'ai l'impression que je ne m'y prends pas bien car toutes les modifications proposées (corrections d'erreur notamment) ne sont jamais prises en compte sur la branche master...

Je crois avoir trouvé comment on fait sur Github pour proposer des modifications big_smile


Aide les autres, ils t'aideront en retour.

Offline


https://github.com/thelia/thelia/pull/3195
"CANCELED" ....


Aide les autres, ils t'aideront en retour.

Offline

Offline


Bah mon PR est canceled

Some checks were not successful

Scrutinizer — Canceled

Je ne sais pas si ça vous empêche de valider la modification...


Aide les autres, ils t'aideront en retour.

Offline


Ça empêche, effectivement. Il faut que la PR passe tous les tests.


OpenStudio Toulouse

Offline


Et je ne sais pas pourquoi ça n'a pas fonctionnait ni même comment je relance le test.


Aide les autres, ils t'aideront en retour.