2013-07-09 2 views
0

я начал свой проект 1 год назад и никогда не приходилось писать в форумах, 1 неделю назад я начал разработку с Google Calendar API, и это мой третий пост: sPHP Google Календарь Api добавить напоминание повторяющихся событий

I уже создают успешные одиночные и повторяющиеся события, напоминания для отдельных событий, но теперь мне нужно знать, как создавать напоминания о повторяющихся событиях с помощью 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-> когда пусто.

Заранее благодарен!

ответ

0

После много поиска и проб и ошибок я нашел решение для создания повторяющихся событий с напоминаниями.

Остин из Google писал:

На данный момент клиентская библиотека Zend GData не предоставляет возможность непосредственно добавлять напоминания, когда он имеет дело с повторяющимися событие. Этот исключительный случай вызван тем фактом, что нет gd: когда элемент внутри повторяющейся записи события и обычно gd: напоминание будет существовать внутри элемента gd: when. Библиотека 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 параметров будет заменен на объект, это только для тестирования. Я надеюсь, что это поможет кому-то еще, так как этот апи - это кошмар. Я думаю о создании учебника об этом в будущем.

Смежные вопросы