Re: Email notification upon invite in DAViCal is 1.1.3.1

classic Classic list List threaded Threaded
1 message Options
Reply | Threaded
Open this post in threaded view
|

Re: Email notification upon invite in DAViCal is 1.1.3.1

skotthof

Hi Sylvain,

I'm currently try to get version 1.1.3.1 running productiv in our environment.
The patched handling the problems with external invitations should work so far.

First you have to to:


-----------------------------------------------
*** htdocs/caldav.php.bkup 2015-09-08 09:54:08.208000000 +0200
--- htdocs/caldav.php 2015-09-08 09:54:23.388000000 +0200
***************
*** 71,81 ****
    if ( isset($c->override_dav_header) ) {
      $dav = $c->override_dav_header;
    }
    else {
      $dav = '1, 2, 3, access-control, calendar-access, calendar-schedule, extended-mkcol, bind, addressbook';
!     if ( $c->enable_auto_schedule ) $dav .= ', calendar-auto-schedule';
      if ( !isset($c->disable_caldav_proxy) || $c->disable_caldav_proxy == false) $dav .= ', calendar-proxy';
    }
    $dav = explode( "\n", wordwrap( $dav ) );
    foreach( $dav AS $v ) {
      header( 'DAV: '.trim($v, ', '), false);
--- 71,81 ----
    if ( isset($c->override_dav_header) ) {
      $dav = $c->override_dav_header;
    }
    else {
      $dav = '1, 2, 3, access-control, calendar-access, calendar-schedule, extended-mkcol, bind, addressbook';
! //    if ( $c->enable_auto_schedule ) $dav .= ', calendar-auto-schedule';
      if ( !isset($c->disable_caldav_proxy) || $c->disable_caldav_proxy == false) $dav .= ', calendar-proxy';
    }
    $dav = explode( "\n", wordwrap( $dav ) );
    foreach( $dav AS $v ) {
      header( 'DAV: '.trim($v, ', '), false);
-----------------------------------------------
This will tell the the clients, that Davical does NOT "calendar-auto-schedule"
Even if you set in config "$c->enable_auto_schedule = true" - which is the DEFAULT in Davical.
-> the trick is, that the client now send invitation mails (thunderbird + lightning)
(the external people, davical it does not know, are invited via mail by the organizers client)


Now we have to skip the stuff, where davical like to handle external people during
doing its "calendar-auto-schedule", otherwise it will fail.

There are 2 patches, one for deleting events with external attendees
(delete causes an auto-schedule because davical wants to inform all attendees
 This fails - so we skip that for externals:)
-----------------------------------------------
*** inc/schedule-functions.php.bkup 2015-09-08 09:55:49.684000000 +0200
--- inc/schedule-functions.php 2015-09-08 09:58:38.468000000 +0200
***************
*** 121,138 ****
--- 121,141 ----
   
    dbg_error_log( 'schedule', 'Writing ATTENDEE scheduling REPLY from %s to %s', $request->principal->email(), $organizer_principal->email() );
 
    $response = '3.7'; // Organizer was not found on server.
    if ( !$organizer_calendar->Exists() ) {
+     $response = '1.1';
+ /*
      if ( doImipMessage('REPLY', $organizer_principal->email(), $vcal) ) {
        $response = '1.1'; // Scheduling whoosit 'Sent'
      }
      else {
        dbg_error_log('ERROR','Default calendar at "%s" does not exist for user "%s"',
        $organizer_calendar->dav_name(), $schedule_target->username());
        $response = '5.2'; // No scheduling support for user
      }
+ */
    }
    else {
      if ( ! $organizer_inbox->HavePrivilegeTo('schedule-deliver-reply') ) {
        $response = '3.8'; // No authority to deliver replies to organizer.
      }
***************
*** 239,254 ****
--- 242,260 ----
        dbg_error_log( 'schedule', "not delivering to %s, schedule agent set to value other than server", $email );
        continue;
      }
      $schedule_target = new Principal('email',$email);
      if ( !$schedule_target->Exists() ) {
+       $response = '1.1'; // Scheduling whoosit 'Sent'
+ /*
        if ( doImipMessage('CANCEL', $email, $vcal) ) {
          $response = '1.1'; // Scheduling whoosit 'Sent'
        }
        else {
          $response = '3.7';
        }
+ */
      }
      else {
        $attendee_inbox = new WritableCollection(array('path' => $schedule_target->internal_url('schedule-inbox')));
        if ( ! $attendee_inbox->HavePrivilegeTo('schedule-deliver-invite') ) {
          dbg_error_log( 'schedule', "No authority to deliver invite to %s", $schedule_target->internal_url('schedule-inbox') );
-----------------------------------------------

And the second for accepting events with external attendees
(so A ist internal and invites B and C.
 B is also internal, but C is external.
 davical will fail, when B like to accept the event from A
 because it does not no about C)
With the patch davical ignores C. May the Client of B inform C via Mail somehow
-----------------------------------------------
*** inc/caldav-PUT-functions.php.bkup 2015-09-08 10:00:12.752000000 +0200
--- inc/caldav-PUT-functions.php 2015-09-08 10:03:11.456000000 +0200
***************
*** 413,423 ****
      // an attendee's reply should modify only the PARTSTAT on other attendees' objects
      // other properties (that might have been adjusted individually by those other
      // attendees) should remain unmodified. Therefore, we have to make $schedule_original
      // and $schedule_request be initialized by each attendee's object here.
      $attendee_principal = new DAVPrincipal ( array ('email'=>$email, 'options'=> array ( 'allow_by_email' => true ) ) );
!     if ( $attendee_principal == false ){
        dbg_error_log( 'PUT', 'Could not find attendee %s', $email);
        continue;
      }
      $sql = 'SELECT caldav_data.dav_name, caldav_data.caldav_data, caldav_data.collection_id FROM caldav_data JOIN calendar_item USING(dav_id) ';
      $sql .= 'WHERE caldav_data.collection_id IN (SELECT collection_id FROM collection WHERE is_calendar AND user_no =?) ';
--- 413,424 ----
      // an attendee's reply should modify only the PARTSTAT on other attendees' objects
      // other properties (that might have been adjusted individually by those other
      // attendees) should remain unmodified. Therefore, we have to make $schedule_original
      // and $schedule_request be initialized by each attendee's object here.
      $attendee_principal = new DAVPrincipal ( array ('email'=>$email, 'options'=> array ( 'allow_by_email' => true ) ) );
! //    if ( $attendee_principal == false ){
!     if (( $attendee_principal == false) || ($attendee_principal->user_no() == "" )) {
        dbg_error_log( 'PUT', 'Could not find attendee %s', $email);
        continue;
      }
      $sql = 'SELECT caldav_data.dav_name, caldav_data.caldav_data, caldav_data.collection_id FROM caldav_data JOIN calendar_item USING(dav_id) ';
      $sql .= 'WHERE caldav_data.collection_id IN (SELECT collection_id FROM collection WHERE is_calendar AND user_no =?) ';
***************
*** 561,571 ****
      }
      $schedule_target = new Principal('email',$email);
      $response = '3.7';  // Attendee was not found on server.
      dbg_error_log( 'PUT', 'Handling scheduling resources for %s on %s which is %s', $email,
                       ($create?'create':'update'), ($attendee_is_new? 'new' : 'an update') );
!     if ( $schedule_target->Exists() ) {
        // Instead of always writing to schedule-default-calendar, we first try to
        // find a calendar with an existing instance of the event.
        $sql = 'SELECT caldav_data.dav_name, caldav_data.caldav_data, caldav_data.collection_id FROM caldav_data JOIN calendar_item USING(dav_id) ';
        $sql .= 'WHERE caldav_data.collection_id IN (SELECT collection_id FROM collection WHERE is_calendar AND user_no =?) ';
        $sql .= 'AND uid=? LIMIT 1';
--- 562,573 ----
      }
      $schedule_target = new Principal('email',$email);
      $response = '3.7';  // Attendee was not found on server.
      dbg_error_log( 'PUT', 'Handling scheduling resources for %s on %s which is %s', $email,
                       ($create?'create':'update'), ($attendee_is_new? 'new' : 'an update') );
! //    if ( $schedule_target->Exists() ) {
!     if (( $schedule_target->Exists() ) && ( $schedule_target->user_no() != "" )) {
        // Instead of always writing to schedule-default-calendar, we first try to
        // find a calendar with an existing instance of the event.
        $sql = 'SELECT caldav_data.dav_name, caldav_data.caldav_data, caldav_data.collection_id FROM caldav_data JOIN calendar_item USING(dav_id) ';
        $sql .= 'WHERE caldav_data.collection_id IN (SELECT collection_id FROM collection WHERE is_calendar AND user_no =?) ';
        $sql .= 'AND uid=? LIMIT 1';

-----------------------------------------------

One thing:
You should set up the users in Davical with their mail-addresses, they REALY use.
When davical does auto-schedule, it will find the correct attendee by looking in
the mail-adresses.

Normaly it is a good idea, to disable auto-schedule in config, when you invite external people.
Than you have no problems.
We have some special use-case, where we like to have the auto-schedule function.

Sebastian






On Thu, Sep 17, 2015 at 04:17:57PM +0200, [hidden email] wrote:

> Hi Sebastian
>
> If I understand well you have two other patches for delete and accept events with external attendees, can you explain these patches ?
>
> Regards,
>
> Sylvain
>
>
> Hi Richard,
>
> I have the same problems/question in my current davical (highly patched
> 1.1.1).
> I will test davical 1.1.3.1 in February (I hope) and I'm already really
> excited
> about the points you mentioned.
>
> So far, in 1.1.1, I handle the "$c->enable_auto_schedule = true" issue with
> that patch:
> ------------------------------------------
> --- htdocs/caldav.php.orig      2014-08-29 13:55:54.143073520 +0200
> +++ htdocs/caldav.php   2014-08-29 13:56:01.443068319 +0200
> @@ -73,7 +73,7 @@
>    }
>    else {
>      $dav = '1, 2, 3, access-control, calendar-access, calendar-schedule,
> extended-mkcol, bind, addressbook';
> -    if ( $c->enable_auto_schedule ) $dav .= ', calendar-auto-schedule';
> +//    if ( $c->enable_auto_schedule ) $dav .= ', calendar-auto-schedule';
>      if ( !isset($c->disable_caldav_proxy) || $c->disable_caldav_proxy ==
> false) $dav .= ', calendar-proxy';
>    }
>    $dav = explode( "\n", wordwrap( $dav ) );
> ------------------------------------------
> Davical tells the client, that it does no auto_schedule, but afterwards it
> does.
> So clients are sending invitations via mail.
> But as you tell, this generates a lot of other problems with invited users,
> which are externally invited via mail,
> and which are not in the davical DB.
>
> I have two other patches for:
> - delete events with external attendees was not possible
> - accept events with external attendees was not possible
>
> But the patches are not so nice. I also asking myself, what is
> the prober way for dealing with external users.
>
> Is there a solution in Davical 1.1.3.1?
> If anybody likes, I can post the other two paches.
>
> Regards,
>
> Sebastian
>
>
>
> On Mon, Jan 26, 2015 at 02:19:16PM +0000, Richard LEGER wrote:
> >    Hi,
> >
> >    I am new to DAViCal and just subscribed to this mailing list hopping to
> >    get possible help.
> >    Would option $c->enable_auto_schedule set to true (as it is by default)
> > in
> >    current stable version of DAViCal 1.1.3.1 allow users to be notified by
> >    email by Davical when they are invited to an event by another Davical
> >    users so they can approves or rejects it?
> >
> >    Would email notification require additional settings in Davical conf
> > (e.g
> >    email server)?
> >    From my understanding:
> >    - setting it to false should force client to handle invitation but we
> >    would like ideally the server to handle it instead and notify users by
> >    email, would it be possible?
> >    - Davical shall be able to do so for internal users but not external
> >    once,is that correct? Is this limit still in place in DAViCal 1.1.3.1?
> >    Would external users still be notified by email even though they may
> > not
> >    be able to reject/approve event directly from notification?
> >
> >    Internal users being those registered on my Davical system (within the
> >    same domain), external users being those that are not (Calendar service
> >    provided by other suppliers).
> >
> >    On a separate note, I was wondering where is the best place to find a
> > list
> >    of all the possible configuration options of Davical with
> >    description/accepted&default values?
> >
> >    I found this
> > [1]http://davical.dhits.nl/index.php/Configuration_settings
> >    but that does not seems to be an exhaustive list (e.g
> > enable_auto_schedule
> >    not listed).
> >
> >    I also found this
> >    [2]http://davical.dhits.nl/index.php/Configuration/settings but it
> > seems
> >    empty with only the mention "<ListSubPages/>" on it.
> >
> >    Thank you in advance for your support.
> >    Richard.
> >
> > References
> >
> >    Visible links
> >    1. http://davical.dhits.nl/index.php/Configuration_settings
> >    2. http://davical.dhits.nl/index.php/Configuration/settings
>
> > ------------------------------------------------------------------------------
> > Dive into the World of Parallel Programming. The Go Parallel Website,
> > sponsored by Intel and developed in partnership with Slashdot Media, is
> > your
> > hub for all things parallel software development, from weekly thought
> > leadership blogs to news, videos, case studies, tutorials and more. Take a
> > look and join the conversation now. http://goparallel.sourceforge.net/
>
> > _______________________________________________
> > Davical-general mailing list
> > [hidden email]
> > https://lists.sourceforge.net/lists/listinfo/davical-general
>
>
> --
> Sebastian Kotthoff
> Rechenzentrum
> Universit├Ąt Mannheim
> B6, 23-29; Building B; Room 1.10
> 68159 Mannheim
>
> Tel: +49 621 181 2516
> Fax: +49 621 181 2682
>
> ------------------------------------------------------------------------------
> Dive into the World of Parallel Programming. The Go Parallel Website,
> sponsored by Intel and developed in partnership with Slashdot Media, is your
> hub for all things parallel software development, from weekly thought
> leadership blogs to news, videos, case studies, tutorials and more. Take a
> look and join the conversation now. http://goparallel.sourceforge.net/
> _______________________________________________
> Davical-general mailing list
> [hidden email]
> https://lists.sourceforge.net/lists/listinfo/davical-general
>
>
> smime.p7s (6K)
> <http://davical-general.89287.n3.nabble.com/attachment/4026449/0/smime.p7s>
>
> </quote>
> Quoted from:
> http://davical-general.89287.n3.nabble.com/Davical-general-Email-notification-upon-invite-in-DAViCal-is-1-1-3-1-tp4026448p4026449.html
>
>
> _____________________________________
> Sent from http://davical-general.89287.n3.nabble.com
>
>
--
Sebastian Kotthoff
Rechenzentrum
Universit├Ąt Mannheim
B6, 23-29; Building B; Room 1.10
68159 Mannheim

Tel: +49 621 181 2516
Fax: +49 621 181 2682

------------------------------------------------------------------------------
Monitor Your Dynamic Infrastructure at Any Scale With Datadog!
Get real-time metrics from all of your servers, apps and tools
in one place.
SourceForge users - Click here to start your Free Trial of Datadog now!
http://pubads.g.doubleclick.net/gampad/clk?id=241902991&iu=/4140
_______________________________________________
Davical-general mailing list
[hidden email]
https://lists.sourceforge.net/lists/listinfo/davical-general

smime.p7s (6K) Download Attachment