イベントの編集
以下、イベントの編集にかかわる部分のサンプルコードです。
// カレンダーリストごとに処理
foreach ($listFeed as $list) {
// 取得したイベントの数だけループ
foreach ($eventFeed as $event) {
// htmlテーブルに取得した情報を表示
echo "<form method='POST'>";
echo "<td><button type='submit' name='updateEvent'>編集</button></td>";【 1 】
echo "<input type='hidden' name='targetEventId' value='" . $eventId . "'>";
echo "<input type='hidden' name='targetTitle' value='" . $title . "'>";
echo "</form>";
}
}
// 編集ボタン押下時の動作【 2 】
}else if(isset($_POST['updateEvent'])) {
// IDからイベントオブジェクトを取得【 3 】
try {
$event = $serviceCal->getCalendarEventEntry($_POST['targetEventId']);
} catch (Zend_Gdata_App_Exception $e) {
echo "エラー: " . $e->getMessage();
}
// 表示のためにイベントの情報を取得【 4 】
$date = date('Y-m-d', strtotime($event->when[0]->startTime));
$startTime = date('H:i', strtotime($event->when[0]->startTime));
$endTime = date('H:i', strtotime($event->when[0]->endTime));
$title = $event->title;
$id = $event->id;
$author = $event->content;
// 編集用にフォームを作成し、現在のデータを表示【 5 】
echo "【" . $title . "】の必要な情報を変更してください。";
echo "<form method='POST'>";
echo "日付(YYYY-MM-DD):<input type='text' name='date' size='50' value='" . $date ."' /><br />";
echo "開始時刻(hh:mm):<input type='text' name='start' size='50' value='" . $startTime ."' /><br />";
echo "終了時刻(hh:mm):<input type='text' name='end' size='50' value='" . $endTime ."' /><br />";
echo "内容:<input type='text' name='title' size='100' value='" . $title ."' /><br />";
echo "記入者:<input type='text' name='author' size='50' value='" . $author ."' /><br />";
echo "<input type='hidden' name='targetEventId' value='" . $id . "'>";
echo "<input type='submit' name='updateYes' value='実行'>";
echo "<input type='submit' name='cancel' value='キャンセル'>";
echo "</form>";
}
// 編集ページの実行ボタン押下時動作【 6 】
} else if(isset($_POST['updateYes'])){
// 編集対象のID部分を抜き出す
$targetId=$_POST['targetEventId'];
// IDからイベントオブジェクトを取得【 7 】
try {
$event = $serviceCal->getCalendarEventEntry($targetId);
} catch (Zend_Gdata_App_Exception $e) {
echo "エラー: " . $e->getMessage();
}
// フォームからのデータをイベント情報に設定【 8 】
$event->title = $serviceCal->newTitle($_POST['title']);
$event->content = $serviceCal->newContent($_POST['author']);
$date = $_POST['date'];
$startTime = $_POST['start'];
$endTime = $_POST['end'];
$tzOffset = "+09";
$when = $serviceCal->newWhen();
$when->startTime = "{$date}T{$startTime}:00.000{$tzOffset}:00";
$when->endTime = "{$date}T{$endTime}:00.000{$tzOffset}:00";
$event->when = array($when);
// イベント情報をGoogle Calenderサーバに保存する【 9 】
try {
$event->save();
} catch (Zend_Gdata_App_Exception $e) {
echo "エラー: " . $e->getMessage();
}
}
編集ボタンの作成【 1 】
各イベントごとに編集ボタンを作成します。どのイベントの内容を編集するか識別するために、hiddenパラメータとして、イベントIDを持たせます。
echo "<td><button type='submit' name='updateEvent'>編集</button></td>"; echo "<input type='hidden' name='targetEventId' value='" . $eventId . "'>"; echo "<input type='hidden' name='targetTitle' value='" . $title . "'>";
編集ボタンが押下された場合の動作【 2 】
編集ボタンが押下された場合には、該当のイベントオブジェクトを取得し、フォームにその内容を表示させます。
1. IDからイベントオブジェクトを取得【 3 】
編集対象のイベントオブジェクト(Zend_Gdata_Calendar_Event)を取得します。
// IDからイベントオブジェクトを取得【 3 】
try {
$event = $serviceCal->getCalendarEventEntry($_POST['targetEventId']);
} catch (Zend_Gdata_App_Exception $e) {
echo "エラー: " . $e->getMessage();
}
イベントのIDがあらかじめ分かっている場合にはサービスオブジェクト(Zend_Gdata_Calendar)のgetCalendarEventEntryメソッドの引数にIDを与えることで、対象のイベントオブジェクトを取得できます。
2. 表示のためにイベントの情報を取得【 4 】
取得したイベントオブジェクトの情報を抽出します。これは予約の際には設定(set)していた項目について、取得(get)をするだけです。
3. 更新用にフォームを作成し、現在のデータを表示【 5 】
前項で取得した情報をページ下部のフォームに表示させます。現状の情報を表示し、ユーザーに編集が必要な項目につき、変更してもらい、実行ボタンを押下させます。
編集ページの実行ボタン押下時動作【 6 】
実行ボタンが押された場合には再度そのイベントIDを抽出し、イベントオブジェクトを生成します(【 7 】)。その後、新規登録時同様にフォームに入力された情報をイベントオブジェクトにプロパティを設定し(【 8 】)、Googleカレンダーサーバに保存します(【 9 】)。
イベント更新時にはイベントオブジェクトであるZend_Gdata_Calendar_Eventのsaveメソッドを使用します。このメソッドを実行することで、既に登録されているイベントを上書き保存することができます。
$event->save();
