120

perso j'utilise une fonction "printf-like" pour externaliser les textes, ce qui donnerait grosso-modo ça :

fr.php:
---
$strings = array
(
    'home.welcome'    => 'Bonjour {login}, il est {time}.'
);

home.php:
---
[...]
echo tra ('home.welcome', array ('login' => 'Godzil', 'time' => Locale::getTime ()));
[...]

C'est "tra" qui va faire les remplacements dans la chaine avec les valeurs du tableau passé en paramètre. Un truc pas tout à fait exact dans cet exemple : c'est la fonction tra qui se charge de ce qu'est censée faire la classe "Locale" ici (toutes les transformations de texte genre date, heure & co qui diffèrent selon la langue choisie).

Au fait vous êtes rigolos avec vos "tests de charge" sur une appli qui doit supporter 150 users grin
avatar
All right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez par ici :)

121

./119 >
./config/mail/newAccount.txt :
__SUBJECT__ Élections ED : inscription

Bonjour,

Vous avez été inscrit sur la liste de votes de l’ED.
Votre nom de connexion est votre présente adresse mail, à savoir « __USERNAME__ ».
Votre mot de passe est « __PASSWORD__ ».

Bon vote !

./includes/init/functions.inc.php (qui j’include au chargement de la page) :
	function startsWith( $subject, $prefix ) {
		return ( substr( $subject, 0, strlen( $prefix ) ) == $prefix ) ;
	}

	function removePrefix( $subject, $prefix ) {
		return substr( $subject, strlen( $prefix ) ) ;
	}

[…]

function sendMail( $address, $textFile, $parameters = array () ) {
	$mailContents = file_get_contents( './config/mail/' . $textFile . '.txt') ;
	$subjectLine = strtok( $mailContents, "\r\n" ) ;
	$subject = ( startsWith( $subjectLine, '__SUBJECT__' ) ? trim( removePrefix( $subjectLine, '__SUBJECT__' ) ) : '' ) ;
	$mailContents = trim( removePrefix( $mailContents, $subjectLine ) ) ;
	foreach( $parameters as $token => $value ) {
		$mailContents = str_replace( '__' . $token . '__', $value, $mailContents ) ;
	}
	return @mail( $address, $subject, $mailContents, 'From: ' . MAIL_FROM ) ;
}
Avec « @mail » qui devient « mail » le temps de mes tests, et MAIL_FROM étant un define() venant du fichier de conf’.

./includes/checks/admin/addElectors.inc.php (qui est utilisé quand l’admin ajoute une liste de mails de votants) :
[…]
$password = generatePassword( $elector ) ;
$parameters = array ( 'USERNAME' => $elector, 'PASSWORD' => $password ) ;
if ( sendMail( $elector, 'newAccount', $parameters ) ) {
	@$sqlLink->query( 'INSERT INTO ' . ELECTORS_TABLE . ' ( mail, cryptedPwd ) VALUES ( \'' .
		@$sqlLink->real_escape_string( $elector ) . '\', \'' . cryptPassword( $elector, $password ) . '\' ) ;' ) ;
} else {
	$invalidElectors[] = $elector ;
}
unset( $password ) ;
unset( $parameters ) ;
[…]
(Le passage à la ligne dans le query() n’est pas dans mon code, c’est juste pour éviter que le [pre][/pre] fasse 10km de large hehe.)
La fonction generatePassword crée un pass de 11 caractères en fonction du nom d’utilisateur ($elector) et de l’heure courante (un nouveau pass chaque seconde hehe), donné en clair dans le mail, et cryptPassword($x,$y) fait en fait un sha1(strtolower($x).$y), donc pas besoin de real_escape_string() (et je préfère faire faire le SHA1 par PHP plutôt que par MySQL).
Les unset() sont là pour éviter que $password se balade ensuite dans la nature, même si je sais que je ne l’affiche pas plus tard (mais si quelqu’un adapte mon code, mieux vaut mettre une petite protection au cas où, ça ne mange pas de pain).
Tiens d’ailleurs, je viens à l’instant de me rendre compte qu’au lieu de créer un $parameters qui ne sert qu’une seule fois, je pouvais déclarer directement l’array dans les paramètres de sendMail().
Hop hop, je vais faire ça pour tous mes sendMail() hehe


Edit ./120 > En gros, ton tra(), c’est le foreach() de mon sendMail() wink, sauf que je ne gère pas le Locale.


