source: branches/feature-module-update/data/class/pages/products/LC_Page_Products_Review.php @ 15173

Revision 15173, 8.2 KB checked in by nanasess, 14 years ago (diff)

LC_Page の抽象化対応

  • Property svn:keywords set to Id Revision Date
  • Property svn:mime-type set to application/x-httpd-php
Line 
1<?php
2/*
3 * Copyright(c) 2000-2007 LOCKON CO.,LTD. All Rights Reserved.
4 *
5 * http://www.lockon.co.jp/
6 */
7
8// {{{ requires
9require_once(CLASS_PATH . "pages/LC_Page.php");
10
11/**
12 * お客様の声投稿のページクラス.
13 *
14 * @package Page
15 * @author LOCKON CO.,LTD.
16 * @version $Id$
17 */
18class LC_Page_Products_Review extends LC_Page {
19
20    // {{{ properties
21
22    /** おすすめレベル */
23    var $arrRECOMMEND;
24
25    /** 性別 */
26    var $arrSex;
27
28    /** 入力禁止URL */
29    var $arrReviewDenyURL;
30
31    // }}}
32    // {{{ functions
33
34    /**
35     * Page を初期化する.
36     *
37     * @return void
38     */
39    function init() {
40        parent::init();
41        $this->tpl_mainpage = 'products/review.tpl';
42
43        $masterData = new SC_DB_MasterData_Ex();
44        $this->arrRECOMMEND = $masterData->getMasterData("mtb_recommend");
45        $this->arrSex = $masterData->getMasterData("mtb_sex");
46        $this->arrReviewDenyURL = $masterData->getMasterData("mtb_review_deny_url");
47    }
48
49    /**
50     * Page のプロセス.
51     *
52     * @return void
53     */
54    function process() {
55        $objView = new SC_SiteView();
56        $objQuery = new SC_Query();
57
58        if ($_SERVER["REQUEST_METHOD"] == "POST") {
59            if (!$this->isValidToken()) {
60                SC_Utils_Ex::sfDispSiteError(PAGE_ERROR, "", true);
61            }
62        }
63
64        //---- 登録用カラム配列
65        $arrRegistColumn = array(
66                                     array(  "column" => "review_id", "convert" => "aKV" ),
67                                     array(  "column" => "product_id", "convert" => "aKV" ),
68                                     array(  "column" => "reviewer_name", "convert" => "aKV" ),
69                                     array(  "column" => "reviewer_url", "convert" => "a"),
70                                     array(  "column" => "sex", "convert" => "n" ),
71                                     array(  "column" => "email", "convert" => "a" ),
72                                     array(  "column" => "recommend_level", "convert" => "n" ),
73                                     array(  "column" => "title", "convert" => "aKV" ),
74                                     array(  "column" => "comment", "convert" => "aKV" ),
75
76                                );
77        switch ($_POST['mode']){
78        case 'confirm':
79            $arrForm = $this->lfConvertParam($_POST, $arrRegistColumn);
80            $this->arrErr = $this->lfErrorCheck($arrForm);
81            //重複メッセージの判定
82            $flag = $objQuery->count("dtb_review","product_id = ? AND title = ? ", array($arrForm['product_id'], $arrForm['title']));
83
84            if ($flag > 0){
85                $this->arrErr['title'] .= "重複したタイトルは登録できません。";
86            }
87
88            //エラーチェック
89            if($this->arrErr == ""){
90                //重複タイトルでない
91                if($flag == 0){
92                    //商品名の取得
93                    $arrForm['name'] = $objQuery->get("dtb_products", "name", "product_id = ? ", array($arrForm['product_id']));
94                    $this->arrForm = $arrForm;
95                    $this->tpl_mainpage = 'products/review_confirm.tpl';
96                }
97            } else {
98                //商品名の取得
99                $arrForm['name'] = $objQuery->get("dtb_products", "name", "product_id = ? ", array($arrForm['product_id']));
100                $this->arrForm = $arrForm;
101            }
102            break;
103
104        case 'return':
105            foreach($_POST as $key => $val){
106                $this->arrForm[ $key ] = $val;
107            }
108
109            //商品名の取得
110            $this->arrForm['name'] = $objQuery->get("dtb_products", "name", "product_id = ? ", array($this->arrForm['product_id']));
111            if(empty($this->arrForm['name'])) {
112                SC_Utils_Ex::sfDispSiteError(PAGE_ERROR);
113            }
114            break;
115
116        case 'complete':
117            $arrForm = $this->lfConvertParam($_POST, $arrRegistColumn);
118            $arrErr = $this->lfErrorCheck($arrForm);
119            //重複メッセージの判定
120            $flag = $objQuery->count("dtb_review","product_id = ? AND title = ? ", array($arrForm['product_id'], $arrForm['title']));
121            //エラーチェック
122            if ($arrErr == ""){
123                //重複タイトルでない
124                if($flag == 0) {
125                    //登録実行
126                    $this->lfRegistRecommendData($arrForm, $arrRegistColumn);
127                    //レビュー書き込み完了ページへ
128                    $this->sendRedirect($this->getLocation("./review_complete.php", array(), true));
129                    exit;
130                }
131            } else {
132                if($flag > 0) {
133                    SC_Utils_Ex::sfDispSiteError(PAGE_ERROR);
134                }
135            }
136            break;
137
138        default:
139            if(SC_Utils_Ex::sfIsInt($_GET['product_id'])) {
140                //商品情報の取得
141                $arrForm = $objQuery->select("product_id, name", "dtb_products", "del_flg = 0 AND status = 1 AND product_id=?", array($_GET['product_id']));
142                if(empty($arrForm)) {
143                    SC_Utils_Ex::sfDispSiteError(PAGE_ERROR);
144                }
145                $this->arrForm = $arrForm[0];
146            }
147            break;
148
149        }
150
151        $this->transactionid = $this->getToken();
152        $objView->assignobj($this);
153        $objView->display($this->tpl_mainpage);
154    }
155
156    /**
157     * デストラクタ.
158     *
159     * @return void
160     */
161    function destroy() {
162        parent::destroy();
163    }
164
165    //エラーチェック
166
167    function lfErrorCheck() {
168        $objErr = new SC_CheckError();
169        $objErr->doFunc(array("商品ID", "product_id", INT_LEN), array("EXIST_CHECK", "MAX_LENGTH_CHECK"));
170        $objErr->doFunc(array("投稿者名", "reviewer_name", STEXT_LEN), array("EXIST_CHECK", "SPTAB_CHECK", "MAX_LENGTH_CHECK"));
171        $objErr->doFunc(array("URL", "reviewer_url", MTEXT_LEN), array("MAX_LENGTH_CHECK", "URL_CHECK"));
172        $objErr->doFunc(array("おすすめレベル", "recommend_level"), array("SELECT_CHECK"));
173        $objErr->doFunc(array("タイトル", "title", STEXT_LEN), array("EXIST_CHECK", "SPTAB_CHECK", "MAX_LENGTH_CHECK"));
174        $objErr->doFunc(array("コメント", "comment", LTEXT_LEN), array("EXIST_CHECK", "SPTAB_CHECK", "MAX_LENGTH_CHECK"));
175
176        if (REVIEW_ALLOW_URL == false) {
177            // コメント欄へのURLの入力を禁止
178            $objErr->doFunc(array("URL", "comment", $this->arrReviewDenyURL), array("PROHIBITED_STR_CHECK"));
179        }
180
181        return $objErr->arrErr;
182    }
183
184    //---- 取得文字列の変換
185    function lfConvertParam($array, $arrRegistColumn) {
186        /*
187         *  文字列の変換
188         *  K :  「半角(ハンカク)片仮名」を「全角片仮名」に変換
189         *  C :  「全角ひら仮名」を「全角かた仮名」に変換
190         *  V :  濁点付きの文字を一文字に変換。"K","H"と共に使用します
191         *  n :  「全角」数字を「半角(ハンカク)」に変換
192         *  a :  全角英数字を半角英数字に変換する
193         */
194        // カラム名とコンバート情報
195        foreach ($arrRegistColumn as $data) {
196            $arrConvList[ $data["column"] ] = $data["convert"];
197        }
198        // 文字変換
199        foreach ($arrConvList as $key => $val) {
200            // POSTされてきた値のみ変換する。
201            if(strlen(($array[$key])) > 0) {
202                $array[$key] = mb_convert_kana($array[$key] ,$val);
203            }
204        }
205        return $array;
206    }
207
208    //登録実行
209    function lfRegistRecommendData ($array, $arrRegistColumn) {
210        // 仮登録
211        foreach ($arrRegistColumn as $data) {
212            if (strlen($array[ $data["column"] ]) > 0 ) {
213                $arrRegist[ $data["column"] ] = $array[ $data["column"] ];
214            }
215        }
216        $arrRegist['create_date'] = 'now()';
217        $arrRegist['update_date'] = 'now()';
218        $arrRegist['creator_id'] = '0';
219        //-- 登録実行
220        $objQuery = new SC_Query();
221        $objQuery->begin();
222        $objQuery->insert("dtb_review", $arrRegist);
223        $objQuery->commit();
224    }
225}
226?>
Note: See TracBrowser for help on using the repository browser.