- Timestamp:
- 2014/10/12 15:02:46 (9 years ago)
- Location:
- branches/version-2_13_3/data/class
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/version-2_13_3/data/class/helper/SC_Helper_Category.php
r23546 r23649 178 178 * 179 179 * @param array $data 180 * @return int|bool180 * @return void 181 181 */ 182 182 public function save($data) … … 185 185 186 186 $category_id = $data['category_id']; 187 // ミリ秒付きの時間文字列を取得. CSVへの対応. 188 // トランザクション内のCURRENT_TIMESTAMPは全てcommit()時の時間に統一されてしまう為. 189 $query = array('update_date' => SC_Utils_Ex::getFormattedDateWithMicroSecond()); 187 $query = array('update_date' => 'CURRENT_TIMESTAMP'); 190 188 $objQuery->begin(); 191 189 … … 217 215 $query['category_name'] = $data['category_name']; 218 216 $query['parent_category_id'] = $data['parent_category_id']; 219 $query['create_date'] = $query['update_date'];217 $query['create_date'] = 'CURRENT_TIMESTAMP'; 220 218 $query['creator_id'] = $_SESSION['member_id']; 221 219 $query['rank'] = $rank; 222 220 $query['level'] = $level; 223 221 224 $ result = $objQuery->insert('dtb_category', $query);222 $objQuery->insert('dtb_category', $query); 225 223 } else { 226 224 // 既存編集 227 $query['category_id'] = $category_id;228 225 $query['parent_category_id'] = $data['parent_category_id']; 229 226 $query['category_name'] = $data['category_name']; 230 227 $where = 'category_id = ?'; 231 $ result = $objQuery->update('dtb_category', $query, $where, array($category_id));228 $objQuery->update('dtb_category', $query, $where, array($category_id)); 232 229 } 233 230 234 231 $objQuery->commit(); 235 return ($result) ? $query['category_id'] : FALSE;236 232 } 237 233 -
branches/version-2_13_3/data/class/pages/admin/products/LC_Page_Admin_Products_UploadCSVCategory.php
r23605 r23649 55 55 /** 登録フォームカラム情報 **/ 56 56 public $arrFormKeyList; 57 /** @var string メインタイトル */58 public $tpl_maintitle;59 /** @var string サブタイトル */60 public $tpl_subtitle;61 /** @var string サブテンプレートナンバー */62 public $tpl_subno;63 64 /** @var array 許可タグ情報 */65 private $arrAllowedTag;66 /** @var int CSV ID */67 private $csv_id;68 /** @var bool */69 private $tpl_is_format_default;70 /** @var bool */71 private $tpl_is_update;72 /** @var int */73 private $max_upload_csv_size;74 57 75 58 /** … … 251 234 } 252 235 253 $category_id = $this->lfRegist erCategory($line_count, $objFormParam);236 $category_id = $this->lfRegistCategory($objQuery, $line_count, $objFormParam); 254 237 $this->addRowResult($line_count, 'カテゴリID:'.$category_id . ' / カテゴリ名:' . $objFormParam->getValue('category_name')); 255 238 } … … 374 357 * FIXME: 登録の実処理自体は、LC_Page_Admin_Products_Categoryと共通化して欲しい。 375 358 * 376 * @param integer $line 処理中の行数377 * @param SC_FormParam $objFormParam359 * @param SC_Query $objQuery SC_Queryインスタンス 360 * @param string|integer $line 処理中の行数 378 361 * @return integer カテゴリID 379 362 */ 380 public function lfRegist erCategory($line, SC_FormParam&$objFormParam)363 public function lfRegistCategory($objQuery, $line, &$objFormParam) 381 364 { 382 365 // 登録データ対象取得 383 366 $arrList = $objFormParam->getDbArray(); 367 // 登録時間を生成(DBのCURRENT_TIMESTAMPだとcommitした際、全て同一の時間になってしまう) 368 $arrList['update_date'] = $this->lfGetDbFormatTimeWithLine($line); 384 369 385 370 // 登録情報を生成する。 … … 390 375 $sqlval = $this->lfSetCategoryDefaultData($sqlval); 391 376 392 $objCategory = new SC_Helper_Category_Ex(); 393 $category_id = $objCategory->save($sqlval); 377 if ($sqlval['category_id'] != '') { 378 // 同じidが存在すればupdate存在しなければinsert 379 $where = 'category_id = ?'; 380 $category_exists = $objQuery->exists('dtb_category', $where, array($sqlval['category_id'])); 381 if ($category_exists) { 382 // UPDATEの実行 383 $where = 'category_id = ?'; 384 $objQuery->update('dtb_category', $sqlval, $where, array($sqlval['category_id'])); 385 } else { 386 $sqlval['create_date'] = $arrList['update_date']; 387 // 新規登録 388 $category_id = $this->registerCategory($sqlval['parent_category_id'], 389 $sqlval['category_name'], 390 $_SESSION['member_id'], 391 $sqlval['category_id']); 392 } 393 $category_id = $sqlval['category_id']; 394 // TODO: 削除時処理 395 } else { 396 // 新規登録 397 $category_id = $this->registerCategory($sqlval['parent_category_id'], 398 $sqlval['category_name'], 399 $_SESSION['member_id']); 400 } 394 401 395 402 return $category_id; … … 450 457 public function lfCheckErrorDetail($item, $arrErr) 451 458 { 452 $objCategory = new SC_Helper_Category_Ex(); 453 // スタティック変数を初期化 454 $objCategory->getTree(true); 459 $objQuery =& SC_Query_Ex::getSingletonInstance(); 455 460 /* 456 461 // カテゴリIDの存在チェック … … 463 468 && $item['parent_category_id'] != '' 464 469 && $item['parent_category_id'] != '0' 465 && ! $objCategory->get($item['parent_category_id'])470 && !SC_Helper_DB_Ex::sfIsRecord('dtb_category', 'category_id', array($item['parent_category_id'])) 466 471 ) { 467 472 $arrErr['parent_category_id'] = '※ 指定の親カテゴリID(' . $item['parent_category_id'] . ')は、存在しません。'; … … 479 484 && $item['category_name'] != '' 480 485 ) { 481 $exists = false; 482 $arrBrother = $objCategory->getTreeBranch($item['parent_category_id']); 483 foreach ($arrBrother as $brother) { 484 if ($brother['category_name'] == $item['category_name'] && $brother['category_id'] != $item['category_id']) { 485 $exists = true; 486 } 487 } 486 $parent_category_id = $item['parent_category_id']; 487 if ($parent_category_id == '') { 488 $parent_category_id = (string) '0'; 489 } 490 $where = 'parent_category_id = ? AND category_id <> ? AND category_name = ?'; 491 $exists = $objQuery->exists('dtb_category', 492 $where, 493 array($parent_category_id, 494 $item['category_id'], 495 $item['category_name'])); 488 496 if ($exists) { 489 497 $arrErr['category_name'] = '※ 既に同名のカテゴリが存在します。'; … … 491 499 } 492 500 // 登録数上限チェック 493 $count = count($objCategory->getList()); 501 $where = 'del_flg = 0'; 502 $count = $objQuery->count('dtb_category', $where); 494 503 if ($count >= CATEGORY_MAX) { 495 504 $item['category_name'] = '※ カテゴリの登録最大数を超えました。'; … … 498 507 if (array_search('parent_category_id', $this->arrFormKeyList) !== FALSE 499 508 and $item['parent_category_id'] != '') { 500 // 階層上限チェック 501 $arrParent = $objCategory->get($item['parent_category_id']); 502 if ($arrParent['level'] >= LEVEL_MAX) { 509 $level = $objQuery->get('level', 'dtb_category', 'category_id = ?', array($parent_category_id)); 510 if ($level >= LEVEL_MAX) { 503 511 $arrErr['parent_category_id'] = '※ ' . LEVEL_MAX . '階層以上の登録はできません。'; 504 512 } … … 518 526 return $arrErr; 519 527 } 528 529 /** 530 * カテゴリを登録する 531 * 532 * @param integer 親カテゴリID 533 * @param string カテゴリ名 534 * @param integer 作成者のID 535 * @param integer 指定カテゴリID 536 * @return integer カテゴリID 537 */ 538 public function registerCategory($parent_category_id, $category_name, $creator_id, $category_id = null) 539 { 540 $objQuery =& SC_Query_Ex::getSingletonInstance(); 541 542 $rank = null; 543 if ($parent_category_id == 0) { 544 // ROOT階層で最大のランクを取得する。 545 $where = 'parent_category_id = ?'; 546 $rank = $objQuery->max('rank', 'dtb_category', $where, array($parent_category_id)) + 1; 547 } else { 548 // 親のランクを自分のランクとする。 549 $where = 'category_id = ?'; 550 $rank = $objQuery->get('rank', 'dtb_category', $where, array($parent_category_id)); 551 // 追加レコードのランク以上のレコードを一つあげる。 552 $where = 'rank >= ?'; 553 $arrRawSql = array( 554 'rank' => '(rank + 1)', 555 ); 556 $objQuery->update('dtb_category', array(), $where, array($rank), $arrRawSql); 557 } 558 559 $where = 'category_id = ?'; 560 // 自分のレベルを取得する(親のレベル + 1) 561 $level = $objQuery->get('level', 'dtb_category', $where, array($parent_category_id)) + 1; 562 563 $arrCategory = array(); 564 $arrCategory['category_name'] = $category_name; 565 $arrCategory['parent_category_id'] = $parent_category_id; 566 $arrCategory['create_date'] = 'CURRENT_TIMESTAMP'; 567 $arrCategory['update_date'] = 'CURRENT_TIMESTAMP'; 568 $arrCategory['creator_id'] = $creator_id; 569 $arrCategory['rank'] = $rank; 570 $arrCategory['level'] = $level; 571 //カテゴリIDが指定されていればそれを利用する 572 if (isset($category_id)) { 573 $arrCategory['category_id'] = $category_id; 574 // シーケンスの調整 575 $seq_count = $objQuery->currVal('dtb_category_category_id'); 576 if ($seq_count < $arrCategory['category_id']) { 577 $objQuery->setVal('dtb_category_category_id', $arrCategory['category_id'] + 1); 578 } 579 } else { 580 $arrCategory['category_id'] = $objQuery->nextVal('dtb_category_category_id'); 581 } 582 $objQuery->insert('dtb_category', $arrCategory); 583 584 return $arrCategory['category_id']; 585 } 586 587 /** 588 * 指定された行番号をmicrotimeに付与してDB保存用の時間を生成する。 589 * トランザクション内のCURRENT_TIMESTAMPは全てcommit()時の時間に統一されてしまう為。 590 * 591 * @param string $line_no 行番号 592 * @return string $time DB保存用の時間文字列 593 */ 594 public function lfGetDbFormatTimeWithLine($line_no = '') 595 { 596 $time = date('Y-m-d H:i:s'); 597 // 秒以下を生成 598 if ($line_no != '') { 599 $microtime = sprintf('%06d', $line_no); 600 $time .= ".$microtime"; 601 } 602 603 return $time; 604 } 605 606 /** 607 * 指定されたキーと値の有効性のDB確認 608 * 609 * @param string $table テーブル名 610 * @param string $keyname キー名 611 * @param array $item 入力データ配列 612 * @return boolean true:有効なデータがある false:有効ではない 613 */ 614 public function lfIsDbRecord($table, $keyname, $item) 615 { 616 if (array_search($keyname, $this->arrFormKeyList) !== FALSE //入力対象である 617 && $item[$keyname] != '' // 空ではない 618 && !SC_Helper_DB_Ex::sfIsRecord($table, $keyname, (array) $item[$keyname]) //DBに存在するか 619 ) { 620 return false; 621 } 622 623 return true; 624 } 520 625 }
Note: See TracChangeset
for help on using the changeset viewer.