Skip to content

Motifs récurrents et RRULE

La plupart des choses que vous mettez sur le calendrier se produisent plus d'une fois. Une réunion de jeunesse hebdomadaire, un déjeuner mensuel des leaders, un dimanche annuel de baptême — GCM gère tout cela via un seul sélecteur sur le formulaire d'événement, soutenu par le standard iCalendar RRULE (RFC 5545).

Le sélecteur de récurrence apparaît quand vous basculez le menu déroulant Fréquence hors de Aucune.

Boîte de dialogue de nouvel événement

Ce qui est stocké

Quand vous enregistrez un événement récurrent, GCM écrit trois colonnes sur la ligne events :

  • rrule_string — la chaîne de récurrence faisant autorité, comme FREQ=WEEKLY;BYDAY=MO,WE,FR;UNTIL=20261231T235959Z.
  • recurrence_rule — un ancien code court (weekly, monthly, yearly) conservé pour la compatibilité avec les anciennes requêtes.
  • recurrence_end_date — une colonne date redondante qui reflète la valeur de UNTIL, utilisée pour un filtrage SQL rapide.

Le navigateur analyse rrule_string et étend les occurrences directement dans la vue du calendrier — il n'y a pas de cron côté serveur remplissant une table de dates. Cela maintient la base de données petite (une ligne par série, pas une ligne par dimanche) et signifie que les modifications de la règle se propagent instantanément à chaque date future.

Choix de fréquence

Le sélecteur offre cinq options :

Quotidien

FREQ=DAILY. À utiliser avec parcimonie — les événements quotidiens encombrent vite le calendrier. Le cas courant est une campagne à court terme : Prière du matin quotidienne pendant le Carême. Associez-la à une date de fin pour qu'elle s'arrête à Pâques.

Hebdomadaire

FREQ=WEEKLY plus une liste BYDAY facultative. Les cases à cocher des jours vous laissent choisir plusieurs jours de la semaine d'un coup : un groupe de prière du lundi/mercredi/vendredi est un événement avec BYDAY=MO,WE,FR, pas trois événements séparés.

Si vous laissez les cases des jours vides, GCM se répète le même jour de la semaine que la date de début. Donc un événement commençant un mardi sans BYDAY sélectionné devient « chaque mardi ».

Toutes les deux semaines

FREQ=WEEKLY;INTERVAL=2. Même sélecteur qu'hebdomadaire, mais l'événement saute une semaine sur deux. Courant pour les cellules qui se réunissent les dimanches alternés, ou pour les réunions de staff sur un rythme bimensuel.

Mensuel

FREQ=MONTHLY avec un choix entre deux modes :

  • Jour du mois (BYMONTHDAY=15) — le 15 de chaque mois, indépendamment du jour de la semaine. Récupère le numéro du jour à partir de votre date de début.
  • Nième jour de la semaine (BYDAY=3SU) — le 3e dimanche de chaque mois. Utile pour les réunions de leaders ou les services d'onction qui suivent un motif dominical plutôt qu'une date du calendrier.

Le sélecteur affiche les deux options en boutons radio. Choisissez jour du mois pour les événements de type financier (« le 1er de chaque mois ») ; choisissez nième jour de la semaine pour les événements de type service (« premier dimanche du mois »).

Annuel

FREQ=YEARLY. La même date du calendrier une fois par an — anniversaires, services de jour de fondation, conférences annuelles. GCM déduit le mois et le jour à partir de la date de début de l'événement, vous n'avez donc pas besoin de les retaper.

Conditions de fin

Chaque récurrence choisit l'un de trois modes de fin :

  • Jamais — pas d'UNTIL, pas de COUNT. L'événement se répète indéfiniment. Bien pour les services hebdomadaires en cours.
  • Après N occurrencesCOUNT=10. Utile pour les campagnes limitées dans le temps (« classe de discipulat de dix semaines »).
  • À une date spécifiqueUNTIL=20261231T235959Z. Courant pour les saisons de ministère qui se terminent à la fin de l'année.

Si vous choisissez jamais, le calendrier étend quand même les occurrences jusqu'à la fin du mois actuellement visible — il n'y a pas de boucle infinie parce que l'expansion est bornée par la fenêtre de vue.

Choisir le bon motif

Quelques exemples du monde réel et les paramètres du sélecteur qui correspondent :

ÉvénementFréquenceParamètres supplémentaires
Service du dimancheHebdomadaireBYDAY=SU, fin jamais
Prière mercredi + vendrediHebdomadaireBYDAY=WE,FR, fin jamais
Communion du premier dimancheMensuelNième jour de la semaine (1er dimanche), fin jamais
Offrande des leaders du 15 du moisMensuelJour du mois (15), fin jamais
Série de Pâques sur six semainesHebdomadaireBYDAY=SU, fin après 6 occurrences
Jour annuel des fondateursAnnuelfin jamais
Méditation quotidienne de l'AventQuotidienfin à une date (25 décembre)

Pour les services dont la présence est suivie comme le dimanche matin, vous n'avez pas besoin d'un événement de calendrier récurrent du tout — voir Réunions et niveaux de portée pour le bon motif. Les événements de calendrier avec récurrence sont pour les choses dont les gens ont besoin d'un rappel visuel ; les réunions sont pour les choses contre lesquelles vous enregistrez une liste.

Compatibilité rétroactive

GCM comprend encore l'ancienne colonne recurrence_rule (weekly / monthly / yearly) pour les événements créés avant la sortie du sélecteur RRULE. Quand vous modifiez l'un de ces anciens événements, le sélecteur fait correspondre le code court à son équivalent RRULE le plus proche et réécrit les deux champs. Les nouveaux événements écrivent toujours les deux ; la RRULE fait autorité quand les deux sont présentes.

Si l'analyse de la RRULE échoue un jour — une chaîne corrompue à la suite d'une modification manuelle, par exemple — le calendrier retombe sur l'interprétation de l'ancienne recurrence_rule. Vous ne perdrez pas de dates, mais vous pourriez perdre la nuance (un ancien événement quotidien-avec-date-de-fin devient un repli quotidien-pour-toujours).

Que faire quand une date est différente

La récurrence choisit le motif. Quand une occurrence spécifique a besoin d'être annulée ou déplacée — le service de la veille de Noël remplaçant le créneau habituel du dimanche matin, par exemple — ne réécrivez pas la RRULE. Utilisez plutôt les exceptions d'événement. Elles remplacent une seule date sans perturber le reste de la série.