Установите напоминание для события Календаря Google, используя PHP - PullRequest
2 голосов
/ 26 марта 2012

Я разрабатываю сайт для добавления событий в Календарь Google, используя код из этого сообщения в блоге .

Теперь я хочу установить напоминание для каждого события, которое устанавливается за 15 минут до события.

Кто-нибудь может дать мне какое-то руководство о том, как этого добиться?

1 Ответ

2 голосов
/ 27 марта 2012

Установка напоминания при создании события очень проста. Вам просто нужно добавить пару дополнительных строк в тег <gd:when></gd:when>.

<gd:when startTime='2006-03-30T22:00:00.000Z' endTime='2006-03-30T23:00:00.000Z'>
  <gd:reminder minutes='15' method='email' />
  <gd:reminder minutes='15' method='alert' />
</gd:when>

Вот обновленный addEvent() метод, включающий поддержку напоминаний:

public function addEvent($params) {  
    $url = "http://www.google.com/calendar/feeds/{$this->getFeedEmail()}/private/full";  

    //startTime should be a time() value so we can convert it into the correct format  
    $params["startTime"] = date("c", $params["startTime"]);  

    //If no end-time is specified, set the end-time to 1 hour after the start-time  
    if(!array_key_exists("endTime", $params)) {  
        $params["endTime"] = date("c", strtotime($params["startTime"])+60*60*1);  
    }  

    $reminders = '';
    if(is_array($params['reminders'])) {
        foreach($params['reminders'] as $rem) {
            $reminders .= "<gd:reminder minutes='{$rem['minutes']}' method='{$rem['method']}' />"\n; 
        }
    }

    $xml = "<entry xmlns="http://www.w3.org/2005/Atom" xmlns:gd="http://schemas.google.com/g/2005">  
              <category scheme="http://schemas.google.com/g/2005#kind" term="http://schemas.google.com/g/2005#event"></category>  
              <title type="text">{$params["title"]}</title> 
              <content type="text">{$params["content"]}</content> 
              <gd:transparency value="http://schemas.google.com/g/2005#event.opaque">  
              </gd:transparency>  
              <gd:eventstatus value="http://schemas.google.com/g/2005#event.confirmed">  
              </gd:eventstatus>  
              <gd:where valuestring="{$params["where"]}"></gd:where> 
              <gd:when starttime="{$params["startTime"]}" endtime="{$params["endTime"]}">
                {$reminders} 
              </gd:when> 
            </entry>";  

    //Do the initial POST to Google  
    $ret = $this->calPostRequest($url, $xml);  

    //If Google sends back a gsessionid, we need to make the request again  
    $matches = array();  
    if(preg_match('/gsessionid=(.*?)\s+/', $ret, $matches)) {  
        $url .= "?gsessionid={$matches[1]}";  
        $ret = $this->calPostRequest($url, $xml);  
    }  

    //Parse the XML response (which contains the newly added entry)  
    $retFields = explode("\n", $ret);  
    //print_r($retFields);  
    $entryXML = simplexml_load_string($retFields[count($retFields)-1]);  

    //Return an array containing the entry id (url) and the etag  
    return array(  
            "id"=> (string)$entryXML->id,  
            "etag"=> $this->getETagFromHeader($retFields),  
            "link"=> $this->getEditLinkFromHeader($retFields)  
            );  
}  

И вы бы назвали это так:

$entryData = $cal->addEvent(array(  
    "title"=> "Auto Test event",  
    "content"=> "This is a test event",  
    "where"=> "Test location",  
    "startTime"=> time()+60*60*24*1,
    "reminders"=> array(
        array("method"=>"email", "minutes"=>"15"),
        array("method"=>"alert", "minutes"=>"15"),
    ) 
));  
...