Edit² : oui je sais, mon removePrefix() n’est pas safe, je devrais normalement faire d’abord un startsWith() pour être sûr que j’ai le droit d’enlever le préfixe.
Dans mon code, c’est inutile puisque je n’appelle removePrefix() qu’après avoir d’abord validé avec startsWith(), mais bon, comme ça a pour vocation d’être réutilisable, je vais ajouter le check kivabien…

Edit³ :
Godzil (./119) :
(moi ce qui me manque c'est le '%' de python sur les chaines sad cf le topic : topics/116046-formatage-equivalent-a-python )
Voilà, répondu en version non-pavéesque grin.
avatar
Je ne suis pas développeur Java : je suis artiste Java.
Ce que l’on conçoit bien s’énonce clairement, / Et le code pour l’écrire arrive aisément.
Hâtez-vous lentement ; toujours, avec méthode, / Vingt fois dans l’IDE travaillez votre code.
La perfection est atteinte, non pas lorsqu’il n’y a plus rien à ajouter, mais lorsqu’il n’y a plus rien à retirer.
You don't use science to show that you're right, you use science to become right.

122

Mouai c'est ce que je pensais faire, c'est vraiment con que PHP ne propose pas ce genre de choses sad
avatar
Proud to be CAKE©®™


GCC4TI importe qui a problème en Autriche, pour l'UE plus et une encore de correspours nucléaire, ce n'est pas ytre d'instérier. L'état très même contraire, toujours reconstruire un pouvoir une choyer d'aucrée de compris le plus mite de genre, ce n'est pas moins)
Stalin est l'élection de la langie.

123

Mouais, c'est quand même assez spécialisé comme usage, beaucoup trop pour être intégré de base dans un langage je trouve. Après il suffit que le langage en question te permette de dériver ta propre classe de string et de définir l'opérateur %, et là oui ça devient intéressant.
avatar
All right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez par ici :)

124

c pas non plus la mort hein... et franchement, je trouve ca peu utile

125

Bah non c'est pas spécialisé, c'est un printf... c'est d'ailleurs la seule façon de faire un printf en python. Et c'est juste beaucoup plus propre que la version originale de printf. C'est même plus puissant que boost::format, pour prendre l'exemple d'un langage qui permet de définir soi-même l'opérateur %.
avatar
I'm on a boat motherfucker, don't you ever forget

126

et printf c'est un élément natif du langage (C en l'occurrence) pour toi ?
avatar
All right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez par ici :)

127

Euh ouais, complètement. Il faut un moyen de pouvoir afficher facilement des nombres: ostream, printf, utilisation de $var dans les strings, ou transtypage automatique, que sais-je, l'important est que ce soit assez simple à utiliser. Pour python, la solution retenue a été l'opérateur %.
avatar
I'm on a boat motherfucker, don't you ever forget

128

Ah j'ai commencé à répondre sans voir ton edit, j'avais pas compris ton post. Euh on peut considérer ça comme non natif, mais au même titre que les ostreams pour C++, ça fait partie de la librairie standard, donc c'est quand même une feature de base très importante (sans compter les macros super moches pour faire des fonctions à nombre variable d'arguments, dont la seule utilité, selon moi, est que ça permet d'écrire printf).

Après python est un langage de script, donc en particulier, la manipulation de strings est censée être assez facile. De ce fait, je ne vois donc pas le problème d'un printf au niveau syntaxique.
avatar
I'm on a boat motherfucker, don't you ever forget

129

Pour moi il y a une grosse différence entre quelque chose qui fait partie de la lib standard (printf par exemple) et ce que j'appelle un élément "natif" du langage (je ne sais pas si il y a un terme adapté) comme un opérateur ou un mot-clé. Et si l'existence de printf se justifie parfaitement en tant que fonction standard (au même titre que les streams & co), j'aurais trouvé inadapté d'en faire un mot-clé ou un opérateur (comme le % du python).
avatar
All right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez par ici :)

130

