<?php
/**
 * @copyright ONE/DEPO Project
 * @license   PHP License 3.01 <http://www.php.net/license/3_01.txt>
 */


/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */

/**
 * CSV出力
 *
 * @access      public
 */
class Admin_Datamanage_Export
{
    var $table;        // 出力するテーブル名
    var $div;        // 区分

    var $c_other;

    function execute()
    {
        $log =& LogFactory::getLog();
        $func_name = "Admin_Datamanage_Export#execute#execute";
        $log->debug("↓Start↓", $func_name);

        $records = $this->c_other->selectForShopdiv($this->table, $this->div);
        if (!$records) {
            $log->debug("データがありません", $func_name);
            exit("データがありません");
        }

        $this->addTitleRow($this->table, $records);

        $path = TEMP_DIR;
        $filename = "export.csv";
        $filepathname = $path.$filename;
        $this->createCSV($records, $filepathname);

        $this->exportCSV($filepathname, $filename);
        unlink($filepathname);

        $log->debug("↑End↑", $func_name);
        return 'success';
    }


    /**
     * CSVファイル作成
     *
     * @param object  $records      配列レコード
     * @param string  $filepathname ディレクトリパス付きファイル名
     * @return boolean 結果ステータス
     */
    function createCSV($records, $filepathname)
    {
        $fp = fopen($filepathname, 'w');
        for ($i = 0; $i < count($records); $i++) {
            fputcsv($fp, $records[$i]);
        }
        fclose($fp);

        return TRUE;
    }


    /**
     * タイトル行追加
     *
     * @param string  $table    テーブル名
     * @param object  $records  配列レコード 参照
     * @return boolean 結果ステータス
     */
    function addTitleRow($table, &$records)
    {
        $log =& LogFactory::getLog();
        $func_name = "Admin_Datamanage_Export#addTitleRow";
        $log->debug("↓Start↓", $func_name);

        switch ($table) {
            case 'v_genre_export':
                $arr[] = array('親ジャンルコード','親ジャンル名称','コード','名称','表示順');
                break;
            case 'v_maker_export':
                $arr[] = array('コード','名称','よみがな','コメント','おすすめ(コード)','おすすめ(名)');
                break;
            case 'v_label_export':
                $arr[] = array('メーカーコード','メーカー名','レーベルコード','レーベル名','よみがな',
                'おすすめ(コード)','おすすめ(名)');
                break;
            case 'v_series_export':
                $arr[] = array('メーカーCD','メーカー名','シリーズCD','シリーズ名','よみがな','おすすめ');
                break;
            case 'v_cast_export':
                $arr[] = array('コード','名称','よみがな','種別(コード)','種別(名)','おすすめ(コード)','おすすめ(名)',
                'コメント','デビュー年月','出身(コード)','出身(名)','生年月日');
                break;
            case 'v_supplier_export':
                $arr[] = array('コード','名称','表示順');
                break;
            case 'v_item_list':
                $arr[] = array('品目C','品名','品名かな','メーカーC','メーカー名','レーベルC',
                'レーベル名','シリーズC','シリーズ名','作品区分C','作品区分',
                '受審団体C','受審団体','受審番号','作品案内','映倫規定C','映倫規定',
                'サブタイトル','更新回数','構成C','メディアC','メディア','メーカー品番',
                'JANコード','ISBNコード','発売日','予約終了日','販売形態C','販売形態',
                '収録時間','メーカー定価','構成 コメント','構成 更新回数','公開日',
                'ランク','ウェブ コメント','ウェブ 更新回数','画像件数');
                break;
            case 'v_item_import_export':
                $arr[] = array('処理対象','品名C','品名','品名かな','メーカーC','メーカー名','レーベルC',
                'レーベル名','シリーズC','シリーズ名','作品区分C','作品区分','受審団体C','受審団体','受審番号',
                '作品案内','映倫規定C','映倫規定','サブタイトル','ランク','WEBコメント','メディアC',
                'メディア','メーカー品番','JANコード','ISBNコード','発売日','予約終了日','販売形態C','販売形態',
                '収録時間','メーカー定価','販売価格','ジャンルC１','ジャンル名１','ジャンルC２','ジャンル名２',
                'ジャンルC３','ジャンル名３','ジャンルC４','ジャンル名４','ジャンルC５','ジャンル名５',
                'キャストC１','キャスト名１','キャストC２','キャスト名２','キャストC３','キャスト名３',
                'キャストC４','キャスト名４','キャストC５','キャスト名５','キャストC（監督）','キャスト名（監督）',
                '画像(大)','画像(中)','画像(小)');
                break;
        }
        if (is_array($arr)) $records = array_merge($arr, $records);
        //        $log->debug(print_r($records, true), $func_name);

        $log->debug("↑End↑", $func_name);

        return TRUE;
    }


    /**
     * CSVファイルブラウザ出力
     *
     * @param string  $filepathname ディレクトリパス付きファイル名
     * @param string  $filename     出力ファイル名
     * @return boolean 結果ステータス
     */
    function exportCSV($filepathname, $filename="export.csv")
    {
        $len = filesize($filepathname);
        header("Cache-Control: public");
        header("Pragma: public");
        header ("Content-Disposition: inline ; filename=$filename");
        header ("Content-type: text/octet-stream");
        header ("Content-Length: ". $len);
        $handle = fopen ($filepathname, "r");
        while (!feof ($handle)) {
            $buffer = fgets($handle, 4096);
            $buffer = mb_convert_encoding($buffer, "SJIS","UTF-8");
            echo $buffer;
        }
        fclose ($handle);

        return TRUE;
    }
}
?>
