Stockez le tout dans la base de données.
Vous voulez avoir une table "Modèle de tâche" et une table "Tâche" où il existe une relation un->plusieurs.
Lorsque l'utilisateur indique qu'il souhaite qu'une tâche se reproduise, créez un enregistrement "Modèle de tâche", puis créez autant de "Tâches" que l'utilisateur a indiqué (n'autorisez pas un utilisateur à créer des tâches trop loin dans le futur). Chaque tâche est liée au modèle de tâche via une clé étrangère. L'idée est que SQL va être plus efficace pour gérer ces enregistrements que d'essayer de tout faire en code basé sur un modèle. De cette façon, vous aurez plus d'options lors du tri et du filtrage de vos données. Après tout, écrire une requête SQL est plus facile que d'écrire, de tester et de maintenir une fonction PHP qui manipule les données.
Voici quelques autres conseils que je vous donnerais :
- Essayez d'obtenir beaucoup d'informations dans votre enregistrement "Modèle de tâche". Conservez le nombre de tâches couvertes par le modèle, la date à laquelle la dernière tâche se termine, le temps écoulé entre la première tâche et la dernière, etc. Ces "métadonnées" peuvent vous aider à gagner du temps lorsque vous cherchez à trier et filtrer tâches.
- Mettez un index sur les champs Date et FK, cela aidera également à interroger l'heure.
- Je viens de créer deux applications d'agenda au travail qui ont été plutôt bien accueillies par les patrons. J'ai utilisé le plugin JQuery "FullCalendar" (http://arshaw.com/fullcalendar/). J'ai utilisé JQuery AJAX pour gérer la plupart de mes événements, et il avait intégré la prise en charge des vues Mois, Jour et Semaine.