Changeset 20200


Ignore:
Timestamp:
2011/02/19 17:35:57 (11 years ago)
Author:
ume
Message:

#973 [管理画面]商品管理 検索部分のソースを修正。case 'csv'の処理がバグっていたのでそのままにし、CSV出力一旦保留としている。

Location:
branches/version-2_5-dev/data
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • branches/version-2_5-dev/data/Smarty/templates/admin/products/index.tpl

    r20116 r20200  
    7171      <th>商品ID</th> 
    7272      <td colspan="3"> 
    73         <!--{if $arrErr.search_product_id}--> 
    74         <span class="attention"><!--{$arrErr.search_product_id}--></span> 
    75         <!--{/if}--> 
    76         <input type="text" name="search_product_id" value="<!--{$arrForm.search_product_id|h}-->" size="30" class="box30" style="<!--{$arrErr.search_product_id|sfGetErrorColor}-->"/> 
     73        <!--{assign var=key value="search_product_id"}--> 
     74        <!--{if $arrErr[$key]}--> 
     75        <span class="attention"><!--{$arrErr[$key]}--></span> 
     76        <!--{/if}--> 
     77        <input type="text" name="<!--{$key}-->" value="<!--{$arrForm[$key].value|h}-->" maxlength="<!--{$arrForm[$key].length}-->" style="<!--{$arrErr[$key]|sfGetErrorColor}-->" size="30" class="box30"/> 
    7778      </td> 
    7879    </tr> 
    7980    <tr> 
    8081      <th>商品コード</th> 
    81       <td><input type="text" name="search_product_code" value="<!--{$arrForm.search_product_code|h}-->" size="30" class="box30" /></td> 
     82      <td> 
     83        <!--{assign var=key value="search_product_code"}--> 
     84        <!--{if $arrErr[$key]}--> 
     85        <span class="attention"><!--{$arrErr[$key]}--></span> 
     86        <!--{/if}--> 
     87        <input type="text" name="<!--{$key}-->" value="<!--{$arrForm[$key].value|h}-->" maxlength="<!--{$arrForm[$key].length}-->" style="<!--{$arrErr[$key]|sfGetErrorColor}-->" size="30" class="box30" /> 
     88      </td> 
    8289      <th>商品名</th> 
    83       <td><input type="text" name="search_name" value="<!--{$arrForm.search_name|h}-->" size="30" class="box30" /></td> 
     90      <td> 
     91        <!--{assign var=key value="search_name"}--> 
     92        <!--{if $arrErr[$key]}--> 
     93        <span class="attention"><!--{$arrErr[$key]}--></span> 
     94        <!--{/if}--> 
     95        <input type="text" name="<!--{$key}-->" value="<!--{$arrForm[$key].value|h}-->" maxlength="<!--{$arrForm[$key].length}-->" style="<!--{$arrErr[$key]|sfGetErrorColor}-->" size="30" class="box30" /> 
     96      </td> 
    8497    </tr> 
    8598    <tr> 
    8699      <th>カテゴリ</th> 
    87100      <td> 
    88         <select name="search_category_id" style="<!--{if $arrErr.search_category_id != ""}-->background-color: <!--{$smarty.const.ERR_COLOR}-->;<!--{/if}-->"> 
     101        <!--{assign var=key value="search_category_id"}--> 
     102        <span class="attention"><!--{$arrErr[$key]}--></span> 
     103        <select name="<!--{$key}-->" style="<!--{$arrErr[$key]|sfGetErrorColor}-->"> 
    89104        <option value="">選択してください</option> 
    90         <!--{html_options options=$arrCatList selected=$arrForm.search_category_id}--> 
     105        <!--{html_options options=$arrCatList selected=$arrForm[$key]}--> 
    91106        </select> 
    92107      </td> 
    93108      <th>種別</th> 
    94       <td><!--{html_checkboxes name="search_status" options=$arrDISP selected=$arrForm.search_status}--></td> 
     109      <td> 
     110        <!--{assign var=key value="search_status"}--> 
     111        <span class="attention"><!--{$arrErr[$key]|h}--></span> 
     112        <!--{html_checkboxes name="$key" options=$arrDISP selected=$arrForm[$key].value}--> 
     113      </td> 
    95114    </tr> 
    96115    <tr> 
     
    103122        <select name="search_startyear" style="<!--{$arrErr.search_startyear|sfGetErrorColor}-->"> 
    104123        <option value="">----</option> 
    105         <!--{html_options options=$arrStartYear selected=$arrForm.search_startyear}--> 
     124        <!--{html_options options=$arrStartYear selected=$arrForm.search_startyear.value}--> 
    106125        </select>年 
    107126        <select name="search_startmonth" style="<!--{$arrErr.search_startyear|sfGetErrorColor}-->"> 
    108127        <option value="">--</option> 
    109         <!--{html_options options=$arrStartMonth selected=$arrForm.search_startmonth}--> 
     128        <!--{html_options options=$arrStartMonth selected=$arrForm.search_startmonth.value}--> 
    110129        </select>月 
    111130        <select name="search_startday" style="<!--{$arrErr.search_startyear|sfGetErrorColor}-->"> 
    112131        <option value="">--</option> 
    113         <!--{html_options options=$arrStartDay selected=$arrForm.search_startday}--> 
     132        <!--{html_options options=$arrStartDay selected=$arrForm.search_startday.value}--> 
    114133        </select>日~ 
    115134        <select name="search_endyear" style="<!--{$arrErr.search_endyear|sfGetErrorColor}-->"> 
    116135        <option value="">----</option> 
    117         <!--{html_options options=$arrEndYear selected=$arrForm.search_endyear}--> 
     136        <!--{html_options options=$arrEndYear selected=$arrForm.search_endyear.value}--> 
    118137        </select>年 
    119138        <select name="search_endmonth" style="<!--{$arrErr.search_endyear|sfGetErrorColor}-->"> 
    120139        <option value="">--</option> 
    121         <!--{html_options options=$arrEndMonth selected=$arrForm.search_endmonth}--> 
     140        <!--{html_options options=$arrEndMonth selected=$arrForm.search_endmonth.value}--> 
    122141        </select>月 
    123142        <select name="search_endday" style="<!--{$arrErr.search_endyear|sfGetErrorColor}-->"> 
    124143        <option value="">--</option> 
    125         <!--{html_options options=$arrEndDay selected=$arrForm.search_endday}--> 
     144        <!--{html_options options=$arrEndDay selected=$arrForm.search_endday.value}--> 
    126145        </select>日 
    127146      </td> 
     
    130149      <th>ステータス</th> 
    131150      <td colspan="3"> 
    132       <!--{html_checkboxes name="search_product_flag" options=$arrSTATUS selected=$arrForm.search_product_flag}--> 
     151      <!--{assign var=key value="search_product_flag"}--> 
     152      <span class="attention"><!--{$arrErr[$key]|h}--></span> 
     153      <!--{html_checkboxes name="$key" options=$arrSTATUS selected=$arrForm[$key].value}--> 
    133154      </td> 
    134155    </tr> 
  • branches/version-2_5-dev/data/class/pages/admin/products/LC_Page_Admin_Products.php

    r20128 r20200  
    7676        $objDb = new SC_Helper_DB_Ex(); 
    7777        $objDate = new SC_Date(); 
     78        $objFormParam = new SC_FormParam(); 
     79        $objProduct = new SC_Product(); 
    7880 
    7981        // 登録・更新検索開始年 
     
    9496        SC_Utils_Ex::sfIsSuccess($objSess); 
    9597 
    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); 
    106                         if(!is_array($val)) { 
    107                             $this->arrForm[$key] = split("-", $val); 
    108                         } 
    109                         break; 
    110                     default: 
    111                         $this->arrHidden[$key] = $val; 
    112                         break; 
    113                 } 
    114             } 
    115         } 
     98        // パラメータ情報の初期化 
     99        $this->lfInitParam($objFormParam); 
     100        $objFormParam->setParam($_POST); 
     101        $this->arrHidden = $objFormParam->getSearchArray(); 
     102        $this->arrForm = $objFormParam->getFormParamList(); 
    116103 
    117104        // ページ送り用 
     
    120107        switch ($this->getMode()) { 
    121108        case 'delete': 
    122         // 商品削除 
    123             $objQuery = new SC_Query(); 
    124             $objQuery->delete("dtb_products", 
    125                           "product_id = ?", array($_POST['product_id'])); 
    126  
    127             // 子テーブル(商品規格)の削除 
    128             $objQuery->delete("dtb_products_class", "product_id = ?", array($_POST['product_id'])); 
    129  
    130             // お気に入り商品削除 
    131             $objQuery->delete("dtb_customer_favorite_products", "product_id = ?", array($_POST['product_id'])); 
    132  
     109            // 商品、子テーブル(商品規格)、お気に入り商品の削除 
     110            $this->doDelete("product_id = ?", array($objFormParam->getValue('product_id'))); 
    133111            // 件数カウントバッチ実行 
    134112            $objDb->sfCountCategory($objQuery); 
    135113            $objDb->sfCountMaker($objQuery); 
    136         case 'search': 
     114            // 削除後に検索結果を表示するため breakしない 
     115 
     116        // 検索パラメータ生成後に処理実行するため breakしない 
    137117        case 'csv': 
    138118        case 'delete_all': 
    139         case 'camp_search': 
    140             // 入力文字の強制変換 
    141             $this->lfConvertParam(); 
    142             // エラーチェック 
    143             $this->arrErr = $this->lfCheckError(); 
    144  
    145             $where = "del_flg = 0"; 
    146             $view_where = "del_flg = 0"; 
    147  
    148             // 入力エラーなし 
     119 
     120        case 'search': 
     121            $objFormParam->convParam(); 
     122            $objFormParam->trimParam(); 
     123            $this->arrErr = $this->lfCheckError($objFormParam); 
     124            $arrParam = $objFormParam->getHashArray(); 
     125 
    149126            if (count($this->arrErr) == 0) { 
    150  
    151                 $arrval = array(); 
    152                 foreach ($this->arrForm as $key => $val) { 
    153  
     127                $where = "del_flg = 0"; 
     128                $view_where = "del_flg = 0"; 
     129                foreach ($arrParam as $key => $val) { 
    154130                    if($val == "") { 
    155131                        continue; 
    156132                    } 
    157  
    158                     switch ($key) { 
    159                         case 'search_product_id': // 商品ID 
    160                             $where .= " AND product_id = ?"; 
    161                             $view_where .= " AND product_id = ?"; 
    162                             $arrval[] = $val; 
    163                             break; 
    164                         case 'search_name': // 商品名 
    165                             $where .= " AND name ILIKE ?"; 
    166                             $view_where .= " AND name ILIKE ?"; 
    167                             $arrval[] = "%$val%"; 
    168                             break; 
    169                         case 'search_category_id': // カテゴリー 
    170                             list($tmp_where, $tmp_arrval) = $objDb->sfGetCatWhere($val); 
    171                             if($tmp_where != "") { 
    172                                 $where.= " AND product_id IN (SELECT product_id FROM dtb_product_categories WHERE " . $tmp_where . ")"; 
    173                                 $view_where.= " AND product_id IN (SELECT product_id FROM dtb_product_categories WHERE " . $tmp_where . ")"; 
    174                                 $arrval = array_merge((array)$arrval, (array)$tmp_arrval); 
    175                             } 
    176                             break; 
    177                         case 'search_product_code': // 商品コード 
    178                             $where .= " AND product_id IN (SELECT product_id FROM dtb_products_class WHERE product_code ILIKE ? GROUP BY product_id)"; 
    179                             $view_where .= " AND EXISTS (SELECT product_id FROM dtb_products_class as cls WHERE cls.product_code ILIKE ? AND dtb_products.product_id = cls.product_id GROUP BY cls.product_id )"; 
    180                             $arrval[] = "%$val%"; 
    181                             break; 
    182                         case 'search_startyear': // 登録更新日(FROM) 
    183                             $date = SC_Utils_Ex::sfGetTimestamp($_POST['search_startyear'], $_POST['search_startmonth'], $_POST['search_startday']); 
    184                             $date = date('Y/m/d', strtotime($date)); 
    185                             $where.= " AND update_date >= date(?)"; 
    186                             $view_where.= " AND update_date >= date(?)"; 
    187                             $arrval[] = $date; 
    188                             break; 
    189                         case 'search_endyear': // 登録更新日(TO) 
    190                             $date = SC_Utils_Ex::sfGetTimestamp($_POST['search_endyear'], $_POST['search_endmonth'], $_POST['search_endday']); 
    191                             $date = date('Y/m/d', strtotime($date) + 86400); 
    192                             $where.= " AND update_date < date(?)"; 
    193                             $view_where.= " AND update_date < date(?)"; 
    194                             $arrval[] = $date; 
    195                             break; 
    196                         case 'search_product_flag': //種別 
    197                             if(count($val) > 0) { 
    198                                 $where .= " AND product_id IN (SELECT product_id FROM dtb_product_status WHERE product_status_id IN ("; 
    199                                 $view_where .= " AND product_id IN (SELECT product_id FROM dtb_product_status WHERE product_status_id IN ("; 
    200                                 foreach($val as $param) { 
    201                                     $where .= "?,"; 
    202                                     $view_where .= "?,"; 
    203                                     $arrval[] = $param; 
    204                                 } 
    205                                 $where = preg_replace("/,$/", "))", $where); 
    206                                 $view_where = preg_replace("/,$/", "))", $where); 
    207                             } 
    208                             break; 
    209                         case 'search_status': // ステータス 
    210                             $tmp_where = ""; 
    211                             foreach ($val as $element){ 
    212                                 if ($element != ""){ 
    213                                     if ($tmp_where == ""){ 
    214                                         $tmp_where.="AND (status = ? "; 
    215                                     }else{ 
    216                                         $tmp_where.="OR status = ? "; 
    217                                     } 
    218                                     $arrval[]=$element; 
    219                                 } 
    220                             } 
    221                             if ($tmp_where != ""){ 
    222                                 $tmp_where.=")"; 
    223                                 $where.= " $tmp_where"; 
    224                                 $view_where.= " $tmp_where"; 
    225                             } 
    226                             break; 
    227                         default: 
    228                             break; 
     133                    $this->buildQuery($key, $where, $view_where, $arrval, $objFormParam, $objDb); 
     134                } 
     135 
     136                $order = "update_date DESC"; 
     137 
     138                /* ----------------------------------------------- 
     139                 * 処理を実行 
     140                 * ----------------------------------------------- */ 
     141                switch($this->getMode()) { 
     142                // CSVを送信する。 
     143                case 'csv': 
     144                    require_once(CLASS_EX_REALDIR . "helper_extends/SC_Helper_CSV_Ex.php"); 
     145 
     146                    $objCSV = new SC_Helper_CSV_Ex(); 
     147 
     148                    // CSVを送信する。正常終了の場合、終了。 
     149                    $objCSV->sfDownloadProductsCsv($where, $arrval, $order, true); 
     150                    // FIXME: sendResponseに渡した方が良いのか? 
     151//                        $data = $objCSV->sfDownloadProductsCsv($where, $arrval, $order); 
     152//                        $this->sendResponseCSV($fime_name, $data); 
     153                    exit; 
     154                // 全件削除(ADMIN_MODE) 
     155                case 'delete_all': 
     156                    $this->doDelete($where, $arrval); 
     157                    break; 
     158 
     159                // 検索実行 
     160                default: 
     161                    // 行数の取得 
     162                    $this->tpl_linemax = $this->getNumberOfLines($where, $arrval); 
     163                    // ページ送りの処理 
     164                    $page_max = $this->getPageMax($objFormParam); 
     165                    // ページ送りの取得 
     166                    $objNavi = new SC_PageNavi($this->arrHidden['search_pageno'], 
     167                                               $this->tpl_linemax, $page_max, 
     168                                               "fnNaviSearchPage", NAVI_PMAX); 
     169                    $this->arrPagenavi = $objNavi->arrPagenavi; 
     170 
     171                    // 検索結果の取得 
     172                    $this->arrProducts = $this->findProducts($where, $arrval, 
     173                                                          $page_max, $objNavi->start_row, $order, $objProduct); 
     174                     
     175                    // 各商品ごとのカテゴリIDを取得 
     176                    if (count($this->arrProducts) > 0) { 
     177                        foreach ($this->arrProducts as $key => $val) { 
     178                            $this->arrProducts[$key]["categories"] = $objDb->sfGetCategoryId($val["product_id"], 0, true); 
     179                            $objDb->g_category_on = false; 
     180                        } 
    229181                    } 
    230182                } 
    231  
    232                 $order = "update_date DESC, product_id DESC"; 
    233                 $objQuery = new SC_Query(); 
    234                 $objProduct = new SC_Product(); 
    235                 //TODO: 要リファクタリング(MODE switch 入れ子) 
    236                 switch ($this->getMode()) { 
    237                     case 'csv': 
    238                         require_once(CLASS_EX_REALDIR . "helper_extends/SC_Helper_CSV_Ex.php"); 
    239  
    240                         $objCSV = new SC_Helper_CSV_Ex(); 
    241  
    242                         // CSVを送信する。正常終了の場合、終了。 
    243                         $objCSV->sfDownloadProductsCsv($where, $arrval, $order, true); 
    244                         // FIXME: sendResponseに渡した方が良いのか? 
    245 //                        $data = $objCSV->sfDownloadProductsCsv($where, $arrval, $order); 
    246 //                        $this->sendResponseCSV($fime_name, $data); 
    247                         exit; 
    248                         break; 
    249                     case 'delete_all': 
    250                         // 検索結果をすべて削除 
    251                         $where = "product_id IN (SELECT product_id FROM " 
    252                             . $objProduct->alldtlSQL() . " WHERE $where)"; 
    253                         $sqlval['del_flg'] = 1; 
    254                         $objQuery->update("dtb_products", $sqlval, $where, $arrval); 
    255                         $objQuery->delete("dtb_customer_favorite_products", $where, $arrval); 
    256  
    257                         // 件数カウントバッチ実行 
    258                         $objDb->sfCountCategory($objQuery); 
    259  
    260                         break; 
    261                     default: 
    262                         // 読み込む列とテーブルの指定 
    263                         $col = "product_id, name, main_list_image, status, product_code_min, product_code_max, price02_min, price02_max, stock_min, stock_max, stock_unlimited_min, stock_unlimited_max, update_date"; 
    264                         $from = $objProduct->alldtlSQL(); 
    265  
    266                         // 行数の取得 
    267                         $linemax = $objQuery->count("dtb_products", $view_where, $arrval); 
    268                         $this->tpl_linemax = $linemax; // 何件が該当しました。表示用 
    269  
    270                         // ページ送りの処理 
    271                         if(is_numeric($_POST['search_page_max'])) { 
    272                             $page_max = $_POST['search_page_max']; 
    273                         } else { 
    274                             $page_max = SEARCH_PMAX; 
    275                         } 
    276  
    277                         // ページ送りの取得 
    278                         $objNavi = new SC_PageNavi($this->arrHidden['search_pageno'], $linemax, $page_max, "fnNaviSearchPage", NAVI_PMAX); 
    279                         $startno = $objNavi->start_row; 
    280                         $this->arrPagenavi = $objNavi->arrPagenavi; 
    281  
    282                         //キャンペーン商品検索時は、全結果の商品IDを変数に格納する 
    283                         if(isset($_POST['search_mode']) && $_POST['search_mode'] == 'campaign') { 
    284                             $arrRet = $objQuery->select($col, $from, $where, $arrval); 
    285                             if(count($arrRet) > 0) { 
    286                                 $arrRet = sfSwapArray($arrRet); 
    287                                 $pid = implode("-", $arrRet['product_id']); 
    288                                 $this->arrHidden['campaign_product_id'] = $pid; 
    289                             } 
    290                         } 
    291  
    292                         // 取得範囲の指定(開始行番号、行数のセット) 
    293                         $objQuery->setLimitOffset($page_max, $startno); 
    294                         // 表示順序 
    295                         $objQuery->setOrder($order); 
    296  
    297                         // 検索結果の取得 
    298                         $this->arrProducts = $objQuery->select($col, $from, $where, $arrval); 
    299  
    300                         // 各商品ごとのカテゴリIDを取得 
    301                         if (count($this->arrProducts) > 0) { 
    302                             foreach ($this->arrProducts as $key => $val) { 
    303                                 $this->arrProducts[$key]["categories"] = $objDb->sfGetCategoryId($val["product_id"], 0, true); 
    304                                 $objDb->g_category_on = false; 
    305                             } 
    306                         } 
    307                 } 
    308183            } 
    309             break; 
    310         default: 
    311184            break; 
    312185        } 
     
    326199    } 
    327200 
    328     // 取得文字列の変換 
    329     function lfConvertParam() { 
    330         global $objPage; 
    331         /* 
    332          *  文字列の変換 
    333          *  K :  「半角(ハンカク)片仮名」を「全角片仮名」に変換 
    334          *  C :  「全角ひら仮名」を「全角かた仮名」に変換 
    335          *  V :  濁点付きの文字を一文字に変換。"K","H"と共に使用します 
    336          *  n :  「全角」数字を「半角(ハンカク)」に変換 
    337          */ 
    338         $arrConvList['search_name'] = "KVa"; 
    339         $arrConvList['search_product_code'] = "KVa"; 
    340  
    341         // 文字変換 
    342         foreach ($arrConvList as $key => $val) { 
    343             // POSTされてきた値のみ変換する。 
    344             if(isset($objPage->arrForm[$key])) { 
    345                 $objPage->arrForm[$key] = mb_convert_kana($objPage->arrForm[$key] ,$val); 
    346             } 
    347         } 
    348     } 
    349  
    350     // エラーチェック 
    351     // 入力エラーチェック 
    352     function lfCheckError() { 
    353         $objErr = new SC_CheckError(); 
    354         $objErr->doFunc(array("商品ID", "search_product_id"), array("NUM_CHECK")); 
    355         $objErr->doFunc(array("開始日", "search_startyear", "search_startmonth", "search_startday"), array("CHECK_DATE")); 
    356         $objErr->doFunc(array("終了日", "search_endyear", "search_endmonth", "search_endday"), array("CHECK_DATE")); 
     201    /** 
     202     * パラメータ情報の初期化を行う. 
     203     * 
     204     * @param SC_FormParam $objFormParam SC_FormParam インスタンス 
     205     * @return void 
     206     */ 
     207    function lfInitParam(&$objFormParam) { 
     208        // 検索条件 
     209        $objFormParam->addParam("商品ID", "search_product_id", INT_LEN, "n", array("NUM_CHECK", "MAX_LENGTH_CHECK")); 
     210        $objFormParam->addParam("商品コード", "search_product_code", STEXT_LEN, "KVna", array("SPTAB_CHECK", "MAX_LENGTH_CHECK")); 
     211        $objFormParam->addParam("商品名", "search_name", STEXT_LEN, "KVa", array("SPTAB_CHECK", "MAX_LENGTH_CHECK")); 
     212        $objFormParam->addParam("カテゴリ", "search_category_id", STEXT_LEN, "n", array("SPTAB_CHECK", "MAX_LENGTH_CHECK")); 
     213        $objFormParam->addParam("種別", "search_status", INT_LEN, "n", array("MAX_LENGTH_CHECK")); 
     214        // 登録・更新日 
     215        $objFormParam->addParam("開始年", "search_startyear", INT_LEN, "n", array("MAX_LENGTH_CHECK", "NUM_CHECK")); 
     216        $objFormParam->addParam("開始月", "search_startmonth", INT_LEN, "n", array("MAX_LENGTH_CHECK", "NUM_CHECK")); 
     217        $objFormParam->addParam("開始日", "search_startday", INT_LEN, "n", array("MAX_LENGTH_CHECK", "NUM_CHECK")); 
     218        $objFormParam->addParam("終了年", "search_endyear", INT_LEN, "n", array("MAX_LENGTH_CHECK", "NUM_CHECK")); 
     219        $objFormParam->addParam("終了月", "search_endmonth", INT_LEN, "n", array("MAX_LENGTH_CHECK", "NUM_CHECK")); 
     220        $objFormParam->addParam("終了日", "search_endday", INT_LEN, "n", array("MAX_LENGTH_CHECK", "NUM_CHECK")); 
     221 
     222        $objFormParam->addParam("ステータス", "search_product_flag", INT_LEN, "n", array("MAX_LENGTH_CHECK")); 
     223    } 
     224 
     225    /** 
     226     * 入力内容のチェックを行う. 
     227     * 
     228     * @param SC_FormParam $objFormParam SC_FormParam インスタンス 
     229     * @return void 
     230     */ 
     231    function lfCheckError(&$objFormParam) { 
     232        $objErr = new SC_CheckError($objFormParam->getHashArray()); 
     233        $objErr->arrErr = $objFormParam->checkError(); 
     234 
    357235        $objErr->doFunc(array("開始日", "終了日", "search_startyear", "search_startmonth", "search_startday", "search_endyear", "search_endmonth", "search_endday"), array("CHECK_SET_TERM")); 
     236 
    358237        return $objErr->arrErr; 
    359     } 
    360  
    361     // チェックボックス用WHERE文作成 
    362     function lfGetCBWhere($key, $max) { 
    363         $str = ""; 
    364         $find = false; 
    365         for ($cnt = 1; $cnt <= $max; $cnt++) { 
    366             if ($_POST[$key . $cnt] == "1") { 
    367                 $str.= "1"; 
    368                 $find = true; 
    369             } else { 
    370                 $str.= "_"; 
    371             } 
    372         } 
    373         if (!$find) { 
    374             $str = ""; 
    375         } 
    376         return $str; 
    377238    } 
    378239 
     
    387248        return $arrRet; 
    388249    } 
     250 
     251    /** 
     252     * 商品を削除する. 
     253     * 
     254     * @param string $where 削除対象の WHERE 句 
     255     * @param array $arrParam 削除対象の値 
     256     * @return void 
     257     */ 
     258    function doDelete($where, $arrParam = array()) { 
     259        $objQuery =& SC_Query::getSingletonInstance(); 
     260        $objQuery->update("dtb_products", array('del_flg' => 1), $where, $arrParam); 
     261        $objQuery->update("dtb_products_class", array('del_flg' => 1), $where, $arrParam); 
     262        $objQuery->update("dtb_customer_favorite_products", array('del_flg' => 1), $where, $arrParam); 
     263    } 
     264 
     265    /** 
     266     * クエリを構築する. 
     267     * 
     268     * 検索条件のキーに応じた WHERE 句と, クエリパラメータを構築する. 
     269     * クエリパラメータは, SC_FormParam の入力値から取得する. 
     270     * 
     271     * 構築内容は, 引数の $where, $view_where 及び $arrValues にそれぞれ追加される. 
     272     * 
     273     * @param string $key 検索条件のキー 
     274     * @param string $where 構築する WHERE 句 
     275     * @param string $view_where 構築する WHERE 句 
     276     * @param array $arrValues 構築するクエリパラメータ 
     277     * @param SC_FormParam $objFormParam SC_FormParam インスタンス 
     278     * @param SC_FormParam $objDb SC_Helper_DB_Ex インスタンス 
     279     * @return void 
     280     */ 
     281    function buildQuery($key, &$where, &$view_where, &$arrValues, &$objFormParam, &$objDb) { 
     282        $dbFactory = SC_DB_DBFactory::getInstance(); 
     283        switch ($key) { 
     284        // 商品ID 
     285        case 'search_product_id': 
     286            $where .= " AND product_id = ?"; 
     287            $view_where .= " AND product_id = ?"; 
     288            $arrValues[] = sprintf('%d', $objFormParam->getValue($key)); 
     289            break; 
     290        // 商品コード 
     291        case 'search_product_code': 
     292            $where .= " AND product_id IN (SELECT product_id FROM dtb_products_class WHERE product_code ILIKE ? GROUP BY product_id)"; 
     293            $view_where .= " AND EXISTS (SELECT product_id FROM dtb_products_class as cls WHERE cls.product_code ILIKE ? AND dtb_products.product_id = cls.product_id GROUP BY cls.product_id )"; 
     294            $arrValues[] = sprintf('%%%s%%', $objFormParam->getValue($key)); 
     295            break; 
     296        // 商品名 
     297        case 'search_name': 
     298            $where .= " AND name LIKE ?"; 
     299            $view_where .= " AND name LIKE ?"; 
     300            $arrValues[] = sprintf('%%%s%%', $objFormParam->getValue($key)); 
     301            break; 
     302        // カテゴリ 
     303        case 'search_category_id': 
     304            list($tmp_where, $tmp_Values) = $objDb->sfGetCatWhere($objFormParam->getValue($key)); 
     305            if($tmp_where != "") { 
     306                $where.= " AND product_id IN (SELECT product_id FROM dtb_product_categories WHERE " . $tmp_where . ")"; 
     307                $view_where.= " AND product_id IN (SELECT product_id FROM dtb_product_categories WHERE " . $tmp_where . ")"; 
     308                $arrValues = array_merge((array)$arrValues, (array)$tmp_Values); 
     309            } 
     310            break; 
     311        // 種別 
     312        case 'search_status': 
     313            $tmp_where = ""; 
     314            foreach($objFormParam->getValue($key) as $element) { 
     315                if($element != "") { 
     316                    if(SC_Utils_Ex::isBlank($tmp_where)) { 
     317                        $tmp_where .= " AND (status = ?"; 
     318                    } else { 
     319                        $tmp_where .= " OR status = ?"; 
     320                    } 
     321                    $arrValues[] = $element; 
     322                } 
     323            } 
     324 
     325            if(!SC_Utils_Ex::isBlank($tmp_where)) { 
     326                $tmp_where .= ")"; 
     327                $where .= " $tmp_where "; 
     328                $view_where .= " $tmp_where"; 
     329            } 
     330            break; 
     331        // 登録・更新日(開始) 
     332        case 'search_startyear': 
     333            $date = SC_Utils_Ex::sfGetTimestamp($objFormParam->getValue('search_startyear'), 
     334                                                $objFormParam->getValue('search_startmonth'), 
     335                                                $objFormParam->getValue('search_startday')); 
     336            $where.= " AND update_date >= ?"; 
     337            $view_where.= " AND update_date >= ?"; 
     338            $arrValues[] = $date; 
     339            break; 
     340        // 登録・更新日(終了) 
     341        case 'search_endyear': 
     342            $date = SC_Utils_Ex::sfGetTimestamp($objFormParam->getValue('search_endyear'), 
     343                                                $objFormParam->getValue('search_endmonth'), 
     344                                                $objFormParam->getValue('search_endday'), true); 
     345            $where.= " AND update_date <= ?"; 
     346            $view_where.= " AND update_date <= ?"; 
     347            $arrValues[] = $date; 
     348            break; 
     349        //ステータス 
     350        case 'search_product_flag': 
     351            if(count($objFormParam->getValue($key)) > 0) { 
     352                $where .= " AND product_id IN (SELECT product_id FROM dtb_product_status WHERE product_status_id IN ("; 
     353                foreach($objFormParam->getValue($key) as $param) { 
     354                    $where .= "?,"; 
     355                    $view_where .= "?,"; 
     356                    $arrValues[] = $param; 
     357                } 
     358                $where = preg_replace("/,$/", "))", $where); 
     359                $view_where = preg_replace("/,$/", "))", $where); 
     360            } 
     361            break; 
     362        } 
     363    } 
     364 
     365    /** 
     366     * 検索結果の行数を取得する. 
     367     * 
     368     * @param string $where 検索条件の WHERE 句 
     369     * @param array $arrValues 検索条件のパラメータ 
     370     * @return integer 検索結果の行数 
     371     */ 
     372    function getNumberOfLines($where, $arrValues) { 
     373        $objQuery =& SC_Query::getSingletonInstance(); 
     374        return $objQuery->count('dtb_products', $where, $arrValues); 
     375    } 
     376 
     377    /** 
     378     * 最大表示件数を取得する. 
     379     * 
     380     * フォームの入力値から最大表示件数を取得する. 
     381     * 取得できなかった場合は, 定数 SEARCH_PMAX の値を返す. 
     382     * 
     383     * @param SC_FormParam $objFormParam SC_FormParam インスタンス 
     384     * @return integer 最大表示件数 
     385     */ 
     386    function getPageMax(&$objFormParam) { 
     387        $page_max = $objFormParam->getValue('search_page_max'); 
     388        if(is_numeric($page_max)) { 
     389            return $page_max; 
     390        } else { 
     391            return SEARCH_PMAX; 
     392        } 
     393    } 
     394 
     395    /** 
     396     * 商品を検索する. 
     397     * 
     398     * @param string $where 検索条件の WHERE 句 
     399     * @param array $arrValues 検索条件のパラメータ 
     400     * @param integer $limit 表示件数 
     401     * @param integer $offset 開始件数 
     402     * @param string $order 検索結果の並び順 
     403     * @param SC_Product $objProduct SC_Product インスタンス 
     404     * @return array 商品の検索結果 
     405     */ 
     406    function findProducts($where, $arrValues, $limit, $offset, $order, &$objProduct) { 
     407        $objQuery =& SC_Query::getSingletonInstance(); 
     408 
     409        // 読み込む列とテーブルの指定 
     410        $col = "product_id, name, main_list_image, status, product_code_min, product_code_max, price02_min, price02_max, stock_min, stock_max, stock_unlimited_min, stock_unlimited_max, update_date"; 
     411        $from = $objProduct->alldtlSQL(); 
     412 
     413        $objQuery->setLimitOffset($limit, $offset); 
     414        $objQuery->setOrder($order); 
     415 
     416        return $objQuery->select($col, $from, $where, $arrValues); 
     417    } 
    389418} 
    390419?> 
Note: See TracChangeset for help on using the changeset viewer.