Ignore:
Timestamp:
2011/03/11 23:27:36 (13 years ago)
Author:
kotani
Message:

#1074 ([管理画面]商品複製時にエラー)

  • 規格あり商品を複製する場合、dtb_class_combination にもINSERTするように修正
File:
1 edited

Legend:

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

    r20602 r20616  
    998998                    $arrProductsClass = $objQuery->select($col, $table, $where, array($arrList["copy_product_id"])); 
    999999 
     1000                    // 複製元商品の規格組み合わせデータ登録 
     1001                    // 登録した組み合わせIDを取得 
     1002                    $arrRetCombinationId = $this->lfRegistClassCombination($arrProductsClass); 
     1003 
    10001004                    // 規格データ登録 
     1005                    $objQuery =& SC_Query_Ex::getSingletonInstance(); 
    10011006                    foreach($arrProductsClass as $arrData) { 
    10021007                        $sqlval = array(); 
     
    10041009                        $sqlval['product_id'] = $product_id; 
    10051010                        $sqlval['create_date'] = 'now()'; 
    1006                         $sqlval['class_combination_id'] = $arrData['class_combination_id']; 
     1011                        $sqlval['class_combination_id'] = $arrRetCombinationId[$arrData['class_combination_id']]; 
    10071012                        $sqlval['product_type_id'] = $arrData['product_type_id']; 
    10081013                        $sqlval['product_code'] = $arrData['product_code']; 
     
    10151020                        $sqlval['point_rate'] = $arrData['point_rate']; 
    10161021                        $sqlval['creator_id'] = $arrData['creator_id']; 
    1017                         $sqlval['update_date'] = $arrData['update_date']; 
     1022                        $sqlval['update_date'] = 'now()'; 
    10181023                        $sqlval['down_filename'] = $arrData['down_filename']; 
    10191024                        $sqlval['down_realfilename'] = $arrData['down_realfilename']; 
     
    11091114 
    11101115    /** 
    1111      * 商品規格テーブルを更新 
     1116     * 規格を設定している商品の商品規格テーブルを更新 
    11121117     * (deliv_fee, point_rate, sale_limit) 
    11131118     * 
     
    11341139     * @return void 
    11351140     */ 
    1136     function lfInsertRecommendProducts($objQuery, $arrList, $product_id) { 
     1141    function lfInsertRecommendProducts(&$objQuery, $arrList, $product_id) { 
    11371142        // 一旦関連商品をすべて削除する 
    11381143        $objQuery->delete("dtb_recommend_products", "product_id = ?", array($product_id)); 
     
    11661171     * @return boolean エラーフラグ 
    11671172     */ 
    1168     function lfCopyProductClass($arrList, $objQuery) { 
     1173    function lfCopyProductClass($arrList, &$objQuery) { 
    11691174        // 複製元のdtb_products_classを取得(規格なしのため、1件のみの取得) 
    11701175        $col = "*"; 
     
    12111216 
    12121217    /** 
     1218     * 商品規格データを元に、規格組み合わせデータを複製登録する 
     1219     *  
     1220     * @param array $arrProductsClass 商品規格データ配列 
     1221     * @return array 登録した規格組み合わせID配列 
     1222     */ 
     1223    function lfRegistClassCombination($arrProductsClass) { 
     1224        $arrRetCombinationId = array(); 
     1225 
     1226        // 規格組み合わせデータを取得 
     1227        $arrClassCombination = $this->lfGetClassCombination($arrProductsClass); 
     1228 
     1229        // 規格2を持っているかチェック 
     1230        $has_class2 = $this->lfHasClass2($arrClassCombination); 
     1231 
     1232        // 規格組み合わせデータを複製登録 
     1233        if($has_class2 == true) { 
     1234            // 規格2を持っている場合、規格1の組み合わせデータも取得 
     1235            $arrClassCombinationParent = $this->lfGetClassCombination($arrClassCombination, true); 
     1236 
     1237            // 親組み合わせデータを複製登録 
     1238            $arrRetCombinationId = $this->lfInsertClassCombination($arrClassCombinationParent); 
     1239            // 子組み合わせデータを複製登録 
     1240            $arrRetCombinationId = $this->lfInsertClassCombination($arrClassCombination, $arrRetCombinationId); 
     1241        } else { 
     1242            // 規格1のみの場合、複製登録 
     1243            $arrRetCombinationId = $this->lfInsertClassCombination($arrClassCombination); 
     1244        } 
     1245 
     1246        return $arrRetCombinationId; 
     1247    } 
     1248 
     1249    /** 
     1250     * 規格2を持っている規格組み合わせデータであるか判定する 
     1251     *  
     1252     * @param array $arrClassCombination 規格組み合わせデータ配列 
     1253     * @return boolean true: 規格2を持っている, false: 規格1のみ 
     1254     */ 
     1255    function lfHasClass2($arrClassCombination) { 
     1256        $has_class2 = false; 
     1257 
     1258        foreach($arrClassCombination as $arrVal) { 
     1259            if($arrVal['level'] == '2') { 
     1260                $has_class2 = true; 
     1261                break; 
     1262            } 
     1263        } 
     1264 
     1265        return $has_class2; 
     1266    } 
     1267 
     1268    /** 
     1269     * 規格組み合わせデータを取得する 
     1270     *  
     1271     * @param array $arrData 組み合わせIDを含むデータ配列 
     1272     * @param boolean $is_parent 親規格IDから抽出するフラグ(省略時: false) 
     1273     * @return array 規格組み合わせデータ配列 
     1274     */ 
     1275    function lfGetClassCombination($arrData, $is_parent = false) { 
     1276        $objQuery =& SC_Query_Ex::getSingletonInstance(); 
     1277        $key = 'class_combination_id'; 
     1278        if($is_parent == true) { 
     1279            $key = 'parent_class_combination_id'; 
     1280        } 
     1281 
     1282        $where = 'class_combination_id IN ('; 
     1283        $arrParam = array(); 
     1284        foreach($arrData as $arrVal) { 
     1285            if(SC_Utils_Ex::isBlank($arrVal[$key]) == true) { 
     1286                continue; 
     1287            } 
     1288            $where .= '?,'; 
     1289            $arrParam[] = $arrVal[$key]; 
     1290        } 
     1291        $where = preg_replace('/,$/', ')', $where); 
     1292        $arrClassCombination = $objQuery->select('*', 'dtb_class_combination', $where, $arrParam); 
     1293 
     1294        return $arrClassCombination; 
     1295    } 
     1296 
     1297    /** 
     1298     * 規格組み合わせデータを複製登録する 
     1299     *  
     1300     * @param array $arrClassCombination 複製元の規格組み合わせデータ配列 
     1301     * @param array $arrParentCombinationId 登録する親組み合わせID配列 (省略可) 
     1302     * @return array 登録した規格組み合わせID配列 
     1303     */ 
     1304    function lfInsertClassCombination($arrClassCombination, $arrParentCombinationId = array()) { 
     1305        $objQuery =& SC_Query_Ex::getSingletonInstance(); 
     1306        $arrRetCombinationId = array(); 
     1307 
     1308        // 親組み合わせIDの指定がある場合、指定された親組み合わせIDで複製登録 
     1309        if(count($arrParentCombinationId) > 0) { 
     1310            foreach($arrClassCombination as $key => $arrVal) { 
     1311                $arrClassCombination[$key]['parent_class_combination_id'] = $arrParentCombinationId[$arrVal['parent_class_combination_id']]; 
     1312            } 
     1313        } 
     1314 
     1315        foreach($arrClassCombination as $arrVal) { 
     1316            $sqlval = array(); 
     1317            $sqlval['class_combination_id'] = $objQuery->nextVal('dtb_class_combination_class_combination_id'); 
     1318            $sqlval['parent_class_combination_id'] = $arrVal['parent_class_combination_id']; 
     1319            $sqlval['classcategory_id'] = $arrVal['classcategory_id']; 
     1320            $sqlval['level'] = $arrVal['level']; 
     1321            $objQuery->insert('dtb_class_combination', $sqlval); 
     1322 
     1323            $arrRetCombinationId[$arrVal['class_combination_id']] = $sqlval['class_combination_id']; 
     1324        } 
     1325 
     1326        return $arrRetCombinationId; 
     1327    } 
     1328 
     1329    /** 
    12131330     * リネームする際は、自動生成される画像名に一意となるように、Suffixを付ける 
    12141331     *  
Note: See TracChangeset for help on using the changeset viewer.