SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

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

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

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

  • X ポスト
  • このエントリーをはてなブックマークに追加

イベントの編集

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

[リスト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();

次のページ
イベントの削除

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
Zend FrameworkでGoogleアプリケーションを使い倒す連載記事一覧

もっと読む

この記事の著者

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

静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for Visual Studio and Development Technologies。執筆コミュニティ「WINGSプロジェクト」代表。主な著書に「独習シリーズ(Java・C#・Python・PHP・Ruby・JSP&サーブレットなど)」「速習シリーズ(ASP.NET Core・Vue.js・React・TypeScript・ECMAScript、Laravelなど)」「改訂3版JavaScript本格入門」「これからはじめるReact実践入門」「はじめてのAndroidアプリ開発 Kotlin編 」他、著書多数

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

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

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

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/3886 2009/05/21 14:00

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング