Bonjour je ne sais pas trop ou placer ce sujet.

Je dois segmenter l'envoi d'un e-mail à un certains statut d'une commande.

donc pour toute les commandes l'envoi d'email doit se faire mais pour le statut "en cours de saisie" l'email ne dois pas être envoyé.
"encour de saisie" qui se traduit par id_order_state== 14

donc voilà mon code:
if (Validate::isEmail($this->context->customer->email))
Mail::Send(
(int)$order->id_lang,
'order_conf',
Mail::l('Order confirmation', (int)$order->id_lang),
$data,
$this->context->customer->email,
$this->context->customer->firstname.' '.$this->context->customer->lastname,
null,
null,
$file_attachement,
null, _PS_MAIL_DIR_, false, (int)$order->id_shop
);

elseif ($id_order_state != 14 ){
}

Mais je ne sais pas du tout quoi mettre dans ma condition elseif.

Auriez vous une idée?

Merci.

Baptiste
Je ne suis pas sur de comprendre ce que vous entendez par "segmenter".

Ça dépend des spécifications de votre appli.
En ce qui me concerne, j'ai fait une appli similaire pour envoyer les messages 50 à la fois toutes les heures. Pour cela j'ai un fichier contenant pour chaque destinataire la date et l'heure de l'envoi. Facile alors de savoir si le message à été ou non envoyé.

Si les specs sont incomplètes, ce n'est pas au réalisateur de les compléter, c'est au "maître d'ouvrage", une personne qui n'a que 2 devoirs: dire ce qu'il veut et payer pour l'obtenir.

Si vous êtes à la fois le maître d'ouvrage et le réalisateur, ce qui peut arriver, c'est à vous de définir ce que vous voulez faire, je vois mal comment nous pourrions vous aider.

