source: branches/version-2_12-dev/test/createEcCubeData-v25.php @ 21828

Revision 21828, 18.4 KB checked in by Seasoft, 9 years ago (diff)

#1803 (データ生成スクリプト コマンドライン引数で削除有効を指定できるように)

  • 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(true);
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(true);
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        // コマンドライン引数 --delete
119        $arrOption = getopt('', array('delete'));
120        if (isset($arrOption['delete'])) {
121            $this->delete = true;
122        }
123    }
124
125    /**
126     * カテゴリを生成する.
127     *
128     * 以下のように, ツリー状のカテゴリを生成する
129     *
130     *  大カテゴリ -- 中カテゴリ -- 小カテゴリ
131     *             |             |- 小カテゴリ
132     *             |             |- 小カテゴリ
133     *             |
134     *             |- 中カテゴリ -- 小カテゴリ
135     *                            |- 小カテゴリ
136     *                            |- 小カテゴリ
137     * @return void
138     */
139    function createCategories() {
140
141        print("カテゴリを生成しています...\n");
142
143        if ($this->delete) {
144            $this->objQuery->delete('dtb_category');
145        }
146
147        $count = 0;
148
149        // 全カテゴリ共通の値
150        $sqlval['creator_id'] = 2;
151        $sqlval['create_date'] = 'CURRENT_TIMESTAMP';
152        $sqlval['update_date'] = 'CURRENT_TIMESTAMP';
153        $sqlval['del_flg'] = (string) '0';
154
155        // 大カテゴリを生成
156        for ($i = 0; $i < TOP_CATEGORIES_VOLUME; $i++) {
157            $sqlval['category_name'] = sprintf("Category%d00", $i);
158            $sqlval['parent_category_id'] = (string) '0';
159            $sqlval['level'] = 1;
160            $sqlval['rank'] = $this->lfGetTotalCategoryrank() - $count;
161            $sqlval['category_id'] = $this->objQuery->nextVal('dtb_category_category_id');
162
163            $this->objQuery->insert('dtb_category', $sqlval);
164            $this->arrCategory1[] = $sqlval['category_id'];
165            $count++;
166            print(".");
167
168            // 中カテゴリを生成
169            for ($j = 0; $j < MIDDLE_CATEGORIES_VOLUME; $j++) {
170                $sqlval['category_name'] = sprintf("Category%d%d0", $i,
171                                                   $j + MIDDLE_CATEGORIES_VOLUME);
172                $sqlval['parent_category_id'] = (string) $sqlval['category_id'];
173                $sqlval['level'] = 2;
174                $sqlval['rank'] = $this->lfGetTotalCategoryrank() - $count;
175                $sqlval['category_id'] = $this->objQuery->nextVal('dtb_category_category_id');
176
177                $this->objQuery->insert('dtb_category', $sqlval);
178                $this->arrCategory2[] = $sqlval['category_id'];
179                $count++;
180                print(".");
181
182                // 小カテゴリを生成
183                for ($k = 0; $k < SMALL_CATEGORIES_VOLUME; $k++) {
184                    $sqlval['category_name'] = sprintf("Category%d%d%d",
185                                                       $i, $j,
186                                                       $k + SMALL_CATEGORIES_VOLUME);
187                    $sqlval['parent_category_id'] = (string) $sqlval['category_id'];
188                    $sqlval['level'] = 3;
189                    $sqlval['rank'] = $this->lfGetTotalCategoryrank() - $count;
190                    $sqlval['category_id'] = $this->objQuery->nextVal('dtb_category_category_id');
191
192                    $this->objQuery->insert('dtb_category', $sqlval);
193                    $this->arrCategory3[] = $sqlval['category_id'];
194                    $count++;
195                    print(".");
196                }
197            }
198        }
199        print("\n");
200    }
201
202    /**
203     * 規格を生成する.
204     *
205     * @return void
206     */
207    function createClassData() {
208        // 規格データ生成
209        print("規格データを生成しています...\n");
210
211        if ($this->delete) {
212            $this->objQuery->delete('dtb_class');
213        }
214
215        $this->createClass('Size');
216        $this->createClass('Color');
217        print("\n");
218
219        // 規格分類データ生成
220        print("規格分類データを生成しています...\n");
221
222        if ($this->delete) {
223            $this->objQuery->delete('dtb_classcategory');
224        }
225
226        // 規格1
227        for ($i = 0; $i < CLASSCATEGORY1_VOLUME; $i++) {
228            $this->createClassCategory($this->arrSize[$i],
229                                       $this->arrclass_id[0], 'size');
230        }
231
232        // 規格2
233        for ($i = 0; $i < CLASSCATEGORY2_VOLUME; $i++) {
234            $this->createClassCategory($this->arrColor[$i],
235                                       $this->arrclass_id[1], 'color');
236        }
237
238        print("\n");
239    }
240
241    /**
242     * 商品と規格の関連づけを行う.
243     *
244     * @return void
245     */
246    function relateClass() {
247
248        print("商品と規格の関連づけを行います...\n");
249
250        if ($this->delete) {
251            $this->objQuery->delete('dtb_products_class');
252        }
253
254        foreach ($this->arrProduct_id as $product_id) {
255            $this->createProductsClass($product_id);
256        }
257        print("\n");
258    }
259
260    /**
261     * 商品を生成する.
262     *
263     * @return void
264     */
265    function createProducts() {
266
267        print("商品を生成しています...\n");
268
269        if ($this->delete) {
270            $this->objQuery->delete('dtb_products');
271        }
272
273        for ($i = 0; $i < PRODUCTS_VOLUME; $i++) {
274            $sqlval['product_id'] = $this->objQuery->nextval('dtb_products_product_id');
275            $sqlval['name'] = sprintf("商品%d", $i);
276            $sqlval['status'] = 1;
277            $sqlval['comment3'] = "コメント";
278            $sqlval['main_list_comment'] = "コメント";
279            $sqlval['main_list_image'] = "nabe130.jpg";
280            $sqlval['main_comment'] = "コメント";
281            $sqlval['main_image'] = "nabe260.jpg";
282            $sqlval['main_large_image'] = "nabe500.jpg";
283            $sqlval['sub_comment1'] = "コメント";
284            $sqlval['del_flg'] = (string) '0';
285            $sqlval['creator_id'] = 2;
286            $sqlval['create_date'] = 'CURRENT_TIMESTAMP';
287            $sqlval['update_date'] = 'CURRENT_TIMESTAMP';
288            $sqlval['deliv_date_id'] = 2;
289            $this->objQuery->insert('dtb_products', $sqlval);
290
291            $this->arrProduct_id[] = $sqlval['product_id'];
292            print("*");
293        }
294        print("\n");
295    }
296
297    /**
298     * 規格を生成する.
299     *
300     * @param $class_name string 規格名
301     * @return void
302     */
303    function createClass($class_name) {
304        // class_idを取得
305        $sqlval['class_id'] = $this->objQuery->nextVal('dtb_class_class_id');
306        $sqlval['name'] = $class_name;
307        $arrRaw['rank'] = "(SELECT x.rank FROM (SELECT CASE
308                                      WHEN max(rank) + 1 IS NULL THEN 1
309                                      ELSE max(rank) + 1
310                                    END as rank
311                               FROM dtb_class
312                              WHERE del_flg = 0) as x)";
313        $sqlval['creator_id'] = 2;
314        $sqlval['create_date'] = 'CURRENT_TIMESTAMP';
315        $sqlval['update_date'] = 'CURRENT_TIMESTAMP';
316        $sqlval['del_flg'] = (string) '0';
317        $this->objQuery->insert('dtb_class', $sqlval, $arrRaw);
318
319        $this->arrclass_id[] = $sqlval['class_id'];
320        print("+");
321    }
322
323    /**
324     * 規格分類を生成する.
325     *
326     * @param $classcategory_name string 規格名
327     * @return void
328     */
329    function createClassCategory($classcategory_name, $class_id, $class_name) {
330        $sqlval['classcategory_id'] = $this->objQuery->nextVal('dtb_classcategory_classcategory_id');
331        $sqlval['name'] = $classcategory_name;
332        $sqlval['class_id'] = $class_id;
333        $arrRaw['rank'] = sprintf("(SELECT x.rank FROM (SELECT CASE
334                                              WHEN max(rank) + 1 IS NULL THEN 1
335                                              ELSE max(rank) + 1
336                                            END as rank
337                                       FROM dtb_classcategory
338                                      WHERE del_flg = 0
339                                        AND class_id = %d) as x)", $class_id);
340        $sqlval['creator_id'] = 2;
341        $sqlval['create_date'] = 'CURRENT_TIMESTAMP';
342        $sqlval['update_date'] = 'CURRENT_TIMESTAMP';
343        $sqlval['del_flg'] = (string) '0';
344
345        $this->objQuery->insert('dtb_classcategory', $sqlval, $arrRaw);
346
347        switch ($class_name) {
348        case 'size':
349            $this->arrClassCategory_id1[] = $sqlval['classcategory_id'];
350            break;
351
352        case 'color':
353            $this->arrClassCategory_id2[] = $sqlval['classcategory_id'];
354            break;
355        default:
356        }
357        print("+");
358    }
359
360    /**
361     * 商品規格を生成する.
362     *
363     * @param integer $product_id 商品ID
364     * @return void
365     */
366    function createProductsClass($product_id) {
367
368        printf("商品ID %d の商品規格を生成しています...\n", $product_id);
369
370        $sqlval['product_id'] = $product_id;
371        $sqlval['product_type_id'] = 1;
372        $sqlval['stock_unlimited'] = 1;
373        $sqlval['price01'] = 1000;
374        $sqlval['price02'] = 2000;
375        $sqlval['point_rate'] = 10;
376        $sqlval['creator_id'] = 2;
377        $sqlval['create_date'] = 'CURRENT_TIMESTAMP';
378        $sqlval['update_date'] = 'CURRENT_TIMESTAMP';
379        $sqlval['del_flg'] = 0;
380
381        foreach ($this->arrClassCategory_id1 as $classcategory_id1) {
382            foreach ($this->arrClassCategory_id2 as $classcategory_id2) {
383                $sqlval['product_class_id'] = $this->objQuery->nextVal('dtb_products_class_product_class_id');
384                $sqlval['classcategory_id1'] = $classcategory_id1;
385                $sqlval['classcategory_id2'] = $classcategory_id2;
386                $sqlval['product_code'] = 'CODE_' . $product_id . '_' . $classcategory_id1 . '_' . $classcategory_id2;
387                $this->objQuery->insert('dtb_products_class', $sqlval);
388
389                print("#");
390            }
391        }
392
393        // 規格無し用
394        $sqlval['product_class_id'] = $this->objQuery->nextVal('dtb_products_class_product_class_id');
395        $sqlval['classcategory_id1'] = 0;
396        $sqlval['classcategory_id2'] = 0;
397        $sqlval['product_code'] = 'CODE_' . $product_id;
398        $sqlval['del_flg'] = 1;
399        $this->objQuery->insert('dtb_products_class', $sqlval);
400
401        print("\n");
402    }
403
404    /**
405     * 商品とカテゴリの関連づけを行う.
406     *
407     * @return void
408     */
409    function relateProductsCategories() {
410
411        print("商品とカテゴリの関連づけを行います...\n");
412
413        if ($this->delete) {
414            $this->objQuery->delete('dtb_product_categories');
415        }
416
417        $this->createProductsCategories($this->arrCategory1, "大カテゴリ");
418        $this->createProductsCategories($this->arrCategory2, "中カテゴリ");
419        $this->createProductsCategories($this->arrCategory3, "小カテゴリ");
420    }
421
422    /**
423     * 商品カテゴリを生成する.
424     *
425     * @param array $arrCategory_id カテゴリID の配列
426     * @return void
427     */
428    function createProductsCategories($arrCategory_id, $category_name) {
429
430        $count = 0;
431        printf("%s の商品カテゴリを生成しています...\n", $category_name);
432        foreach ($arrCategory_id as $category_id) {
433            $sqlval['category_id'] = $category_id;
434
435            foreach($this->arrProduct_id as $product_id) {
436                $sqlval['product_id'] = $product_id;
437                $sqlval['rank'] = $count;
438
439                $this->objQuery->insert('dtb_product_categories', $sqlval);
440                $count++;
441                print("$");
442            }
443        }
444        print("\n");
445    }
446
447    /** 規格1 */
448    var $arrSize = array(
449        "m11(29cm)",
450        "m10 1/2(28.5cm)",
451        "m10(28cm)",
452        "m9 1/2(27.5cm)",
453        "m9(27cm)",
454        "m8 1/2(26.5cm)",
455        "m8(26cm)",
456        '43',
457        '42',
458        '41',
459        "43(27.0cm~27.5cm)",
460        "42(26.5cm~27.0cm)",
461        "37(ladies 23.5~24cm)",
462        "42(約27.5cm)",
463        "41(約26.5cm)",
464        'W36',
465        'W34',
466        'W32',
467        '43',
468        '42',
469        '41',
470        'm11',
471        'm10',
472        "m9.5",
473        'm9',
474        'm8',
475        'FREE',
476        'XS',
477        'S',
478        'M',
479        'L',
480        'XL',
481        "25-27",
482        "27-29",
483        'W28',
484        'W29',
485        'W30',
486        'W31',
487        'W32',
488        'W33',
489        'W34',
490        'W35',
491        'W36',
492        '4',
493        '6',
494        '8',
495        '10',
496        '12',
497        '10cm',
498        '12cm',
499        '14cm',
500        '16cm',
501        '18cm',
502        '20cm',
503        '22cm',
504        '24cm',
505        '26cm',
506        '28cm',
507        '30cm',
508        '32cm',
509        '34cm',
510        '36cm',
511        '38cm',
512        '40cm',
513        '10g',
514        '20g',
515        '30g',
516        '40g',
517        '50g',
518        '60g',
519        '70g',
520        '80g',
521        '90g',
522        '100g',
523        '110g',
524        '120g',
525        '130g',
526        '140g',
527        '150g',
528        '160g',
529        '170g',
530        '180g',
531        '190g',
532        '200g',
533        '8inch',
534        '10inch',
535        '12inch',
536        '14inch',
537        '16inch',
538        '18inch',
539        '20inch',
540        '22inch',
541        '24inch',
542        '26inch',
543        '28inch',
544        '30inch',
545        '32inch',
546        '34inch',
547        '36inch',
548        '38inch',
549    );
550
551    /** 規格2 */
552    var $arrColor = array(
553        'white',
554        'whitesmoke',
555        'snow',
556        'ghostwhite',
557        'mintcream',
558        'azure',
559        'ivory',
560        'floralwhite',
561        'aliceblue',
562        'lavenderblush',
563        'seashell',
564        'honeydew',
565        'lightyellow',
566        'oldlace',
567        'cornsilk',
568        'linen',
569        'lemonchiffon',
570        'lavender',
571        'beige',
572        'lightgoldenrodyellow',
573        'mistyrose',
574        'papayawhip',
575        'antiquewhite',
576        'lightcyan',
577        'cyan',
578        'aqua',
579        'darkcyan',
580        'teal',
581        'darkslategray',
582        'turquoise',
583        'paleturquoise',
584        'mediumturquoise',
585        'aquamarine',
586        'gainsboro',
587        'lightgray',
588        'silver',
589        'darkgray',
590        'gray',
591        'dimgray',
592        'black',
593        'powderblue',
594        'lightblue',
595        'lightskyblue',
596        'skyblue',
597        'darkturquoise',
598        'deepskyblue',
599        'dodgerblue',
600        'royalblue',
601        'cornflowerblue',
602        'cadetblue',
603        'lightsteelblue',
604        'steelblue',
605        'lightslategray',
606        'slategray',
607        'blue',
608        'mediumblue',
609        'darkblue',
610        'navy',
611        'midnightblue',
612        'lightsalmon',
613        'darksalmon',
614        'salmon',
615        'tomato',
616        'lightcoral',
617        'coral',
618        'crimson',
619        'red',
620        'mediumorchid',
621        'mediumpurple',
622        'mediumslateblue',
623        'slateblue',
624        'blueviolet',
625        'darkviolet',
626        'darkorchid',
627        'darkslateblue',
628        'darkorchid',
629        'thistle',
630        'plum',
631        'violet',
632        'magenta',
633        'fuchsia',
634        'darkmagenta',
635        'purple',
636        'palegreen',
637        'lightgreen',
638        'lime',
639        'limegreen',
640        'forestgreen',
641        'green',
642        'darkgreen',
643        'greenyellow',
644        'chartreuse',
645        'lawngreen',
646        'yellowgreen',
647        'olivedrab',
648        'darkolivegreen',
649        'mediumaquamarine',
650        'mediumspringgreen',
651        'springgreen',
652        'darkseagreen',
653    );
654
655    /**
656    * 総カテゴリ数を計算し、dtb_categoryに代入するrankに使う
657    */
658    function lfGetTotalCategoryrank(){
659        $TotalCategoryrank = (TOP_CATEGORIES_VOLUME * MIDDLE_CATEGORIES_VOLUME * SMALL_CATEGORIES_VOLUME) + (MIDDLE_CATEGORIES_VOLUME * TOP_CATEGORIES_VOLUME) + TOP_CATEGORIES_VOLUME;
660    return $TotalCategoryrank;
661    }
662
663}
Note: See TracBrowser for help on using the repository browser.