2010年12月18日土曜日

CodeIgniterでGoogleContactsAPIのテスト(4)

IBMのGoogleContactsサンプルのCI化第三弾はデータ削除です。

削除機能実装についてはわりとスムーズに行きました。

formタグで削除する連絡先のデータをhiddenで隠し持ちsubmitボタンで確認ダイアログを出しOKボタンで削除実行という流れです。

確認ダイアログのjavascriptは以下のようになっています。

<script language="JavaScript">
<!--
function check(){
    if(window.confirm('削除して宜しいですか?')){
        return true;
    } else {
        window.alert('削除を中止しました。');
        return false;
    }
}
//-->

一般的なスクリプトですから説明はいらないと思いますがOKボタンを押したときにtrueを返し呼び出し側でそれを検知してsubmitを実行するか判断するというものです。




表示した画像は上記のようになっています。リンククリックで即座に削除はちょっと怖いかな?とこんな機構を取り入れてみました。

<div class="name">
    <?php echo $r->name; ?>
    <span class="links">
        <?php echo form_open('contacts/delete','onSubmit="return check()"'); ?>
        <?php echo form_hidden('id',$r->edit)?>
        <?php echo form_submit('submit', '削除'); ?>
        <?php echo form_close(); ?>
    </span>
</div>

上記がその判断を行なうformタグ部分です。CodeIgniterのformヘルパーを利用しているのでちょっとわかりにくいかもしれませんがsubmit先がcontacts.phpのdeleteメソッドで連絡先のidを送っていることがおわかり頂けますでしょうか。

続いてはコントローラのdelete()メソッドを見てみましょう。

public function delete() {
    $this-<gdata_model-<delete();

    $data = $this-<gdata_model-<getContactsList();
    $this-<load-<view('contacts-index', $data);
}

gdata_modelのdeleteメソッドを呼びだしそちらでデータを削除後一覧表示画面を呼びだしている形になっています。削除すべき連絡先のIDについては$_POSTから受けとるため引数として渡しておりません。このあたりのお作法がよくわかっていませんがmodelでも$_POSTが受けとれるようになっているので問題ないかな?

続いてはmodelのdelete()メソッドです。メソッド名がかぶってしまっていますがまあ気にしない方向で…。(笑

public function delete() {
    try {
        // perform login and set protocol version to 3.0
        $client = Zend_Gdata_ClientLogin::getHttpClient($this-<user, $this-<pass, 'cp');
        // set GData delete headers
        $client-<setHeaders('If-Match: *');
        $gdata = new Zend_Gdata($client);
        $gdata-<setMajorProtocolVersion(3);

        // delete entry
        $gdata-<delete($this-<input-<post('id',TRUE));
    } catch (Exception $e) {
        die('ERROR:' . $e-<getMessage());
    }
}

こちらも登録に比べると非常にシンプルに完了しています。ログインしてプロトコルバージョンの指定およびdelete()メソッドの実行です。たったこれだけで削除については実装できてしまいました。

残すはデータ修正ですがこれは再び苦労しそうな予感がします。CIの使い方の問題とGoogleDataAPIともにまだはっきりと指針を詰められていません。じっくりドキュメントを読んで実装方法を考えてみたいと思います。IBMのサンプルプログラムに修正はないんですよねぇ。(笑

0 件のコメント:

コメントを投稿