source: branches/version-2_11-dev/test/createEcCubeData-v25.php @ 21372

Revision 21372, 21.6 KB checked in by Seasoft, 12 years ago (diff)

#1576 (データ生成スクリプトが動作しない)

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