CodeZine(コードジン)

特集ページ一覧

PHPアプリケーションからGoogle Calendarを利用しよう(後編)

Zend FrameworkでGoogleアプリケーションを使い倒す(3)

  • LINEで送る
  • このエントリーをはてなブックマークに追加
目次

イベントの編集

 以下、イベントの編集にかかわる部分のサンプルコードです。

[リスト14]index.php(抜粋)
// カレンダーリストごとに処理
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を持たせます。

[リスト15]index.php(抜粋)
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)を取得します。

[リスト16]index.php(抜粋)
// 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_Eventsaveメソッドを使用します。このメソッドを実行することで、既に登録されているイベントを上書き保存することができます。

[リスト17]index.php(抜粋)
$event->save();

  • LINEで送る
  • このエントリーをはてなブックマークに追加

バックナンバー

連載:Zend FrameworkでGoogleアプリケーションを使い倒す

著者プロフィール

  • 山田 祥寛(ヤマダ ヨシヒロ)

    静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for ASP/ASP.NET。執筆コミュニティ「WINGSプロジェクト」代表。 主な著書に「入門シリーズ(サーバサイドAjax/XM...

  • WINGSプロジェクト 森山 絵美 (モリヤマ エミ)

    <WINGSプロジェクトについて> 有限会社 WINGSプロジェクトが運営する、テクニカル執筆コミュニティ(代表 山田祥寛)。主にWeb開発分野の書籍/記事執筆、翻訳、講演等を幅広く手がける。2018年11月時点での登録メンバは55名で、現在も執筆メンバを募集中。興味のある方は、どしどし応募頂...

あなたにオススメ

All contents copyright © 2005-2021 Shoeisha Co., Ltd. All rights reserved. ver.1.5