файл ics: событие не добавлено в календарь организатора - PullRequest
0 голосов
/ 31 мая 2019

Я использую библиотеку, которая помогает мне генерировать файл ics на laravel.Мне пришлось немного изменить его, чтобы он работал на внешний вид (проблема с датами и часовыми поясами).Вот код для генерации:

class Ics implements Generator
{
public function generate(Link $link): string
{
    $url = [
        'BEGIN:VCALENDAR',
        'PRODID:-//Google Inc//Google Calendar 70.9054//EN',
        'VERSION:2.0',
        'CALSCALE:GREGORIAN',
        'METHOD:REQUEST',
        'X-WR-TIMEZONE:Europe/Paris',
        'BEGIN:VEVENT',
    ];


    $dateTimeFormat = "Ymd\THis\Z";
    $url[] = 'DTSTART:'.gmdate($dateTimeFormat,strtotime($link->from->format('Y-m-d H:i')));
    $url[] = 'DTEND:'.gmdate($dateTimeFormat,strtotime($link->to->format('Y-m-d H:i')));
    $url[] = 'DTSTAMP:'.date('Ymd\THis');

    if ($link->organizer) {
        $url[] = 'ORGANIZER;CN=' . $this->escapeString($link->organizer) . ':mailto:' . $this->escapeString($link->organizer);
        $url[] = 'ATTENDEE;CUTYPE=INDIVIDUAL;ROLE=REQ-PARTICIPANT;PARTSTAT=ACCEPTED;RSVP=TRUE;CN=' . $this->escapeString($link->organizer) . ';X-NUM-GUESTS=0:mailto:' . $this->escapeString($link->organizer);
    }
    $url[] = 'UID:'.$this->generateEventUid($link);
    if ($link->attendee) {

        foreach ($link->attendee as $attendee) {
            $url[] = 'ATTENDEE;CUTYPE=INDIVIDUAL;ROLE=REQ-PARTICIPANT;PARTSTAT=NEEDS-ACTION;RSVP=TRUE;CN=' . $this->escapeString($attendee) . ';X-NUM-GUESTS=0:mailto:' . $this->escapeString($attendee);
        }
    }
    if ($link->description) {
        $url[] = 'DESCRIPTION:'.$this->escapeString($link->description);
    }
    if ($link->address) {
        $url[] = 'LOCATION:'.$this->escapeString($link->address);
    }
    $url[] = 'SEQUENCE:0';
    $url[] = 'STATUS:CONFIRMED';
    $url[] = 'SUMMARY:'.$link->title;
    $url[] = 'TRANSP:OPAQUE';
    $url[] = 'END:VEVENT';
    $url[] = 'END:VCALENDAR';
    $redirectLink = implode('%0d%0a', $url);

    return 'data:text/calendar;charset=utf8,'.$redirectLink;
}

}

Когда я создаю свое событие, всем участникам (кроме организатора) отправляется письмо с посещенным файлом ics.В Gmail и Outlook появляется небольшое окно подтверждения, а когда я подтверждаю с помощью outlook, оно даже отправляет письмо с подтверждением организатору (не в Gmail, но я над этим работаю).

Проблема в том, что событие добавляется в календари участников, а не в органайзер.Я нашел сообщение от 14 года на SO, в котором говорится, что я должен изменить METHOD с REQUEST на PUBLISH, но это заставляет outlook не распознавать файл ics.

У кого-нибудь есть идея?Большое спасибо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...