Changeset 23439
- Timestamp:
- 2014/05/22 10:58:08 (12 years ago)
- Location:
- branches/version-2_13-dev/data/class
- Files:
-
- 3 edited
-
helper/SC_Helper_Category.php (modified) (3 diffs)
-
pages/admin/products/LC_Page_Admin_Products_UploadCSVCategory.php (modified) (16 diffs)
-
util/SC_Utils.php (modified) (5 diffs)
Legend:
- Unmodified
- Added
- Removed
-
branches/version-2_13-dev/data/class/helper/SC_Helper_Category.php
r23438 r23439 178 178 * 179 179 * @param array $data 180 * @return void180 * @return int|bool 181 181 */ 182 182 public function save($data) … … 185 185 186 186 $category_id = $data['category_id']; 187 $query = array('update_date' => 'CURRENT_TIMESTAMP'); 187 // ミリ秒付きの時間文字列を取得. CSVへの対応. 188 // トランザクション内のCURRENT_TIMESTAMPは全てcommit()時の時間に統一されてしまう為. 189 $query = array('update_date' => SC_Utils_Ex::getFormattedDateWithMicroSecond()); 188 190 $objQuery->begin(); 189 191 … … 215 217 $query['category_name'] = $data['category_name']; 216 218 $query['parent_category_id'] = $data['parent_category_id']; 217 $query['create_date'] = 'CURRENT_TIMESTAMP';219 $query['create_date'] = $query['update_date']; 218 220 $query['creator_id'] = $_SESSION['member_id']; 219 221 $query['rank'] = $rank; 220 222 $query['level'] = $level; 221 223 222 $ objQuery->insert('dtb_category', $query);224 $result = $objQuery->insert('dtb_category', $query); 223 225 } else { 224 226 // 既存編集 227 $query['category_id'] = $category_id; 225 228 $query['parent_category_id'] = $data['parent_category_id']; 226 229 $query['category_name'] = $data['category_name']; 227 230 $where = 'category_id = ?'; 228 $ objQuery->update('dtb_category', $query, $where, array($category_id));231 $result = $objQuery->update('dtb_category', $query, $where, array($category_id)); 229 232 } 230 233 231 234 $objQuery->commit(); 235 return ($result) ? $query['category_id'] : FALSE; 232 236 } 233 237 -
branches/version-2_13-dev/data/class/pages/admin/products/LC_Page_Admin_Products_UploadCSVCategory.php
r23366 r23439 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; 57 74 58 75 /** … … 135 152 * 136 153 * @param integer $line_count 行数 137 * @param st irng $message メッセージ154 * @param string $message メッセージ 138 155 * @return void 139 156 */ … … 147 164 * 148 165 * @param integer $line_count 行数 149 * @param st irng $message メッセージ166 * @param string $message メッセージ 150 167 * @return void 151 168 */ … … 234 251 } 235 252 236 $category_id = $this->lfRegist Category($objQuery,$line_count, $objFormParam);253 $category_id = $this->lfRegisterCategory($line_count, $objFormParam); 237 254 $this->addRowResult($line_count, 'カテゴリID:'.$category_id . ' / カテゴリ名:' . $objFormParam->getValue('category_name')); 238 255 } … … 261 278 * ファイル情報の初期化を行う. 262 279 * 263 * @return void 264 */ 265 public function lfInitFile(&$objUpFile) 280 * @param SC_UploadFile $objUpFile 281 * @return void 282 */ 283 public function lfInitFile(SC_UploadFile &$objUpFile) 266 284 { 267 285 $objUpFile->addFile('CSVファイル', 'csv_file', array('csv'), CSV_SIZE, true, 0, 0, false); … … 271 289 * 入力情報の初期化を行う. 272 290 * 273 * @param array CSV構造設定配列 274 * @return void 275 */ 276 public function lfInitParam(&$objFormParam, &$arrCSVFrame) 291 * @param SC_FormParam $objFormParam 292 * @param array $arrCSVFrame CSV構造設定配列 293 * @return void 294 */ 295 public function lfInitParam(SC_FormParam &$objFormParam, &$arrCSVFrame) 277 296 { 278 297 // 固有の初期値調整 … … 318 337 * 入力チェックを行う. 319 338 * 320 * @return void 321 */ 322 public function lfCheckError(&$objFormParam) 339 * @param SC_FormParam $objFormParam 340 * @return array 341 */ 342 public function lfCheckError(SC_FormParam &$objFormParam) 323 343 { 324 344 // 入力データを渡す。 … … 354 374 * FIXME: 登録の実処理自体は、LC_Page_Admin_Products_Categoryと共通化して欲しい。 355 375 * 356 * @param SC_Query $objQuery SC_Queryインスタンス357 * @param string|integer $line 処理中の行数376 * @param string|integer $line 処理中の行数 377 * @param SC_FormParam $objFormParam 358 378 * @return integer カテゴリID 359 379 */ 360 public function lfRegist Category($objQuery, $line,&$objFormParam)380 public function lfRegisterCategory($line, SC_FormParam &$objFormParam) 361 381 { 362 382 // 登録データ対象取得 363 383 $arrList = $objFormParam->getDbArray(); 364 // 登録時間を生成(DBのCURRENT_TIMESTAMPだとcommitした際、全て同一の時間になってしまう)365 $arrList['update_date'] = $this->lfGetDbFormatTimeWithLine($line);366 384 367 385 // 登録情報を生成する。 … … 372 390 $sqlval = $this->lfSetCategoryDefaultData($sqlval); 373 391 374 if ($sqlval['category_id'] != '') { 375 // 同じidが存在すればupdate存在しなければinsert 376 $where = 'category_id = ?'; 377 $category_exists = $objQuery->exists('dtb_category', $where, array($sqlval['category_id'])); 378 if ($category_exists) { 379 // UPDATEの実行 380 $where = 'category_id = ?'; 381 $objQuery->update('dtb_category', $sqlval, $where, array($sqlval['category_id'])); 382 } else { 383 $sqlval['create_date'] = $arrList['update_date']; 384 // 新規登録 385 $category_id = $this->registerCategory($sqlval['parent_category_id'], 386 $sqlval['category_name'], 387 $_SESSION['member_id'], 388 $sqlval['category_id']); 389 } 390 $category_id = $sqlval['category_id']; 391 // TODO: 削除時処理 392 } else { 393 // 新規登録 394 $category_id = $this->registerCategory($sqlval['parent_category_id'], 395 $sqlval['category_name'], 396 $_SESSION['member_id']); 397 } 392 $objCategory = new SC_Helper_Category_Ex(); 393 $category_id = $objCategory->save($sqlval); 398 394 399 395 return $category_id; … … 428 424 * 429 425 * @param array $sqlval 商品登録情報配列 430 * @return $sqlval 登録情報配列426 * @return array $sqlval 登録情報配列 431 427 */ 432 428 public function lfSetCategoryDefaultData(&$sqlval) … … 448 444 * このフォーム特有の複雑な入力チェックを行う. 449 445 * 450 * @param array 確認対象データ451 * @param array エラー配列446 * @param array $item 確認対象データ 447 * @param array $arrErr エラー配列 452 448 * @return array エラー配列 453 449 */ 454 450 public function lfCheckErrorDetail($item, $arrErr) 455 451 { 456 $objQuery =& SC_Query_Ex::getSingletonInstance(); 452 $objCategory = new SC_Helper_Category_Ex(); 453 // スタティック変数を初期化 454 $objCategory->getTree(true); 457 455 /* 458 456 // カテゴリIDの存在チェック … … 465 463 && $item['parent_category_id'] != '' 466 464 && $item['parent_category_id'] != '0' 467 && ! SC_Helper_DB_Ex::sfIsRecord('dtb_category', 'category_id', array($item['parent_category_id']))465 && !$objCategory->get($item['parent_category_id']) 468 466 ) { 469 467 $arrErr['parent_category_id'] = '※ 指定の親カテゴリID(' . $item['parent_category_id'] . ')は、存在しません。'; … … 481 479 && $item['category_name'] != '' 482 480 ) { 483 $parent_category_id = $item['parent_category_id']; 484 if ($parent_category_id == '') { 485 $parent_category_id = (string) '0'; 486 } 487 $where = 'parent_category_id = ? AND category_id <> ? AND category_name = ?'; 488 $exists = $objQuery->exists('dtb_category', 489 $where, 490 array($parent_category_id, 491 $item['category_id'], 492 $item['category_name'])); 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 } 493 488 if ($exists) { 494 489 $arrErr['category_name'] = '※ 既に同名のカテゴリが存在します。'; … … 496 491 } 497 492 // 登録数上限チェック 498 $where = 'del_flg = 0'; 499 $count = $objQuery->count('dtb_category', $where); 493 $count = count($objCategory->getList()); 500 494 if ($count >= CATEGORY_MAX) { 501 495 $item['category_name'] = '※ カテゴリの登録最大数を超えました。'; … … 504 498 if (array_search('parent_category_id', $this->arrFormKeyList) !== FALSE 505 499 and $item['parent_category_id'] != '') { 506 $ level = $objQuery->get('level', 'dtb_category', 'category_id = ?', array($parent_category_id));507 if ($ level>= LEVEL_MAX) {500 $arrParent = $objCategory->get($item['parent_category_id']); 501 if ($arrParent['level'] >= LEVEL_MAX) { 508 502 $arrErr['parent_category_id'] = '※ ' . LEVEL_MAX . '階層以上の登録はできません。'; 509 503 } … … 512 506 return $arrErr; 513 507 } 514 515 /**516 * カテゴリを登録する517 *518 * @param integer 親カテゴリID519 * @param string カテゴリ名520 * @param integer 作成者のID521 * @param integer 指定カテゴリID522 * @return integer カテゴリID523 */524 public function registerCategory($parent_category_id, $category_name, $creator_id, $category_id = null)525 {526 $objQuery =& SC_Query_Ex::getSingletonInstance();527 528 $rank = null;529 if ($parent_category_id == 0) {530 // ROOT階層で最大のランクを取得する。531 $where = 'parent_category_id = ?';532 $rank = $objQuery->max('rank', 'dtb_category', $where, array($parent_category_id)) + 1;533 } else {534 // 親のランクを自分のランクとする。535 $where = 'category_id = ?';536 $rank = $objQuery->get('rank', 'dtb_category', $where, array($parent_category_id));537 // 追加レコードのランク以上のレコードを一つあげる。538 $where = 'rank >= ?';539 $arrRawSql = array(540 'rank' => '(rank + 1)',541 );542 $objQuery->update('dtb_category', array(), $where, array($rank), $arrRawSql);543 }544 545 $where = 'category_id = ?';546 // 自分のレベルを取得する(親のレベル + 1)547 $level = $objQuery->get('level', 'dtb_category', $where, array($parent_category_id)) + 1;548 549 $arrCategory = array();550 $arrCategory['category_name'] = $category_name;551 $arrCategory['parent_category_id'] = $parent_category_id;552 $arrCategory['create_date'] = 'CURRENT_TIMESTAMP';553 $arrCategory['update_date'] = 'CURRENT_TIMESTAMP';554 $arrCategory['creator_id'] = $creator_id;555 $arrCategory['rank'] = $rank;556 $arrCategory['level'] = $level;557 //カテゴリIDが指定されていればそれを利用する558 if (isset($category_id)) {559 $arrCategory['category_id'] = $category_id;560 // シーケンスの調整561 $seq_count = $objQuery->currVal('dtb_category_category_id');562 if ($seq_count < $arrCategory['category_id']) {563 $objQuery->setVal('dtb_category_category_id', $arrCategory['category_id'] + 1);564 }565 } else {566 $arrCategory['category_id'] = $objQuery->nextVal('dtb_category_category_id');567 }568 $objQuery->insert('dtb_category', $arrCategory);569 570 return $arrCategory['category_id'];571 }572 573 /**574 * 指定された行番号をmicrotimeに付与してDB保存用の時間を生成する。575 * トランザクション内のCURRENT_TIMESTAMPは全てcommit()時の時間に統一されてしまう為。576 *577 * @param string $line_no 行番号578 * @return string $time DB保存用の時間文字列579 */580 public function lfGetDbFormatTimeWithLine($line_no = '')581 {582 $time = date('Y-m-d H:i:s');583 // 秒以下を生成584 if ($line_no != '') {585 $microtime = sprintf('%06d', $line_no);586 $time .= ".$microtime";587 }588 589 return $time;590 }591 592 /**593 * 指定されたキーと値の有効性のDB確認594 *595 * @param string $table テーブル名596 * @param string $keyname キー名597 * @param array $item 入力データ配列598 * @return boolean true:有効なデータがある false:有効ではない599 */600 public function lfIsDbRecord($table, $keyname, $item)601 {602 if (array_search($keyname, $this->arrFormKeyList) !== FALSE //入力対象である603 && $item[$keyname] != '' // 空ではない604 && !SC_Helper_DB_Ex::sfIsRecord($table, $keyname, (array) $item[$keyname]) //DBに存在するか605 ) {606 return false;607 }608 609 return true;610 }611 508 } -
branches/version-2_13-dev/data/class/util/SC_Utils.php
r23436 r23439 963 963 * @return string 変換後のテキストファイルのパス 964 964 */ 965 public function sfEncodeFile($filepath, $enc_type, $out_dir)965 public static function sfEncodeFile($filepath, $enc_type, $out_dir) 966 966 { 967 967 $ifp = fopen($filepath, 'r'); … … 1349 1349 * @return array 1350 1350 */ 1351 public function sfArrayIntersectKeys($arrSrc, $arrKey)1351 public static function sfArrayIntersectKeys($arrSrc, $arrKey) 1352 1352 { 1353 1353 $arrRet = array(); … … 1852 1852 } 1853 1853 1854 /**1854 /** 1855 1855 * コンパイルファイルを削除します. 1856 1856 * @return void … … 1977 1977 * @return string 1978 1978 */ 1979 public function getUnitDataSize($data)1979 public static function getUnitDataSize($data) 1980 1980 { 1981 1981 if ($data < 1000) { … … 2106 2106 return file_exists(realpath(str_replace('..','',$base_path . $path_diff))) ? true : false; 2107 2107 } 2108 2109 /** 2110 * マイクロ秒付きの時間文字列を取得する. 2111 * 2112 * @return bool|string 2113 */ 2114 public static function getFormattedDateWithMicroSecond() 2115 { 2116 $micro = explode(" ", microtime()); 2117 $micro_string = explode('.',$micro[0]); 2118 return date('Y-m-d H:i:s') . "." . substr($micro_string[1],0,5); 2119 } 2108 2120 }
Note: See TracChangeset
for help on using the changeset viewer.
