2013-07-09 146 views
0

我1年前開始我的項目,從來沒有張貼在論壇上,1個星期前,我開始與谷歌日曆API進行開發,這是我第三次後:■PHP谷歌日曆API添加提醒重複事件

我已經創建了成功的單一和重複事件,提醒單個事件,但現在我需要知道如何使用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; 
    } 
} 

的問題是,對於空當經常性事件$事件 - >。

在此先感謝!

回答

0

好的,經過大量的搜索和試驗和錯誤,我發現解決方案使用提醒創建週期性事件。

奧斯汀從谷歌中寫道:

目前,在Zend的GData客戶端庫不提供 能力直接添加提醒,當它在處理與經常性 事件。這種特殊情況是由於不存在 gd:在循環事件條目中的元素,並且通常在gd:when元素內存在gd:reminder時。 Zend客戶端 庫處理一般情況,因此不提供在沒有gd時添加 提醒的方式:指定時。

但有一個黑客:)這裏是我是如何做的:

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是一個噩夢。 我正在考慮在將來創建一個關於此的教程。