source: branches/version-2/data/class/helper/SC_Helper_CSV.php @ 18007

Revision 18007, 13.3 KB checked in by kajiwara, 15 years ago (diff)

2.4.0 正式版のコミット。コミット内容の詳細はこちら(http://svn.ec-cube.net/open_trac/query?status=closed&milestone=EC-CUBE2.4.0

  • 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<?php
2  /*
3   * Copyright(c) 2000-2007 LOCKON CO.,LTD. All Rights Reserved.
4   *
5   * http://www.lockon.co.jp/
6   */
7
8  /**
9   * CSV 関連 のヘルパークラス.
10   *
11   * @package Page
12   * @author LOCKON CO.,LTD.
13   * @version $Id$
14   */
15class SC_Helper_CSV {
16
17    // {{{ properties
18
19    /** 項目英名 */
20    var $arrSubnavi;
21
22    /** 項目名 */
23    var $arrSubnaviName;
24
25    /** レビュー管理項目 */
26    var $arrREVIEW_CVSCOL;
27
28    /** レビュータイトル */
29    var $arrREVIEW_CVSTITLE;
30
31    /** トラックバック項目 */
32    var $arrTRACKBACK_CVSCOL;
33
34    /** トラックバックタイトル */
35    var $arrTRACKBACK_CVSTITLE;
36
37
38    // }}}
39    // {{{ constructor
40
41    /**
42     * デフォルトコンストラクタ.
43     */
44    function SC_Helper_CSV() {
45        $this->init();
46
47        $masterData = new SC_DB_MasterData_Ex();
48        $this->arrPref = $masterData->getMasterData("mtb_pref",
49                                  array("pref_id", "pref_name", "rank"));
50        $this->arrSex = $masterData->getMasterData("mtb_sex");
51        $this->arrDISP = $masterData->getMasterData("mtb_disp");
52        $this->arrRECOMMEND = $masterData->getMasterData("mtb_recommend");
53    }
54
55    // }}}
56    // {{{ functions
57
58    /**
59     * CSV 項目を出力する.
60     *
61     * @param integer $csv_id CSV ID
62     * @param string $where SQL の WHERE 句
63     * @param array $arrVal WHERE 句の要素
64     * @return array CSV 項目の配列
65     */
66    function sfgetCsvOutput($csv_id = "", $where = "", $arrVal = array()){
67        $objQuery = new SC_Query();
68        $arrData = array();
69        $ret = array();
70
71        $sql = "";
72        $sql .= " SELECT ";
73        $sql .= "     no, ";
74        $sql .= "     csv_id, ";
75        $sql .= "     col, ";
76        $sql .= "     disp_name, ";
77        $sql .= "     rank, ";
78        $sql .= "     status, ";
79        $sql .= "     create_date, ";
80        $sql .= "     update_date ";
81        $sql .= " FROM ";
82        $sql .= "     dtb_csv ";
83
84        if ($where != "") {
85            $sql .= $where;
86            $arrData = $arrVal;
87        }elseif($csv_id != ""){
88            $sql .= " WHERE csv_id = ? ";
89            $arrData = array($csv_id);
90        }
91
92        $sql .= " ORDER BY ";
93        $sql .= "     rank , no";
94        $sql .= " ";
95
96        $ret = $objQuery->getall($sql, $arrData);
97
98        return $ret;
99    }
100
101
102    // CSV出力データを作成する。(商品)
103    function lfGetProductsCSV($where, $option, $arrval, $arrOutputCols) {
104        $objDb = new SC_Helper_DB_Ex();
105
106        $from = "vw_product_class AS prdcls";
107        $cols = SC_Utils_Ex::sfGetCommaList($arrOutputCols, true, array('category_id'));
108
109        $objQuery = new SC_Query();
110        $objQuery->setoption($option);
111
112        $list_data = $objQuery->select($cols, $from, $where, $arrval);
113        $max = count($list_data);
114
115        // 規格分類名一覧
116        if (in_array('classcategory_id1', $arrOutputCols) || in_array('classcategory_id2', $arrOutputCols)) {
117            $arrClassCatName = $objDb->sfGetIDValueList("dtb_classcategory", "classcategory_id", "name");
118        }
119
120        if (!isset($data)) $data = "";
121        for($i = 0; $i < $max; $i++) {
122            // 関連商品情報の付与
123            if (in_array('classcategory_id1', $arrOutputCols)) {
124                $list_data[$i]['classcategory_id1'] = $arrClassCatName[$list_data[$i]['classcategory_id1']];
125            }
126            if (in_array('classcategory_id2', $arrOutputCols)) {
127                $list_data[$i]['classcategory_id2'] = $arrClassCatName[$list_data[$i]['classcategory_id2']];
128            }
129
130            if (in_array('category_id', $arrOutputCols)) {
131                $arrCategory_id = $objQuery->getCol("dtb_product_categories",
132                                  "category_id",
133                                  "product_id = ?",
134                                  array($list_data[$i]['product_id']));
135
136                // カテゴリID 付与
137                for ($j = 0; $j < count($arrCategory_id); $j++) {
138                    $list_data[$i]['category_id'] .= $arrCategory_id[$j];
139                    if ($j < count($arrCategory_id) - 1) {
140                        $list_data[$i]['category_id'] .= "|";
141                    }
142                }
143            }
144
145            // 各項目をCSV出力用に変換する。
146            $data .= $this->lfMakeProductsCSV($list_data[$i], $arrOutputCols);
147        }
148        return $data;
149    }
150
151    // CSV出力データを作成する。(レビュー)
152    function lfGetReviewCSV($where, $option, $arrval) {
153
154        $from = "dtb_review AS A INNER JOIN dtb_products AS B on A.product_id = B.product_id ";
155        $cols = SC_Utils_Ex::sfGetCommaList($this->arrREVIEW_CVSCOL);
156
157        $objQuery = new SC_Query();
158        $objQuery->setoption($option);
159
160        $list_data = $objQuery->select($cols, $from, $where, $arrval);
161
162        $max = count($list_data);
163        if (!isset($data)) $data = "";
164        for($i = 0; $i < $max; $i++) {
165            // 各項目をCSV出力用に変換する。
166            $data .= $this->lfMakeReviewCSV($list_data[$i]);
167        }
168        return $data;
169    }
170
171    // CSV出力データを作成する。(トラックバック)
172    function lfGetTrackbackCSV($where, $option, $arrval) {
173        $from = "dtb_trackback AS A INNER JOIN dtb_products AS B on A.product_id = B.product_id ";
174        $cols = SC_Utils_Ex::sfGetCommaList($this->arrTRACKBACK_CVSCOL);
175
176        $objQuery = new SC_Query();
177        $objQuery->setoption($option);
178
179        $list_data = $objQuery->select($cols, $from, $where, $arrval);
180
181        $max = count($list_data);
182        if (!isset($data)) $data = "";
183        for($i = 0; $i < $max; $i++) {
184            // 各項目をCSV出力用に変換する。
185            $data .= $this->lfMakeTrackbackCSV($list_data[$i]);
186        }
187        return $data;
188    }
189
190    // CSV出力データを作成する。(カテゴリ)
191    function lfGetCategoryCSV($where, $option, $arrval, $arrOutputCols) {
192        $objDb = new SC_Helper_DB_Ex();
193
194        $from = "dtb_category";
195        $cols = SC_Utils_Ex::sfGetCommaList($arrOutputCols);
196
197        $objQuery = new SC_Query();
198        $objQuery->setoption($option);
199
200        $list_data = $objQuery->select($cols, $from, $where, $arrval);
201        $max = count($list_data);
202
203        if (!isset($data)) $data = "";
204        for($i = 0; $i < $max; $i++) {
205            // 各項目をCSV出力用に変換する。
206            $data .= $this->lfMakeCSV($list_data[$i]);
207        }
208        return $data;
209    }
210
211    // CSV出力データを作成する。
212    function lfGetCSV($from, $where, $option, $arrval, $arrCsvOutputCols = "") {
213
214        $cols = SC_Utils_Ex::sfGetCommaList($arrCsvOutputCols);
215
216        $objQuery = new SC_Query();
217        $objQuery->setoption($option);
218
219        $list_data = $objQuery->select($cols, $from, $where, $arrval);
220
221        $max = count($list_data);
222        if (!isset($data)) $data = "";
223        for($i = 0; $i < $max; $i++) {
224            // 各項目をCSV出力用に変換する。
225            $data .= $this->lfMakeCSV($list_data[$i]);
226        }
227        return $data;
228    }
229
230    // 各項目をCSV出力用に変換する。
231    function lfMakeCSV($list) {
232        $line = "";
233
234        reset($list);
235        while(list($key, $val) = each($list)){
236            $tmp = "";
237            switch($key) {
238            case 'order_pref':
239                $tmp = $this->arrPref[$val];
240                break;
241            case 'deliv_pref':
242                $tmp = $this->arrPref[$val];
243                break;
244            default:
245                $tmp = $val;
246                break;
247            }
248
249            $tmp = ereg_replace("[\",]", " ", $tmp);
250            $line .= "\"".$tmp."\",";
251        }
252        // 文末の","を変換
253        $line = $this->replaceLineSuffix($line);
254        return $line;
255    }
256
257    // 各項目をCSV出力用に変換する。(商品)
258    function lfMakeProductsCSV($list, $arrOutputCols) {
259        $line = "";
260        if(is_array($list)) {
261            reset($arrOutputCols);
262            while(list($key, $val) = each($arrOutputCols)){
263                $tmp = "";
264                switch($key) {
265                case 'point_rate':
266                    if($val == "") {
267                        $tmp = '0';
268                    } else {
269                        $tmp = $list[$val];
270                    }
271                    break;
272                default:
273                    $tmp = $list[$val];
274                    break;
275                }
276                $tmp = str_replace("\"", "\\\"", $tmp);
277                $line .= "\"".$tmp."\",";
278            }
279            // 文末の","を変換
280            $line = $this->replaceLineSuffix($line);
281        }
282        return $line;
283    }
284
285    // 各項目をCSV出力用に変換する。(レビュー)
286    function lfMakeReviewCSV($list) {
287        $line = "";
288        reset($list);
289        while(list($key, $val) = each($list)){
290            $tmp = "";
291            switch($key) {
292            case 'sex':
293                $tmp = isset($this->arrSex[$val]) ? $this->arrSex[$val] : "";
294                break;
295            case 'recommend_level':
296                $tmp = isset($this->arrRECOMMEND[$val]) ? $this->arrRECOMMEND[$val]
297                                                        : "";
298                break;
299            case 'status':
300                $tmp = isset($this->arrDISP[$val]) ? $this->arrDISP[$val] : "";
301                break;
302            default:
303                $tmp = $val;
304                break;
305            }
306
307            $tmp = ereg_replace("[\",]", " ", $tmp);
308            $line .= "\"".$tmp."\",";
309        }
310        // 文末の","を変換
311        $line = $this->replaceLineSuffix($line);
312        return $line;
313    }
314
315    // 各項目をCSV出力用に変換する。(トラックバック)
316    function lfMakeTrackbackCSV($list) {
317        $line = "";
318        reset($list);
319        while(list($key, $val) = each($list)){
320            $tmp = "";
321            switch($key) {
322            case 'status':
323                $tmp = $this->arrTrackBackStatus[$val];
324                break;
325            default:
326                $tmp = $val;
327                break;
328            }
329
330            $tmp = ereg_replace("[\",]", " ", $tmp);
331            $line .= "\"".$tmp."\",";
332        }
333        // 文末の","を変換
334        $line = $this->replaceLineSuffix($line);
335        return $line;
336    }
337
338    /**
339     * 行末の ',' を CRLF へ変換する.
340     *
341     * @access private
342     * @param string $line CSV出力用の1行分の文字列
343     * @return string 行末の ',' を CRLF に変換した文字列
344     */
345    function replaceLineSuffix($line) {
346        return mb_ereg_replace(",$", "\r\n", $line);
347    }
348
349    /**
350     * 項目情報を初期化する.
351     *
352     * @access private
353     * @return void
354     */
355    function init() {
356        $this->arrSubnavi = array(
357                                  1 => 'product',
358                                  2 => 'customer',
359                                  3 => 'order',
360                                  4 => 'campaign',
361                                  5 => 'category',
362                                  6 => 'csv_sql'
363                                  );
364
365        $this->arrSubnaviName = array(
366                                      1 => '商品管理',
367                                      2 => '顧客管理',
368                                      3 => '受注管理',
369                                      4 => 'キャンペーン',
370                                      5 => 'カテゴリ',
371                                      6 => '高度な設定');
372
373
374        $this->arrREVIEW_CVSCOL = array(
375                                        'B.name',
376                                        'A.status',
377                                        'A.create_date',
378                                        'A.reviewer_name',
379                                        'A.sex',
380                                        'A.recommend_level',
381                                        'A.title',
382                                        'A.comment'
383                                        );
384
385        $this->arrREVIEW_CVSTITLE = array(
386                                          '商品名',
387                                          'レビュー表示',
388                                          '投稿日',
389                                          '投稿者名',
390                                          '性別',
391                                          'おすすめレベル',
392                                          'タイトル',
393                                          'コメント'
394                                          );
395
396        $this->arrTRACKBACK_CVSTITLE = array(
397                                             '商品名',
398                                             'ブログ名',
399                                             'ブログ記事タイトル',
400                                             'ブログ記事内容',
401                                             '状態',
402                                             '投稿日'
403                                             );
404
405        $this->arrTRACKBACK_CVSCOL = array(
406                                           'B.name',
407                                           'A.blog_name',
408                                           'A.title',
409                                           'A.excerpt',
410                                           'A.status',
411                                           'A.create_date'
412                                           );
413    }
414}
415?>
Note: See TracBrowser for help on using the repository browser.