Server: Birthday events created while importing contacts should be deleted if addressbook containing the corresponding contact is deleted

Created on 25 Sep 2016  路  14Comments  路  Source: nextcloud/server

_I'm not sure if it's correct in "server" component - but it does not only affect calendar or contacts, so it's either both - or "server", thus I report it here. Feel free to point me to re-insert it somewhere else._

Steps to reproduce

  1. create a dummy address book
  2. import "test.vcf" containing a contact that has birthday data to address book "Contacts"
  3. delete address book "Contacts"
  4. re-create address book "Contacts"
  5. (re)import "test.vcf"

    Expected behaviour

Deleting the address book should recursively delete all contacts, and while doing so, delete all previously created birthday events.

Actual behaviour

Deleting the address book leads to stale birthday events in calendar that cannot be deleted (and, even worse, also have reminders (valarms) set.

Steps to recover

How to get rid of stale events? Should I edit the nexcloud database. How (without harming consistency)? My idea is to

  1. export contacts from address book "Contacts"
  2. delete the address book "Contacts" (this step requires any other address book to exist -> see step 0. above)
  3. (re)create address book "Contacts" (empty)
  4. delete all birthday events (HERE's where I don't know how)
  5. (re)import the contacts to main addressbook "Contacts" (which (re)creates the birthday events).

Server configuration

Debian jessie fully patched, Apache 2.4.10 prefork, PHP 5.6.24, MySQL 5.5.52, Nextcloud 10.0 (stable) freshly installed via Webinstaller.

Cross references

1. to develop bug dav

All 14 comments

As written in the forum, the following command should solve the issue:

./occ dav:sync-birthday-calendar

But since you have no console access, I'm not sure if something is possible to fix this atm.

Thanks!
I do have console access.

Does that command rebuild the birthday calendar from scratch (delete all its events and re-create them from the contacts) or does it search for duplicates and remove them?

I think I found a workaround for those without console access:

  • export all contacts
  • delete all contacts
  • delete the birthday calendar
  • import all contacts

As far as I can judge from my quick look, it only adds/updates entries

after some tests i can get database access if I use

'dbhost' => '127.0.0.1', in config.php - localhost didn't work.

so I'm able to run the command

ich@owncloud/htdocs$ ./occ dav:sync-birthday-calendar
Start birthday calendar sync for all users ...
2 [============================]

sadly the problem did not solve. I still have to birthday entry's in calendar. what if i'am delete the calendar completely and let it create new?

sadly the problem did not solve. I still have to birthday entry's in calendar. what if i'am delete the calendar completely and let it create new?

That should work...

for me it is solved with deleting the contact birthday calendar.
and let it create new with ./occ dav:sync-birthday-calendar.

Good to know there's a workaround. The bug is about proper deletion, though. Not sure whether triggering both "delete all birthday calendars" and "./occ dav:sync-birthday-calendar" is is a safe solution.

Another way to solve it could be to provide a selection mechanism for contacts (which is a good idea for other tasks, too, such as putting many contacts in a group, or exporting them) so that users may delete all contacts from their address book. When single contacts are deleted, it sould be possible to trigger deletion of the birthday cal entries the same way as they are created. This would need to be accompained by a mechanism that prohibits deletion of an address book as long as it still contains contacts.

Should this bug be closed? It's not implemented yet, is it?

Yes, it's not implemented yet. But I'd appreciate very much if automatic deletion of birthdays in calendar was available :)

A workaround is no solution.

For those who face the same bug, it might be useful to know the occ command has a different behavior when called globally or with a username (at least on NC v13.0.1)

After deleting the anniversary calendar for a specific user, running occ globally :

$ ./occ dav:sync-birthday-calendar
The process control (PCNTL) extensions are required in case you want to interrupt long running commands - see http://php.net/manual/en/book.pcntl.php
Start birthday calendar sync for all users ...
 (...)

While the command was successful, the deleted calendar isn't rebuilt. Even more, checking the calendars table from the DB will confirm the command didn't work.

Instead, using it with the username will have the expected result :

$ ./occ dav:sync-birthday-calendar 'specific_username'
The process control (PCNTL) extensions are required in case you want to interrupt long running commands - see http://php.net/manual/en/book.pcntl.php
Re-enabling birthday calendar for specific_username
Start birthday calendar sync for specific_username

I麓m sorry, but
./occ dav:sync-birthday-calendar 'specific_username'
did not helped me.
My Birthday Calendar is absent anyway..
i麓ve done these Steps:

  • export all contacts
  • delete default contacts
  • delete the birthday calendar
  • create new Calendar 'default2'
  • import all contacts
  • run ./occ dav:sync-birthday-calendar
    (here php is using some processor for a minute, statusbar moving for every NC User)
    -run ./occ dav:sync-birthday-calendar 'my_user'
    Start birthday calendar sync for 'my_user'
    the process is instant finished, no cpu was used
    but my Birthday-Calendar does not appear :(

using NC 13.0.4

I ran into this bug using NextCloud 14.0.1.

For me,

php occ dav:sync-birthday-calendar 'specific_username'

worked and re-enabled the birthday calender, which I had to delete before as it was messed-up with duplicate entries.

OTOH,

php occ dav:sync-birthday-calendar

was not sufficient.

@georgehrke :)

Ok, so this is not one bug, but multiple ones:

Was this page helpful?
0 / 5 - 0 ratings