kalender met herhaalde events
Ik ben aan het plannen/kijken om een agenda te maken in php. Nu wil ik dat ik niet iedere week dezelfde events moet gaan opgeven die wekelijks of iedere even week voorkomen.
Het zou mogelijk moeten zijn om te kiezen om een event dagelijks/wekelijks/maandelijks/jaarlijks in te kunnen plannen maar ook dat ik individueel een event kan schrappen en het herhalen kan stopzetten.
Zeker vanwege het 2de ben ik niet zeker wat de beste manier is in verband met het opzetten van mijn databank.
Hoe zouden jullie dit aanpakken?
Bedankt voor het meedenken,
Jens
id: 5
description: een afspraak die iedere twee weken terug komt
start: 2019-10-5 12:00:00
repeatDays: 14
end: null (of een einddatum)
Zo kun je deze event in één keer aanmaken en oneindig herhalen maar ook in één keer weg kieperen of aanpassen.
Tweede probleem: Er één tussen uit halen of aanpassen. Bijvoorbeeld de tijd...
Hiervoor zou je een tweede tabel kunnen aanmaken waarin komt te staan welke moeten vervallen:
id: 1
event_id: 5 (verwijst naar de de event uit de eerste tabel)
index: 3 (de 3e keer dat deze event voorkomt komt te vervallen)
De wijziging zou je vervolgens (denk ik) als een nieuwe event kunnen opslaan (wat logisch is want hij valt dan toch uit de maat).
de CalDAV spec. Als ik even in m'n eigen database mee kijk komt het op het volgende neer:
- In 1e instantie zoals Frank hierboven al aangeeft een single record met een herhaal interval (niet alleen "days", maar ook "WEEKLY", "MONTHLY", enz).
- Voor evt. individuele wijzigingen wordt vervolgens steeds naar de originele geplande datum/tijd gekeken (dus niet "de 3e keer", maar "de keer die op 2019-11-02 viel" = 3e keer in Frank z'n voorbeeld).
- Alleen de wijziging/aanpassing wordt opgeslagen. Dat kan dus zijn "verwijderd", maar ook "15 minuten eerder", "een dag later", enz.
- Op het moment dat je nu de "hoofdafspraak" wijzigt verschuiven de andere afspraken dus ook mee (maar nog steeds "15 minuten eerder", "een dag later", enz. dan de basis) (tenminste, zo gaat het icm de kalender van Thunderbird).
- Als je het interval van 2-wekelijks naar maandelijks wijzigt zie je dan dat de gewijzigde dagen blijven staan (ook als ze niet op het nieuwe maand-rooster vallen) (wederom: met Thunderbird).
Kortom: veel plezier ;-) (volgens mij is dit zoiets wat je nooit 100% goed kunt doen, omdat er altijd wel iemand is die vindt dat een bepaalde manier "tegen-intuïtief is"). Wat ik me overigens ook afvraag is hoe dit gaat performen als je een afspraak inplant die elke 5 dagen herhaalt (dat kan in Thunderbird, dus maandag, vrijdag, woensdag, enz), vervolgens de begindatum op 1970-01-01 zet en dan dus steeds uit moet rekenen welke dagen er deze week aan de beurt zijn ...
Onder het mom: beter goed gejat dan slecht zelf verzonnen: - In 1e instantie zoals Frank hierboven al aangeeft een single record met een herhaal interval (niet alleen "days", maar ook "WEEKLY", "MONTHLY", enz).
- Voor evt. individuele wijzigingen wordt vervolgens steeds naar de originele geplande datum/tijd gekeken (dus niet "de 3e keer", maar "de keer die op 2019-11-02 viel" = 3e keer in Frank z'n voorbeeld).
- Alleen de wijziging/aanpassing wordt opgeslagen. Dat kan dus zijn "verwijderd", maar ook "15 minuten eerder", "een dag later", enz.
- Op het moment dat je nu de "hoofdafspraak" wijzigt verschuiven de andere afspraken dus ook mee (maar nog steeds "15 minuten eerder", "een dag later", enz. dan de basis) (tenminste, zo gaat het icm de kalender van Thunderbird).
- Als je het interval van 2-wekelijks naar maandelijks wijzigt zie je dan dat de gewijzigde dagen blijven staan (ook als ze niet op het nieuwe maand-rooster vallen) (wederom: met Thunderbird).
Kortom: veel plezier ;-) (volgens mij is dit zoiets wat je nooit 100% goed kunt doen, omdat er altijd wel iemand is die vindt dat een bepaalde manier "tegen-intuïtief is"). Wat ik me overigens ook afvraag is hoe dit gaat performen als je een afspraak inplant die elke 5 dagen herhaalt (dat kan in Thunderbird, dus maandag, vrijdag, woensdag, enz), vervolgens de begindatum op 1970-01-01 zet en dan dus steeds uit moet rekenen welke dagen er deze week aan de beurt zijn ...