2013-07-09 2 views
0
내가 1 년 전에 내 프로젝트를 시작 결코 1 주 전 내가 구글 캘린더 API로 개발을 시작, 포럼에 게시했다

에 알림을 추가하고이 제 3 게시물입니다 :의PHP 구글 캘린더 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; 
    } 
} 

문제는 다음과 같습니다

내가 하나의 이벤트에 대한 알림을 만들 때 사용하는 코드입니다.

미리 감사드립니다.

답변

0

많은 검색과 시행 착오를 거친 후 확인을 통해 되풀이 이벤트를 만드는 솔루션을 발견했습니다.

구글에서 오스틴 쓴 :

을 순간, 젠드의 GData 클라이언트 라이브러리는 이벤트를 반복 처리 할 때 직접 알림을 추가 할 수있는 기능을 제공하지 않습니다. 이 예외적 인 경우는 반복되는 이벤트 항목 내에 gd : when 요소가없고 일반적으로 gd : reminder가 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 개 매개 변수

이 단지 시험 인 객체로 대체됩니다. 이 API가 악몽이기 때문에 다른 사람에게 도움이되기를 바랍니다. 앞으로이 문제에 대한 자습서를 작성하려고합니다.