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

Revision 22567, 18.9 KB checked in by shutta, 11 years ago (diff)

#2043 (typo修正・ソース整形・ソースコメントの改善 for 2.12.4)
Zend Framework PHP 標準コーディング規約のコーディングスタイルへ準拠。
classおよびfunctionの開始波括弧「{」のスタイルを修正。

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