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

Revision 15545, 9.7 KB checked in by nanasess, 15 years ago (diff)

CSV 出力時の改行コードを CRLF に修正

  • 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->arrSex = $masterData->getMasterData("mtb_sex");
49        $this->arrDISP = $masterData->getMasterData("mtb_disp");
50        $this->arrRECOMMEND = $masterData->getMasterData("mtb_recommend");
51    }
52
53    // }}}
54    // {{{ functions
55
56
57    // CSV出力データを作成する。(商品)
58    function lfGetProductsCSV($where, $option, $arrval, $arrOutputCols) {
59        $objDb = new SC_Helper_DB_Ex();
60
61        $from = "vw_product_class AS prdcls";
62        $cols = SC_Utils_Ex::sfGetCommaList($arrOutputCols);
63
64        $objQuery = new SC_Query();
65        $objQuery->setoption($option);
66
67        $list_data = $objQuery->select($cols, $from, $where, $arrval);
68        $max = count($list_data);
69
70        // 規格分類名一覧
71        $arrClassCatName = $objDb->sfGetIDValueList("dtb_classcategory", "classcategory_id", "name");
72
73        if (!isset($data)) $data = "";
74        for($i = 0; $i < $max; $i++) {
75            // 関連商品情報の付与
76            $list_data[$i]['classcategory_id1'] = $arrClassCatName[$list_data[$i]['classcategory_id1']];
77            $list_data[$i]['classcategory_id2'] = $arrClassCatName[$list_data[$i]['classcategory_id2']];
78
79            // 各項目をCSV出力用に変換する。
80            $data .= $this->lfMakeProductsCSV($list_data[$i]);
81        }
82        return $data;
83    }
84
85    // CSV出力データを作成する。(レビュー)
86    function lfGetReviewCSV($where, $option, $arrval) {
87
88        $from = "dtb_review AS A INNER JOIN dtb_products AS B on A.product_id = B.product_id ";
89        $cols = SC_Utils_Ex::sfGetCommaList($this->arrREVIEW_CVSCOL);
90
91        $objQuery = new SC_Query();
92        $objQuery->setoption($option);
93
94        $list_data = $objQuery->select($cols, $from, $where, $arrval);
95
96        $max = count($list_data);
97        if (!isset($data)) $data = "";
98        for($i = 0; $i < $max; $i++) {
99            // 各項目をCSV出力用に変換する。
100            $data .= $this->lfMakeReviewCSV($list_data[$i]);
101        }
102        return $data;
103    }
104
105    // CSV出力データを作成する。(トラックバック)
106    function lfGetTrackbackCSV($where, $option, $arrval) {
107        $from = "dtb_trackback AS A INNER JOIN dtb_products AS B on A.product_id = B.product_id ";
108        $cols = SC_Utils_Ex::sfGetCommaList($this->arrTRACKBACK_CVSCOL);
109
110        $objQuery = new SC_Query();
111        $objQuery->setoption($option);
112
113        $list_data = $objQuery->select($cols, $from, $where, $arrval);
114
115        $max = count($list_data);
116        if (!isset($data)) $data = "";
117        for($i = 0; $i < $max; $i++) {
118            // 各項目をCSV出力用に変換する。
119            $data .= $this->lfMakeTrackbackCSV($list_data[$i]);
120        }
121        return $data;
122    }
123
124    // 各項目をCSV出力用に変換する。(商品)
125    function lfMakeProductsCSV($list) {
126        $line = "";
127        if(is_array($list)) {
128            foreach($list as $key => $val) {
129                $tmp = "";
130                switch($key) {
131                case 'point_rate':
132                    if($val == "") {
133                        $tmp = '0';
134                    } else {
135                        $tmp = $val;
136                    }
137                    break;
138                default:
139                    $tmp = $val;
140                    break;
141                }
142
143                $tmp = str_replace("\"", "\\\"", $tmp);
144                $line .= "\"".$tmp."\",";
145            }
146            // 文末の","を変換
147            $line = ereg_replace(",$", "\r\n", $line);
148        }
149        return $line;
150    }
151
152    // 各項目をCSV出力用に変換する。(レビュー)
153    function lfMakeReviewCSV($list) {
154        $line = "";
155
156        foreach($list as $key => $val) {
157            $tmp = "";
158            switch($key) {
159            case 'sex':
160                $tmp = isset($this->arrSex[$val]) ? $this->arrSex[$val] : "";
161                break;
162            case 'recommend_level':
163                $tmp = isset($this->arrRECOMMEND[$val]) ? $this->arrRECOMMEND[$val]
164                                                        : "";
165                break;
166            case 'status':
167                $tmp = isset($this->arrDISP[$val]) ? $this->arrDISP[$val] : "";
168                break;
169            default:
170                $tmp = $val;
171                break;
172            }
173
174            $tmp = ereg_replace("[\",]", " ", $tmp);
175            $line .= "\"".$tmp."\",";
176        }
177        // 文末の","を変換
178        $line = ereg_replace(",$", "\r\n", $line);
179        return $line;
180    }
181
182    // 各項目をCSV出力用に変換する。(トラックバック)
183    function lfMakeTrackbackCSV($list) {
184
185        $line = "";
186
187        foreach($list as $key => $val) {
188            $tmp = "";
189            switch($key) {
190            case 'status':
191                $tmp = $this->arrTrackBackStatus[$val];
192                break;
193            default:
194                $tmp = $val;
195                break;
196            }
197
198            $tmp = ereg_replace("[\",]", " ", $tmp);
199            $line .= "\"".$tmp."\",";
200        }
201        // 文末の","を変換
202        $line = ereg_replace(",$", "\r\n", $line);
203        return $line;
204    }
205
206    /**
207     * CSV出力項目を取得する.
208     *
209     * @param integer $csv_id CSV ID
210     * @param string $where SQL の WHERE 句
211     * @param array $arrVal WHERE 句の要素
212     * @return array CSV 出力項目の配列
213     */
214    function sfgetCsvOutput($csv_id = "", $where = "", $arrVal = array()){
215        $objQuery = new SC_Query();
216        $arrData = array();
217        $ret = array();
218
219        $sql = "";
220        $sql .= " SELECT ";
221        $sql .= "     no, ";
222        $sql .= "     csv_id, ";
223        $sql .= "     col, ";
224        $sql .= "     disp_name, ";
225        $sql .= "     rank, ";
226        $sql .= "     status, ";
227        $sql .= "     create_date, ";
228        $sql .= "     update_date ";
229        $sql .= " FROM ";
230        $sql .= "     dtb_csv ";
231
232        if ($where != "") {
233            $sql .= $where;
234            $arrData = $arrVal;
235        }elseif($csv_id != ""){
236            $sql .= " WHERE csv_id = ? ";
237            $arrData = array($csv_id);
238        }
239
240        $sql .= " ORDER BY ";
241        $sql .= "     rank , no";
242        $sql .= " ";
243
244        $ret = $objQuery->getall($sql, $arrData);
245
246        return $ret;
247    }
248
249    /**
250     * 項目情報を初期化する.
251     *
252     * @access private
253     * @return void
254     */
255    function init() {
256        $this->arrSubnavi = array(
257                                  1 => 'product',
258                                  2 => 'customer',
259                                  3 => 'order',
260                                  4 => 'campaign'
261                                  );
262
263        $this->arrSubnaviName = array(
264                                      1 => '商品管理',
265                                      2 => '顧客管理',
266                                      3 => '受注管理',
267                                      4 => 'キャンペーン'
268                                      );
269
270
271        $this->arrREVIEW_CVSCOL = array(
272                                        'B.name',
273                                        'A.status',
274                                        'A.create_date',
275                                        'A.reviewer_name',
276                                        'A.sex',
277                                        'A.recommend_level',
278                                        'A.title',
279                                        'A.comment'
280                                        );
281
282        $this->arrREVIEW_CVSTITLE = array(
283                                          '商品名',
284                                          'レビュー表示',
285                                          '投稿日',
286                                          '投稿者名',
287                                          '性別',
288                                          'おすすめレベル',
289                                          'タイトル',
290                                          'コメント'
291                                          );
292
293        $this->arrTRACKBACK_CVSTITLE = array(
294                                             '商品名',
295                                             'ブログ名',
296                                             'ブログ記事タイトル',
297                                             'ブログ記事内容',
298                                             '状態',
299                                             '投稿日'
300                                             );
301
302        $this->arrTRACKBACK_CVSCOL = array(
303                                           'B.name',
304                                           'A.blog_name',
305                                           'A.title',
306                                           'A.excerpt',
307                                           'A.status',
308                                           'A.create_date'
309                                           );
310    }
311}
312?>
Note: See TracBrowser for help on using the repository browser.