source: branches/version-2_13-dev/test/createEcCubeData-v25.php @ 23546

Revision 23546, 18.9 KB checked in by shutta, 10 years ago (diff)

#2580 Copyrightを更新
Copyrightを2014に更新

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