En TMA, on voit de tout, pour le meilleur ou pour le pire. Le meilleur ayant cependant tendance à se faire rare. Ou peut-être est-ce du à la loi de Murphy ?
Voici quelques extraits de code PHP relevé par notre ami Teeboo, à déguster…
Les commentaires valent leur pesant de cacahuètes :
if(isset($t[2]) && $t[2] !== null) // Empiriquement, j'ai vu que c'était équivalent, mais sait-on jamais…
/* Accesseur tordu permettant à un compte qui s'est laissé expirer puis en
* catastrophe a voulu se réabonner, de jouir plus ou moins de son ancien
* abonnement. À utiliser avec prudence (autrement dit nulle part ailleurs
* que là où je l'ai déjà fait), l'idée qui a toujours été derrière les
* specs techniques étant que quelqu'un qui a laissé expirer son compte,
* c'est pour sa pomme, il faut qu'il se réabonne en partant de 0. Mais
* puisqu'il aura été décidé qu'on pardonne tout à l'utilisateur...
* Renvoie false le plus souvent possible, et true quand on est quasi-
* certain de notre coup; les erreurs de BdD renvoient du false aussi. */
function ComptePrimaireOuRecuperateur($pourPaquet)
/* À FAIRE: simplifier les paramètres. L'idée de départ de cette fonction
* était en fait d'externaliser un bout de VerifierInfos; elle table donc
* sur tout ce qui y a déjà été calculé, mais maintenant si on peut en faire
* une fonction indépendante, ce ne sera pas plus mal. */
function DernieresAdresses($idChose, $mode, &$payeur, &$infos2)
// Si tous ses abonnements ont expiré, on tente notre chance avec un vieil abonnement. Pas terrible, sachant que le module était à l'origine prévu pour que si un utilisateur a laissé son compte expirer, ben tant pis pour lui, il recommence tout un processus d'abonnement. Notre permissivité nous perdra. /* BOGUE: ça permet à un utilisateur de laisser expirer son compte, puis de créer deux abonnements de remplacement dans la même journée. Pour peu que par mégarde les deux soient validés, ça va péter! */
$d = array();
$o = array(); // $d, mais d'origine. Alors qu'on adapte $d à usage de paramètres pour les fonctions qu'on appelera derrière, on garde $o tel quel pour le réinjecter en cas d'annulation de la procédure (formulaire mal rempli, etc.).
Note : Attention, là, c’est un gros morceau. Plusieurs perles se cachent là-dedans, saurez vous les retrouver ? Pour info, COMPTESADREL_DISPO est une constante définie plus haut, qui vaut 0.
else if(($eAdrel = CompteUtil::VerifierDispoAdrel($d[champAdrel])) != COMPTESADREL_DISPO || ($eAdrel = VerifFormUtil::checkExistingEmailAddress($d[champAdrel]) ? COMPTESADREL_PRESENTE : COMPTESADREL_DISPO) != COMPTESADREL_DISPO)
do
{
switch ($eAdrel)
{
case COMPTESADREL_ERREUR:
$e = 'Une erreur interne est survenue.'; /* À FAIRE: un message un peu plus bavard. */
break;
case COMPTESADREL_PRESENTE:
$manquants[] = 'Adresse utilisée par un compte en cours d\'abonnement';
//$emailDejaEnBase = true;
break;
case COMPTESADREL_PASSEE:
$manquants[] = 'Adresse utilisée par un compte qui ne dispose plus d\'abonnement';
$emailDejaEnBase = true;
break;
case COMPTESADREL_FUTURE:
case COMPTESADREL_DEMANDEE: if(AUTORISER_DEUX_DEMANDES_MEME_ADREL) break 2; // Finalement pas erreur.
$manquants[] = 'Adresse reservée pour un compte en cours de création';
break;
}
if(!$e)
$e = true;
$tpl->setVariable('email_erreur', 1);
}
while(false);
}
if(!$e) do // Un do dont la sortie sera une erreur.
{
$e = true; // On commence par signaler qu'il y a erreur: ce sera ce qui restera si on n'atteint pas la fin du while, où nous nous déclarerons exempts d'erreur.
if(!count($manquants)) // À FAIRE: un peu plus propre. Là c'est une récup' rapide un soir de bourre
/* ATTENTION: en mode INFOS_ACHAT, $idFacture doit être définie pour ici. *//* À FAIRE?: simplifier. C'est un résidu d'un ancien mode, où VerifierInfos sur les abo recevait un id_refernece comme $idChose, et sur les achats normaux un id_facture. Voir si on peut déduire $idFacture d'$idChose, si oui supprimer le dernier paramètre de VerifierInfos dont la valeur par défaut à false pourrait à tort laisser croire qu'on s'en fiche. Si on a du code pour déduire, dans un premier temps on pourra fonctionner en mode test où l'on compare le résultat de ce code et l'$idFacture effectivement passé, en laissant une trace si ça diffère. Si au bout d'un mois on n'a rien, on peut simplifier. Le cas où j'entrevois déjà un risque de différence est l'achat d'évolutions d'abonnement: si je me souviens bien, on a deux factures (facture d'abonnement - facture d'évolution) pour une seule référence (l'abonnement). */
/* Mutualisation de code, récupérée d'un code existant, ce qui peut
* expliquer l'inexplicable. */
function CloreEtapesFacturation(...