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

Revision 21660, 18.2 KB checked in by Seasoft, 12 years ago (diff)

#1613 (typo修正・ソース整形・ソースコメントの改善)
#1605 (PHP4向けコードの除去、PHP5向けのコード最適化)

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