サンプル - cakephp - model(1)

<?php
class Credit extends AppModel {
    var $name = 'Credit';
    var $useDbConfig = 'credit';
    var $useTable = 'credit_orders';

    var $validate = array(
        'order_id' => array(
            'alphanumeric' => array(
                'rule' => 'alphaNumeric',
                'required' => true,
                'message' => 'Alphabets and numbers only'
            )
        ),
        'credit_item_id' => array(
            'numeric' => array(
                'rule' => 'numeric',
                'required' => true,
                'message' => 'Numbers only'
            )
        ),
        'price' => array(
            'salary' => array(
                'rule' => array('money', 'left'),
                'message' => 'Money format only'
            )
        ),
        'status' => array(
            'alphanumeric' => array(
                'rule' => 'alphaNumeric',
                'required' => true,
                'message' => 'Alphabets and numbers only'
            )
        ),
    );

    var $get_fields = array(
        'CreditItem.id',
        'CreditItem.title',
        'CreditItem.description',
        'CreditItem.image_url',
        'CreditItem.product_url',
        'CreditItem.price',
    );

    public function createData($cons) {
        return $this->save($cons);
    }
    // アイテム一覧作成のために、アイテム情報取得
    public function get() {
        App::import('Model','CreditItem');
        $this->CreditItem = new CreditItem();
        return $this->CreditItem->get();
    }
    // callbackの実処理
    public function creditOrder($func, $request) {
        // ログ出力
        $params = array(
            'func' => $func,
            'request' => $request
        );
        $this->customLog('credits_callback.log', $params);

        // 返り値初期化
        $data = array('content' => array());

        //
        $payload = $request['credits'];
        if ($func == 'payments_status_update') {
            // 購入ボタンが押されたときの処理
            $data = $this->paymentsStatusUpdate($payload);
        } else if ($func == 'payments_get_items') {
            // 確認ダイアログ生成用の情報取得
            $data = $this->paymentsGetItems($payload);
        }
        $data['method'] = $func;
        return $data;
    }
    // 購入ボタンが押されたときの処理
    public function paymentsStatusUpdate($payload) {
        $status = $payload['status'];
        if ($status == 'placed') {
            $next_state = 'settled';
            $data['content']['status'] = $next_state;
            $order_details = stripcslashes($payload['order_details']);
            $item = json_decode($order_details, true);

            // credit_ordersテーブルに購入情報を登録
            $result = $this->insertCreditOrders($item, $next_state);

            // チアポイントの加算処理
            $result = $this->updateCheerPoint($item);
        }
        $data['content']['order_id'] = $payload['order_id'];
        return $data;
    }
    // credit_ordersテーブルに購入情報を登録
    public function insertCreditOrders($item, $next_state) {
        $cons = array(
            'order_id' => $item['order_id'],
            'credit_item_id' => $item['items'][0]['item_id'],
            'price' => $item['items'][0]['price'],
            'status' => $next_state
        );
        if (!$this->createData($cons)) {
            $this->renderErrorJson(array('db' => 'insert_error'));
            return;
        }
        return true;
    }
    // チアポイントの加算処理
    public function updateCheerPoint($item) {
        // facebook IDからuser IDを取得
        $result  = ClassRegistry::init('User')->getUserIdFromFacebookId($item['buyer']);
        $user_id = $result;
        $sign    = 'plus';

        // credit_itemsテーブルから該当商品のチアポイントを取得
        $result  = ClassRegistry::init('CreditItem')->get($item['items'][0]['item_id']);
        $point   = $result['CreditItem'][0]['cheer_point'];
        $kind    = 'cheer_point';

        // チアポイントの加算処理
        $result  = ClassRegistry::init('Point')->updatePoint($user_id, $sign, $point, $kind);
        return $result;
    }
    // 確認ダイアログ生成用の情報取得
    public function paymentsGetItems($payload) {
        $order_info = stripcslashes($payload['order_info']);
        $item = json_decode($order_info, true);
        // 商品価格
        $item['price'] = (int)$item['price'];
        // 商品URL、商品画像URL
        $url_key = array('product_url', 'image_url');
        foreach ($url_key as $key) {
            if (substr($item[$key], 0, 7) != 'http://') {
                $item[$key] = 'http://'.$item[$key];
            }
        }
        // test_mode 確認
        if (isset($payload['test_mode'])) {
            $update_keys = array('title', 'description');
            foreach ($update_keys as $key) {
                $item[$key] = '[Test Mode] '.$item[$key];
            }
        }
        $data['content'] = array($item);
        return $data;
    }
}