Changeset 20280
- Timestamp:
- 2011/02/21 02:00:17 (13 years ago)
- Location:
- branches/version-2_5-dev/data/class
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/version-2_5-dev/data/class/helper/SC_Helper_CSV.php
r20276 r20280 50 50 51 51 /** 52 * 項目情報を初期化する. 53 * 54 * @access private 55 * @return void 56 */ 57 function init() { 58 $this->arrSubnavi = array( 59 1 => 'product', 60 2 => 'customer', 61 3 => 'order', 62 5 => 'category' 63 ); 64 65 $this->arrSubnaviName = array( 66 1 => '商品管理', 67 2 => '顧客管理', 68 3 => '受注管理', 69 5 => 'カテゴリ' 70 ); 71 72 73 $this->arrREVIEW_CVSCOL = array( 74 'B.name', 75 'A.status', 76 'A.create_date', 77 'A.reviewer_name', 78 'A.sex', 79 'A.recommend_level', 80 'A.title', 81 'A.comment' 82 ); 83 84 $this->arrREVIEW_CVSTITLE = array( 85 '商品名', 86 'レビュー表示', 87 '投稿日', 88 '投稿者名', 89 '性別', 90 'おすすめレベル', 91 'タイトル', 92 'コメント' 93 ); 94 } 95 96 /** 52 97 * CSV 項目を出力する. 53 98 * … … 78 123 } 79 124 80 // CSVを送信する。(共通。現状は受注のみ利用。) 81 function sfDownloadCsv($csv_id, $where, $arrval, $order) { 82 switch ($csv_id) { 83 case 3: // 受注 84 $from = 'dtb_order'; 85 break; 86 } 87 88 // CSV出力タイトル行の作成 89 $arrCsvOutput = SC_Utils_Ex::sfSwapArray($this->sfGetCsvOutput($csv_id, 'status = ' . CSV_COLUMN_STATUS_FLG_ENABLE)); 90 91 if (count($arrCsvOutput) <= 0) break; 92 93 $arrCsvOutputCols = $arrCsvOutput['col']; 94 $arrCsvOutputConvs = $arrCsvOutput['conv']; 95 $arrCsvOutputTitle = $arrCsvOutput['disp_name']; 96 $head = SC_Utils_Ex::sfGetCSVList($arrCsvOutputTitle); 97 $data = $objCSV->lfGetCSV("dtb_order", $where, $option, $arrval, $arrCsvOutputCols, $arrCsvOutputConvs); 98 } 99 125 100 126 /** 101 127 * CSVが出力設定でインポート可能かのチェック … … 143 169 */ 144 170 function sfGetCSVRecordCount($fp) { 145 146 171 $count = 0; 147 172 while(!feof($fp)) { … … 157 182 } 158 183 159 // CSV作成 コールバック関数 160 function cbOutputProductCSV($data) { 184 /** 185 * CSV作成 テンポラリファイル出力 コールバック関数 186 * 187 * @param mixed $data 出力データ 188 * @return boolean true (true:固定 false:中断) 189 */ 190 function cbOutputCSV($data) { 161 191 $line = $this->sfArrayToCSV($data); 162 192 $line = mb_convert_encoding($line, 'SJIS-Win'); … … 166 196 } 167 197 168 // CSVを送信する。(商品) 169 function sfDownloadProductsCsv($where, $arrval, $order, $is_download = false) { 198 /** 199 * CSVファイルを送信する 200 * 201 * @param integer $csv_id CSVフォーマットID 202 * @param string $where WHERE条件文 203 * @param array $arrVal プリペアドステートメントの実行時に使用される配列。配列の要素数は、クエリ内のプレースホルダの数と同じでなければなりません。 204 * @param string $order ORDER文 205 * @param boolean $is_download true:ダウンロード用出力までさせる false:CSVの内容を返す(旧方式、メモリを食います。) 206 * @return mixed $is_download = true時 成功失敗フラグ(boolean) 、$is_downalod = false時 string 207 */ 208 function sfDownloadCsv($csv_id, $where = "", $arrVal = array(), $order = "", $is_download = false) { 170 209 // 実行時間を制限しない 171 210 @set_time_limit(0); 172 211 173 212 // CSV出力タイトル行の作成 174 $arrOutput = SC_Utils_Ex::sfSwapArray($this->sfGetCsvOutput( 1, 'status = ' . CSV_COLUMN_STATUS_FLG_ENABLE));213 $arrOutput = SC_Utils_Ex::sfSwapArray($this->sfGetCsvOutput($csv_id, 'status = ' . CSV_COLUMN_STATUS_FLG_ENABLE)); 175 214 if (count($arrOutput) <= 0) return false; // 失敗終了 176 215 $arrOutputCols = $arrOutput['col']; 177 216 178 217 $objQuery =& SC_Query::getSingletonInstance(); 179 $objQuery->setOrder($order); 180 181 $objProduct = new SC_Product(); 218 $objQuery->setOrder($order); 182 219 $cols = SC_Utils_Ex::sfGetCommaList($arrOutputCols, true); 183 // このWhereを足さないと無効な規格も出力される。現行仕様と合わせる為追加。 184 $inner_where = 'dtb_products_class.del_flg = 0'; 185 $sql = $objQuery->getSql($cols, $objProduct->prdclsSQL($inner_where),$where); 220 221 // TODO: 固有処理 なんかエレガントな処理にしたい 222 if($csv_id == '1') { 223 //商品の場合 224 $objProduct = new SC_Product(); 225 // このWhereを足さないと無効な規格も出力される。現行仕様と合わせる為追加。 226 $inner_where = 'dtb_products_class.del_flg = 0'; 227 $sql = $objQuery->getSql($cols, $objProduct->prdclsSQL($inner_where),$where); 228 }else if($csv_id == '2') { 229 // 顧客の場合 230 $sql = "SELECT " . $cols . " FROM dtb_customer " . $where . " " . $order; 231 232 } 233 // 固有処理ここまで 234 235 // ヘッダ構築 186 236 $header = $this->sfArrayToCSV($arrOutput['disp_name']); 187 237 $header = mb_convert_encoding($header, 'SJIS-Win'); … … 192 242 // 環境要件がバージョン5.1以上になったら使うように変えても良いかと 193 243 // fopen('php://temp/maxmemory:'. (5*1024*1024), 'r+'); 194 $tmp_filename = tempnam(CSV_TEMP_REALDIR, 'product_csv');244 $tmp_filename = tempnam(CSV_TEMP_REALDIR, $this->arrSubnavi[$csv_id] . '_csv'); 195 245 $this->fpOutput = fopen($tmp_filename, "w+"); 196 197 246 fwrite($this->fpOutput, $header); 198 247 199 $objQuery->doCallbackAll(array(&$this, 'cbOutput ProductCSV'), $sql, $arrval);248 $objQuery->doCallbackAll(array(&$this, 'cbOutputCSV'), $sql, $arrVal); 200 249 201 250 fclose($this->fpOutput); … … 203 252 if($is_download) { 204 253 // CSVを送信する。 205 $this->lfDownloadCSVFile($tmp_filename, "product_");254 $this->lfDownloadCSVFile($tmp_filename,$this->arrSubnavi[$csv_id] . "_"); 206 255 $res = true; 207 256 }else{ … … 354 403 } 355 404 356 /** 357 * 項目情報を初期化する. 358 * 359 * @access private 360 * @return void 361 */ 362 function init() { 363 $this->arrSubnavi = array( 364 1 => 'product', 365 2 => 'customer', 366 3 => 'order', 367 4 => 'campaign', 368 5 => 'category' 369 ); 370 371 $this->arrSubnaviName = array( 372 1 => '商品管理', 373 2 => '顧客管理', 374 3 => '受注管理', 375 4 => 'キャンペーン', 376 5 => 'カテゴリ' 377 ); 378 379 380 $this->arrREVIEW_CVSCOL = array( 381 'B.name', 382 'A.status', 383 'A.create_date', 384 'A.reviewer_name', 385 'A.sex', 386 'A.recommend_level', 387 'A.title', 388 'A.comment' 389 ); 390 391 $this->arrREVIEW_CVSTITLE = array( 392 '商品名', 393 'レビュー表示', 394 '投稿日', 395 '投稿者名', 396 '性別', 397 'おすすめレベル', 398 'タイトル', 399 'コメント' 400 ); 401 } 402 405 403 406 /** 404 407 * 1次元配列を1行のCSVとして返す -
branches/version-2_5-dev/data/class/pages/admin/products/LC_Page_Admin_Products.php
r20276 r20280 142 142 143 143 $objCSV = new SC_Helper_CSV_Ex(); 144 145 144 // CSVを送信する。正常終了の場合、終了。 146 $objCSV->sfDownloadProductsCsv($where, $arrval, $order, true); 147 // FIXME: sendResponseに渡した方が良いのか? 148 // $data = $objCSV->sfDownloadProductsCsv($where, $arrval, $order); 149 // $this->sendResponseCSV($fime_name, $data); 145 $objCSV->sfDownloadCsv(1, $where, $arrval, $order, true); 150 146 exit; 151 147 // 全件削除(ADMIN_MODE)
Note: See TracChangeset
for help on using the changeset viewer.