nextcloud / nextcloud/calendar

Recurrent Events: When the organizer changes the status of an occurrence to 'cancelled', the whole event becomes cancelled on the attendee's calendar

Open
#6,655 2 comments 1 reaction 1 assignee View on GitHub

@ndo84bw is already working on this.

Since Jun 11, 2026.

3. to review bug
Dominant language
JavaScript
Stars
1.2k
Forks
332
Avg merge
16h 13m
Merged PRs (30d)
137

Description

Steps to reproduce
  1. On UserA's calendar, create a recurrent event with more than three occurrences (I've simulated this scenario) and invite UserB to it.
  2. Select the first occurrence, change its status to 'cancelled,' and click on 'Update this occurrence.'
  3. Open UserB's calendar and locate the event.
Expected behavior

The occurrence should be updated correctly.

Image

Actual behavior

The whole event on UserB's calendar becomes 'cancelled'.

Organizer:
Image

Attendee:
Image

Calendar app version

5.0.9

CalDAV-clients used

No response

Browser

Chrome 122

Client operating system

Linux mint

Server operating system

Debian

Web server

Apache

Database engine version

MariaDB

PHP engine version

Other

Nextcloud version

30.0.5.1

Updated from an older installed version or fresh install

Updated from an older version

List of activated apps
Enabled:
  - activity: 3.0.0
  - calendar: 5.0.9
  - calendar_resource_management: 0.8.0
  - cloud_federation_api: 1.13.0
  - comments: 1.20.1
  - contacts: 6.1.3
  - contactsinteraction: 1.11.0
  - dashboard: 7.10.0
  - dav: 1.31.1
  - deck: 1.14.3
  - federatedfilesharing: 1.20.0
  - files: 2.2.0
  - files_pdfviewer: 3.0.0
  - files_reminders: 1.3.0
  - files_sharing: 1.22.0
  - files_trashbin: 1.20.1
  - logreader: 3.0.0
  - lookup_server_connector: 1.18.0
  - notifications: 3.0.0
  - oauth2: 1.18.1
  - provisioning_api: 1.20.0
  - settings: 1.13.0
  - sharebymail: 1.20.0
  - snappymail: 2.38.2
  - spreed: 20.1.3
  - systemtags: 1.20.0
  - tasks: 0.16.1
  - theming: 2.5.0
  - theming_customcss: 1.17.0
  - twofactor_backupcodes: 1.19.0
  - updatenotification: 1.20.0
  - user_external: 3.4.0
  - user_status: 1.10.0
  - viewer: 3.0.0
  - weather_status: 1.10.0
  - webhook_listeners: 1.1.0-dev
  - workflowengine: 2.12.0
Disabled:
  - admin_audit: 1.20.0
  - encryption: 2.18.0
  - federation: 1.20.0 (installed 1.20.0)
  - files_external: 1.22.0
  - files_versions: 1.23.0 (installed 1.23.0)
  - notify_push: 0.7.0
  - profile: 1.0.0
  - testing: 1.20.0
  - twofactor_totp: 12.0.0-dev
  - user_ldap: 1.21.0
  - user_migration: 7.0.1
Nextcloud configuration
{
    "system": {
        "passwordsalt": "***REMOVED SENSITIVE VALUE***",
        "secret": "***REMOVED SENSITIVE VALUE***",
        "instanceid": "***REMOVED SENSITIVE VALUE***",
        "log_type": "file",
        "logfile": "\/var\/log\/groupware\/groupware_s4.log",
        "loglevel": 0,
        "logdateformat": "F d, Y H:i:s",
        "datadirectory": "***REMOVED SENSITIVE VALUE***",
        "default_language": "pt",
        "default_locale": "pt_BR",
        "dbtype": "mysql",
        "overwrite.cli.url": "http:\/\/localhost",
        "dbname": "***REMOVED SENSITIVE VALUE***",
        "dbhost": "***REMOVED SENSITIVE VALUE***",
        "dbport": "",
        "dbtableprefix": "oc_",
        "mysql.utf8mb4": true,
        "dbuser": "***REMOVED SENSITIVE VALUE***",
        "dbpassword": "***REMOVED SENSITIVE VALUE***",
        "installed": true,
        "allow_local_remote_servers": true,
        "lost_password_link": "disabled",
        "simpleSignUpLink.shown": false,
        "updater.release.channel": "git",
        "upgrade.disable-web": true,
        "updatechecker": false,
        "has_internet_connection": false,
        "trashbin_retention_obligation": "auto,10",
        "knowledgebaseenabled": false,
        "profile.enabled": false,
        "allow_user_to_change_display_name": false,
        "auth.bruteforce.protection.enabled": false,
        "activity_expire_days": 30,
        "app.mail.verify-tls-peer": false,
        "auth.webauthn.enabled": false,
        "overwriteprotocol": "https",
        "appstoreenabled": false,
        "user_backends": [
            {
                "class": "\\OCA\\UserExternal\\IMAP",
                "arguments": [
                    "127.0.0.1",
                    143,
                    null,
                    null,
                    false,
                    false
                ]
            }
        ],
        "theme": "",
        "trusted_domains": [
            "localhost",
            "devlucas.internetcontrolada.com"
        ],
        "mail_smtpmode": "smtp",
        "mail_from_address": "***REMOVED SENSITIVE VALUE***",
        "mail_smtphost": "***REMOVED SENSITIVE VALUE***",
        "mail_smtpport": "587",
        "mail_smtpauth": true,
        "mail_smtpauthtype": "LOGIN",
        "mail_smtpname": "***REMOVED SENSITIVE VALUE***",
        "mail_smtppassword": "***REMOVED SENSITIVE VALUE***",
        "mail_smtpstreamoptions": {
            "ssl": {
                "allow_self_signed": true,
                "verify_peer": false,
                "verify_peer_name": false
            }
        },
        "version": "30.0.5.1",
        "maintenance": false,
        "filelocking.debug": true
    }
}
Web server error log

