Changeset 20737
- Timestamp:
- 2011/03/20 08:13:11 (13 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/version-2_5-dev/data/class/helper/SC_Helper_CSV.php
r20735 r20737 23 23 var $arrSubnaviName; 24 24 25 /** レビュー管理項目 */26 var $arrREVIEW_CVSCOL;27 28 /** レビュータイトル */29 var $arrREVIEW_CVSTITLE;30 31 25 // }}} 32 26 // {{{ constructor … … 37 31 function SC_Helper_CSV() { 38 32 $this->init(); 39 40 $masterData = new SC_DB_MasterData_Ex();41 $this->arrPref = $masterData->getMasterData('mtb_pref');42 $this->arrSex = $masterData->getMasterData("mtb_sex");43 $this->arrDISP = $masterData->getMasterData("mtb_disp");44 $this->arrRECOMMEND = $masterData->getMasterData("mtb_recommend");45 33 } 46 34 … … 70 58 5 => 'カテゴリ' 71 59 ); 72 }73 74 /**75 * CSV 項目を出力する.76 *77 * @param integer $csv_id CSV ID78 * @param string $where SQL の WHERE 句79 * @param array $arrVal WHERE 句の要素80 * @param array $order SQL の ORDER BY 句81 * @return array CSV 項目の配列82 */83 function sfGetCsvOutput($csv_id = "", $where = '', $arrVal = array(), $order = 'rank, no'){84 $objQuery =& SC_Query_Ex::getSingletonInstance();85 86 $cols = 'no, csv_id, col, disp_name, rank, status, rw_flg, mb_convert_kana_option, size_const_type, error_check_types';87 $table = 'dtb_csv';88 89 if(SC_Utils_Ex::sfIsInt($csv_id)){90 if($where == "") {91 $where = "csv_id = ?";92 }else{93 $where = "$where AND csv_id = ?";94 }95 $arrVal[] = $csv_id;96 }97 $objQuery->setOrder($order);98 99 $arrRet = $objQuery->select($cols, $table, $where, $arrVal);100 return $arrRet;101 }102 103 /**104 * CSVが出力設定でインポート可能かのチェック105 *106 * @param array sfGetCsvOutputで取得した内容(またはそれと同等の配列)107 * @return boolean true:インポート可能、false:インポート不可108 */109 function sfIsImportCSVFrame(&$arrCSVFrame) {110 $result = true;111 foreach($arrCSVFrame as $key => $val) {112 if($val['status'] != CSV_COLUMN_STATUS_FLG_ENABLE113 and $val['rw_flg'] == CSV_COLUMN_RW_FLG_READ_WRITE114 and $val['error_check_types'] != ""115 and strpos(strtoupper($val['error_check_types']), "EXIST_CHECK") !== FALSE) {116 //必須フィールド117 $result = false;118 }119 }120 return $result;121 }122 123 /**124 * CSVが出力設定で更新可能かのチェック125 *126 * @param array sfGetCsvOutputで取得した内容(またはそれと同等の配列)127 * @return boolean true:更新可能、false:新規追加のみ不可128 */129 function sfIsUpdateCSVFrame(&$arrCSVFrame) {130 $result = true;131 foreach($arrCSVFrame as $key => $val) {132 if($val['status'] != CSV_COLUMN_STATUS_FLG_ENABLE133 and $val['rw_flg'] == CSV_COLUMN_RW_FLG_KEY_FIELD) {134 //キーフィールド135 $result = false;136 }137 }138 return $result;139 }140 141 /**142 * CSVファイルのカウント数を得る.143 *144 * @param resource $fp fopenを使用して作成したファイルポインタ145 * @return integer CSV のカウント数146 */147 function sfGetCSVRecordCount($fp) {148 $count = 0;149 while(!feof($fp)) {150 $arrCSV = fgetcsv($fp, CSV_LINE_MAX);151 $count++;152 }153 // ファイルポインタを戻す154 if (rewind($fp)) {155 return $count-1;156 } else {157 return FALSE;158 }159 }160 161 /**162 * CSV作成 テンポラリファイル出力 コールバック関数163 *164 * @param mixed $data 出力データ165 * @return boolean true (true:固定 false:中断)166 */167 function cbOutputCSV($data) {168 $line = $this->sfArrayToCSV($data);169 $line = mb_convert_encoding($line, 'SJIS-Win');170 $line .= "\r\n";171 fwrite($this->fpOutput, $line);172 return true;173 60 } 174 61 … … 221 108 222 109 /** 110 * CSV 項目を出力する. 111 * 112 * @param integer $csv_id CSV ID 113 * @param string $where SQL の WHERE 句 114 * @param array $arrVal WHERE 句の要素 115 * @param array $order SQL の ORDER BY 句 116 * @return array CSV 項目の配列 117 */ 118 function sfGetCsvOutput($csv_id = "", $where = '', $arrVal = array(), $order = 'rank, no'){ 119 $objQuery =& SC_Query_Ex::getSingletonInstance(); 120 121 $cols = 'no, csv_id, col, disp_name, rank, status, rw_flg, mb_convert_kana_option, size_const_type, error_check_types'; 122 $table = 'dtb_csv'; 123 124 if(SC_Utils_Ex::sfIsInt($csv_id)){ 125 if($where == "") { 126 $where = "csv_id = ?"; 127 }else{ 128 $where = "$where AND csv_id = ?"; 129 } 130 $arrVal[] = $csv_id; 131 } 132 $objQuery->setOrder($order); 133 134 $arrRet = $objQuery->select($cols, $table, $where, $arrVal); 135 return $arrRet; 136 } 137 138 /** 139 * CSVが出力設定でインポート可能かのチェック 140 * 141 * @param array sfGetCsvOutputで取得した内容(またはそれと同等の配列) 142 * @return boolean true:インポート可能、false:インポート不可 143 */ 144 function sfIsImportCSVFrame(&$arrCSVFrame) { 145 $result = true; 146 foreach($arrCSVFrame as $key => $val) { 147 if($val['status'] != CSV_COLUMN_STATUS_FLG_ENABLE 148 and $val['rw_flg'] == CSV_COLUMN_RW_FLG_READ_WRITE 149 and $val['error_check_types'] != "" 150 and strpos(strtoupper($val['error_check_types']), "EXIST_CHECK") !== FALSE) { 151 //必須フィールド 152 $result = false; 153 } 154 } 155 return $result; 156 } 157 158 /** 159 * CSVが出力設定で更新可能かのチェック 160 * 161 * @param array sfGetCsvOutputで取得した内容(またはそれと同等の配列) 162 * @return boolean true:更新可能、false:新規追加のみ不可 163 */ 164 function sfIsUpdateCSVFrame(&$arrCSVFrame) { 165 $result = true; 166 foreach($arrCSVFrame as $key => $val) { 167 if($val['status'] != CSV_COLUMN_STATUS_FLG_ENABLE 168 and $val['rw_flg'] == CSV_COLUMN_RW_FLG_KEY_FIELD) { 169 //キーフィールド 170 $result = false; 171 } 172 } 173 return $result; 174 } 175 176 /** 177 * CSVファイルのカウント数を得る. 178 * 179 * @param resource $fp fopenを使用して作成したファイルポインタ 180 * @return integer CSV のカウント数 181 */ 182 function sfGetCSVRecordCount($fp) { 183 $count = 0; 184 while(!feof($fp)) { 185 $arrCSV = fgetcsv($fp, CSV_LINE_MAX); 186 $count++; 187 } 188 // ファイルポインタを戻す 189 if (rewind($fp)) { 190 return $count-1; 191 } else { 192 return FALSE; 193 } 194 } 195 196 /** 197 * CSV作成 テンポラリファイル出力 コールバック関数 198 * 199 * @param mixed $data 出力データ 200 * @return boolean true (true:固定 false:中断) 201 */ 202 function cbOutputCSV($data) { 203 $line = $this->sfArrayToCSV($data); 204 $line = mb_convert_encoding($line, 'SJIS-Win'); 205 $line .= "\r\n"; 206 fwrite($this->fpOutput, $line); 207 return true; 208 } 209 210 /** 223 211 * SQL文からクエリ実行し CSVファイルを送信する 224 212 * … … 266 254 } 267 255 268 // CSV出力データを作成する。269 function lfGetCSV($from, $where, $option, $arrval, $arrCsvOutputCols = "", $arrCsvOutputConverts = array()) {270 271 $cols = SC_Utils_Ex::sfGetCommaList($arrCsvOutputCols);272 273 $objQuery =& SC_Query_Ex::getSingletonInstance();274 $objQuery->setOption($option);275 276 $list_data = $objQuery->select($cols, $from, $where, $arrval, MDB2_FETCHMODE_ORDERED);277 278 $csv = '';279 foreach ($list_data as $row) {280 $row = SC_Utils_Ex::mbConvertKanaWithArray($row, $arrCsvOutputConverts);281 // 各項目をCSV出力用に変換する。282 $line = $this->sfArrayToCsv($row);283 $csv .= "$line\r\n";284 }285 return $csv;286 }287 288 // 各項目をCSV出力用に変換する。289 function lfMakeCSV($list) {290 $line = "";291 292 foreach($list as $key => $val) {293 $tmp = "";294 switch($key) {295 case 'order_pref':296 case 'deliv_pref':297 $tmp = $this->arrPref[$val];298 break;299 default:300 $tmp = $val;301 break;302 }303 304 $tmp = preg_replace('/[",]/', " ", $tmp);305 $line .= "\"".$tmp."\",";306 }307 // 文末の","を変換308 $line = $this->replaceLineSuffix($line);309 return $line;310 }311 312 // 各項目をCSV出力用に変換する。(レビュー)313 function lfMakeReviewCSV($list) {314 $line = "";315 316 foreach($list as $key => $val) {317 $tmp = "";318 switch($key) {319 case 'sex':320 $tmp = isset($this->arrSex[$val]) ? $this->arrSex[$val] : "";321 break;322 case 'recommend_level':323 $tmp = isset($this->arrRECOMMEND[$val]) ? $this->arrRECOMMEND[$val]324 : "";325 break;326 case 'status':327 $tmp = isset($this->arrDISP[$val]) ? $this->arrDISP[$val] : "";328 break;329 default:330 $tmp = $val;331 break;332 }333 334 $tmp = preg_replace('/[",]/', " ", $tmp);335 $line .= "\"".$tmp."\",";336 }337 // 文末の","を変換338 $line = $this->replaceLineSuffix($line);339 return $line;340 }341 342 /**343 * 行末の ',' を CRLF へ変換する.344 *345 * @access private346 * @param string $line CSV出力用の1行分の文字列347 * @return string 行末の ',' を CRLF に変換した文字列348 */349 function replaceLineSuffix($line) {350 return preg_replace('/,$/',"\r\n",$line);351 }352 353 256 /** 354 257 * 1次元配列を1行のCSVとして返す 355 258 * 参考: http://jp.php.net/fputcsv 259 * 260 * @param array $fields データ1次元配列 261 * @param string $delimiter 262 * @param string $enclosure 263 * @param string $arrayDelimiter 264 * @return string 結果行 356 265 */ 357 266 function sfArrayToCsv($fields, $delimiter = ',', $enclosure = '"', $arrayDelimiter = '|') { … … 387 296 388 297 /** 389 * CSVを送信する。 390 */ 391 function lfDownloadCsv($arrayData, $prefix = ""){ 298 * 配列データのCSVを送信する。 299 * 300 * @param array $fields データ配列 301 * @param string $prefix 302 * @return void 303 */ 304 function lfDownloadCsv($arrData, $prefix = ""){ 392 305 393 306 if($prefix == "") { … … 405 318 406 319 /* データを出力 */ 407 foreach ($arr ayData as $lineArray) {320 foreach ($arrData as $lineArray) { 408 321 $lineString = $this->sfArrayToCsv($lineArray); 409 322 $lineString = mb_convert_encoding($lineString, 'SJIS-Win'); … … 414 327 /** 415 328 * CSVファイルを送信する。 329 * 330 * @param string $filepath 送信するファイルのフルパス 331 * @param string $prefix 332 * @return void 416 333 */ 417 334 function lfDownloadCSVFile($filepath, $prefix = "") { … … 428 345 echo file_get_contents($filepath); 429 346 } 430 431 /**432 * CSVデータを取得する。433 */434 function lfGetCsv2($arrayData, $prefix = "") {435 436 if($prefix == "") {437 $dir_name = SC_Utils_Ex::sfUpDirName();438 $file_name = $dir_name . date('ymdHis') .".csv";439 } else {440 $file_name = $prefix . date('ymdHis') .".csv";441 }442 443 /* データを出力 */444 foreach ($arrayData as $lineArray) {445 $lineString = $this->sfArrayToCsv($lineArray);446 $lineString = mb_convert_encoding($lineString, 'SJIS-Win');447 $lineString .= "\r\n";448 }449 return array($file_name, $lineString);450 }451 347 } 452 348 ?>
Note: See TracChangeset
for help on using the changeset viewer.