Vous avez pas l'impression d'avoir tous les deux raison ? cheeky dans un langage généraliste comme C ça serait bidon d'avoir une construction syntaxique (ça te va comme terme bob ? ^^) spécifique pour printf (enfin ceci dit c'est à moitié le cas, comme dit moumou c'est quand même un type particulier de fonction avec nombre de paramètres variables...) mais dans un langage de script (dont une des fonctions principales est la manipulation de chaînes de caractères) c'est tout à fait justifié...
avatar
« Le bonheur, c'est une carte de bibliothèque ! » — The gostak distims the doshes.
Membrane fondatrice de la confrérie des artistes flous.
L'univers est-il un dodécaèdre de Poincaré ?
(``·\ powaaaaaaaaa ! #love#

131

sally: relis ./126 va, ca porte sur le C la qn

132

euh oui enfin si je relis ./122 ça porte sur PHP et si je relis ./123 ça porte sur « un langage », mais bon tongue
avatar
« Le bonheur, c'est une carte de bibliothèque ! » — The gostak distims the doshes.
Membrane fondatrice de la confrérie des artistes flous.
L'univers est-il un dodécaèdre de Poincaré ?
(``·\ powaaaaaaaaa ! #love#

133

Le contexte où va être utilisé un langage (compilé ? langage de script ? langage web ?) influe beaucoup moins sur ses "constructions syntaxiques" que sur sa bibliothèque standard et les différentes API, je trouve. Théoriquement le langage devrait pouvoir rester générique au possible et, si il est bien fait, un simple changement de framework serait suffisant pour l'adapter à presque n'importe quoi.

(par exemple, "echo" ne devrait pas être un mot-clé de PHP, mais une fonction comme "print")
avatar
All right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez par ici :)

134

Gasp, j’ai un problème d’expression !
La date de début ne peut pas être fixée à avant dans 5 minutes. La date de fin ne peut pas être fixée à moins d’une heure après le début.
Je n’arrive pas à exprimer ça en bon français, surtout la première phrase qui sonne bizarre (sans doute par euphonie), mais je n’arrive pas à l’expliquer autrement sorry
Please help!
!call Sally
--- Call : Sally appelé(e) sur ce topic ...


Sinon, apuka intégrer l’annulation d’urgence du scrutin, et j’ai fini \o/ !
Enfin… il manquera aussi la gestion du multi-scrutin, mais c’est pas urgent ^^"…
avatar
Je ne suis pas développeur Java : je suis artiste Java.
Ce que l’on conçoit bien s’énonce clairement, / Et le code pour l’écrire arrive aisément.
Hâtez-vous lentement ; toujours, avec méthode, / Vingt fois dans l’IDE travaillez votre code.
La perfection est atteinte, non pas lorsqu’il n’y a plus rien à ajouter, mais lorsqu’il n’y a plus rien à retirer.
You don't use science to show that you're right, you use science to become right.

135

Un scrutin ne peut ouvrir moins de 5 minutes après avoir été modifié.
Un scrutin doit durer au moins une heure.
avatar
I'm on a boat motherfucker, don't you ever forget

136

L['heure d]e début (l'ouverture ?) ne doit pas être fixée/avoir lieu dans moins de 5 minutes ?
La fin/clôture doit être fixée/avoir lieu au moins une heure après l'ouverture ?
avatar
« Le bonheur, c'est une carte de bibliothèque ! » — The gostak distims the doshes.
Membrane fondatrice de la confrérie des artistes flous.
L'univers est-il un dodécaèdre de Poincaré ?
(``·\ powaaaaaaaaa ! #love#

137

Zephyr (./120) :
Au fait vous êtes rigolos avec vos "tests de charge" sur une appli qui doit supporter 150 users grin

150 peut ne pas énorme, mais ça dépend complètement du serveur et de la liaison qui est en place...

Sur un serveur "pro" ça ne devrais pas être grand chose, sur un serveur amateur derrière une connexion branlante (je parle pas de chez Vincent, mais dans l'ED on ne sais pas ce qui va être présent)

Bref, faire des tests en "live" peut apprendre beaucoup sur l'application
avatar
Proud to be CAKE©®™


GCC4TI importe qui a problème en Autriche, pour l'UE plus et une encore de correspours nucléaire, ce n'est pas ytre d'instérier. L'état très même contraire, toujours reconstruire un pouvoir une choyer d'aucrée de compris le plus mite de genre, ce n'est pas moins)
Stalin est l'élection de la langie.

138

Zephyr (./120) :
Au fait vous êtes rigolos avec vos "tests de charge" sur une appli qui doit supporter 150 users biggrin.gif

Tu rigoles mais "on" (sans en référer à l'équipe technique, ça a été une décision des instances dirigeantes) a sous traité un portail Web qui ne tenait pas la charge lorsque 10 personnes étaient connectées en simultané (le serveur étant un bi-xeon avec 8Go de RAM et deux lignes au giga, mouarf mouarf mourf). Je ne vais pas m'étaler sur l'affaire (qui n'est toujours pas finie), mais faire des tests de charge peut être utile même dans les cas où ça parait totalement déplacé.
avatar

139

Bien bien bien… je termine encore quelques tests en « situation réelle », je rassemble les 3 fichiers de conf’ en 1 seul (cheeky), et… ben on pourra dire que c’est fini hehe !
J’installerai ça chez vince et j’enverrai pas mmsg les infos de login de l’admin aux participants du topic, pour que vous puissiez au moins vous enregistrer comme votant.
Par contre, si vous êtes plusieurs à accéder à la page d’admin en même temps, ça va être un peu le boxon grin !
En condition réelle, ça n’arrivera pas (sauf si l’admin est assez æß®¿™¡ pour filer ses infos de login à quelqu’un d’autre gol).

wendy, prépare ta liste de mails tongue !
avatar
Je ne suis pas développeur Java : je suis artiste Java.
Ce que l’on conçoit bien s’énonce clairement, / Et le code pour l’écrire arrive aisément.
Hâtez-vous lentement ; toujours, avec méthode, / Vingt fois dans l’IDE travaillez votre code.
La perfection est atteinte, non pas lorsqu’il n’y a plus rien à ajouter, mais lorsqu’il n’y a plus rien à retirer.
You don't use science to show that you're right, you use science to become right.

140

Voilà, j’ai terminé, enfin !
J’ai envoyé les infos de login admin à 8 d’entre vous, de manière plus ou moins arbitraire : si vous n’avez pas eu votre mmsg, n’hésitez pas à me contacter pour que je vous ajoute comme testeur.
Et n’hésitez pas à pousser l’interface dans ses retranchements, à tenter des attaques SQL ou HTML, à essayer de faire passer ce qui est normalement interdit (vote en double, etc.), ou tout autre truc tricky que vous pourrez imaginer.
Si je n’ai rien oublié, tout est blindé, mais un oubli étant toujours possible, je ne garantis pas une sécurité totale…
Bons tests happy !

Oh par contre, attention, vous aurez des comportements inattendus si vous êtes plusieurs en même temps sur l’interface d’admin (valeurs qui changent subitement), tenez-en compte.
avatar
Je ne suis pas développeur Java : je suis artiste Java.
Ce que l’on conçoit bien s’énonce clairement, / Et le code pour l’écrire arrive aisément.
Hâtez-vous lentement ; toujours, avec méthode, / Vingt fois dans l’IDE travaillez votre code.
La perfection est atteinte, non pas lorsqu’il n’y a plus rien à ajouter, mais lorsqu’il n’y a plus rien à retirer.
You don't use science to show that you're right, you use science to become right.

141

ok merci bcp, je vais tester.
Par contre vous êtes bien conscient tous les 2 que je peux pas utiliser les 2... donc forcément yen aura un qui me servira pas, pour cette élection en tout cas...
avatar

142

Je sais pas pour les autres mais je n'arrive pas à accéder au site.
avatar

143

(idem ^^)
avatar

144

C’est étrange, Godzil et Zephyr m’ont dit la même chose.
Pourtant, moi j’y accède sans aucun souci hum
Bon, URL pour que d’autres essaient au moins d’arriver à la page d’accueil : http://ethaniel.ti-fr.com/elections/index.php
vince, tu as interdit l’accès à tout le monde sauf à mon IP, ou quoi hum ? (joke inside, je sais bien que ce n’est pas ça embarrassed…)
avatar
Je ne suis pas développeur Java : je suis artiste Java.
Ce que l’on conçoit bien s’énonce clairement, / Et le code pour l’écrire arrive aisément.
Hâtez-vous lentement ; toujours, avec méthode, / Vingt fois dans l’IDE travaillez votre code.
La perfection est atteinte, non pas lorsqu’il n’y a plus rien à ajouter, mais lorsqu’il n’y a plus rien à retirer.
You don't use science to show that you're right, you use science to become right.

145

perso j'y accède (mais j'ai pas essayé avant maintenant)
avatar
« Le bonheur, c'est une carte de bibliothèque ! » — The gostak distims the doshes.
Membrane fondatrice de la confrérie des artistes flous.
L'univers est-il un dodécaèdre de Poincaré ?
(``·\ powaaaaaaaaa ! #love#

146

— ça se comporte bizarrement si je mets un nombre minimal de candidats à choisir supérieur au nombre maximal. Le résultat est toujours cohérent au sens où min <= max mais ça met un peu n'importe quoi (et j'ai pas de message d'erreur, c'est juste que les valeurs changent). Par ailleurs si je mets des nombres cohérents mais supérieurs au nombre actuel de candidats ils se retrouvent mis au nombre actuel de candidats (y compris pour le nombre max)... et ça ne change pas si je rajoute des candidats.

— si j'essaie de fixer la date d'ouverture dans le passé ça la met automatiquement dans 5 minutes (et le seul message que j'ai est attention ça commence dans moins de 30 minutes, je préférerais avoir attention vous avez entré n'importe quoi ^^)

— si j'essaie de fixer la date de clôture moins d'une heure après la date d'ouverture ça la met une heure après, mais si j'essaie de la fixer carrément dans le passé ça met la date d'ouverture dans 5 minutes et la date de clôture à 23 h 00 (pourquoi 23 h 00 ???)

— plus gênant : si j'entre une date "invalide", par exemple en écrivant 0:00 au lieu de 00:00, ça se comporte exactement comme si j'avais mis une date passée ! (donc dans 5 minutes pour l'heure d'ouverture, et à 23 h 00 pour l'heure de clôture...) Et toujours seulement le même message me disant que l'ouverture est dans moins de 30 minutes (par ailleurs il n'est pas en rouge ni rien, bon il y a écrit Attention en gras certes mais... et puis il se peut que j'aie fait exprès de fixer l'heure de début dans moins d'une demi-heure, auquel cas ce message ne m'indique rien que je ne sache pas déjà et si je ne fais pas attention je ne vois pas que les dates ont été changées par rapport à ce que j'ai entré)
avatar
« Le bonheur, c'est une carte de bibliothèque ! » — The gostak distims the doshes.
Membrane fondatrice de la confrérie des artistes flous.
L'univers est-il un dodécaèdre de Poincaré ?
(``·\ powaaaaaaaaa ! #love#

147

hum, en essayant de mettre de l'html à la place de mon adresse mail j'ai rendu l'appli inutilisable, désolé, faudrait virer le mec dont le mail est "<!--"
avatar
All right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez par ici :)

148

Le changement de mot de passe ne marche pas (ça ne change pas le mot de passe). J'ai un écran de confirmation comme quoi ça a bien été changé, mais c'est pas le cas (en revanche la demande de génération d'un nouveau mot de passe marche).
avatar
« Le bonheur, c'est une carte de bibliothèque ! » — The gostak distims the doshes.
Membrane fondatrice de la confrérie des artistes flous.
L'univers est-il un dodécaèdre de Poincaré ?
(``·\ powaaaaaaaaa ! #love#

149

Bon j'ai moyen de fixer le nombre minimum de candidats à choisir et ensuite de virer des candidats pour qu'il en reste moins que ce nombre ; par ailleurs je ne sais pas qui a fait ça mais il y a un candidat Harry qui apparaît sur toutes les pages du site et je ne peux plus en ajouter d'autre ^^

edit (je vais arrêter de reposter ^^) : petit souci de rafraîchissement, si j'efface un candidat, que je fais page précédente, il réapparaît (je peux le re-supprimer mais ça n'a pas l'air de bugger), et si je vais sur un autre onglet genre paramètres et que je reclique sur candidats la liste n'est toujours pas mise à jour (donc je redis ce que j'ai fait : je sélectionne un candidat, je le supprime, je fais précédent, je change d'onglet, je reviens, le candidat supprimé apparaît toujours dans la liste. Apparemment elle ne se met à jour que si je modifie quelque chose. Du coup je pourrais croire qu'en faisant précédent j'ai annulé la suppression du candidat, ce qui n'est évidemment pas le cas)

edit 2 : la liste d'adresses mail avec des cases à cocher, elle se comporterait comment s'il y avait 500 emails ? il faudrait scroller 50 km ?
c'est possible à tout moment de savoir qui a voté en regardant quelles cases sont grisées, mais je ne sais pas si c'est un problème
avatar
« Le bonheur, c'est une carte de bibliothèque ! » — The gostak distims the doshes.
Membrane fondatrice de la confrérie des artistes flous.
L'univers est-il un dodécaèdre de Poincaré ?
(``·\ powaaaaaaaaa ! #love#

150

Zephyr (./147) :
hum, en essayant de mettre de l'html à la place de mon adresse mail j'ai rendu l'appli inutilisable, désolé, faudrait virer le mec dont le mail est "<!--"
Euh, je sais pas ce qui l’a rendue inutilisable de ton côté, mais pour moi, j’ai pu virer les 2 mails avec HTML directement par l’interface.
Par contre, je n’avais effectivement pas pensé au HTML dans les mails/noms de candidats, et l’utilisation de trucs comme </body></html> donne de drôles de résultats (mais qui ne sont pas irréparables, même avec la seule interface Web).
Sally (./146) :
— ça se comporte bizarrement si je mets un nombre minimal de candidats à choisir supérieur au nombre maximal. Le résultat est toujours cohérent au sens où min <= max mais ça met un peu n'importe quoi (et j'ai pas de message d'erreur, c'est juste que les valeurs changent). Par ailleurs si je mets des nombres cohérents mais supérieurs au nombre actuel de candidats ils se retrouvent mis au nombre actuel de candidats (y compris pour le nombre max)... et ça ne change pas si je rajoute des candidats.
Si tu mets min>max, mais tous 2 dans la fourchette 0–max_candidats, ils sont juste échangés.
Quand au message d’erreur, j’ai préféré forcer les valeurs à des quantités valides plutôt que bombarder l’admin de messages d’erreur sans toucher à ses chiffres.
Mais je ne dis pas que c’est le meilleur choix…

En fait, la règle, c’est :
¤ les 2 valeurs entrées sont triés dans l’ordre
¤ la plus petite valeur est ramenée entre 0 et max_candidats
¤ la plus grande est ramenée entre 1 et max_candidats
Par contre, si tu as 5 candidats, que tu autorise 5 votes, et que tu ajoutes des candidats, il n’y a aucun moyen de décider si le max autorisé doit rester à 5 ou doit suivre : il faudrait ajouter un mot clé genre « max », pour dire que l’on suit le nombre de candidats.
Par contre, si on met plein de candidats, que l’on autorise un grand nombre de choix et que l’on redescend le nombre de candidats sous cette valeur, elle reste supérieure au nombre de candidats (du moins tant que l’on ne touche pas à l’« onglet » des paramètres).
Sally (./146) :
— si j'essaie de fixer la date d'ouverture dans le passé ça la met automatiquement dans 5 minutes (et le seul message que j'ai est attention ça commence dans moins de 30 minutes, je préférerais avoir attention vous avez entré n'importe quoi ^^)
— si j'essaie de fixer la date de clôture moins d'une heure après la date d'ouverture ça la met une heure après, mais si j'essaie de la fixer carrément dans le passé ça met la date d'ouverture dans 5 minutes et la date de clôture à 23 h 00 (pourquoi 23 h 00 ???)
Pareil qu’au-dessus : plutôt que balancer des fenêtre d’alerte, j’ai préféré recadrer les valeurs entrées pour qu’elles collent avec les règles.
Sally (./146) :
— plus gênant : si j'entre une date "invalide", par exemple en écrivant 0:00 au lieu de 00:00, ça se comporte exactement comme si j'avais mis une date passée ! (donc dans 5 minutes pour l'heure d'ouverture, et à 23 h 00 pour l'heure de clôture...) Et toujours seulement le même message me disant que l'ouverture est dans moins de 30 minutes
C’est un manque de documentation : si une date est invalide, elle devient « now » (puis la règle des 5 minutes + 1h est appliquée).
Sally (./146) :
(par ailleurs il n'est pas en rouge ni rien, bon il y a écrit Attention en gras certes mais... et puis il se peut que j'aie fait exprès de fixer l'heure de début dans moins d'une demi-heure, auquel cas ce message ne m'indique rien que je ne sache pas déjà et si je ne fais pas attention je ne vois pas que les dates ont été changées par rapport à ce que j'ai entré)
Hum, oui, j’ai peut-être fait une erreur en partant du principe que l’utilisateur revérifiera les valeurs entrées, et qu’il verra donc qu’elles sont modifiées automatiquement pour suivre les règles…
Et il y a aussi que ça commençait à me gonfler de copier-coller du <?php if(…):?><script type="text/javascript">alert(…);</script><?php endif;?> à tout bout de champ ^^"…

Bon, puisque j’ai le temps, je vais améliorer le bastringue au niveau de l’ergonomie, et aussi de la réutilisabilité du code (y’a encore des fichiers qui contiennent à la fois du code générique et du code spécifique au projet, c’est pas joli).
avatar
Je ne suis pas développeur Java : je suis artiste Java.
Ce que l’on conçoit bien s’énonce clairement, / Et le code pour l’écrire arrive aisément.
Hâtez-vous lentement ; toujours, avec méthode, / Vingt fois dans l’IDE travaillez votre code.
La perfection est atteinte, non pas lorsqu’il n’y a plus rien à ajouter, mais lorsqu’il n’y a plus rien à retirer.
You don't use science to show that you're right, you use science to become right.