Changeset 20426


Ignore:
Timestamp:
2011/02/27 00:30:27 (11 years ago)
Author:
shutta
Message:

refs #982 #1007
商品レビュー書き込みページのリファクタリング。(for #982)
lfConvertParamの廃止(for #1007)

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/version-2_5-dev/data/class/pages/products/LC_Page_Products_Review.php

    r20420 r20426  
    7979     */ 
    8080    function action() { 
    81         $objQuery = new SC_Query(); 
    82  
    83         //---- 登録用カラム配列 
    84         $arrRegistColumn = array( 
    85                                      array(  "column" => "review_id", "convert" => "aKV" ), 
    86                                      array(  "column" => "product_id", "convert" => "aKV" ), 
    87                                      array(  "column" => "reviewer_name", "convert" => "aKV" ), 
    88                                      array(  "column" => "reviewer_url", "convert" => "a"), 
    89                                      array(  "column" => "sex", "convert" => "n" ), 
    90                                      array(  "column" => "email", "convert" => "a" ), 
    91                                      array(  "column" => "recommend_level", "convert" => "n" ), 
    92                                      array(  "column" => "title", "convert" => "aKV" ), 
    93                                      array(  "column" => "comment", "convert" => "aKV" ), 
    94  
    95                                 ); 
     81        $objFormParam = new SC_FormParam(); 
     82        $this->lfInitParam($objFormParam); 
     83        $objFormParam->setParam($_POST); 
     84        $objFormParam->convParam(); 
    9685 
    9786        switch ($this->getMode()){ 
    9887        case 'confirm': 
    99             $arrForm = $this->lfConvertParam($_POST, $arrRegistColumn); 
    100             $this->arrErr = $this->lfErrorCheck($arrForm); 
    101             //重複メッセージの判定 
    102             $flag = $objQuery->count("dtb_review","product_id = ? AND title = ? ", array($arrForm['product_id'], $arrForm['title'])); 
    103  
    104             if ($flag > 0){ 
    105                 $this->arrErr['title'] .= "重複したタイトルは登録できません。"; 
    106             } 
     88            $this->arrErr = $this->lfCheckError($objFormParam); 
    10789 
    10890            //エラーチェック 
    10991            if (empty($this->arrErr)) { 
    11092                //重複タイトルでない 
    111                 if($flag == 0){ 
    112                     //商品名の取得 
    113                     $arrForm['name'] = $objQuery->get("name", "dtb_products", "product_id = ? ", array($arrForm['product_id'])); 
    114                     $this->arrForm = $arrForm; 
    115                     $this->tpl_mainpage = 'products/review_confirm.tpl'; 
    116                 } 
    117             } else { 
    118                 //商品名の取得 
    119                 $arrForm['name'] = $objQuery->get("name", "dtb_products", "product_id = ? ", array($arrForm['product_id'])); 
    120                 $this->arrForm = $arrForm; 
     93                $this->tpl_mainpage = 'products/review_confirm.tpl'; 
    12194            } 
    12295            break; 
    12396 
    12497        case 'return': 
    125             foreach($_POST as $key => $val){ 
    126                 $this->arrForm[ $key ] = $val; 
    127             } 
    128  
    129             //商品名の取得 
    130             $this->arrForm['name'] = $objQuery->get("name", "dtb_products", "product_id = ? ", array($this->arrForm['product_id'])); 
    131             if(empty($this->arrForm['name'])) { 
    132                 SC_Utils_Ex::sfDispSiteError(PAGE_ERROR); 
     98            break; 
     99 
     100        case 'complete': 
     101            $this->arrErr = $this->lfCheckError($objFormParam); 
     102            //エラーチェック 
     103            if (empty($this->arrErr)) { 
     104                //登録実行 
     105                $this->lfRegistRecommendData($objFormParam); 
     106 
     107                //レビュー書き込み完了ページへ 
     108                SC_Response_Ex::sendRedirect('review_complete.php'); 
     109                exit; 
    133110            } 
    134111            break; 
    135112 
    136         case 'complete': 
    137             $arrForm = $this->lfConvertParam($_POST, $arrRegistColumn); 
    138             $arrErr = $this->lfErrorCheck($arrForm); 
    139             //重複メッセージの判定 
    140             $flag = $objQuery->count("dtb_review","product_id = ? AND title = ? ", array($arrForm['product_id'], $arrForm['title'])); 
    141             //エラーチェック 
    142             if (empty($this->arrErr)) { 
    143                 //重複タイトルでない 
    144                 if($flag == 0) { 
    145                     //登録実行 
    146                     $this->lfRegistRecommendData($arrForm, $arrRegistColumn); 
    147                     //レビュー書き込み完了ページへ 
    148                     SC_Response_Ex::sendRedirect('review_complete.php'); 
    149                     exit; 
    150                 } 
    151             } else { 
    152                 if($flag > 0) { 
    153                     SC_Utils_Ex::sfDispSiteError(PAGE_ERROR); 
    154                 } 
    155             } 
    156             break; 
    157  
    158113        default: 
    159             if(SC_Utils_Ex::sfIsInt($_GET['product_id'])) { 
    160                 //商品情報の取得 
    161                 $arrForm = $objQuery->select("product_id, name", "dtb_products", "del_flg = 0 AND status = 1 AND product_id=?", array($_GET['product_id'])); 
    162                 if(empty($arrForm)) { 
    163                     SC_Utils_Ex::sfDispSiteError(PAGE_ERROR); 
    164                 } 
    165                 $this->arrForm = $arrForm[0]; 
    166             } 
    167             break; 
    168  
     114            // 最初のproduct_idは、$_GETで渡ってくる。 
     115            $objFormParam->setParam($_GET); 
     116        } 
     117 
     118        $this->arrForm = $objFormParam->getHashArray(); 
     119 
     120        //商品名の取得 
     121        $this->arrForm['name'] = $this->lfGetProductName($this->arrForm['product_id']); 
     122        if (empty($this->arrForm['name'])) { 
     123            SC_Utils_Ex::sfDispSiteError(PAGE_ERROR); 
    169124        } 
    170125 
     
    181136    } 
    182137 
    183     //エラーチェック 
    184  
    185     function lfErrorCheck() { 
    186         $objErr = new SC_CheckError(); 
    187         $objErr->doFunc(array("商品ID", "product_id", INT_LEN), array("EXIST_CHECK", "MAX_LENGTH_CHECK")); 
    188         $objErr->doFunc(array("投稿者名", "reviewer_name", STEXT_LEN), array("EXIST_CHECK", "SPTAB_CHECK", "MAX_LENGTH_CHECK")); 
    189         $objErr->doFunc(array("投稿者URL", "reviewer_url", MTEXT_LEN), array("NO_SPTAB", "SPTAB_CHECK", "MAX_LENGTH_CHECK", "URL_CHECK")); 
    190         $objErr->doFunc(array("おすすめレベル", "recommend_level"), array("SELECT_CHECK")); 
    191         $objErr->doFunc(array("タイトル", "title", STEXT_LEN), array("EXIST_CHECK", "SPTAB_CHECK", "MAX_LENGTH_CHECK")); 
    192         $objErr->doFunc(array("コメント", "comment", LTEXT_LEN), array("EXIST_CHECK", "SPTAB_CHECK", "MAX_LENGTH_CHECK")); 
     138    /** 
     139     * パラメータ情報の初期化を行う. 
     140     * 
     141     * @param SC_FormParam $objFormParam SC_FormParam インスタンス 
     142     * @return void 
     143     */ 
     144    function lfInitParam(&$objFormParam) { 
     145        $objFormParam->addParam("レビューID", "review_id", INT_LEN, "aKV"); 
     146        $objFormParam->addParam("商品ID", "product_id", INT_LEN, "n", array("EXIST_CHECK", "MAX_LENGTH_CHECK")); 
     147        $objFormParam->addParam("投稿者名", "reviewer_name", STEXT_LEN, "aKV", array("EXIST_CHECK", "SPTAB_CHECK", "MAX_LENGTH_CHECK")); 
     148        $objFormParam->addParam("投稿者URL", "reviewer_url", MTEXT_LEN, "a", array("NO_SPTAB", "SPTAB_CHECK", "MAX_LENGTH_CHECK", "URL_CHECK")); 
     149        $objFormParam->addParam("性別", "sex", INT_LEN, "n", array("NUM_CHECK", "MAX_LENGTH_CHECK")); 
     150        $objFormParam->addParam("おすすめレベル", "recommend_level", INT_LEN, "n", array("EXIST_CHECK", "SELECT_CHECK")); 
     151        $objFormParam->addParam("タイトル", "title", STEXT_LEN, "aKV", array("EXIST_CHECK", "SPTAB_CHECK", "MAX_LENGTH_CHECK")); 
     152        $objFormParam->addParam("コメント", "comment", LTEXT_LEN, "aKV", array("EXIST_CHECK", "SPTAB_CHECK", "MAX_LENGTH_CHECK")); 
     153    } 
     154 
     155    /** 
     156     * 入力内容のチェックを行う. 
     157     * 
     158     * @param SC_FormParam $objFormParam SC_FormParam インスタンス 
     159     * @return array エラーメッセージの配列 
     160     */ 
     161    function lfCheckError(&$objFormParam) { 
     162        $arrErr = $objFormParam->checkError(); 
     163 
     164        $arrForm = $objFormParam->getHashArray(); 
     165 
     166        //重複メッセージの判定 
     167        $objQuery =& SC_Query::getSingletonInstance(); 
     168        $flag = $objQuery->count("dtb_review","product_id = ? AND title = ? ", array($arrForm['product_id'], $arrForm['title'])); 
     169        if ($flag > 0){ 
     170            $arrErr['title'] .= "重複したタイトルは登録できません。"; 
     171        } 
    193172 
    194173        if (REVIEW_ALLOW_URL == false) { 
     174            $objErr = new SC_CheckError($objFormParam->getHashArray()); 
    195175            // コメント欄へのURLの入力を禁止 
    196176            $objErr->doFunc(array("URL", "comment", $this->arrReviewDenyURL), array("PROHIBITED_STR_CHECK")); 
    197         } 
    198  
    199         return $objErr->arrErr; 
    200     } 
    201  
    202     //---- 取得文字列の変換 
    203     function lfConvertParam($array, $arrRegistColumn) { 
    204         /* 
    205          *  文字列の変換 
    206          *  K :  「半角(ハンカク)片仮名」を「全角片仮名」に変換 
    207          *  C :  「全角ひら仮名」を「全角かた仮名」に変換 
    208          *  V :  濁点付きの文字を一文字に変換。"K","H"と共に使用します 
    209          *  n :  「全角」数字を「半角(ハンカク)」に変換 
    210          *  a :  全角英数字を半角英数字に変換する 
    211          */ 
    212         // カラム名とコンバート情報 
    213         foreach ($arrRegistColumn as $data) { 
    214             $arrConvList[ $data["column"] ] = $data["convert"]; 
    215         } 
    216         // 文字変換 
    217         foreach ($arrConvList as $key => $val) { 
    218             // POSTされてきた値のみ変換する。 
    219             if(!empty($array[$key])) { 
    220                 $array[$key] = mb_convert_kana($array[$key] ,$val); 
    221             } 
    222         } 
    223         return $array; 
     177            $arrErr += $objErr->arrErr; 
     178        } 
     179 
     180        return $arrErr; 
     181    } 
     182 
     183    /** 
     184     * 商品名を取得 
     185     * 
     186     * @param integer $product_id 商品ID 
     187     * @return string $product_name 商品名 
     188     */ 
     189    function lfGetProductName($product_id) { 
     190        $objQuery =& SC_Query::getSingletonInstance(); 
     191 
     192        return $objQuery->get("name", "dtb_products", "product_id = ? ", array($product_id)); 
    224193    } 
    225194 
    226195    //登録実行 
    227     function lfRegistRecommendData ($array, $arrRegistColumn) { 
    228         // 仮登録 
    229         foreach ($arrRegistColumn as $data) { 
    230             if (strlen($array[ $data["column"] ]) > 0 ) { 
    231                 $arrRegist[ $data["column"] ] = $array[ $data["column"] ]; 
    232             } 
    233         } 
     196    function lfRegistRecommendData (&$objFormParam) { 
     197        $objQuery =& SC_Query::getSingletonInstance(); 
     198        $arrRegist = $objFormParam->getDbArray(); 
     199 
    234200        $arrRegist['create_date'] = 'now()'; 
    235201        $arrRegist['update_date'] = 'now()'; 
    236202        $arrRegist['creator_id'] = '0'; 
     203 
    237204        //-- 登録実行 
    238         $objQuery = new SC_Query(); 
    239205        $objQuery->begin(); 
    240206        $arrRegist['review_id'] = $objQuery->nextVal('dtb_review_review_id'); 
Note: See TracChangeset for help on using the changeset viewer.