<?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_Itemmanage_Search_Export
{
    var $table;        // 出力するテーブル名

    var $view;
    var $m_name;
    var $results;
    var $castnm;
    var $media_list;
    var $tname;
    var $genreview;
    var $genre_search;
    
    var $title;
    var $pagename;
    var $div;
    
    var $jancode;
    var $hinban;
    var $itemtitle;
    var $release_date_start;
    var $release_date_end;
    var $publish_date_start;
    var $publish_date_end;
    var $maker_capital;
    var $maker_name;
    var $media;
    var $cast;
    var $situation;
    var $photo_situation;
    var $publish_situation;
    var $genre_select;

    var $q;
    var $sort;
    
    var $cont;
    

    function execute()
    {
        $log =& LogFactory::getLog();

        $func_name = "Admin_Itemmanage_Search_Export#execute";
        $log->debug("↓Start↓", $func_name);

        $div = (empty($this->div)) ? 2 : 1;

        //ジャンルの配列チェックと数値チェック
        if (is_array($this->genre_select)) {
            foreach($this->genre_select as $val) if(!is_numeric($val)) $this->genre_select = array();
        } else if (!is_numeric($this->genre_select) || empty($this->genre_select)) {
            $this->genre_select = array();
        } else {
            $this->genre_select = array($this->genre_select);
        }
        
        $records = $this->view->getSearchResults(NULL, $this->genre_select,0,true);

        if (!$records) {
            $log->debug("データがないか、件数が多すぎます", $func_name);
            exit("データがありません。<br />指定された条件では ".$this->view->overcount."件該当します。検索結果が多すぎるので、 ".$this->resultmax."件以内になるように条件を指定してください");
        }

        $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);
    }

    /**
     * CSVファイル作成
     *
     * @param object  $records      配列レコード
     * @param string  $filepathname ディレクトリパス付きファイル名
     * @return boolean 結果ステータス
     */
    function createCSV($records, $filepathname)
    {
        $log =& LogFactory::getLog();
        $func_name = "Admin_Datamanage_Export#createCSV";

        $fp = fopen($filepathname, 'w');
        for ($i = 0; $i < count($records); $i++) {
            if ($i > 0) {
                // 画像件数
                $i_s = $this->view->getImagecount($records[$i]['itemcd']);
                $ic = array("image_l" => $i_s['l'],
                            "image_m" => $i_s['m'],
                            "image_s" => $i_s['s']
                    );
                $records[$i] = array_merge($records[$i], $ic);
                // 在庫数
                $sc = array("stocktitlecdcont" =>
                    $this->view->getStockcount($records[$i]['itemcd'],
                                               $records[$i]['structcd']));
                $records[$i] = array_merge($records[$i], $sc);
            }

            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);

        $title = array('品目C','品名','品名かな','メーカーC','メーカー名','商品説明');

        $title = array_merge($title, array('更新回数','構成C','バリエーション名',
            'メーカー品番','JANコード','発売日','予約終了日','メーカー定価',
            '構成 コメント','構成 更新回数','公開日','ランク','お店のコメント',
            'ウェブ 更新回数','画像大','画像中','画像小','在庫数'));

        $arr[] = $title;
        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;
    }

    function getGenreSearch() {
        $this->genre_search = $this->genreview->selectAll($div);
        foreach ($this->genre_search as $key => $val) {
            $this->genre_search[$key]["checked"] = "";
            if (in_array($val["genrecd"], $this->genre_select)) {
                $this->genre_search[$key]["checked"] = "checked";
	    }
	}
        return $this->genre_search;
    }
}
?>
