source: branches/version-2_11-dev/test/createEcCubeData-v25.php @ 21385

Revision 21385, 22.3 KB checked in by Seasoft, 10 years ago (diff)

#1590 (データ生成スクリプト データ削除機能を追加)

  • Property svn:eol-style set to LF
  • Property svn:keywords set to Id
  • Property svn:mime-type set to text/x-httpd-php; charset=UTF-8
Line 
1#!/usr/local/bin/php -q
2<?php
3/*
4 * EC-CUBE データ生成スクリプト
5 *
6 * Copyright(c) 2000-2011 LOCKON CO.,LTD. All Rights Reserved.
7 *
8 * http://www.lockon.co.jp/
9 *
10 * This program is free software; you can redistribute it and/or
11 * modify it under the terms of the GNU General Public License
12 * as published by the Free Software Foundation; either version 2
13 * of the License, or (at your option) any later version.
14 *
15 * This program is distributed in the hope that it will be useful,
16 * but WITHOUT ANY WARRANTY; without even the implied warranty of
17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18 * GNU General Public License for more details.
19 *
20 * You should have received a copy of the GNU General Public License
21 * along with this program; if not, write to the Free Software
22 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
23 *
24 * @auther Kentaro Ohkouchi
25 * @version $Id$
26 */
27
28// {{{ requires
29/** 適宜、htmlディレクトリへのrequire.phpを読み込めるよう パスを書き換えて下さい */
30require_once(dirname(__FILE__) . "/../html/require.php");
31
32// }}}
33// {{{ constants
34
35/** 大カテゴリの生成数 */
36define("TOP_CATEGORIES_VOLUME", 5);
37
38/** 中カテゴリの生成数 */
39define("MIDDLE_CATEGORIES_VOLUME", 2);
40
41/** 小カテゴリの生成数 */
42define("SMALL_CATEGORIES_VOLUME", 3);
43
44/** 規格1の生成数 */
45define("CLASSCATEGORY1_VOLUME", 10);
46
47/** 規格2の生成数 */
48define("CLASSCATEGORY2_VOLUME", 10);
49
50/** 商品の生成数 */
51define("PRODUCTS_VOLUME", 100);
52
53// }}}
54// {{{ Logic
55set_time_limit(0);
56while (@ob_end_flush());
57
58$objData = new CreateEcCubeData();
59$start = microtime_float();
60//$objData->objQuery->begin();
61
62// カテゴリ生成
63$objData->createCategories();
64// 規格生成
65$objData->createClassData();
66// 商品生成
67$objData->createProducts();
68// 商品と規格の関連づけ
69$objData->relateClass();
70// 商品とカテゴリの関連づけ
71$objData->relateProductsCategories();
72
73$objDb = new SC_Helper_DB_Ex();
74$objDb->sfCountCategory(NULL, true);
75
76//$objData->objQuery->rollback();
77//$objData->objQuery->commit();
78$end = microtime_float();
79print("データの生成が完了しました!\n");
80printf("所要時間 %f 秒\n", $end - $start);
81
82
83// }}}
84// {{{ classes
85
86/**
87 * EC-CUBE のデータを生成する
88 */
89class CreateEcCubeData {
90
91    /** SC_Query インスタンス */
92    var $objQuery;
93
94    /** 大カテゴリID の配列 */
95    var $arrCategory1  = array();
96
97    /** 中カテゴリID の配列 */
98    var $arrCategory2  = array();
99
100    /** 小カテゴリID の配列 */
101    var $arrCategory3  = array();
102
103    /** 規格1 */
104    var $arrClassCategory_id1 = array();
105
106    /** 規格2 */
107    var $arrClassCategory_id2 = array();
108
109    /** 削除するか */
110    var $delete = false;
111
112    /**
113     * コンストラクタ.
114     */
115    function CreateEcCubeData() {
116        $this->objQuery = new SC_Query();
117    }
118
119    /**
120     * カテゴリを生成する.
121     *
122     * 以下のように, ツリー状のカテゴリを生成する
123     *
124     *  大カテゴリ -- 中カテゴリ -- 小カテゴリ
125     *             |             |- 小カテゴリ
126     *             |             |- 小カテゴリ
127     *             |
128     *             |- 中カテゴリ -- 小カテゴリ
129     *                            |- 小カテゴリ
130     *                            |- 小カテゴリ
131     * @return void
132     */
133    function createCategories() {
134
135        print("カテゴリを生成しています...\n");
136
137        if ($this->delete) {
138            $this->objQuery->delete('dtb_category');
139        }
140
141        $count = 0;
142
143        // 全カテゴリ共通の値
144        $sqlval['creator_id'] = 2;
145        $sqlval['create_date'] = 'CURRENT_TIMESTAMP';
146        $sqlval['update_date'] = 'CURRENT_TIMESTAMP';
147        $sqlval['del_flg'] = (string) "0";
148
149        // 大カテゴリを生成
150        for ($i = 0; $i < TOP_CATEGORIES_VOLUME; $i++) {
151            $sqlval['category_name'] = sprintf("Category%d00", $i);
152            $sqlval['parent_category_id'] = (string) "0";
153            $sqlval['level'] = 1;
154            $sqlval['rank'] = $this->lfGetTotalCategoryrank() - $count;
155            $sqlval['category_id'] = $this->objQuery->nextVal("dtb_category_category_id");
156
157            $this->objQuery->insert("dtb_category", $sqlval);
158            $this->arrCategory1[] = $sqlval['category_id'];
159            $count++;
160            print(".");
161
162            // 中カテゴリを生成
163            for ($j = 0; $j < MIDDLE_CATEGORIES_VOLUME; $j++) {
164                $sqlval['category_name'] = sprintf("Category%d%d0", $i,
165                                                   $j + MIDDLE_CATEGORIES_VOLUME);
166                $sqlval['parent_category_id'] = (string) $sqlval['category_id'];
167                $sqlval['level'] = 2;
168                $sqlval['rank'] = $this->lfGetTotalCategoryrank() - $count;
169                $sqlval['category_id'] = $this->objQuery->nextVal("dtb_category_category_id");
170
171                $this->objQuery->insert("dtb_category", $sqlval);
172                $this->arrCategory2[] = $sqlval['category_id'];
173                $count++;
174                print(".");
175
176                // 小カテゴリを生成
177                for ($k = 0; $k < SMALL_CATEGORIES_VOLUME; $k++) {
178                    $sqlval['category_name'] = sprintf("Category%d%d%d",
179                                                       $i, $j,
180                                                       $k + SMALL_CATEGORIES_VOLUME);
181                    $sqlval['parent_category_id'] = (string) $sqlval['category_id'];
182                    $sqlval['level'] = 3;
183                    $sqlval['rank'] = $this->lfGetTotalCategoryrank() - $count;
184                    $sqlval['category_id'] = $this->objQuery->nextVal("dtb_category_category_id");
185
186                    $this->objQuery->insert("dtb_category", $sqlval);
187                    $this->arrCategory3[] = $sqlval['category_id'];
188                    $count++;
189                    print(".");
190                }
191            }
192        }
193        print("\n");
194    }
195
196    /**
197     * 規格を生成する.
198     *
199     * @return void
200     */
201    function createClassData() {
202        // 規格データ生成
203        print("規格データを生成しています...\n");
204
205        if ($this->delete) {
206            $this->objQuery->delete('dtb_class');
207        }
208
209        $this->createClass("Size");
210        $this->createClass("Color");
211        print("\n");
212
213        // 規格分類データ生成
214        print("規格分類データを生成しています...\n");
215
216        if ($this->delete) {
217            $this->objQuery->delete('dtb_classcategory');
218        }
219
220        // 規格1
221        for ($i = 0; $i < CLASSCATEGORY1_VOLUME; $i++) {
222            $this->createClassCategory($this->arrSize[$i],
223                                       $this->arrclass_id[0], "size");
224        }
225
226        // 規格2
227        for ($i = 0; $i < CLASSCATEGORY2_VOLUME; $i++) {
228            $this->createClassCategory($this->arrColor[$i],
229                                       $this->arrclass_id[1], "color");
230        }
231
232        print("\n");
233    }
234
235    /**
236     * 商品と規格の関連づけを行う.
237     *
238     * @return void
239     */
240    function relateClass() {
241
242        print("商品と規格の関連づけを行います...\n");
243
244        if ($this->delete) {
245            $this->objQuery->delete('dtb_class_combination');
246            $this->objQuery->delete('dtb_products_class');
247        }
248
249        foreach ($this->arrProduct_id as $product_id) {
250            $this->createProductsClass($product_id);
251        }
252        print("\n");
253    }
254
255    /**
256     * 商品を生成する.
257     *
258     * @return void
259     */
260    function createProducts() {
261
262        print("商品を生成しています...\n");
263
264        if ($this->delete) {
265            $this->objQuery->delete('dtb_products');
266        }
267
268        for ($i = 0; $i < PRODUCTS_VOLUME; $i++) {
269            $sqlval['product_id'] = $this->objQuery->nextval("dtb_products_product_id");
270            $sqlval['name'] = sprintf("商品%d", $i);
271            $sqlval['status'] = 1;
272            $sqlval['comment3'] = "コメント";
273            $sqlval['main_list_comment'] = "コメント";
274            $sqlval['main_list_image'] = "08311201_44f65122ee5fe.jpg";
275            $sqlval['main_comment'] = "コメント";
276            $sqlval['main_image'] = "08311202_44f6515906a41.jpg";
277            $sqlval['main_large_image'] = "08311203_44f651959bcb5.jpg";
278            $sqlval['sub_comment1'] = "コメント";
279            $sqlval['del_flg'] = (string) "0";
280            $sqlval['creator_id'] = 2;
281            $sqlval['create_date'] = 'CURRENT_TIMESTAMP';
282            $sqlval['update_date'] = 'CURRENT_TIMESTAMP';
283            $sqlval['deliv_date_id'] = 2;
284            $this->objQuery->insert("dtb_products", $sqlval);
285
286            $this->arrProduct_id[] = $sqlval['product_id'];
287            print("*");
288        }
289        print("\n");
290    }
291
292    /**
293     * 規格を生成する.
294     *
295     * @param $class_name string 規格名
296     * @return void
297     */
298    function createClass($class_name) {
299        // class_idを取得
300        $sqlval['class_id'] = $this->objQuery->nextVal("dtb_class_class_id");
301        $sqlval['name'] = $class_name;
302        $arrRaw['rank'] = "(SELECT x.rank FROM (SELECT CASE
303                                      WHEN max(rank) + 1 IS NULL THEN 1
304                                      ELSE max(rank) + 1
305                                    END as rank
306                               FROM dtb_class
307                              WHERE del_flg = 0) as x)";
308        $sqlval['creator_id'] = 2;
309        $sqlval['create_date'] = 'CURRENT_TIMESTAMP';
310        $sqlval['update_date'] = 'CURRENT_TIMESTAMP';
311        $sqlval['del_flg'] = (string) "0";
312        $this->objQuery->insert("dtb_class", $sqlval, $arrRaw);
313
314        $this->arrclass_id[] = $sqlval['class_id'];
315        print("+");
316    }
317
318    /**
319     * 規格分類を生成する.
320     *
321     * @param $classcategory_name string 規格名
322     * @return void
323     */
324    function createClassCategory($classcategory_name, $class_id, $class_name) {
325        $sqlval['classcategory_id'] = $this->objQuery->nextVal("dtb_classcategory_classcategory_id");
326        $sqlval['name'] = $classcategory_name;
327        $sqlval['class_id'] = $class_id;
328        $arrRaw['rank'] = sprintf("~(SELECT x.rank FROM (SELECT CASE
329                                              WHEN max(rank) + 1 IS NULL THEN 1
330                                              ELSE max(rank) + 1
331                                            END as rank
332                                       FROM dtb_classcategory
333                                      WHERE del_flg = 0
334                                        AND class_id = %d) as x)", $class_id);
335        $sqlval['creator_id'] = 2;
336        $sqlval['create_date'] = 'CURRENT_TIMESTAMP';
337        $sqlval['update_date'] = 'CURRENT_TIMESTAMP';
338        $sqlval['del_flg'] = (string) "0";
339
340        $this->objQuery->insert("dtb_classcategory", $sqlval, $arrRaw);
341
342        switch ($class_name) {
343        case "size":
344            $this->arrClassCategory_id1[] = $sqlval['classcategory_id'];
345            break;
346
347        case "color":
348            $this->arrClassCategory_id2[] = $sqlval['classcategory_id'];
349            break;
350        default:
351        }
352        print("+");
353    }
354
355    /**
356     * 商品規格を生成する.
357     *
358     * @param integer $product_id 商品ID
359     * @return void
360     */
361    function createProductsClass($product_id) {
362
363        printf("商品ID %d の商品規格を生成しています...\n", $product_id);
364
365        $sqlval['product_id'] = $product_id;
366        $sqlval['product_type_id'] = 1;
367        $sqlval['stock_unlimited'] = 1;
368        $sqlval['price01'] = 1000;
369        $sqlval['price02'] = 2000;
370        $sqlval['point_rate'] = 10;
371        $sqlval['creator_id'] = 2;
372        $sqlval['create_date'] = 'CURRENT_TIMESTAMP';
373        $sqlval['update_date'] = 'CURRENT_TIMESTAMP';
374        $sqlval['del_flg'] = 0;
375
376        $count = 0;
377        foreach ($this->arrClassCategory_id1 as $classCategory_id1) {
378            foreach ($this->arrClassCategory_id2 as $classCategory_id2) {
379                $c1['classcategory_id'] = $classCategory_id1;
380                $c1['class_combination_id'] = $this->objQuery->nextVal('dtb_class_combination_class_combination_id');
381                $c1['level'] = 1;
382                $this->objQuery->insert("dtb_class_combination", $c1);
383
384                $c2['classcategory_id'] = $classCategory_id2;
385                $c2['class_combination_id'] = $this->objQuery->nextVal('dtb_class_combination_class_combination_id');
386                $c2['parent_class_combination_id'] = $c1['class_combination_id'];
387                $c2['level'] = 2;
388                $this->objQuery->insert("dtb_class_combination", $c2);
389
390                $sqlval['product_class_id'] =
391                    $this->objQuery->nextVal('dtb_products_class_product_class_id');
392                $sqlval['product_code'] = sprintf("商品コード%d", $count);
393
394                $sqlval['class_combination_id'] = $c2['class_combination_id'];
395                $this->objQuery->insert("dtb_products_class", $sqlval);
396
397                $count++;
398                print("#");
399            }
400        }
401
402        // 規格無し用
403        $sqlval['product_class_id'] = $this->objQuery->nextVal('dtb_products_class_product_class_id');
404        $sqlval['class_combination_id'] = null;
405        $sqlval['del_flg'] = 1;
406        $this->objQuery->insert("dtb_products_class", $sqlval);
407
408        print("\n");
409    }
410
411    /**
412     * 商品とカテゴリの関連づけを行う.
413     *
414     * @return void
415     */
416    function relateProductsCategories() {
417
418        print("商品とカテゴリの関連づけを行います...\n");
419
420        if ($this->delete) {
421            $this->objQuery->delete('dtb_product_categories');
422        }
423
424        $this->createProductsCategories($this->arrCategory1, "大カテゴリ");
425        $this->createProductsCategories($this->arrCategory2, "中カテゴリ");
426        $this->createProductsCategories($this->arrCategory3, "小カテゴリ");
427    }
428
429    /**
430     * 商品カテゴリを生成する.
431     *
432     * @param array $arrCategory_id カテゴリID の配列
433     * @return void
434     */
435    function createProductsCategories($arrCategory_id, $category_name) {
436
437        $count = 0;
438        printf("%s の商品カテゴリを生成しています...\n", $category_name);
439        foreach ($arrCategory_id as $category_id) {
440            $sqlval['category_id'] = $category_id;
441
442            foreach($this->arrProduct_id as $product_id) {
443                $sqlval['product_id'] = $product_id;
444                $sqlval['rank'] = $count;
445
446                $this->objQuery->insert("dtb_product_categories", $sqlval);
447                $count++;
448                print("$");
449            }
450        }
451        print("\n");
452    }
453
454    /** 規格1 */
455    var $arrSize = array("m11(29cm)"
456                         ,"m10 1/2(28.5cm)"
457                         ,"m10(28cm)"
458                         ,"m9 1/2(27.5cm)"
459                         ,"m9(27cm)"
460                         ,"m8 1/2(26.5cm)"
461                         ,"m8(26cm)"
462                         ,"43"
463                         ,"42"
464                         ,"41"
465                         ,"43(27.0cm?27.5cm)"
466                         ,"42(26.5cm?27.0cm)"
467                         ,"37(ladies 23.5?24cm)"
468                         ,"42(約27.5cm)"
469                         ,"41(約26.5cm)"
470                         ,"W36"
471                         ,"W34"
472                         ,"W32"
473                         ,"43"
474                         ,"42"
475                         ,"41"
476                         ,"m11"
477                         ,"m10"
478                         ,"m9.5"
479                         ,"m9"
480                         ,"m8"
481                         ,"FREE"
482                         ,"XS"
483                         ,"S"
484                         ,"M"
485                         ,"L"
486                         ,"XL"
487                         ,"25-27"
488                         ,"27-29"
489                         ,"W28"
490                         ,"W29"
491                         ,"W30"
492                         ,"W31"
493                         ,"W32"
494                         ,"W33"
495                         ,"W34"
496                         ,"W35"
497                         ,"W36"
498                         ,"4"
499                         ,"6"
500                         ,"8"
501                         ,"10"
502                         ,"12"
503                         ,"10cm"
504                         ,"12cm"
505                         ,"14cm"
506                         ,"16cm"
507                         ,"18cm"
508                         ,"20cm"
509                         ,"22cm"
510                         ,"24cm"
511                         ,"26cm"
512                         ,"28cm"
513                         ,"30cm"
514                         ,"32cm"
515                         ,"34cm"
516                         ,"36cm"
517                         ,"38cm"
518                         ,"40cm"
519                         ,"10g"
520                         ,"20g"
521                         ,"30g"
522                         ,"40g"
523                         ,"50g"
524                         ,"60g"
525                         ,"70g"
526                         ,"80g"
527                         ,"90g"
528                         ,"100g"
529                         ,"110g"
530                         ,"120g"
531                         ,"130g"
532                         ,"140g"
533                         ,"150g"
534                         ,"160g"
535                         ,"170g"
536                         ,"180g"
537                         ,"190g"
538                         ,"200g"
539                         ,"8inch"
540                         ,"10inch"
541                         ,"12inch"
542                         ,"14inch"
543                         ,"16inch"
544                         ,"18inch"
545                         ,"20inch"
546                         ,"22inch"
547                         ,"24inch"
548                         ,"26inch"
549                         ,"28inch"
550                         ,"30inch"
551                         ,"32inch"
552                         ,"34inch"
553                         ,"36inch"
554                         ,"38inch"
555                    );
556
557    /** 規格2 */
558    var $arrColor = array("white"
559                         ,"whitesmoke"
560                         ,"snow"
561                         ,"ghostwhite"
562                         ,"mintcream"
563                         ,"azure"
564                         ,"ivory"
565                         ,"floralwhite"
566                         ,"aliceblue"
567                         ,"lavenderblush"
568                         ,"seashell"
569                         ,"honeydew"
570                         ,"lightyellow"
571                         ,"oldlace"
572                         ,"cornsilk"
573                         ,"linen"
574                         ,"lemonchiffon"
575                         ,"lavender"
576                         ,"beige"
577                         ,"lightgoldenrodyellow"
578                         ,"mistyrose"
579                         ,"papayawhip"
580                         ,"antiquewhite"
581                         ,"lightcyan"
582                         ,"cyan"
583                         ,"aqua"
584                         ,"darkcyan"
585                         ,"teal"
586                         ,"darkslategray"
587                         ,"turquoise"
588                         ,"paleturquoise"
589                         ,"mediumturquoise"
590                         ,"aquamarine"
591                         ,"gainsboro"
592                         ,"lightgray"
593                         ,"silver"
594                         ,"darkgray"
595                         ,"gray"
596                         ,"dimgray"
597                         ,"black"
598                         ,"powderblue"
599                         ,"lightblue"
600                         ,"lightskyblue"
601                         ,"skyblue"
602                         ,"darkturquoise"
603                         ,"deepskyblue"
604                         ,"dodgerblue"
605                         ,"royalblue"
606                         ,"cornflowerblue"
607                         ,"cadetblue"
608                         ,"lightsteelblue"
609                         ,"steelblue"
610                         ,"lightslategray"
611                         ,"slategray"
612                         ,"blue"
613                         ,"mediumblue"
614                         ,"darkblue"
615                         ,"navy"
616                         ,"midnightblue"
617                         ,"lightsalmon"
618                         ,"darksalmon"
619                         ,"salmon"
620                         ,"tomato"
621                         ,"lightcoral"
622                         ,"coral"
623                         ,"crimson"
624                         ,"red"
625                         ,"mediumorchid"
626                         ,"mediumpurple"
627                         ,"mediumslateblue"
628                         ,"slateblue"
629                         ,"blueviolet"
630                         ,"darkviolet"
631                         ,"darkorchid"
632                         ,"darkslateblue"
633                         ,"darkorchid"
634                         ,"thistle"
635                         ,"plum"
636                         ,"violet"
637                         ,"magenta"
638                         ,"fuchsia"
639                         ,"darkmagenta"
640                         ,"purple"
641                         ,"palegreen"
642                         ,"lightgreen"
643                         ,"lime"
644                         ,"limegreen"
645                         ,"forestgreen"
646                         ,"green"
647                         ,"darkgreen"
648                         ,"greenyellow"
649                         ,"chartreuse"
650                         ,"lawngreen"
651                         ,"yellowgreen"
652                         ,"olivedrab"
653                         ,"darkolivegreen"
654                         ,"mediumaquamarine"
655                         ,"mediumspringgreen"
656                         ,"springgreen"
657                         ,"darkseagreen"
658                     );
659
660    /**
661    * 総カテゴリ数を計算し、dtb_categoryに代入するrankに使う
662    */
663    function lfGetTotalCategoryrank(){
664        $TotalCategoryrank = (TOP_CATEGORIES_VOLUME * MIDDLE_CATEGORIES_VOLUME * SMALL_CATEGORIES_VOLUME) + (MIDDLE_CATEGORIES_VOLUME * TOP_CATEGORIES_VOLUME) + TOP_CATEGORIES_VOLUME;
665    return $TotalCategoryrank;
666    }
667
668}
669
670/** PHP4対応のための microtime 関数 */
671function microtime_float() {
672    list($usec, $sec) = explode(" ", microtime());
673    return ((float)$usec + (float)$sec);
674}
675
676?>
Note: See TracBrowser for help on using the repository browser.