[Svn-src-all:1305] [version-2_5-dev 20194] リファクタリング

Yammy admin @ mail.ec-cube.net
2011年 2月 18日 (金) 15:15:56 JST


Subversion committed to /home/svn/open 20194
http://svn.ec-cube.net/open_trac/changeset/20194
┌────────────────────────────┐
│更新者 :  Yammy                                        │
│更新日時:  2011-02-18 15:15:56 +0900 (金, 18  2月 2011)│
└────────────────────────────┘

Log:
--------------------------------------------------------
リファクタリング
refs #970


Changed:                      [U:修正,A:追加,D:削除]
--------------------------------------------------------
U   branches/version-2_5-dev/data/class/pages/admin/products/LC_Page_Admin_Products_Review.php
U   branches/version-2_5-dev/data/class/pages/admin/products/LC_Page_Admin_Products_ReviewEdit.php

変更: branches/version-2_5-dev/data/class/pages/admin/products/LC_Page_Admin_Products_Review.php
===================================================================
--- branches/version-2_5-dev/data/class/pages/admin/products/LC_Page_Admin_Products_Review.php	2011-02-18 05:55:14 UTC (rev 20193)
+++ branches/version-2_5-dev/data/class/pages/admin/products/LC_Page_Admin_Products_Review.php	2011-02-18 06:15:56 UTC (rev 20194)
@@ -75,8 +75,11 @@
     function action() {
         $objSess = new SC_Session();
         $objDate = new SC_Date();
-        $objQuery = new SC_Query();
+        $objQuery =& SC_Query::getSingletonInstance();
 
+        // 認証可否の判定
+        SC_Utils_Ex::sfIsSuccess($objSess);
+
         // 登録・更新検索開始年
         $objDate->setStartYear(RELEASE_YEAR);
         $objDate->setEndYear(DATE("Y"));
@@ -90,184 +93,42 @@
         $this->arrEndMonth = $objDate->getMonth();
         $this->arrEndDay = $objDate->getDay();
 
-        // 認証可否の判定
-        SC_Utils_Ex::sfIsSuccess($objSess);
+        // パラメータ管理クラス
+        $this->objFormParam = new SC_FormParam();
+        // パラメータ情報の初期化
+        $this->lfInitParam();
+        $this->objFormParam->setParam($_POST);
+        $arrForm = $this->objFormParam->getHashArray();
 
-        //レビュー情報のカラムの取得
-        $select="review_id, A.product_id, reviewer_name, sex, recommend_level, ";
-        $select.="reviewer_url, title, comment, A.status, A.create_date, A.update_date, name";
-        $from = "dtb_review AS A LEFT JOIN dtb_products AS B ON A.product_id = B.product_id ";
+        // hidden の設定
+        $this->arrHidden = $this->lfSetHidden($arrForm);
 
-        // 検索ワードの引き継ぎ
-        foreach ($_POST as $key => $val) {
-            if (ereg("^search_", $key)) {
-                switch ($key){
-                case 'search_sex':
-                    $this->arrHidden[$key] = SC_Utils_Ex::sfMergeParamCheckBoxes($val);
-                    if(!is_array($val)) {
-                        $this->arrForm[$key] = split("-", $val);
-                    }
-                    break;
-
-                default:
-                    $this->arrHidden[$key] = $val;
-                    break;
-                }
-            }
-        }
         switch ($this->getMode()) {
         case 'delete':
-            //レビューの削除
-            $objQuery->exec("UPDATE dtb_review SET del_flg=1 WHERE review_id=?", array($_POST['review_id']));
+            $this->lfDeleteReview($arrForm['review_id']);
         case 'search':
         case 'csv':
-            //削除されていない商品を検索
-            $where="A.del_flg = 0 AND B.del_flg = 0";
-            $this->arrForm = $_POST;
-            if (isset($_POST['search_sex']) && !is_array($_POST['search_sex'])){
-                $this->arrForm['search_sex'] = split("-", $_POST['search_sex']);
-            }
-            //エラーチェック
+            // エラーチェック
             $this->arrErr = $this->lfCheckError();
-
             if (!$this->arrErr){
-                foreach ($_POST as $key => $val){
-
-                    if($val == "") {
-                        continue;
-                    }
-
-                    switch ($key){
-                    case 'search_reviewer_name':
-                        $val = ereg_replace(" ", "%", $val);
-                        $val = ereg_replace(" ", "%", $val);
-                        $where.= " AND reviewer_name ILIKE ? ";
-                        $arrval[] = "%$val%";
-                        break;
-
-                    case 'search_reviewer_url':
-                        $val = ereg_replace(" ", "%", $val);
-                        $val = ereg_replace(" ", "%", $val);
-                        $where.= " AND reviewer_url ILIKE ? ";
-                        $arrval[] = "%$val%";
-                        break;
-
-                    case 'search_name':
-                        $val = ereg_replace(" ", "%", $val);
-                        $val = ereg_replace(" ", "%", $val);
-                        $where.= " AND name ILIKE ? ";
-                        $arrval[] = "%$val%";
-                        break;
-
-                    case 'search_product_code':
-                        $val = ereg_replace(" ", "%", $val);
-                        $val = ereg_replace(" ", "%", $val);
-                        $where.= " AND A.product_id IN (SELECT product_id FROM dtb_products_class WHERE product_code ILIKE ? )";
-                        $arrval[] = "%$val%";
-                        break;
-
-                    case 'search_sex':
-                        $tmp_where = "";
-                        //$val=配列の中身,$element=各キーの値(1,2)
-                        if (is_array($val)){
-                            foreach($val as $element) {
-                                if($element != "") {
-                                    if($tmp_where == "") {
-                                        $tmp_where .= " AND (sex = ?";
-                                    } else {
-                                        $tmp_where .= " OR sex = ?";
-                                    }
-                                    $arrval[] = $element;
-                                }
-                            }
-                            if($tmp_where != "") {
-                                $tmp_where .= ")";
-                                $where .= " $tmp_where ";
-                            }
-                        }
-
-                        break;
-
-                    case 'search_recommend_level':
-                        $where.= " AND recommend_level = ? ";
-                        $arrval[] = $val;
-                        break;
-
-                    case 'search_startyear':
-                        if (isset($_POST['search_startyear']) && isset($_POST['search_startmonth']) && isset($_POST['search_startday'])){
-                            $date = SC_Utils_Ex::sfGetTimestamp($_POST['search_startyear'], $_POST['search_startmonth'], $_POST['search_startday']);
-                            $where.= " AND A.create_date >= ? ";
-                            $arrval[] = $date;
-                        }
-                        break;
-
-                    case 'search_endyear':
-                        if (isset($_POST['search_startyear']) && isset($_POST['search_startmonth']) && isset($_POST['search_startday'])){
-                            $date = SC_Utils_Ex::sfGetTimestamp($_POST['search_endyear'], $_POST['search_endmonth'], $_POST['search_endday']);
-
-                            $end_date = date("Y/m/d",strtotime("1 day" ,strtotime($date)));
-
-                            $where.= " AND A.create_date <= cast('$end_date' as date) ";
-                        }
-                        break;
-                    }
-
-                }
-
+                // 検索条件を取得
+                list($where, $arrval) = $this->lfGetWhere($arrForm);
             }
 
-            $order = "A.create_date DESC";
-
-            // ページ送りの処理
-            if(is_numeric($_POST['search_page_max'])) {
-                $page_max = $_POST['search_page_max'];
-            } else {
-                $page_max = SEARCH_PMAX;
-            }
-
-            if (!isset($arrval)) $arrval = array();
-
-            $linemax = $objQuery->count($from, $where, $arrval);
-            $this->tpl_linemax = $linemax;
-
-            $this->tpl_pageno =
-                isset($_POST['search_pageno']) ? $_POST['search_pageno'] : "";
-
-            // ページ送りの取得
-            $objNavi = new SC_PageNavi($this->tpl_pageno, $linemax, $page_max,
-                                       "fnNaviSearchPage", NAVI_PMAX);
-            $this->arrPagenavi = $objNavi->arrPagenavi;
-            $startno = $objNavi->start_row;
-
-
-
-            // 取得範囲の指定(開始行番号、行数のセット)
-            $objQuery->setLimitOffset($page_max, $startno);
-
-            // 表示順序
-            $objQuery->setOrder($order);
-
-            //検索結果の取得
-            $this->arrReview = $objQuery->select($select, $from, $where, $arrval);
-
             //CSVダウンロード
-            if ($mode == 'csv'){
-
-                $objCSV = new SC_Helper_CSV_Ex();
-                // オプションの指定
-                $option = "ORDER BY review_id";
-                // CSV出力タイトル行の作成
-                $head = SC_Utils_Ex::sfGetCSVList($objCSV->arrREVIEW_CVSTITLE);
-                $data = $objCSV->lfGetReviewCSV($where, '', $arrval);
-                // CSVを送信する。
-                list($fime_name, $data) = SC_Utils_Ex::sfGetCSVData($head.$data);
-                $this->sendResponseCSV($fime_name, $data);
+            if ($this->getMode() == 'csv') {
+                $this->lfCsv($where, $arrval);
                 exit;
             }
+
+            // 検索条件を取得
+            $this->arrReview = $this->lfGetRevire($arrForm, $where, $arrval);
             break;
         default:
             break;
         }
+
+        $this->arrForm = $arrForm;
     }
 
     /**
@@ -281,7 +142,10 @@
 
     // 入力エラーチェック
     function lfCheckError() {
-        $objErr = new SC_CheckError();
+        // 入力データを渡す。
+        $arrRet =  $this->objFormParam->getHashArray();
+        $objErr = new SC_CheckError($arrRet);
+        $objErr->arrErr = $this->objFormParam->checkError();
 
         switch ($this->getMode()){
         case 'search':
@@ -299,5 +163,195 @@
         }
         return $objErr->arrErr;
     }
+
+    //レビューの削除
+    function lfDeleteReview($review_id) {
+        $objQuery =& SC_Query::getSingletonInstance();
+        $sqlval['del_flg'] = 1;
+        $objQuery->update("dtb_review", $sqlval, "review_id = ?", array($review_id));
+    }
+
+    // 検索ワードの引き継ぎ
+    function lfSetHidden($arrForm) {
+        $arrHidden = array();
+        foreach ($arrForm AS $key=>$val) {
+            if (preg_match("/^search_/", $key)) {
+                switch ($key){
+                case 'search_sex':
+                    $arrHidden[$key] = SC_Utils_Ex::sfMergeParamCheckBoxes($val);
+                    if(!is_array($val)) {
+                        $arrForm[$key] = split("-", $val);
+                    }
+                    break;
+
+                default:
+                    $arrHidden[$key] = $val;
+                    break;
+                }
+            }
+        }
+        return $arrHidden;
+    }
+
+    /* パラメータ情報の初期化 */
+    function lfInitParam() {
+        $this->objFormParam->addParam("投稿者名", "search_reviewer_name", STEXT_LEN, "KVa", array("MAX_LENGTH_CHECK"));
+        $this->objFormParam->addParam("投稿者URL", "search_reviewer_url", STEXT_LEN, "KVa", array("MAX_LENGTH_CHECK"));
+        $this->objFormParam->addParam("商品名", "search_name", STEXT_LEN, "KVa", array("MAX_LENGTH_CHECK"));
+        $this->objFormParam->addParam("商品コード", "search_product_code", STEXT_LEN, "KVa", array("MAX_LENGTH_CHECK"));
+        $this->objFormParam->addParam("性別", "search_sex", INT_LEN, "n", array("MAX_LENGTH_CHECK"));
+        $this->objFormParam->addParam("おすすめレベル", "search_recommend_level", INT_LEN, "n", array("MAX_LENGTH_CHECK"));
+        $this->objFormParam->addParam("投稿年", "search_startyear", INT_LEN, "n", array("MAX_LENGTH_CHECK", "NUM_CHECK"));
+        $this->objFormParam->addParam("投稿月", "search_startmonth", INT_LEN, "n", array("MAX_LENGTH_CHECK", "NUM_CHECK"));
+        $this->objFormParam->addParam("投稿日", "search_startday", INT_LEN, "n", array("MAX_LENGTH_CHECK", "NUM_CHECK"));
+        $this->objFormParam->addParam("投稿年", "search_endyear", INT_LEN, "n", array("MAX_LENGTH_CHECK", "NUM_CHECK"));
+        $this->objFormParam->addParam("投稿月", "search_endmonth", INT_LEN, "n", array("MAX_LENGTH_CHECK", "NUM_CHECK"));
+        $this->objFormParam->addParam("投稿日", "search_endday", INT_LEN, "n", array("MAX_LENGTH_CHECK", "NUM_CHECK"));
+        $this->objFormParam->addParam("最大表示件数", "search_page_max", INT_LEN, "n", array("MAX_LENGTH_CHECK"));
+        $this->objFormParam->addParam("ページ番号件数", "search_pageno", INT_LEN, "n", array("MAX_LENGTH_CHECK"));
+        $this->objFormParam->addParam("レビューID", "review_id", INT_LEN, "n", array("MAX_LENGTH_CHECK"));
+    }
+
+    // CSV ファイル出力実行
+    function lfCsv($where, $arrval) {
+        $objCSV = new SC_Helper_CSV_Ex();
+        // CSV出力タイトル行の作成
+        $head = SC_Utils_Ex::sfGetCSVList($objCSV->arrREVIEW_CVSTITLE);
+        $data = $objCSV->lfGetReviewCSV($where, '', $arrval);
+        // CSVを送信する。
+        list($fime_name, $data) = SC_Utils_Ex::sfGetCSVData($head.$data);
+        $this->sendResponseCSV($fime_name, $data);
+    }
+
+
+    // 検索条件の取得
+    function lfGetWhere($arrForm) {
+        //削除されていない商品を検索
+        $where = "A.del_flg = 0 AND B.del_flg = 0";
+
+        foreach ($arrForm AS $key=>$val){
+            if (empty($val)) continue;
+
+            switch ($key){
+            case 'search_reviewer_name':
+                $val = mb_convert_kana($val, 's');
+                $val = preg_replace("/ /", "%", $val);
+                $where.= " AND reviewer_name ILIKE ? ";
+                $arrval[] = "%$val%";
+                break;
+
+            case 'search_reviewer_url':
+                $val = mb_convert_kana($val, 's');
+                $val = preg_replace("/ /", "%", $val);
+                $where.= " AND reviewer_url ILIKE ? ";
+                $arrval[] = "%$val%";
+                break;
+
+            case 'search_name':
+                $val = mb_convert_kana($val, 's');
+                $val = preg_replace("/ /", "%", $val);
+                $where.= " AND name ILIKE ? ";
+                $arrval[] = "%$val%";
+                break;
+
+            case 'search_product_code':
+                $val = mb_convert_kana($val, 's');
+                $val = preg_replace("/ /", "%", $val);
+                $where.= " AND A.product_id IN (SELECT product_id FROM dtb_products_class WHERE product_code ILIKE ? )";
+                $arrval[] = "%$val%";
+                break;
+
+            case 'search_sex':
+                $tmp_where = "";
+                //$val=配列の中身,$element=各キーの値(1,2)
+                if (is_array($val)){
+                    foreach($val as $element) {
+                        if($element != "") {
+                            if($tmp_where == "") {
+                                $tmp_where .= " AND (sex = ?";
+                            } else {
+                                $tmp_where .= " OR sex = ?";
+                            }
+                            $arrval[] = $element;
+                        }
+                    }
+                    if($tmp_where != "") {
+                        $tmp_where .= ")";
+                        $where .= " $tmp_where ";
+                    }
+                }
+
+                break;
+
+            case 'search_recommend_level':
+                $where.= " AND recommend_level = ? ";
+                $arrval[] = $val;
+                break;
+
+            case 'search_startyear':
+                if (isset($_POST['search_startyear']) && isset($_POST['search_startmonth']) && isset($_POST['search_startday'])){
+                    $date = SC_Utils_Ex::sfGetTimestamp($_POST['search_startyear'], $_POST['search_startmonth'], $_POST['search_startday']);
+                    $where.= " AND A.create_date >= ? ";
+                    $arrval[] = $date;
+                }
+                break;
+
+            case 'search_endyear':
+                if (isset($_POST['search_startyear']) && isset($_POST['search_startmonth']) && isset($_POST['search_startday'])){
+                    $date = SC_Utils_Ex::sfGetTimestamp($_POST['search_endyear'], $_POST['search_endmonth'], $_POST['search_endday']);
+                    $end_date = date("Y/m/d",strtotime("1 day" ,strtotime($date)));
+                    $where.= " AND A.create_date <= cast('$end_date' as date) ";
+                }
+                break;
+            }
+
+        }
+        return array($where, $arrval);
+    }
+
+    /*
+     * レビューの検索結果取得
+     */
+    function lfGetRevire($arrForm, $where, $arrval) {
+        $objQuery =& SC_Query::getSingletonInstance();
+
+        // ページ送りの処理
+        if(is_numeric($arrForm['search_page_max'])) {
+            $page_max = $arrForm['search_page_max'];
+        } else {
+            $page_max = SEARCH_PMAX;
+        }
+
+        if (!isset($arrval)) $arrval = array();
+
+        $from = "dtb_review AS A LEFT JOIN dtb_products AS B ON A.product_id = B.product_id ";
+        $linemax = $objQuery->count($from, $where, $arrval);
+        $this->tpl_linemax = $linemax;
+
+        $this->tpl_pageno = isset($arrForm['search_pageno']) ? $arrForm['search_pageno'] : "";
+
+        // ページ送りの取得
+        $objNavi = new SC_PageNavi($this->tpl_pageno, $linemax, $page_max,
+                                   "fnNaviSearchPage", NAVI_PMAX);
+        $this->arrPagenavi = $objNavi->arrPagenavi;
+        $startno = $objNavi->start_row;
+
+        // 取得範囲の指定(開始行番号、行数のセット)
+        $objQuery->setLimitOffset($page_max, $startno);
+
+        // 表示順序
+        $order = "A.create_date DESC";
+        $objQuery->setOrder($order);
+        //検索結果の取得
+        //レビュー情報のカラムの取得
+        $col = "review_id, A.product_id, reviewer_name, sex, recommend_level, ";
+        $col .= "reviewer_url, title, comment, A.status, A.create_date, A.update_date, name";
+        $from = "dtb_review AS A LEFT JOIN dtb_products AS B ON A.product_id = B.product_id ";
+        $arrReview = $objQuery->select($col, $from, $where, $arrval);
+
+        return $arrReview;
+    }
+
+
 }
 ?>

変更: branches/version-2_5-dev/data/class/pages/admin/products/LC_Page_Admin_Products_ReviewEdit.php
===================================================================
--- branches/version-2_5-dev/data/class/pages/admin/products/LC_Page_Admin_Products_ReviewEdit.php	2011-02-18 05:55:14 UTC (rev 20193)
+++ branches/version-2_5-dev/data/class/pages/admin/products/LC_Page_Admin_Products_ReviewEdit.php	2011-02-18 06:15:56 UTC (rev 20194)
@@ -71,7 +71,8 @@
      */
     function action() {
         $objSess = new SC_Session();
-        $this->objQuery = new SC_Query();
+        $this->objQuery =& SC_Query::getSingletonInstance();
+
         // 認証可否の判定
         SC_Utils_Ex::sfIsSuccess($objSess);
 
@@ -107,9 +108,8 @@
                 if ($this->arrErr) {
                     // 入力内容を引き継ぐ
                     $this->arrReview = $arrReview;
-                }
+                } else {
                 // エラー無し
-                else {
                     // レビュー情報の更新
                     $this->lfRegistReviewData($arrReview, $arrRegistColumn);
 




Svn-src-all メーリングリストの案内