介绍
我正在尝试更换由待命程序员在指定日期携带的“待命”手机。如果有紧急情况,服务台会拨打该手机。我们现在计划改用网络表格,帮助台将在紧急情况下填写该表格。提交表单后,脚本将与 Google 日历(使用 php api)对话,查看谁在待命,并向当时待命的程序员发送一条短信,提醒他/她注意紧急情况。如果当前没有人待命,那么下一个待命的人将收到一封电子邮件,以便他们可以在第二天早上第一时间处理该问题。我们有所有这些工作,除了经常性事件。
玩单个事件并将其设置为 true 工作正常,直到我决定让查询处理当前事件的检索(而不是自己检索一堆事件并手动检查时间)。例如,如果某人当前正在通话,则应该存在并返回具有该程序员姓名的当前事件。此事件可能会或可能不会重复发生,具体取决于某人是否有交易日。如果当前没有安排任何活动,那么我会选择一个 else,它会通过电子邮件发送下一个待命人员,而不是发送短信。在 else 部分中,我将 start max 切换为未来 7 天。
查询代码如下所示。
$now = date("c");
$gdataCal = new Zend_Gdata_Calendar($client);
$query = $gdataCal->newEventQuery();
$query->setUser('[our_resource_is_here]@resource.calendar.google.com');
$query->setVisibility('private');
$query->setProjection('full');
$query->setOrderby('starttime');
$query->setStartMin($now);
$query->setStartMax($now);
$query->setFutureevents(false);
$query->setSingleevents(true);
$query->setSortorder('a');
$eventFeed = $gdataCal->getCalendarEventFeed($query);
foreach ($eventFeed as $event) {
foreach ($event->when as $when) {
echo $when->startTime.'';
echo $when->endTime.'';
echo $event->title->text.'';
}
}
采取的步骤
1) 我创建了一个从 8 到 5 的重复事件,没有结束到重复周期。
2)然后我删除了一个事件(测试某人的交易日)并添加另一个事件以获取笑声(其他事件不是必需的,但有助于显示问题)。
下面的数据信息:
在查询范围内删除的重复事件标题为“Ben”,第二个未重复但确实安排在当天的事件称为“测试”。返回标题、开始时间和结束时间时的输出如下。请记住,日历上没有“Ben”事件,但无论如何它会显示 3 次,即使开始时间限制设置得非常严格(参见代码中的 $now)。
使用 $query->setSingleevents(false);"
2010-05-03T08:00:00.000-05:00
2010-05-03T17:00:00.000-05:00
Ben
2010-05-03T08:00:00.000-05:00
2010-05-03T17:00:00.000-05:00
Ben
2010-05-03T08:00:00.000-05:00
2010-05-03T17:00:00.000-05:00
Ben
2010-05-03T13:30:00.000-05:00
2010-05-03T15:00:00.000-05:00
test
使用“$query->setSingleevents(true);”
2010-05-03T13:30:00.000-05:00
2010-05-03T15:00:00.000-05:00
test
结果说明
我真的只希望该函数返回某人的单个姓名(即仅当前事件)。如果当前事件不存在,那么我会提取接下来 7 天的事件,以确保赶上任何周末和节假日,并返回第一个即将发生的事件。
上面的第二个输出(单个事件设置为 true)看起来解决了问题,但它仅在存在非重复事件时才解决问题。如果我让所有事情重复发生,那么如果我有 setSingleevents(true),则不会返回任何数据。
我有一种预感,这与我将最小和最大开始时间设置为 $now(当前时间)有关,但由于这适用于非重复性我不明白问题是什么(尤其是当我试图将重复事件视为它们自己的单个事件。
同样,这似乎一切正常,除非我使用重复事件(在我看来,每周手动添加时间不是一个很好的解决方案)。
--
谢谢你的帮助,
本