source: branches/feature-module-update/data/class/helper/SC_Helper_CSV.php @ 15583

Revision 15583, 11.3 KB checked in by nanasess, 17 years ago (diff)

リファクタリング

  • 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);
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        $arrClassCatName = $objDb->sfGetIDValueList("dtb_classcategory", "classcategory_id", "name");
117
118        if (!isset($data)) $data = "";
119        for($i = 0; $i < $max; $i++) {
120            // 関連商品情報の付与
121            $list_data[$i]['classcategory_id1'] = $arrClassCatName[$list_data[$i]['classcategory_id1']];
122            $list_data[$i]['classcategory_id2'] = $arrClassCatName[$list_data[$i]['classcategory_id2']];
123
124            // 各項目をCSV出力用に変換する。
125            $data .= $this->lfMakeProductsCSV($list_data[$i]);
126        }
127        return $data;
128    }
129
130    // CSV出力データを作成する。(レビュー)
131    function lfGetReviewCSV($where, $option, $arrval) {
132
133        $from = "dtb_review AS A INNER JOIN dtb_products AS B on A.product_id = B.product_id ";
134        $cols = SC_Utils_Ex::sfGetCommaList($this->arrREVIEW_CVSCOL);
135
136        $objQuery = new SC_Query();
137        $objQuery->setoption($option);
138
139        $list_data = $objQuery->select($cols, $from, $where, $arrval);
140
141        $max = count($list_data);
142        if (!isset($data)) $data = "";
143        for($i = 0; $i < $max; $i++) {
144            // 各項目をCSV出力用に変換する。
145            $data .= $this->lfMakeReviewCSV($list_data[$i]);
146        }
147        return $data;
148    }
149
150    // CSV出力データを作成する。(トラックバック)
151    function lfGetTrackbackCSV($where, $option, $arrval) {
152        $from = "dtb_trackback AS A INNER JOIN dtb_products AS B on A.product_id = B.product_id ";
153        $cols = SC_Utils_Ex::sfGetCommaList($this->arrTRACKBACK_CVSCOL);
154
155        $objQuery = new SC_Query();
156        $objQuery->setoption($option);
157
158        $list_data = $objQuery->select($cols, $from, $where, $arrval);
159
160        $max = count($list_data);
161        if (!isset($data)) $data = "";
162        for($i = 0; $i < $max; $i++) {
163            // 各項目をCSV出力用に変換する。
164            $data .= $this->lfMakeTrackbackCSV($list_data[$i]);
165        }
166        return $data;
167    }
168
169    // CSV出力データを作成する。
170    function lfGetCSV($from, $where, $option, $arrval, $arrCsvOutputCols = "") {
171
172        $cols = SC_Utils_Ex::sfGetCommaList($arrCsvOutputCols);
173
174        $objQuery = new SC_Query();
175        $objQuery->setoption($option);
176
177        $list_data = $objQuery->select($cols, $from, $where, $arrval);
178
179        $max = count($list_data);
180        if (!isset($data)) $data = "";
181        for($i = 0; $i < $max; $i++) {
182            // 各項目をCSV出力用に変換する。
183            $data .= $this->lfMakeCSV($list_data[$i]);
184        }
185        return $data;
186    }
187
188    // 各項目をCSV出力用に変換する。
189    function lfMakeCSV($list) {
190        $line = "";
191
192        foreach($list as $key => $val) {
193            $tmp = "";
194            switch($key) {
195            case 'order_pref':
196                $tmp = $this->arrPref[$val];
197                break;
198            default:
199                $tmp = $val;
200                break;
201            }
202
203            $tmp = ereg_replace("[\",]", " ", $tmp);
204            $line .= "\"".$tmp."\",";
205        }
206        // 文末の","を変換
207        $line = $this->replaceLineSuffix($line);
208        return $line;
209    }
210
211    // 各項目をCSV出力用に変換する。(商品)
212    function lfMakeProductsCSV($list) {
213        $line = "";
214        if(is_array($list)) {
215            foreach($list as $key => $val) {
216                $tmp = "";
217                switch($key) {
218                case 'point_rate':
219                    if($val == "") {
220                        $tmp = '0';
221                    } else {
222                        $tmp = $val;
223                    }
224                    break;
225                default:
226                    $tmp = $val;
227                    break;
228                }
229
230                $tmp = str_replace("\"", "\\\"", $tmp);
231                $line .= "\"".$tmp."\",";
232            }
233            // 文末の","を変換
234            $line = $this->replaceLineSuffix($line);
235        }
236        return $line;
237    }
238
239    // 各項目をCSV出力用に変換する。(レビュー)
240    function lfMakeReviewCSV($list) {
241        $line = "";
242
243        foreach($list as $key => $val) {
244            $tmp = "";
245            switch($key) {
246            case 'sex':
247                $tmp = isset($this->arrSex[$val]) ? $this->arrSex[$val] : "";
248                break;
249            case 'recommend_level':
250                $tmp = isset($this->arrRECOMMEND[$val]) ? $this->arrRECOMMEND[$val]
251                                                        : "";
252                break;
253            case 'status':
254                $tmp = isset($this->arrDISP[$val]) ? $this->arrDISP[$val] : "";
255                break;
256            default:
257                $tmp = $val;
258                break;
259            }
260
261            $tmp = ereg_replace("[\",]", " ", $tmp);
262            $line .= "\"".$tmp."\",";
263        }
264        // 文末の","を変換
265        $line = $this->replaceLineSuffix($line);
266        return $line;
267    }
268
269    // 各項目をCSV出力用に変換する。(トラックバック)
270    function lfMakeTrackbackCSV($list) {
271
272        $line = "";
273
274        foreach($list as $key => $val) {
275            $tmp = "";
276            switch($key) {
277            case 'status':
278                $tmp = $this->arrTrackBackStatus[$val];
279                break;
280            default:
281                $tmp = $val;
282                break;
283            }
284
285            $tmp = ereg_replace("[\",]", " ", $tmp);
286            $line .= "\"".$tmp."\",";
287        }
288        // 文末の","を変換
289        $line = $this->replaceLineSuffix($line);
290        return $line;
291    }
292
293    /**
294     * 行末の ',' を CRLF へ変換する.
295     *
296     * @access private
297     * @param string $line CSV出力用の1行分の文字列
298     * @return string 行末の ',' を CRLF に変換した文字列
299     */
300    function replaceLineSuffix($line) {
301        return mb_ereg_replace(",$", "\r\n", $line);
302    }
303
304    /**
305     * 項目情報を初期化する.
306     *
307     * @access private
308     * @return void
309     */
310    function init() {
311        $this->arrSubnavi = array(
312                                  1 => 'product',
313                                  2 => 'customer',
314                                  3 => 'order',
315                                  4 => 'campaign'
316                                  );
317
318        $this->arrSubnaviName = array(
319                                      1 => '商品管理',
320                                      2 => '顧客管理',
321                                      3 => '受注管理',
322                                      4 => 'キャンペーン'
323                                      );
324
325
326        $this->arrREVIEW_CVSCOL = array(
327                                        'B.name',
328                                        'A.status',
329                                        'A.create_date',
330                                        'A.reviewer_name',
331                                        'A.sex',
332                                        'A.recommend_level',
333                                        'A.title',
334                                        'A.comment'
335                                        );
336
337        $this->arrREVIEW_CVSTITLE = array(
338                                          '商品名',
339                                          'レビュー表示',
340                                          '投稿日',
341                                          '投稿者名',
342                                          '性別',
343                                          'おすすめレベル',
344                                          'タイトル',
345                                          'コメント'
346                                          );
347
348        $this->arrTRACKBACK_CVSTITLE = array(
349                                             '商品名',
350                                             'ブログ名',
351                                             'ブログ記事タイトル',
352                                             'ブログ記事内容',
353                                             '状態',
354                                             '投稿日'
355                                             );
356
357        $this->arrTRACKBACK_CVSCOL = array(
358                                           'B.name',
359                                           'A.blog_name',
360                                           'A.title',
361                                           'A.excerpt',
362                                           'A.status',
363                                           'A.create_date'
364                                           );
365    }
366}
367?>
Note: See TracBrowser for help on using the repository browser.