nextcloud / calendar

📆 Calendar app for Nextcloud
https://apps.nextcloud.com/apps/calendar
GNU Affero General Public License v3.0
965 stars 237 forks source link

Web UI: Accept/Decline this and all future recurrences #6146

Open Jerome-Herbinet opened 1 month ago

Jerome-Herbinet commented 1 month ago

Steps to reproduce

  1. From the web interface, user A creates a recurring event (e.g. weekly), with a schedule, and invites user B to participate.
  2. User B goes to his "Calendar" in the web interface and goes to one of the occurrences, for example the first one, and accepts it.
  3. When going on to subsequent occurrences, even after refreshing the page, user B finds that the other occurrences have not been accepted (both buttons "accept" and "decline" are displayed), even though they are the same (recurring) event.

Easily tested on 2 test servers (Nextcloud 28 and 29) and a production server (Nextcloud 28).

Expected behavior

When one of the occurrences of the recurring event is accepted, all the others should be accepted.

Actual behaviour

Only one of the occurrences is marked as accepted, unlike the others.

Calendar app version

4.7.10 (and previous like 4.7.6)

CalDAV-clients used

Thunderbird and Tbsync

Browser

126.0.2

Client operating system

Ubuntu 22.04 LTS

Server operating system

CentOS

Web server

Nginx

Database engine version

MariaDB

PHP engine version

PHP 8.1

Nextcloud version

29.0.1 (and 28.0.5)

Updated from an older installed version or fresh install

Updated from an older version

List of activated apps

{
    "passwordsalt": "***REMOVED SENSITIVE VALUE***",
    "secret": "***REMOVED SENSITIVE VALUE***",
    "trusted_domains": [
        "nc29.test.mydomain.fr"
    ],
    "datadirectory": "***REMOVED SENSITIVE VALUE***",
    "dbtype": "mysql",
    "version": "29.0.1.1",
    "overwrite.cli.url": "https:\/\/nc29.test.mydomain.fr",
    "dbname": "***REMOVED SENSITIVE VALUE***",
    "dbhost": "***REMOVED SENSITIVE VALUE***",
    "dbport": "",
    "dbtableprefix": "oc_",
    "mysql.utf8mb4": true,
    "dbuser": "***REMOVED SENSITIVE VALUE***",
    "dbpassword": "***REMOVED SENSITIVE VALUE***",
    "installed": true,
    "instanceid": "***REMOVED SENSITIVE VALUE***",
    "log_type": "file",
    "logfile": "\/var\/log\/nextcloud\/nc29.test.mydomain.fr\/nextcloud.log",
    "redis": {
        "host": "***REMOVED SENSITIVE VALUE***",
        "password": "***REMOVED SENSITIVE VALUE***",
        "port": 6379,
        "dbindex": 2,
        "timeout": 0
    },
    "skeletondirectory": "",
    "logtimezone": "Europe\/Paris",
    "updater.release.channel": "beta",
    "mail_smtpmode": "smtp",
    "mail_smtpsecure": "ssl",
    "mail_from_address": "***REMOVED SENSITIVE VALUE***",
    "mail_domain": "***REMOVED SENSITIVE VALUE***",
    "mail_smtpname": "***REMOVED SENSITIVE VALUE***",
    "mail_smtppassword": "***REMOVED SENSITIVE VALUE***",
    "mail_smtphost": "***REMOVED SENSITIVE VALUE***",
    "mail_smtpauthtype": "PLAIN",
    "default_language": "fr",
    "default_phone_region": "FR",
    "defaultapp": "",
    "trashbin_retention_obligation": "20,40",
    "versions_retention_obligation": "auto,40",
    "appstoreurl": "https:\/\/apps.nextcloud.com\/api\/v1",
    "quota_include_external_storage": false,
    "cron_log": true,
    "has_internet_connection": true,
    "updatechecker": true,
    "appstoreenabled": true,
    "filelocking.enabled": true,
    "session_keepalive": true,
    "knowledgebaseenabled": true,
    "allow_user_to_change_display_name": true,
    "enable_previews": true,
    "enable_avatars": true,
    "auth.bruteforce.protection.enabled": true,
    "loglevel": 2,
    "log_rotate_size": 104857600,
    "mail_smtpauth": 1,
    "mail_smtpport": 465,
    "session_lifetime": 86400,
    "remember_login_cookie_lifetime": 1296000,
    "preview_max_filesize_image": 50,
    "activity_expire_days": 120,
    "memcache.local": "\\OC\\Memcache\\APCu",
    "memcache.locking": "\\OC\\Memcache\\Redis",
    "memcache.distributed": "\\OC\\Memcache\\Redis",
    "app_install_overwrite": [
        "admin_audit",
        "user_ldap",
        "onlyoffice",
        "groupfolders"
    ],
    "ldapProviderFactory": "OCA\\User_LDAP\\LDAPProviderFactory",
    "maintenance_window_start": 1,
    "maintenance": false
}

