0

私は 1 年前にプロジェクトを開始し、フォーラムに投稿する必要はありませんでした。1 週間前に Google カレンダー 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;
    }
}

問題は、定期的なイベント $event->when が空であることです。

前もって感謝します!

4

1 に答える 1

0

多くの検索と試行錯誤の末、リマインダー付きの定期的なイベントを作成するソリューションを見つけました。

Google の Austin は次のように書いています。

現時点では、Zend GData クライアント ライブラリは、定期的なイベントを処理しているときにリマインダーを直接追加する機能を提供していません。この例外的なケースは、定期的なイベント エントリ内に gd:when 要素がなく、通常は gd:when 要素内に gd:reminder が存在するという事実によって発生します。Zend クライアント ライブラリは一般的なケースを処理するため、gd:when が指定されていない場合にリマインダーを追加する方法は提供されません。

しかし、ハックがあります:)これが私がやった方法です:

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 は悪夢なので、これが誰かの役に立てば幸いです。これについては、将来的にチュートリアルを作成することを考えています。

于 2013-07-10T10:52:38.687 に答える