Jump to content

Customer / Imposer la saisie d'une date de naissance


Recommended Posts

Concerne la version 1.5 de prestashop

 

Voilà, après avoir pas mal cherché, je poste la solution que j'ai trouvée.

 

l'enregistrement d'un client se fait dans function processSubmitAccount() de la class AuthControllerCore

 

Dans cette fonction, la validité de la date de naissance est testée avec la fonction isBirthday() de la class Validate. Le retour de cette fonction conditionne l'enregistrement du client.

 

Le principe consiste donc à influer sur le résultat de cette fonction isBirthday().

Par défaut, cette fonction retourne true si la date soumise est vide ou 0000-00-00

if (empty($date) || $date == '0000-00-00')
			return true;

j'ai donc surchargé cette classe en ajoutant ce fichier:

/override/classes/Validate.php

<?php 
class Validate extends ValidateCore
{
	/**
	 * Check for birthDate validity
	 *
	 * @param string $date birthdate to validate
	 * @return boolean Validity is ok or not
	 */
	public static function isBirthDate($date)
	{
		if (empty($date) || $date == '0000-00-00')
			return false;
		if (preg_match('/^([0-9]{4})-((?:0?[1-9])|(?:1[0-2]))-((?:0?[1-9])|(?:[1-2][0-9])|(?:3[01]))([0-9]{2}:[0-9]{2}:[0-9]{2})?$/', $date, $birth_date))
		{
			if ($birth_date[1] > date('Y') && $birth_date[2] > date('m') && $birth_date[3] > date('d'))
				return false;
			return true;
		}
		return false;
	}

}

comme souvent, c'est pas mal de recherches pour une solution qui tient en quelques ligne (5 lettres en l’occurrence... ).

j'espère que ça vous servira pour vos développements.

Edited by MonVinDirect (see edit history)
Link to comment
Share on other sites

Je me suis rendu compte que le client peut modifier sa date de naissance une fois inscrit car, de base,  le contrôle s'effectue à la création mais plus par la suite.

 

Nous allons donc surcharger IdentityController.php (copie de controller/front/IdentityController.php vers override/controller/front/IdentityController.php)

en ajoutant ces 2 lignes :

				elseif (!Validate::isBirthDate($this->customer->birthday))
					$this->errors[] = Tools::displayError('Invalid date of birth.');
Link to comment
Share on other sites

Je viens de me rendre compte d'un problème lié cette modif (celle de isBirthDate).

 

J'avais passé le champ birthday de la base de données (table customer) à NOT NULL pour voir si ça empêchait l'enregistrement, les clients n'ayant pas rempli de date de naissance sont passés avec une date 0000-00-00.

 

Vu que isBirthDate ne valide plus ce format de date à cause de

		if (empty($date) || $date == '0000-00-00')
			return false;

le client ne peu plus accéder à sa page "infos perso" en raison d'une erreur de validation de cette date.

Link to comment
Share on other sites

j'ai donc modifié à nouveau la fonction isBirthDate():

<?php 
class Validate extends ValidateCore
{
	/**
	 * Check for birthDate validity
	 *
	 * @param string $date birthdate to validate
	 * @return boolean Validity is ok or not
	 */
	public static function isBirthDate($date)
	{
            if (empty($date) )
                return false;
            if ($date == '0000-00-00')
                return true;
		if (preg_match('/^([0-9]{4})-((?:0?[1-9])|(?:1[0-2]))-((?:0?[1-9])|(?:[1-2][0-9])|(?:3[01]))([0-9]{2}:[0-9]{2}:[0-9]{2})?$/', $date, $birth_date))
		{
			if ($birth_date[1] > date('Y') && $birth_date[2] > date('m') && $birth_date[3] > date('d'))
				return false;
			return true;
		}
		return false;
	}

}
Link to comment
Share on other sites

  • 1 year later...

 

Je me suis rendu compte que le client peut modifier sa date de naissance une fois inscrit car, de base,  le contrôle s'effectue à la création mais plus par la suite.

 

Nous allons donc surcharger IdentityController.php (copie de controller/front/IdentityController.php vers override/controller/front/IdentityController.php)

en ajoutant ces 2 lignes :

				elseif (!Validate::isBirthDate($this->customer->birthday))
					$this->errors[] = Tools::displayError('Invalid date of birth.');

 

1) Tu intègres ces lignes après laquelle dans le fichier stp ?

2) Comment cela se passera pour un client déjà inscrit sans date de naissance précisée puisqu'il ne pourra plus la modifier ?

Edited by lordbdp (see edit history)
Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...