Changeset 20280


Ignore:
Timestamp:
2011/02/21 02:00:17 (10 years ago)
Author:
AMUAMU
Message:

#973 (リファクタリング[管理画面]商品管理) のうちCSVに関連する所について、 #657 (CSVダウンロードの改善)関連の修正。

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  
    5050 
    5151    /** 
     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    /** 
    5297     * CSV 項目を出力する. 
    5398     * 
     
    78123    } 
    79124 
    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 
    100126    /** 
    101127     * CSVが出力設定でインポート可能かのチェック 
     
    143169     */ 
    144170    function sfGetCSVRecordCount($fp) { 
    145  
    146171        $count = 0; 
    147172        while(!feof($fp)) { 
     
    157182    } 
    158183 
    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) { 
    161191        $line = $this->sfArrayToCSV($data); 
    162192        $line = mb_convert_encoding($line, 'SJIS-Win'); 
     
    166196    } 
    167197 
    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) { 
    170209        // 実行時間を制限しない 
    171210        @set_time_limit(0); 
    172211 
    173212        // 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)); 
    175214        if (count($arrOutput) <= 0) return false; // 失敗終了 
    176215        $arrOutputCols = $arrOutput['col']; 
    177216 
    178217        $objQuery =& SC_Query::getSingletonInstance(); 
    179         $objQuery->setOrder($order); 
    180          
    181         $objProduct = new SC_Product(); 
     218        $objQuery->setOrder($order);         
    182219        $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        // ヘッダ構築 
    186236        $header = $this->sfArrayToCSV($arrOutput['disp_name']); 
    187237        $header = mb_convert_encoding($header, 'SJIS-Win'); 
     
    192242        //  環境要件がバージョン5.1以上になったら使うように変えても良いかと 
    193243        //  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'); 
    195245        $this->fpOutput = fopen($tmp_filename, "w+"); 
    196  
    197246        fwrite($this->fpOutput, $header); 
    198247 
    199         $objQuery->doCallbackAll(array(&$this, 'cbOutputProductCSV'), $sql, $arrval); 
     248        $objQuery->doCallbackAll(array(&$this, 'cbOutputCSV'), $sql, $arrVal); 
    200249 
    201250        fclose($this->fpOutput); 
     
    203252        if($is_download) { 
    204253            // CSVを送信する。 
    205             $this->lfDownloadCSVFile($tmp_filename,"product_"); 
     254            $this->lfDownloadCSVFile($tmp_filename,$this->arrSubnavi[$csv_id] . "_"); 
    206255            $res = true; 
    207256        }else{ 
     
    354403    } 
    355404 
    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 
    403406    /** 
    404407     * 1次元配列を1行のCSVとして返す 
  • branches/version-2_5-dev/data/class/pages/admin/products/LC_Page_Admin_Products.php

    r20276 r20280  
    142142 
    143143                    $objCSV = new SC_Helper_CSV_Ex(); 
    144  
    145144                    // 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); 
    150146                    exit; 
    151147                // 全件削除(ADMIN_MODE) 
Note: See TracChangeset for help on using the changeset viewer.