Liste de tâches et notion de répétitions...

ViPHP
ViPHP | 3607 Messages

06 déc. 2007, 18:42

Bonjour à tous,
je suis actuellement en train de bosser sur un petit outil de rappel par email (le même style que se que vous avez sur vos téléphones portables, mais via internet).
J'ai donc une petite bdd qui contient des infos du genre: titre, contenu, date de création, rappel par mail ou non, etc....
Seulement je me suis dis aujourd'hui, et si j'introduisais la notion de pèriodicité des évènements (classiquement les anniversaires, mais aussi: "ne pas oublier le loyer" :-* )
Et je ne sais pas trop comment faire pour mettre en place le système....
Actuellement, les dates de rappels sont au format DATETIME dans ma table...
J'ai à l'esprit deux types de fonctionnement, le premier c'est de rajouter autant d'entrée qu'il y a d'année, mais bien sûr ça ne fonctionne pas top parceque ce n'est pas parfait (trop ou pas assez d'entrées...)
Ensuite je pensais rajouter une colonne "periodicite" dans ma table, qui jointerai sur une seconde table, ou on aurais les différentes periodicitées (tout les jours/ans/heures/2ans/2heures/etc)...
Mais après je ne vois pas comment récupérer les entrées dans mon cron qui envoi les mails...
Il y a une dernière possibilité qui me vient à l'esprit, c'est de ne mettre qu'une entrée, et dans le champ periodicite un temps en timestamp correspondant à ce que je souhaite (et je change tout en timestamp) et lors de l'envoi du mail, j'update le champ "date_alarme" en "date_alarme"+"periodicite"...
Bon bref je m'arrête là, je vous laisse critiquer mes différentes idées, m'en proposer d'autres, et éventuellement des retours d'expèriences?
Merci d'avance ;)

Mammouth du PHP | 881 Messages

07 déc. 2007, 01:09

Ta dernière solution me semble la meilleure.
En plus d'un champ periodicite, j'ajouterais un champ actif de type enum 'oui','non'

Chaque jour, ou chaque heure, selon ce que tu décides (là n'est pas la discussion), tu n'auras qu'à vérifier les commandes périmée dont le champ actif est à oui sont des commandes à exécuter. Tu le fais exécuter, puis tu renouvelles leur mandat d'exécution.
SELECT action, date_planif, periodicite FROM table WHERE date_planif < now() AND periodicite = 'oui'

Par le champ actif tu pourras archiver les action qui ne devait être accomplies qu'une seule fois. En les exécutant, périodicité nulle (0), tu change le oui en non et ainsi cette commande ne sera plus appelée, mais tu en gardera la trace.
Soyez artisans de paix