Summary | accept event to Horde CalDAV calendar from Thunderbird Lightning parses Attendees |
Queue | Kronolith |
Queue Version | 4.2.2 |
Type | Bug |
State | Duplicate |
Priority | 2. Medium |
Owners | |
Requester | willem.verbruggen (at) anagky (dot) be |
Created | 11/05/2014 (3844 days ago) |
Due | |
Updated | 04/29/2022 (1112 days ago) |
Assigned | |
Resolved | 11/05/2014 (3844 days ago) |
Milestone | |
Patch | No |
https://techcommunity.microsoft.com/t5/outlook/email-client-that-is-able-to-handle-calendar-invites-with/m-p/3298526/highlight/true#M11326
but in Outlook. Pity cause i prefer Thunderbird, but i just need
calendar invites to work appropriately.
Here's how to get it to work in Outlook (also not easy, but after
initial setup it works):
https://techcommunity.microsoft.com/t5/outlook/email-client-that-is-able-to-handle-calendar-invites-with/m-p/3296279/highlight/false#M11286
and Horde groupware 5.2.22
Test it with gmail calendar invites. Upon accepting invites in
thunderbolt linked to horde caldav the duplication of invites and
swapped organizer role occurs.
meeting invitation in my thunderbird email program, it changed the
meeting so that I'm the organizer.
Very confusing.
Does anyone know of any other settings (possibly within Horde) that
could fix this?
Thanks.
You can install it on your own server from the available source code
for free. Or perhaps you can find a provider that uses SOGo. Perhaps
your question can be asked in the SOGo community.
resulted in errors for me. I've never heard of SOGo, i just looked it
up. It looks like a great solution. Is it available to individual
users like me via a cloud account or something? Or do you need to be
an organization that self-hosts it?
to Outlook (which i hate, i love Thunderbird) because of this issue.
Meeting invites are so often-used, this really needs to work
flawlessly
email scheduling ?
Experienced this issue in the past, but after waiting very long i
installed SOGo frontend recently because of this issue not being
resolved (or not releasing Horde 6 where it should be fixed), for SOGo
i need to enable Prefer client-side email scheduling to accept meeting
invites correctly. The users that need calendar functionality are now
using SOGo and the others Horde.
https://forums.cpanel.net/threads/invitations-and-events-in-thunderbird-lightning-with-cpanel-caldav.596851/
https://forums.cpanel.net/threads/caldav-invitations-events-in-thunderbird-lightning.645529/
Outlook (which i hate, i love Thunderbird) because of this issue.
Meeting invites are so often-used, this really needs to work flawlessly
Or is our university just using an old version of horde?
it's embarrasing when my clients invite me to a meeting and it looks
like I have hijacked fheir meeting.
this problem :(
I've approximately 300 users and this bug cause some spam issues with
the invites duplication.
prevented from using the calendar activity... Can I put this fix
directly to my code?
This is an error that is now 5 years old.
Abandon ship is the signal!
prevented from using the calendar activity... Can I put this fix
directly to my code?
prevented from using the calendar activity... Can I put this fix
directly to my code?
Bug: 3965more complicated as stated earlier.
When an event is received and accepted in either Thunderbird or
Outlook the event is hijacked and the ORGANIZER is now me. It should
just Accept the event, notify the sender and add it to my calendar
without changing the ORGANIZER, since i am just an ATTENDEE.
Also i can't understand that this issue still exists, i am wondering
if it is a setting since this is such trivial behavior of a calendar
and there are far more complicated parts in Horde. Hope this will be
fixed since it is a showstopper at the moment for using Horde.
https://github.com/horde/kronolith/commit/f8fdf3e9d26ccfb72bbef91ce76b903b5e0234c3
I send an invite with Outlook, and the CalDav server also sends an
invite to the attendees, resulting in duplicate invites.
horde 5.2.14
but I sadly now have to abandon the solution.
I have had events popping up in Thunderbird every hour almost and I
have to dismiss the events, with the result that also lawyers are now
contacting me due to it is spamming the whole world also into the past.
This is completely unacceptable from a calendar that should be seen as
more than competitive to Microsoft Outlook.
Another thing is the Shared address book which is like a donald duck
implementation of any other existing address book.
I cannot put names on people and I cannot put proper addresses or
nothing in it.
If this is what Horde is capable of delivering stay with Donald u k
and mickey mouse for kids.
The current implementation has to either step up or you have to shut
it down. It is not possible to use it in a professional evironment
include a patch for this bug in some of the next versions? That would
be great.
calendars and experience the same problem using Lightning to accept
event invitations. Instead of simply adding the event the calender
owner becomes the organizer.
Unbelievable that so little users experience this problem. Have really
all turned to all-web applications and support for stand-alone and
offline-possible solutions are treated as a poor cousin...?
excited to use the CalDAV functionality bundled into cPanel (Horde)
instead of the separate software we'd been using previously.
A few days in, we're drowning under a flood of emails generated as
people accept invitations to events, and yet more as people change
their reminders, or hit snooze, or decide they can't go. And they all
insist the sender is the organizer.
Now I find out that this has been known about for years, and not
fixed? The product is unusable like this, we can't be sending all
these emails out to our clients stating we've taken over every meeting
we've accepted an invitation to.
What a horrible letdown!
duplicate of the event to business partners, I think the priority is
more than just "medium". Also it is not a duplicate, as mentioned
before: tracking the organizer is something different.
What confuses me a bit: how do others work with Kronolith? Did we
maybe miss something important in the configuration? Or is adding
events received by mail using CalDAV simply not supported and one must
use IMP?
request #3965, please add your informationthere. See also
request #13027.of the attendees thereby creating a meeting in your calendar with
seemingly a wrong organizer. BUT when doing the same from IMP, it
works the same way with yourself also as organizer with the difference
that there are no attendees . So an enhancement to set the correct
organizer is another step forward (and as we saw in the code and the
icalendar RFC an elaborate one) but not the problem here as IMP works
the same way regarding organizer. So for me this is not a duplicate.
Request 13027has state resolved?The parsing of attendees works correctly when creating new items via
CalDAV from Lightning and has to keep on working this way. Still
there is a need NOT to parse the attendees when we are only accepting
an externally received invite which we still want to take time in our
own calendar after accepting. This will have to be coded per client
as I am not aware of a header/standard in the RFC that the clients
might use. Disclaimer: I am not a specialist in this icalendar RFC.
State ⇒ Duplicate
request #3965, please add your informationthere. See also
request #13027.Priority ⇒ 2. Medium
State ⇒ Unconfirmed
Patch ⇒ No
Milestone ⇒
Summary ⇒ accept event to Horde CalDAV calendar from Thunderbird Lightning parses Attendees
Type ⇒ Bug
Queue ⇒ Kronolith
A meeting request arrives by e-mail in Thunderbird 31.2.0 with
Lightning 3.3.1 installed from an external calendar application. On
accepting the meeting request putting it into a Kronolith calendar
installed/connected from Lightning using CalDAV, Horde parses the
attendees and puts them into the newly created request.
As a result Kronolith:
-> sends notifications to all the attendees from the organizers
meeting as it is seen as a new meeting in Horde, effectively
duplicating and hijacking someone else's meeting.
-> this happens for everyone accepting, and possibly also accepting
the wrongly newly created meeting, with a mailing spree through the
organization and towards the external partner as a result.
-> Horde treats accepting requests from Thunderbird differently than
from within IMP with totally different meetings in Kronolith as a
result, not working consistently.
-> Ligthing cannot be used as a mail client for accepting invites.
Thunderbird/Ligthning adds a header X-MOZ-RECEIVED-SEQUENCE to a
meeting request being an accept on a received invite compared to a new
meeting request created in LIghtning directly.
We could get a working, yes ugly but still a solution, patched up
Kronolith with the following code changes whereby we check for the
X-MOZ-RECEIVED-SEQUENCE header. Hope it is any help to you.
vi /var/www/horde/kronolith/lib/Event.php
363 /**
364 * The cached event duration, split up in time units.
365 *
366 * @see getDuration()
367 * @var stdClass
368 */
369 protected $_duration;
370
371 //OpenOutsourcing added properties
372 //public $organizer;
373 public $x_moz_received_sequence;
374 public $x_moz_received_attendees = array();
375
376 /**
377 * Constructor.
378 *
379 * @param Kronolith_Driver $driver The backend driver that
this event is
380 * stored in.
381 * @param mixed $eventObject Backend specific event object
382 * that this will represent.
383 */
384 public function __construct(Kronolith_Driver $driver,
$eventObject = null)
1052 /**
1053 * Updates the properties of this event from a Horde_Icalendar_Vevent
1054 * object.
1055 *
1056 * @param Horde_Icalendar_Vevent $vEvent The iCalendar data
to update
1057 * from.
1058 * @param boolean $parseAttendees Parse attendees too?
1059 * @since Kronolith 4.2
1060 */
1061 public function fromiCalendar($vEvent, $parseAttendees = false)
1062 {
1063
1064 // OpenOutsourcing
1065 // Add X-MOZ-RECEIVED-SEQUENCE to object
1066 try {
1067 $this->x_moz_received_sequence = False;
1068 // This call throws exception when attribute does not exist
1069 $moz_received =
$vEvent->getAttribute('X-MOZ-RECEIVED-SEQUENCE');
1070 $this->x_moz_received_sequence = True;
1071 } catch (Horde_Icalendar_Exception $e) {}
2659 public function addAttendee($email, $attendance, $response,
$name = null)
2660 {
2661 if ($attendance == Kronolith::PART_IGNORE) {
2662 if (isset($this->attendees[$email])) {
2663 $attendance = $this->attendees[$email]['attendance'];
2664 } else {
2665 $attendance = Kronolith::PART_REQUIRED;
2666 }
2667 }
2668 if (empty($name) && isset($this->attendees[$email]) &&
2669 !empty($this->attendees[$email]['name'])) {
2670 $name = $this->attendees[$email]['name'];
2671 }
2672
2673 // OpenOutsourcing
2674 // Add IF and wrap existing code into ELSE
2675 if ($this->x_moz_received_sequence == True) {
2676 $this->x_moz_received_attendees[$email] = array(
2677 'attendance' => $attendance,
2678 'response' => $response,
2679 'name' => $name
2680 );
2681 }
2682 else {
2683 $this->attendees[$email] = array(
2684 'attendance' => $attendance,
2685 'response' => $response,
2686 'name' => $name
2687 );
2688 }
2689 }
vi /var/www/horde/kronolith/lib/Application.php
800 public function davPutObject($collection, $object, $data)
...
854 // Save entry.
855 $id = $event->save();
856
857 if (!$existing_event) {
858 $dav->addObjectMap($id, $object, $internal);
859 }
860
861 // OpenOutsourcing
862 // Send ACCEPT and DECLINE messages on
X-MOZ-RECEIVED-SEQUENCE
863 if($event->x_moz_received_sequence == True) {
864
865 $ident_user =
$GLOBALS['injector']->getInstance('Horde_Core_Factory_Identity')-
867
868 /** Invitation responses */
869 $RESPONSE_NONE = 1;
870 $RESPONSE_ACCEPTED = 2;
871 $RESPONSE_DECLINED = 3;
872 $RESPONSE_TENTATIVE = 4;
873
874 $response = $RESPONSE_NONE;
875 foreach ($event->x_moz_received_attendees as
$email => $status) {
876 if ($email == $reply_to) {
877 $response = $status['response'];
878 }
879 }
880
881 $resource = new Horde_Itip_Resource_Identity(
882 $GLOBALS['injector']->getInstance('IMP_Identity'),
883 $content->getAttribute('ATTENDEE'),
884 $reply_to
885 );
886
887 switch ($response) {
888 case $RESPONSE_ACCEPTED:
889 $type = new
Horde_Itip_Response_Type_Accept($resource);
890 break;
891 case $RESPONSE_TENTATIVE:
892 $type = new
Horde_Itip_Response_Type_Tentative($resource);
893 break;
894 case $RESPONSE_DECLINED:
895 $type = new
Horde_Itip_Response_Type_Decline($resource);
896 break;
897 default:
898 $type = new
Horde_Itip_Response_Type_Accept($resource);
899 break;
900 }
901
902 try {
903 Horde_Itip::factory($content,
$resource)->sendMultiPartResponse(
904 $type,
905 new Horde_Itip_Response_Options_Horde(
906 'UTF-8',
907 array(
908 'dns' =>
$GLOBALS['injector']->getInstance('Net_DNS2_Resolver'),
909 'server' =>
$GLOBALS['conf']['server']['name']
910 )
911 ),
912 $GLOBALS['injector']->getInstance('IMP_Mail')
913 );
914 } catch (Horde_Itip_Exception $e) {
915 system("echo SENT ERROR >> /tmp/willem");
916 }
917 //$type = new
Horde_Itip_Response_Type_Decline($resource);
918 }
919
920 // Send iTip messages.
KR,
Willem