Log file

Browser log

Additional info

PHP: 8.3

I made a few changes to improve the event status on the frontend; that's why it has the name crossed out and opaque.

I reproduced this problem and found out that the vevent of the recurrent event has its status updated to 'Cancelled.' However, this is different from the organizer's perspective, where the vevent remains with the 'Confirmed' status, and DAV creates another vevent with the 'Cancelled' status.

From oc_calendarobjects table:
Attendee's ICS:

BEGIN:VCALENDAR
VERSION:2.0
PRODID:-//Sabre//Sabre VObject 4.5.4//EN
CALSCALE:GREGORIAN
BEGIN:VTIMEZONE
TZID:America/Sao_Paulo
BEGIN:STANDARD
TZOFFSETFROM:-0300
TZOFFSETTO:-0300
TZNAME:-03
DTSTART:19700101T000000
END:STANDARD
END:VTIMEZONE
BEGIN:VEVENT
CREATED:20250123T165818Z
LAST-MODIFIED:20250123T165839Z
UID:d58cb252-458c-4707-80aa-e2ad6d956df0
DTSTART;TZID=America/Sao_Paulo:20250126T203000
DTEND;TZID=America/Sao_Paulo:20250126T210000
SUMMARY:JJJJJJJJJJ
ATTENDEE;CN=Hudson Hornet (DEV);CUTYPE=INDIVIDUAL;PARTSTAT=NEEDS-ACTION;ROL
 E=REQ-PARTICIPANT;RSVP=TRUE;LANGUAGE=pt_BR:mailto:teste2@internetcontrolad
 a.com
ORGANIZER;CN=Lucas Silva (DEV):mailto:lucas@internetcontrolada.com
RRULE:FREQ=DAILY;COUNT=4
DTSTAMP:20250123T165839Z
STATUS:CANCELLED
SEQUENCE:2
BEGIN:VALARM
TRIGGER;RELATED=START:-PT30M
ACTION:DISPLAY
END:VALARM
END:VEVENT
END:VCALENDAR

Organizer's ICS:

BEGIN:VCALENDAR
VERSION:2.0
CALSCALE:GREGORIAN
PRODID:-//IDN nextcloud.com//Calendar app 5.0.9//EN
BEGIN:VTIMEZONE
TZID:America/Sao_Paulo
BEGIN:STANDARD
TZOFFSETFROM:-0300
TZOFFSETTO:-0300
TZNAME:-03
DTSTART:19700101T000000
END:STANDARD
END:VTIMEZONE
BEGIN:VEVENT
CREATED:20250123T165818Z
DTSTAMP:20250123T165839Z
LAST-MODIFIED:20250123T165839Z
SEQUENCE:2
UID:d58cb252-458c-4707-80aa-e2ad6d956df0
DTSTART;TZID=America/Sao_Paulo:20250126T203000
DTEND;TZID=America/Sao_Paulo:20250126T210000
STATUS:CONFIRMED
SUMMARY:JJJJJJJJJJ
ATTENDEE;CN=Hudson Hornet (DEV);CUTYPE=INDIVIDUAL;PARTSTAT=NEEDS-ACTION;ROL
 E=REQ-PARTICIPANT;RSVP=TRUE;LANGUAGE=pt_BR;SCHEDULE-STATUS=1.0:mailto:test
 e2@internetcontrolada.com
ORGANIZER;CN=Lucas Silva (DEV):mailto:lucas@internetcontrolada.com
RRULE:FREQ=DAILY;COUNT=4
BEGIN:VALARM
ACTION:DISPLAY
TRIGGER;RELATED=START:-PT30M
SUMMARY:JJJJJJJJJJ
DESCRIPTION:Este é um lembrete de evento.
ATTENDEE:mailto:teste2@internetcontrolada.com
END:VALARM
END:VEVENT
BEGIN:VEVENT
CREATED:20250123T165912Z
DTSTAMP:20250123T165912Z
LAST-MODIFIED:20250123T165912Z
SEQUENCE:1
UID:d58cb252-458c-4707-80aa-e2ad6d956df0
DTSTART;TZID=America/Sao_Paulo:20250126T203000
DTEND;TZID=America/Sao_Paulo:20250126T210000
STATUS:CANCELLED
SUMMARY:JJJJJJJJJJ
ATTENDEE;CN=Hudson Hornet (DEV);CUTYPE=INDIVIDUAL;PARTSTAT=NEEDS-ACTION;ROL
 E=REQ-PARTICIPANT;RSVP=TRUE;LANGUAGE=pt_BR;SCHEDULE-STATUS=1.1:mailto:test
 e2@internetcontrolada.com
ORGANIZER;CN=Lucas Silva (DEV):mailto:lucas@internetcontrolada.com
RECURRENCE-ID;TZID=America/Sao_Paulo:20250126T203000
BEGIN:VALARM
ACTION:DISPLAY
TRIGGER;RELATED=START:-PT30M
DESCRIPTION:Este é um lembrete de evento.
SUMMARY:JJJJJJJJJJ
ATTENDEE:mailto:teste2@internetcontrolada.com
END:VALARM
END:VEVENT
END:VCALENDAR

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.