source: branches/version-2_5-dev/test/createEcCubeData-v25.php @ 19693

Revision 19693, 21.4 KB checked in by AMUAMU, 13 years ago (diff)

EC-CUBE2.5用のテストデータ作成スクリプト r19692 時点までに対応の更新版。

SC_Queryや各種定義の変動が大きい為、requireで本体側のSC_Queryを使うように修正。それにあわせてtestディレクトリに設置。

2.5で変更されたテーブル定義によりエラーが起きていた問題を修正。
PHP4対応。
本体側のMDB2を使うように修正。
MySQLでの動作問題対応( r19690 の修正と連動 )
sfCategory_Countを実行していなかった問題を修正。

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