[英]PHP Google Calendar Api add reminder to recurring events
我1年前开始了我的项目,从没在论坛上发帖,1星期前,我开始使用Google Calendar API开发,这是我的第3篇文章:
我已经成功创建了单个事件和重复事件,并为单个事件创建了提醒,但现在我需要知道如何使用Zend Gdata API为重复事件创建提醒。
这是我用来为单个事件创建提醒的代码:
function setReminder($client, $eventId, $minutes=15, $methods)
{
$gc = new Zend_Gdata_Calendar($client);
$reminder_types = array();
if ($event = getEvent($client, $eventId)) {
$times = $event->when;
var_dump($event);
foreach ($times as $when)
{
if(in_array('alert',$methods))
{
var_dump('alert');
$reminder_alert = $gc->newReminder();
$reminder_alert->setMinutes($minutes);
$reminder_alert->setMethod("alert");
array_push($reminder_types,$reminder_alert);
}
if(in_array('email',$methods))
{
var_dump('email');
$reminder_email = $gc->newReminder();
$reminder_email->setMinutes($minutes);
$reminder_email->setMethod("email");
array_push($reminder_types,$reminder_email);
}
$when->reminders = $reminder_types;
}
$eventNew = $event->save();
//var_dump($eventNew);
return $eventNew;
} else {
return null;
}
}
问题是,对于重复事件$ event-> when为空。
提前致谢!
在经过大量搜索和反复试验之后,我确定了创建带有提醒的重复事件的解决方案。
Google的Austin写道:
目前,Zend GData客户端库不提供在处理重复事件时直接添加提醒的功能。 这种例外情况是由于以下事实造成的:重复事件条目中没有gd:when元素,并且通常在gd:when元素中会存在gd:reminder。 Zend客户端库处理一般情况,因此当没有指定gd:when时,没有提供添加提醒的方法。
但是有一个hack :)这就是我的方法:
function createRecurringEvent ($client, $calendar, $title, $desc, $where, $startDate, $startTime, $endDate, $endTime, $repeat, $endRepeatDate, $endRepeatTime, $tzOffset, $minutes=15, $methods)
{
$frequence = "";
$recurData = null;
$gc = new Zend_Gdata_Calendar($client);
$newEntry = $gc->newEventEntry();
$newEntry->title = $gc->newTitle(trim($title));
$newEntry->where = array($gc->newWhere($where));
$newEntry->content = $gc->newContent($desc);
$newEntry->content->type = 'text';
switch ($repeat) {
case "d":
$frequence = "DAILY";
break;
case "w":
$frequence = "WEEKLY";
break;
case "m":
$frequence = "MONTHLY";
break;
case "y":
$frequence = "YEARLY";
break;
}
$startDateTime = getIcalDate($startDate . " " . $startTime);
$endDateTime = getIcalDate($endDate . " " . $endTime);
$endRepeatDateTime = getIcalDate($endRepeatDate . " " . $endRepeatTime);
if ($recurData == null)
{
$recurData =
"DTSTART:{$startDateTime}\r\n" .
"DTEND:{$endDateTime}\r\n" .
"RRULE:FREQ={$frequence};UNTIL={$endRepeatDateTime}\r\n";
}
$newEntry->recurrence = $gc->newRecurrence($recurData);
$event_xml = simplexml_load_string($newEntry->saveXML());
if(in_array('alert',$methods))
$event_xml->addChild('gd:reminder xmlns:gd="http://schemas.google.com/g/2005" minutes="15" method="alert"');
if(in_array('email',$methods))
$event_xml->addChild('gd:reminder xmlns:gd="http://schemas.google.com/g/2005" minutes="15" method="email"');
$xml = str_replace("atom:reminder","gd:reminder",$event_xml->asXML());
$gc->post($xml, $calendar);
}
100个参数将替换为仅用于测试的对象。 我希望这对其他人有所帮助,因为该API是一场噩梦。 我正在考虑将来创建有关此的教程。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.