Changeset 21502 for branches/version-2_12-dev/data
- Timestamp:
- 2012/02/14 15:10:54 (14 years ago)
- Location:
- branches/version-2_12-dev/data/class
- Files:
-
- 5 edited
-
SC_Product.php (modified) (9 diffs)
-
helper/SC_Helper_DB.php (modified) (1 diff)
-
pages/admin/products/LC_Page_Admin_Products_Product.php (modified) (2 diffs)
-
pages/admin/products/LC_Page_Admin_Products_ProductClass.php (modified) (7 diffs)
-
pages/admin/products/LC_Page_Admin_Products_UploadCSV.php (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
-
branches/version-2_12-dev/data/class/SC_Product.php
r21481 r21502 259 259 260 260 // 規格1が設定されている 261 $this->classCat1_find[$productId] = (!SC_Utils_Ex::isBlank($arrProductClass[0]['classcategory_id1']));261 $this->classCat1_find[$productId] = $arrProductClass[0]['classcategory_id1'] > 0; // 要変更ただし、他にも改修が必要となる 262 262 // 規格2が設定されている 263 $this->classCat2_find[$productId] = (!SC_Utils_Ex::isBlank($arrProductClass[0]['classcategory_id2']));263 $this->classCat2_find[$productId] = $arrProductClass[0]['classcategory_id2'] > 0; // 要変更ただし、他にも改修が必要となる 264 264 265 265 $this->stock_find[$productId] = false; … … 316 316 317 317 // #929(GC8 規格のプルダウン順序表示不具合)対応のため、2次キーは「#」を前置 318 if ( SC_Utils_Ex::isBlank($productsClass1)) {318 if (!$this->classCat1_find[$productId]) { 319 319 $productsClass1 = '__unselected2'; 320 320 } … … 356 356 T1.down_filename, 357 357 T1.down_realfilename, 358 T2.class_combination_id, 359 T2.parent_class_combination_id, 360 T2.classcategory_id, 361 T2.level, 362 T3.name AS classcategory_name, 363 T3.rank, 364 T4.name AS class_name, 365 T4.class_id 358 T3.name AS classcategory_name1, 359 T3.rank AS rank1, 360 T4.name AS class_name1, 361 T4.class_id AS class_id1, 362 T1.classcategory_id1, 363 T1.classcategory_id2, 364 dtb_classcategory2.name AS classcategory_name2, 365 dtb_classcategory2.rank AS rank2, 366 dtb_class2.name AS class_name2, 367 dtb_class2.class_id AS class_id2 366 368 __EOS__; 367 369 $table = <<< __EOS__ 368 370 dtb_products_class T1 369 LEFT JOIN dtb_class_combination T2370 ON T1.class_combination_id = T2.class_combination_id371 371 LEFT JOIN dtb_classcategory T3 372 ON T 2.classcategory_id= T3.classcategory_id372 ON T1.classcategory_id1 = T3.classcategory_id 373 373 LEFT JOIN dtb_class T4 374 374 ON T3.class_id = T4.class_id 375 LEFT JOIN dtb_classcategory dtb_classcategory2 376 ON T1.classcategory_id2 = dtb_classcategory2.classcategory_id 377 LEFT JOIN dtb_class dtb_class2 378 ON dtb_classcategory2.class_id = dtb_class2.class_id 375 379 __EOS__; 376 380 377 381 $objQuery->setOrder('T3.rank DESC'); // XXX 378 382 $arrRet = $objQuery->select($col, $table, "", $params); 379 $levels = array(); 380 $parents = array(); 381 foreach ($arrRet as $rows) { 382 $levels[] = $rows['level']; 383 $parents[] = $rows['parent_class_combination_id']; 384 } 385 $level = max($levels); 386 $parentsClass = array(); 387 // 階層分の親を取得 388 for ($i = 0; $i < $level -1; $i++) { 389 $objQuery =& SC_Query_Ex::getSingletonInstance(); 390 $objQuery->setWhere('T1.class_combination_id IN (' . implode(', ', array_pad(array(), count($parents), '?')) . ')'); 391 392 $col = <<< __EOS__ 393 T1.class_combination_id, 394 T1.classcategory_id, 395 T1.parent_class_combination_id, 396 T1.level, 397 T2.name AS classcategory_name, 398 T2.rank, 399 T3.name AS class_name, 400 T3.class_id 401 __EOS__; 402 $table = <<< __EOS__ 403 dtb_class_combination T1 404 LEFT JOIN dtb_classcategory T2 405 ON T1.classcategory_id = T2.classcategory_id 406 LEFT JOIN dtb_class T3 407 ON T2.class_id = T3.class_id 408 __EOS__; 409 410 $objQuery->setOrder('T2.rank DESC'); // XXX 411 $arrParents = $objQuery->select($col, $table, "", $parents); 412 413 foreach ($arrParents as $rows) { 414 $parents[] = $rows['parent_class_combination_id']; 415 416 foreach ($arrRet as $child) { 417 if ($child['parent_class_combination_id'] 418 == $rows['class_combination_id']) { 419 $rows['product_id'] = $child['product_id']; 420 } 421 } 422 $tmpParents[] = $rows; 423 } 424 $parentsClass = array_merge($parentsClass, $tmpParents); 425 } 426 427 // 末端から枝を作成 428 $tmpClass = array_merge($arrRet, $parentsClass); 429 430 foreach ($tmpClass as $val) { 431 $val['class_id' . $val['level']] = $val['class_id']; 432 $val['class_name' . $val['level']] = $val['class_name']; 433 $val['classcategory_name' . $val['level']] = $val['classcategory_name']; 434 $val['classcategory_id' . $val['level']] = $val['classcategory_id']; 435 $arrProductsClass[] = $val; 436 } 437 return $arrProductsClass; 383 384 return $arrRet; 438 385 } 439 386 … … 449 396 $objQuery =& SC_Query_Ex::getSingletonInstance(); 450 397 $objQuery->setWhere('product_class_id = ? AND T1.del_flg = 0'); 451 $results = $this->getProductsClassByQuery($objQuery, $productClassId); 452 $productsClass = $this->getProductsClassFull($results); 453 return $productsClass[0]; 398 $arrRes = $this->getProductsClassByQuery($objQuery, $productClassId); 399 return $arrRes[0]; 454 400 } 455 401 … … 475 421 476 422 /** 477 * 商品IDに紐づいた, 商品規格を階層ごとに取得する.478 *479 * @param array $productId 商品ID480 * @return array 階層ごとの商品規格の配列481 */482 function getProductsClassLevelByProductId($productId) {483 $results = $this->getProductsClassByProductIds(array($productId));484 return $this->getProductsClassLevel($results);485 }486 487 /**488 423 * 商品IDに紐づいた, 商品規格をすべての組み合わせごとに取得する. 489 424 * … … 493 428 */ 494 429 function getProductsClassFullByProductId($productId, $has_deleted = false) { 495 $results = $this->getProductsClassByProductIds(array($productId), $has_deleted); 496 return $this->getProductsClassFull($results); 497 } 498 499 /** 500 * 商品規格の配列から, 商品規格を階層ごとに取得する. 501 * 502 * @access private 503 * @param array $productsClassResults 商品規格の結果の配列 504 * @return array 階層ごとの商品規格の配列 505 */ 506 function getProductsClassLevel($productsClassResults) { 507 foreach ($productsClassResults as $row) { 508 $productsClassLevel['level' . $row['level']][] = $row; 509 } 510 return $productsClassLevel; 511 } 512 513 /** 514 * 商品規格の配列から, 商品規格のすべての組み合わせを取得する. 515 * 516 * @access private 517 * @param array $productsClassResults 商品規格の結果の配列 518 * @ array 階層ごとの商品規格の配列 519 */ 520 function getProductsClassFull($productsClassResults) { 521 $results = $this->getProductsClassLevel($productsClassResults); 522 $productsClass = array(); 523 if (SC_Utils_Ex::isBlank($results['level1']) 524 && SC_Utils_Ex::isBlank($results['level2'])) { 525 return $results['level']; 526 } 527 528 foreach ($results['level1'] as $level1) { 529 foreach ($results['level2'] as $level2) { 530 if ($level2['parent_class_combination_id'] == $level1['class_combination_id']) { 531 $level1 = array_merge($level1, $level2); 532 } 533 } 534 $productsClass[] = $level1; 535 } 536 return $productsClass; 430 $arrRet = $this->getProductsClassByProductIds(array($productId), $has_deleted); 431 return $arrRet; 537 432 } 538 433 … … 787 682 SELECT dtb_products.*, 788 683 dtb_products_class.product_class_id, 789 dtb_products_class.class_combination_id,790 684 dtb_products_class.product_type_id, 791 685 dtb_products_class.product_code, … … 799 693 dtb_products_class.down_filename, 800 694 dtb_products_class.down_realfilename, 801 dtb_class_combination.parent_class_combination_id, 802 dtb_class_combination.classcategory_id, 803 dtb_class_combination.level as classlevel, 804 Tpcm.classcategory_id as parent_classcategory_id, 805 Tpcm.level as parent_classlevel, 695 dtb_products_class.classcategory_id1 AS classcategory_id, -- 削除 696 dtb_products_class.classcategory_id1, 697 dtb_products_class.classcategory_id2 AS parent_classcategory_id, -- 削除 698 dtb_products_class.classcategory_id2, 806 699 Tcc1.class_id as class_id, 807 700 Tcc1.name as classcategory_name, … … 811 704 LEFT JOIN dtb_products_class 812 705 ON dtb_products.product_id = dtb_products_class.product_id 813 LEFT JOIN dtb_class_combination814 ON dtb_products_class.class_combination_id = dtb_class_combination.class_combination_id815 LEFT JOIN dtb_class_combination as Tpcm816 ON dtb_class_combination.parent_class_combination_id = Tpcm.class_combination_id817 706 LEFT JOIN dtb_classcategory as Tcc1 818 ON dtb_ class_combination.classcategory_id= Tcc1.classcategory_id707 ON dtb_products_class.classcategory_id1 = Tcc1.classcategory_id 819 708 LEFT JOIN dtb_classcategory as Tcc2 820 ON Tpcm.classcategory_id= Tcc2.classcategory_id709 ON dtb_products_class.classcategory_id2 = Tcc2.classcategory_id 821 710 $where_clause 822 711 ) as prdcls -
branches/version-2_12-dev/data/class/helper/SC_Helper_DB.php
r21481 r21502 1438 1438 1439 1439 $objQuery =& SC_Query_Ex::getSingletonInstance(); 1440 $where = 'product_id = ? AND del_flg = 0 AND class _combination_id IS NOT NULL';1440 $where = 'product_id = ? AND del_flg = 0 AND classcategory_id1 != 0 AND classcategory_id2 != 0'; 1441 1441 $exists = $objQuery->exists('dtb_products_class', $where, array($product_id)); 1442 1442 -
branches/version-2_12-dev/data/class/pages/admin/products/LC_Page_Admin_Products_Product.php
r21481 r21502 1049 1049 $arrProductsClass = $objQuery->select($col, $table, $where, array($arrList['copy_product_id'])); 1050 1050 1051 // 複製元商品の規格組み合わせデータ登録1052 // 登録した組み合わせIDを取得1053 $arrRetCombinationId = $this->lfRegistClassCombination($arrProductsClass);1054 1055 1051 // 規格データ登録 1056 1052 $objQuery =& SC_Query_Ex::getSingletonInstance(); 1057 1053 foreach ($arrProductsClass as $arrData) { 1058 $sqlval = array();1054 $sqlval = $arrData; 1059 1055 $sqlval['product_class_id'] = $objQuery->nextVal('dtb_products_class_product_class_id'); 1060 1056 $sqlval['product_id'] = $product_id; 1061 1057 $sqlval['create_date'] = 'CURRENT_TIMESTAMP'; 1062 $sqlval['class_combination_id'] = $arrRetCombinationId[$arrData['class_combination_id']];1063 $sqlval['product_type_id'] = $arrData['product_type_id'];1064 $sqlval['product_code'] = $arrData['product_code'];1065 $sqlval['stock'] = $arrData['stock'];1066 $sqlval['stock_unlimited'] = $arrData['stock_unlimited'];1067 $sqlval['sale_limit'] = $arrData['sale_limit'];1068 $sqlval['price01'] = $arrData['price01'];1069 $sqlval['price02'] = $arrData['price02'];1070 $sqlval['deliv_fee'] = $arrData['deliv_fee'];1071 $sqlval['point_rate'] = $arrData['point_rate'];1072 $sqlval['creator_id'] = $arrData['creator_id'];1073 1058 $sqlval['update_date'] = 'CURRENT_TIMESTAMP'; 1074 $sqlval['down_filename'] = $arrData['down_filename'];1075 $sqlval['down_realfilename'] = $arrData['down_realfilename'];1076 $sqlval['del_flg'] = $arrData['del_flg'];1077 1059 $objQuery->insert($table, $sqlval); 1078 1060 } … … 1267 1249 1268 1250 /** 1269 * 商品規格データを元に、規格組み合わせデータを複製登録する1270 *1271 * @param array $arrProductsClass 商品規格データ配列1272 * @return array 登録した規格組み合わせID配列1273 */1274 function lfRegistClassCombination($arrProductsClass) {1275 $arrRetCombinationId = array();1276 1277 // 規格組み合わせデータを取得1278 $arrClassCombination = $this->lfGetClassCombination($arrProductsClass);1279 1280 // 規格2を持っているかチェック1281 $has_class2 = $this->lfHasClass2($arrClassCombination);1282 1283 // 規格組み合わせデータを複製登録1284 if ($has_class2 == true) {1285 // 規格2を持っている場合、規格1の組み合わせデータも取得1286 $arrClassCombinationParent = $this->lfGetClassCombination($arrClassCombination, true);1287 1288 // 親組み合わせデータを複製登録1289 $arrRetCombinationId = $this->lfInsertClassCombination($arrClassCombinationParent);1290 // 子組み合わせデータを複製登録1291 $arrRetCombinationId = $this->lfInsertClassCombination($arrClassCombination, $arrRetCombinationId);1292 } else {1293 // 規格1のみの場合、複製登録1294 $arrRetCombinationId = $this->lfInsertClassCombination($arrClassCombination);1295 }1296 1297 return $arrRetCombinationId;1298 }1299 1300 /**1301 * 規格2を持っている規格組み合わせデータであるか判定する1302 *1303 * @param array $arrClassCombination 規格組み合わせデータ配列1304 * @return boolean true: 規格2を持っている, false: 規格1のみ1305 */1306 function lfHasClass2($arrClassCombination) {1307 $has_class2 = false;1308 1309 foreach ($arrClassCombination as $arrVal) {1310 if ($arrVal['level'] == '2') {1311 $has_class2 = true;1312 break;1313 }1314 }1315 1316 return $has_class2;1317 }1318 1319 /**1320 * 規格組み合わせデータを取得する1321 *1322 * @param array $arrData 組み合わせIDを含むデータ配列1323 * @param boolean $is_parent 親規格IDから抽出するフラグ(省略時: false)1324 * @return array 規格組み合わせデータ配列1325 */1326 function lfGetClassCombination($arrData, $is_parent = false) {1327 $objQuery =& SC_Query_Ex::getSingletonInstance();1328 $key = 'class_combination_id';1329 if ($is_parent == true) {1330 $key = 'parent_class_combination_id';1331 }1332 1333 $where = 'class_combination_id IN (';1334 $arrParam = array();1335 foreach ($arrData as $arrVal) {1336 if (SC_Utils_Ex::isBlank($arrVal[$key]) == true) {1337 continue;1338 }1339 $where .= '?,';1340 $arrParam[] = $arrVal[$key];1341 }1342 $where = preg_replace('/,$/', ')', $where);1343 $arrClassCombination = $objQuery->select('*', 'dtb_class_combination', $where, $arrParam);1344 1345 return $arrClassCombination;1346 }1347 1348 /**1349 * 規格組み合わせデータを複製登録する1350 *1351 * @param array $arrClassCombination 複製元の規格組み合わせデータ配列1352 * @param array $arrParentCombinationId 登録する親組み合わせID配列 (省略可)1353 * @return array 登録した規格組み合わせID配列1354 */1355 function lfInsertClassCombination($arrClassCombination, $arrParentCombinationId = array()) {1356 $objQuery =& SC_Query_Ex::getSingletonInstance();1357 $arrRetCombinationId = array();1358 1359 // 親組み合わせIDの指定がある場合、指定された親組み合わせIDで複製登録1360 if (count($arrParentCombinationId) > 0) {1361 foreach ($arrClassCombination as $key => $arrVal) {1362 $arrClassCombination[$key]['parent_class_combination_id'] = $arrParentCombinationId[$arrVal['parent_class_combination_id']];1363 }1364 }1365 1366 foreach ($arrClassCombination as $arrVal) {1367 $sqlval = array();1368 $sqlval['class_combination_id'] = $objQuery->nextVal('dtb_class_combination_class_combination_id');1369 $sqlval['parent_class_combination_id'] = $arrVal['parent_class_combination_id'];1370 $sqlval['classcategory_id'] = $arrVal['classcategory_id'];1371 $sqlval['level'] = $arrVal['level'];1372 $objQuery->insert('dtb_class_combination', $sqlval);1373 1374 $arrRetCombinationId[$arrVal['class_combination_id']] = $sqlval['class_combination_id'];1375 }1376 1377 return $arrRetCombinationId;1378 }1379 1380 /**1381 1251 * リネームする際は、自動生成される画像名に一意となるように、Suffixを付ける 1382 1252 * -
branches/version-2_12-dev/data/class/pages/admin/products/LC_Page_Admin_Products_ProductClass.php
r21481 r21502 237 237 $arrDefault = $this->getProductsClass($product_id); 238 238 239 $objQuery->delete('dtb_products_class', 'product_id = ? AND class_combination_id IS NOT NULL', array($product_id));239 $objQuery->delete('dtb_products_class', 'product_id = ? AND (classcategory_id1 <> 0 OR classcategory_id2 <> 0)', array($product_id)); 240 240 241 241 for ($i = 0; $i < $total; $i++) { … … 244 244 $price02 = SC_Utils_Ex::isBlank($arrList['price02'][$i]) ? 0 : $arrList['price02'][$i]; 245 245 // dtb_products_class 登録/更新用 246 $registerKeys = array('product_code', 'stock', 247 'price01', 'product_type_id', 248 'down_filename', 'down_realfilename'); 246 $registerKeys = array( 247 'classcategory_id1', 'classcategory_id2', 248 'product_code', 'stock', 'price01', 'product_type_id', 249 'down_filename', 'down_realfilename', 250 ); 249 251 250 252 $arrPC = array(); … … 264 266 $arrPC['del_flg'] = $del_flg; 265 267 266 $class_combination_id = $arrExists[$arrList['product_class_id'][$i]]['class_combination_id'];267 $existsCombi = $objQuery->getRow('*', 'dtb_class_combination',268 'class_combination_id = ?',269 array($class_combination_id));270 271 $objQuery->delete('dtb_class_combination',272 'class_combination_id IN (?, ?)',273 array($existsCombi['class_combination_id'],274 $existsCombi['parent_class_combination_id']));275 276 // 規格組み合わせを登録277 $arrComb1['class_combination_id'] = $objQuery->nextVal('dtb_class_combination_class_combination_id');278 $arrComb1['classcategory_id'] = $arrList['classcategory_id1'][$i];279 $arrComb1['level'] = 1;280 $objQuery->insert('dtb_class_combination', $arrComb1);281 282 // 規格2も登録する場合283 if (!SC_Utils_Ex::isBlank($arrList['classcategory_id2'][$i])) {284 $arrComb2['class_combination_id'] = $objQuery->nextVal('dtb_class_combination_class_combination_id');285 $arrComb2['classcategory_id'] = $arrList['classcategory_id2'][$i];286 $arrComb2['parent_class_combination_id'] = $arrComb1['class_combination_id'];287 $arrComb2['level'] = 2;288 $objQuery->insert('dtb_class_combination', $arrComb2);289 290 $arrPC['class_combination_id'] = $arrComb2['class_combination_id'];291 } else {292 $arrPC['class_combination_id'] = $arrComb1['class_combination_id'];293 }294 295 268 $arrPC['create_date'] = 'CURRENT_TIMESTAMP'; 296 269 // 更新の場合は, product_class_id を使い回す … … 313 286 $arrBlank['update_date'] = 'CURRENT_TIMESTAMP'; 314 287 $objQuery->update('dtb_products_class', $arrBlank, 315 "product_id = ? AND class _combination_id IS NULL",288 "product_id = ? AND classcategory_id1 = 0 AND classcategory_id2 = 0", 316 289 array($product_id)); 317 290 … … 479 452 $product_id = $objFormParam->getValue('product_id'); 480 453 $objProduct = new SC_Product_Ex(); 481 $existsProductsClass = $objProduct->getProductsClassFullByProductId($product_id , true);454 $existsProductsClass = $objProduct->getProductsClassFullByProductId($product_id); 482 455 483 456 // 規格のデフォルト値(すべての組み合わせ)を取得し, フォームに反映 … … 557 530 558 531 $objQuery->begin(); 559 $arrClassCombi = $objQuery->getCol('class_combination_id', 560 'dtb_products_class', 561 'product_id = ?', array($product_id)); 562 563 foreach ($arrClassCombi as $class_combination_id) { 564 if (SC_Utils_Ex::isBlank($class_combination_id)) { 565 continue; 566 } 567 $existsCombi = $objQuery->getRow('*', 'dtb_class_combination', 568 'class_combination_id = ?', 569 array($class_combination_id)); 570 571 $objQuery->delete('dtb_class_combination', 572 'class_combination_id IN (?, ?)', 573 array($existsCombi['class_combination_id'], 574 $existsCombi['parent_class_combination_id'])); 575 } 576 $objQuery->update('dtb_products_class', array('del_flg' => 0), 577 "product_id = ? AND class_combination_id IS NULL", 578 array($product_id)); 579 $objQuery->delete('dtb_products_class', 580 "product_id = ? AND class_combination_id IS NOT NULL", 581 array($product_id)); 532 533 // 商品規格なしデータの復元 534 $where = 'product_id = ? AND classcategory_id1 = 0 AND classcategory_id2 = 0'; 535 $objQuery->update("dtb_products_class", array('del_flg' => 0), $where, array($product_id)); 536 537 // 商品規格データの削除 538 $where = 'product_id = ? AND (classcategory_id1 <> 0 OR classcategory_id2 <> 0)'; 539 $objQuery->delete("dtb_products_class", $where, array($product_id)); 540 582 541 $objQuery->commit(); 583 542 … … 780 739 $objQuery =& SC_Query_Ex::getSingletonInstance(); 781 740 $col = "product_code, price01, price02, stock, stock_unlimited, sale_limit, deliv_fee, point_rate"; 782 return $objQuery->getRow($col, 'dtb_products_class', "product_id = ? AND class_combination_id IS NULL", array($product_id)); 741 $where = 'product_id = ? AND classcategory_id1 = 0 AND classcategory_id2 = 0'; 742 return $objQuery->getRow($col, 'dtb_products_class', $where, array($product_id)); 783 743 } 784 744 -
branches/version-2_12-dev/data/class/pages/admin/products/LC_Page_Admin_Products_UploadCSV.php
r21490 r21502 613 613 function lfCheckErrorDetail($item, $arrErr) { 614 614 // 規格IDの存在チェック 615 // FIXME 規格分類ID自体のが有効かを主眼においたチェックをすべきと感じる。 615 616 if (!$this->lfIsDbRecord('dtb_products_class', 'product_class_id', $item)) { 616 617 $arrErr['product_class_id'] = "※ 指定の商品規格IDは、登録されていません。"; … … 628 629 } 629 630 } 630 // 規格組合せIDの存在チェック631 // if (!$this->lfIsDbRecord('dtb_class_combination', 'class_combination_id', $item)) {632 // SC_Utils::sfIsRecord が del_flg が無いと使えない為、個別処理633 if(array_search('class_combination_id', $this->arrFormKeyList) !== FALSE634 and $item['class_combination_id'] != "") {635 $objQuery =& SC_Query_Ex::getSingletonInstance();636 $ret = $objQuery->get('class_combination_id', 'dtb_class_combination', 'class_combination_id = ?', array($item['class_combination_id']));637 if ($ret == "") {638 $arrErr['class_combination_id'] = "※ 指定の規格組合せIDは、登録されていません。";639 }640 }641 631 // 表示ステータスの存在チェック 642 632 if (!$this->lfIsArrayRecord($this->arrDISP, 'status', $item)) {
Note: See TracChangeset
for help on using the changeset viewer.