Posez vous (ou plutot posez au maître d'ouvrage) la question: Est-ce que je devrais l'envoyer plus tard tel quel ou devrais je le refaire?
Selon la réponse vous aurez à programmer des choses très différentes et à organiser vos données et vos fichiers en conséquence.
Merci pour votre réponse.

Je vais essayer d'être plus claire je travaille sur le CMS prestashop.

Les commandes possèdent différents statuts qui sont par exemple "en cours de livraison", "livré"...

Lorsque l'on modifie la commande alors qu'elle possède un de ces statuts un e-mail est envoyé au client.
Il y a un paramétrage simple à réaliser dans le back office pour choisir pour quel statut un e-mail est envoyé.
Celui-ci ne fonctionne pas lorsque je veux empêcher l'envoi d'email quand la commande est "en cours de saisie"
Je suis donc obligé de passé par le php fournit dans prestashop et j'en reviens donc à mon premier post.

Baptiste
Si je comprends bien ce que tu appelles TON CODE est le code fourni par Prestashop, que tu dois modifier?
Pour faire de la rétro-ingénierie, il faudrait en savoir un peu plus sur ce bout de code. Est-il dans une "function"? Si oui il doit y avoir une convention de ce que retourne la fonction (si c'est du code professionnel) auquel cas il suffirait de mettre
 if($id_order_state == 14) return xxx;

AVANT "if(Validate"... avec xxx = une valeur signifiant que le message n'a pas été envoyé.
Si ce n'est pas dans une function il faudrait mettre au même endroit
 if($id_order_state == 14) die("Commande en cours de saisie");
C'est bien le code fournit par prestashop.
Non il n'est pas dans une function.

Du coup je dois essayer la deuxième technique?
pouc22 a écrit :
C'est bien le code fournit par prestashop.
Non il n'est pas dans une function.

Du coup je dois essayer la deuxième technique?

A la lecture du code, j'ai les pires craintes sur le professionnalisme de l'auteur (remarque de vieux responsable grincheux d'équipes de développement Smiley cligne ).

Ceci mis à part essayez "die('...');", mais c'est une terminaison brutale du programme. Sauf à voir le reste de la page de code, je ne peux pas anticiper les conséquences, mais si ça n'est pas satisfaisant, vous pourrez toujours supprimer cette ligne de code,
Si le résultat est fonctionnellement satisfaisant on pourra toujours faire des améliorations, du genre générer une page avec des petits anges apportant un message sur un plateau...
Du coup dans le die('..') je dois mettre quoi exactement?
Oui de toute façon j'ai accès au ftp en cas de soucis je supprimerais les lignes et j'éssayerais une autre solution.
Je sais pas si mon patron sera trop en accord avec les petits anges mais pourquoi pas. Smiley cligne

Baptiste
pouc22 a écrit :
Du coup dans le die('..') je dois mettre quoi exactement?
Oui de toute façon j'ai accès au ftp en cas de soucis je supprimerais les lignes et j'éssayerais une autre solution.
Je sais pas si mon patron sera trop en accord avec les petits anges mais pourquoi pas. Smiley cligne

Baptiste

"die" est une commande qui envoie un message qui s'affiche sur l'écran de l’utilisateur, puis termine l'exécution du fichier php.
On l'utilise en général comme moyen de debugging, du genre:

if(xxxx)
    die('Erreur à la ligne ' . __LINE__ . ' du fichier ' . __FILE__);

Bien entendu on peut remplacer par

if(xxxx) {
   /* plein de code pour faire une page HTML aux petits oignons expliquant
      la situation */
    die(); /* se contente de fermer le programme */
}

Dans le cas présent, je mettrais:

if($id_order_state == 14) die("Commande en cours de saisie, veuillez réessayer plus tard");

Si je comprends bien, c'est le client qui veut savoir où en est sa commande qui verra apparaître le message. Pas très politique de lui dire "attends un peu qu'on ait finit de saisir ta commande, 'spece de nœud!"...
Merci.

En faite c'est lorsque la commande à le statut "en cours de saisie" et qu'elle est modifiée par quelqu'un de chez nous un e-mail est envoyé au client pour dire que le commande à été modifiée.

du coup je souhaiterais empêcher l'envoi d'e-mail.
Modifié par pouc22 (08 Dec 2014 - 10:00)
pouc22 a écrit :
Merci.

En faite c'est lorsque la commande à le statut "en cours de saisie" et qu'elle est modifiée par quelqu'un de chez nous un e-mail est envoyé au client pour dire que le commande à été modifiée.

du coup je souhaiterais empêcher l'envoi d'e-mail.

Ok
Si tu utilises "die" AVANT d'envoyer le mail (c'est à dire au début du bout de programme qu tu nous a envoyé) ça doit le faire.
Je rappelle que "die" signifie "mourir" en anglais. Tu fais mourir le programme, en lui laissant dire ses derniers mots pour la postérité.
Edit:
C'est un moyen pratique, utilisé surtout dans les phases de debugging d'un programme.
Voir cet article
pour un clair aperçu des limites d'utilisation.
Personnellement j'ai un petit petit programme d'affichage des messages d'erreur que j'appelle par "include". Avant de l'appeler, il faut initialiser les variables $TITLE et $MESSAGE, avec un texte:


<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" lang="fr" xml:lang="fr">
    <head>
        <!--[if lt IE 9]>    <script src="http://html5shiv.googlecode.com/svn/trunk/html5.js"></script><![endif]-->
        <meta charset="utf-8" />
        <title><?php echo $TITLE; ?></title>
        <style type="text/css">
/* CSS simple pour cohérence minimale avec le reste du site    */
            body,
            div,
            th,
            td,
            p{
                font-family:"Myriad Pro", "Trebuchet MS", Arial, Geneva, sans-serif;
                background:white;
                text-align:center;
            }</style>
    </head>
    <body>
        <?php 
            /* dans l'environnement de mon projet, j'utilise des objets "HTMLitem"
               la méthode "toHTML() génère du HTML en fonction de ce que comporte l'objet */
                 if(is_object($MESSAGE)) echo $MESSAGE -> toHTML();
                 else echo $MESSAGE;
        ?>
    </body>
</html>
<?php die; ?>

Ce n'est bien sûr qu'un moyen un peu plus propre de terminer une page php.
Modifié par PapyJP (08 Dec 2014 - 16:02)