Nextcloud configuration

Enabled:
 - activity: 2.21.1
 - admin_audit: 1.19.0
 - assistant: 1.0.9
 - calendar: 4.7.10
 - call_summary_bot: 1.1.0
 - circles: 29.0.0-dev
 - cloud_federation_api: 1.12.0
 - collectives: 2.10.1
 - comments: 1.19.0
 - contacts: 6.0.0
 - contactsinteraction: 1.10.0
 - context_chat: 2.1.2
 - dashboard: 7.9.0
 - dav: 1.30.1
 - deck: 1.13.0
 - federatedfilesharing: 1.19.0
 - federation: 1.19.0
 - files: 2.1.0
 - files_downloadlimit: 2.0.0
 - files_pdfviewer: 2.10.0
 - files_reminders: 1.2.0
 - files_sharing: 1.21.0
 - files_trashbin: 1.19.0
 - files_versions: 1.22.0
 - firstrunwizard: 2.18.0
 - forms: 4.2.3
 - groupfolders: 17.0.1
 - impersonate: 1.16.0
 - integration_openai: 2.0.1
 - integration_replicate: 3.0.0
 - logreader: 2.14.0
 - lookup_server_connector: 1.17.0
 - mail: 3.6.0
 - nextcloud_announcements: 1.18.0
 - notifications: 2.17.0
 - oauth2: 1.17.0
 - onlyoffice: 9.2.0
 - password_policy: 1.19.0
 - photos: 2.5.0
 - privacy: 1.13.0
 - provisioning_api: 1.19.0
 - recommendations: 2.1.0
 - related_resources: 1.4.0
 - richdocuments: 8.4.2
 - serverinfo: 1.19.0
 - settings: 1.12.0
 - sharebymail: 1.19.0
 - spreed: 19.0.0
 - support: 1.12.0
 - systemtags: 1.19.0
 - tables: 0.7.2
 - text: 3.10.0
 - theming: 2.4.0
 - twofactor_backupcodes: 1.18.0
 - updatenotification: 1.19.1
 - user_ldap: 1.20.0
 - user_status: 1.9.0
 - viewer: 2.3.0
 - weather_status: 1.9.0
 - workflowengine: 2.11.0
 - workspace: 3.2.0
Disabled:
 - app_api: 2.6.0
 - bruteforcesettings
 - encryption
 - files_external
 - survey_client: 1.17.0
 - suspicious_login
 - twofactor_totp

Web server error log

Can be provided if necesary

Log file

Can be provided if necesary

Browser log

Can be provided if necesary

Additional info

Can be provided if necesary

st3iny commented 1 month ago

This is in fact by design. We thought about this when implementing the feature and mimicked what other calendaring clients do. E.g. Thunderbird accepts/declines a single recurrence by default and has a (somewhat hidden) button to accept all recurrences.

This is more of a feature request than a bug report.

https://github.com/nextcloud/calendar/blob/bf56092c18cb55d4469a3d08ba22c51aec0078cf/src/components/Editor/InvitationResponseButtons.vue#L139-L140

Jerome-Herbinet commented 1 month ago

This is in fact by design. We thought about this when implementing the feature and mimicked what other calendaring clients do. E.g. Thunderbird accepts/declines a single recurrence by default and has a (somewhat hidden) button to accept all recurrences.

This is more of a feature request than a bug report.

https://github.com/nextcloud/calendar/blob/bf56092c18cb55d4469a3d08ba22c51aec0078cf/src/components/Editor/InvitationResponseButtons.vue#L139-L140

@st3iny thanks for your answer, but how can you explain that when clicking in invitation e-mails on the accept button (the Nextcloud styled HTML button in e-mail body), it accepts all recurrences at once ?

st3iny commented 1 month ago

The invitation response buttons in the email actually use a completely different backend. They call a custom REST API made just for that purpose hence the behavior might be different.

But that is actually an interesting find. So there is a functional difference between both methods of accepting events which should not be the case.