Google日历的定期活动

时间:2018-12-26 05:12:15

标签: laravel

我如何在laravel中的Google日历中添加重复规则。 我正在使用以下给定的库来创建Google日历链接。

https://github.com/spatie/calendar-links”。

在这里,我正在分享我的Google日历重复活动代码,请为我提供适当的解决方案,它正在工作。 非常适合为单个事件创建链接,但不能创建重复事件。

  "$timeStamp = strtotime(str_replace('/','-','Sat 24/12/2018 5:56 PM'));
    $dateTime=date('Y-m-d H:i',$timeStamp);
    $from = \DateTime::createFromFormat('Y-m-d H:i',$dateTime);
    $from = $from->format('Ymd\THis');
    $endDate=date('Y-m-d',$timeStamp);
    $newEndDate = $endDate." 24:00";
    $to = \DateTime::createFromFormat('Y-m-d H:i',$newEndDate);
    $to = $to->format('Ymd\THis');
    $url = 'https://calendar.google.com/calendar/render?action=TEMPLATE';
    $url .= '&text=Event_Test';
    $url .= '&dates='.$from.'/'.$to;
    $url .= '&rrule=FREQ=WEEKLY;DTSTART=20181231T000000Z;INTERVAL=1;COUNT=1';
    $url .= '&details='.urlencode('Event_Test');
    $url .= '&location='.urlencode('Delhi');
    $url .= '&sprop=&sprop=name:';
    return $url;"

谢谢

1 个答案:

答案 0 :(得分:0)

我一直在努力。我克隆了存储库,然后将以下内容添加到Event.php。这使我可以传递父eventId并获取实例的集合。

public static function instances($eventId, string $calendarId = null, string $max_results) : Collection
{
  $googleCalendar = static::getGoogleCalendar($calendarId);
  $googleEvents = $googleCalendar->getInstances($eventId, $max_results);
  $useUserOrder = isset($queryParameters['orderBy']);
  return collect($googleEvents)
    ->map(function (Google_Service_Calendar_Event $event) use ($calendarId) {
        return static::createFromGoogleCalendarEvent($event, $calendarId);
    })
    ->sortBy(function (Event $event, $index) use ($useUserOrder) {
        if ($useUserOrder) {
            return $index;
        }

        return $event->sortDate;
    })
    ->values();
}

还需要将以下内容添加到GoogleCalendar.php

public function getInstances(string $eventId, string $max_results): array
{
  return $this->calendarService->events->instances($this->calendarId, $eventId, array('maxResults' => $max_results))->items;
}

现在获取重复使用的父事件的子实例:

Event::instances($schedule->google_event_id,$schedule->location->calendar_id, '5');

请注意,我的项目有一个“位置”表,其中的“时间表”将位置和任务联系在一起,因此每个位置都有其自己的Google日历,并且Google事件ID存储在时间表中。