Ticket #1006 (closed 改善提案: 修正済)

Opened 10 years ago

Last modified 10 years ago

検索パラメータの引き継ぎというコード

Reported by: miningbrownie Owned by: nanasess
Priority: Milestone: EC-CUBE2.11.0
Component: その他 Version: 2.11.0 β
Keywords: Cc:
修正済み:

Description

LC_Page_Admin_Order_Mailで発見した

         // 検索パラメータの引き継ぎ
-        foreach ($_POST as $key => $val) {
-            if (ereg("^search_", $key)) {
-                $this->arrSearchHidden[$key] = $val;
-            }
-        }

もしこの処理がLC_Page_Admin_.*の色々なところに入っているようであれば、LC_Page_Adminに下記コードを追加したい。

    /**
     * 検索パラメータを配列で返す
     */
    function getSearchParameters($post){
        // 検索パラメータの引き継ぎ
        $searchHiddenParams = array();
        foreach ($post as $key => $val) {
            if (preg_match("/^search_/", $key)) {
                $searchHiddenParams[$key] = $val;
            }
        }
        return $searchHiddenParams;
    }

まずはどこで使われているか要調査。

Change History

comment:1 Changed 10 years ago by miningbrownie

find ./data/class/pages/admin/ -name "*.php" -exec grep -C 5 -n "foreach (._POST " {} \; -print

242-        // ページ送り用
243-        $this->arrHidden['search_pageno'] =
244-                isset($_POST['search_pageno']) ? $_POST['search_pageno'] : "";
245-
246-        // 検索ワードの引き継ぎ
247:        foreach ($_POST as $key => $val) {
248-            switch($key) {
249-            case 'sex':
250-            case 'status':
251-                $this->arrHidden[$key] = SC_Utils_Ex::sfMergeParamCheckBoxes($val);
252-                if(!is_array($val)) {
./data/class/pages/admin//customer/LC_Page_Admin_Customer.php
98-
99-        // 認証可否の判定
100-        SC_Utils_Ex::sfIsSuccess($objSess);
101-
102-        // 検索パラメータの引き継ぎ
103:        foreach ($_POST as $key => $val) {
104-            if (ereg("^search_", $key)) {
105-                $this->arrSearchHidden[$key] = $val;
106-            }
107-        }
108-
--
170-            break;
171-
172-        /* 商品削除*/
173-        case 'delete_product':
174-            $delete_no = $_POST['delete_no'];
175:            foreach ($_POST AS $key=>$val) {
176-                if (is_array($val)) {
177-                    foreach ($val AS $k=>$v) {
178-                        if ($k != $delete_no) {
179-                            $arrData[$key][] = $v;
180-                        }
./data/class/pages/admin//order/LC_Page_Admin_Order_Edit.php
95-
96-        // POST値の引き継ぎ
97-        $this->arrForm = $_POST;
98-
99-        // 検索ワードの引き継ぎ
100:        foreach ($_POST as $key => $val) {
101-            if (ereg("^search_", $key) || ereg("^campaign_", $key)) {
102-                switch($key) {
103-                    case 'search_product_flag':
104-                    case 'search_status':
105-                        $this->arrHidden[$key] = SC_Utils_Ex::sfMergeParamCheckBoxes($val);
./data/class/pages/admin//products/LC_Page_Admin_Products.php
118-
119-        // 規格の有り無し判定
120-        $this->tpl_nonclass = !$objDb->sfHasProductClass($_POST['product_id']);
121-
122-        // 検索パラメータの引き継ぎ
123:        foreach ($_POST as $key => $val) {
124-            if (ereg("^search_", $key)) {
125-                $this->arrSearchHidden[$key] = $val;
126-            }
127-        }
128-
./data/class/pages/admin//products/LC_Page_Admin_Products_Product.php
97-        $select="review_id, A.product_id, reviewer_name, sex, recommend_level, ";
98-        $select.="reviewer_url, title, comment, A.status, A.create_date, A.update_date, name";
99-        $from = "dtb_review AS A LEFT JOIN dtb_products AS B ON A.product_id = B.product_id ";
100-
101-        // 検索ワードの引き継ぎ
102:        foreach ($_POST as $key => $val) {
103-            if (ereg("^search_", $key)) {
104-                switch ($key){
105-                case 'search_sex':
106-                    $this->arrHidden[$key] = SC_Utils_Ex::sfMergeParamCheckBoxes($val);
107-                    if(!is_array($val)) {
--
129-            }
130-            //エラーチェック
131-            $this->arrErr = $this->lfCheckError();
132-
133-            if (!$this->arrErr){
134:                foreach ($_POST as $key => $val){
135-
136-                    if($val == "") {
137-                        continue;
138-                    }
139-
./data/class/pages/admin//products/LC_Page_Admin_Products_Review.php
74-        $this->objQuery = new SC_Query();
75-        // 認証可否の判定
76-        SC_Utils_Ex::sfIsSuccess($objSess);
77-
78-        // 検索ワードの引継ぎ
79:        foreach ($_POST as $key => $val){
80-            if (ereg("^search_", $key)){
81-                $this->arrSearchHidden[$key] = $val;
82-            }
83-        }
84-
./data/class/pages/admin//products/LC_Page_Admin_Products_ReviewEdit.php

抽象化しないといけないかも知れない。。。。。

comment:2 follow-up: ↓ 3 Changed 10 years ago by kimoto

同じことを思ってSC_Utilsに作ってしまいました

    /**
     * keyが正規表現にマッチした配列のみ値を返す
     *
     * @param mixed $array
     * @param mixed $regex
     * @access public
     * @return array $results
     */
    function sfFilterKey($array, $regex) {
        foreach ($array as $key => $val) {
            if (preg_match("/{$regex}/", $key)) {
                $results[$key] = $val;
            }
        }
        return $results;
    }

comment:3 in reply to: ↑ 2 Changed 10 years ago by miningbrownie

  • Status changed from new to closed
  • Resolution set to 無効

kimoto への返信 使わせていただきます!

comment:4 Changed 10 years ago by nanasess

  • Status changed from closed to reopened
  • Resolution 無効 deleted

スミマセン. r20133 で, SC_FormParam::getSearchArray() という関数を追加しています.

フォームに対しての処理なので, 確実に入力チェック後の値を取得できることから, こちらの方が良さげだと思いますが, いかがでしょう?

もちろん, SC_FormParam::getSearchArray() の内部で SC_Utils::sfFilterKey() を使用しても良いと思います.

備忘録として差し戻しておきますね.

comment:5 Changed 10 years ago by kotani

  • Component changed from フロント to その他
  • Milestone changed from EC-CUBE2.11.0 リファクタリングProject to EC-CUBE2.11.0

SC_FormParam::getSearchArray() で統一します。
SC_Utils::sfFilterKey() を使っている下記ページを修正する必要があります。

LC_Page_Admin_Order_Mail.php
LC_Page_Admin_Total.php

comment:6 Changed 10 years ago by nanasess

  • Owner changed from somebody to nanasess
  • Status changed from reopened to new

comment:7 Changed 10 years ago by nanasess

  • Status changed from new to assigned

comment:8 Changed 10 years ago by nanasess

  • Status changed from assigned to closed
  • Resolution set to 修正済

r20721 に修正しました

Note: See TracTickets for help on using tickets.