Changeset 20318


Ignore:
Timestamp:
2011/02/22 10:47:25 (11 years ago)
Author:
AMUAMU
Message:

#476 (CSV出力項目設定(高度な設定)で、一部テーブルの項目一覧が表示されない) に伴う改修
#657 (CSVダウンロードの改善) の改修
#938 (CSV出力 高度な設定 SQL登録できない) の不具合修正
#939 (CSV出力 高度な設定 出力操作で「sfGetCSVData()に移行してね。」と表示) の不具合修正
#971 (リファクタリング [管理画面]コンテンツ管理(CSV出力項目設定)) の改修

Location:
branches/version-2_5-dev/data
Files:
6 edited

Legend:

Unmodified
Added
Removed
  • branches/version-2_5-dev/data/Smarty/templates/admin/contents/csv.tpl

    r20116 r20318  
    4444    $('.ms2side__div .SelSort').hide(); 
    4545}); 
     46 
     47function lfFormModeDefautSetSubmit(form, mode) { 
     48    if(!window.confirm('初期設定で登録しても宜しいですか')){ 
     49        return; 
     50    } 
     51    return fnSetFormSubmit(form, 'mode', mode); 
     52} 
    4653//--> 
    4754</script> 
     
    4956<form name="form1" id="form1" method="post" action="?"> 
    5057<input type="hidden" name="mode" value="confirm" /> 
    51 <input type="hidden" name="tpl_subno_csv" value="<!--{$tpl_subno_csv}-->" /> 
     58<input type="hidden" name="<!--{$smarty.const.TRANSACTION_ID_NAME}-->" value="<!--{$transactionid}-->" /> 
     59<input type="hidden" name="tpl_subno_csv" value="<!--{$tpl_subno_csv|h}-->" /> 
    5260<div id="admin-contents" class="contents-main"> 
     61    <!--{if $tpl_is_update}--> 
     62    <span class="attention">※ 正常に更新されました。</span> 
     63    <!--{/if}--> 
     64    <span class="attention"><!--{$arrErr.tpl_subno_csv}--></span> 
    5365    <div class="ms2side__area"> 
    5466        <span class="attention"><!--{$arrErr.output_list}--></span> 
     
    6173      <ul> 
    6274        <li><a class="btn-action" href="javascript:;" onclick="fnFormModeSubmit('form1', 'confirm', '', ''); return false;"><span class="btn-next">この内容で登録する</span></a></li> 
     75        <li><a class="btn-action" href="javascript:;" onclick="lfFormModeDefautSetSubmit('form1', 'defaultset', '', ''); return false;"><span class="btn-next">初期設定に戻して登録</span></a></li> 
    6376      </ul> 
    6477    </div> 
  • branches/version-2_5-dev/data/Smarty/templates/admin/contents/csv_sql.tpl

    r20116 r20318  
    4242<form name="form1" id="form1" method="post" action="?"> 
    4343<input type="hidden" name="mode" value="confirm" /> 
    44 <input type="hidden" name="sql_id" value="<!--{$sql_id}-->" /> 
     44<input type="hidden" name="sql_id" value="<!--{$arrForm.sql_id|h}-->" /> 
    4545<input type="hidden" name="csv_output_id" value="" /> 
    46 <input type="hidden" name="selectTable" value="" /> 
     46<input type="hidden" name="select_table" value="" /> 
    4747<div id="admin-contents" class="contents-main"> 
    4848  <h2>SQL一覧</h2> 
     
    5151  <table id="contents-csv-sqllist" class="list center"> 
    5252    <!--{foreach key=key item=item from=$arrSqlList}--> 
    53     <tr style="background-color:<!--{if $item.sql_id == $sql_id}--><!--{$smarty.const.SELECT_RGB}--><!--{else}-->#ffffff<!--{/if}-->;"> 
     53    <tr style="background-color:<!--{if $item.sql_id == $arrForm.sql_id}--><!--{$smarty.const.SELECT_RGB}--><!--{else}-->#ffffff<!--{/if}-->;"> 
    5454      <td> 
    55         <a href="?sql_id=<!--{$item.sql_id}-->" ><!--{$item.sql_name}--></a> 
     55        <a href="?sql_id=<!--{$item.sql_id}-->" ><!--{$item.sql_name|h}--></a> 
    5656      </td> 
    5757      <td> 
     
    7777      <td> 
    7878        <span class="attention"><!--{$arrErr.sql_name}--></span> 
    79         <input type="text" name="sql_name" value="<!--{$arrSqlData.sql_name|h}-->" maxlength="<!--{$smarty.const.STEXT_LEN}-->" style="<!--{if $arrErr.name != ""}-->background-color: <!--{$smarty.const.ERR_COLOR}-->;<!--{/if}-->" size="60" class="box60" /> 
     79        <input type="text" name="sql_name" value="<!--{$arrForm.sql_name|h}-->" maxlength="<!--{$smarty.const.STEXT_LEN}-->" style="<!--{if $arrErr.name != ""}-->background-color: <!--{$smarty.const.ERR_COLOR}-->;<!--{/if}-->" size="60" class="box60" /> 
    8080        <span class="attention"> (上限<!--{$smarty.const.STEXT_LEN}-->文字)</span> 
    8181      </td> 
    8282    </tr> 
    8383    <tr> 
    84       <th align="center">SQL文<span class="attention"> *</span><br /> (SELECTは記述しないでください。)</td> 
     84      <th align="center">SQL文<span class="attention"> *</span><br /> (最初のSELECTは記述しないでください。)</td> 
    8585      <td align="left"> 
    8686        <span class="attention"><!--{$arrErr.csv_sql}--></span> 
    8787        <div> 
    88           <textarea name="csv_sql" cols=75 rows=30 align="left" wrap=off style="<!--{if $arrErr.csv_sql != ""}-->background-color: <!--{$smarty.const.ERR_COLOR}-->;<!--{/if}-->"><!--{$arrSqlData.csv_sql}--></textarea> 
     88          <textarea name="csv_sql" cols=50 rows=20 align="left" wrap=off style="<!--{if $arrErr.csv_sql != ""}-->background-color: <!--{$smarty.const.ERR_COLOR}-->;<!--{/if}-->"><!--{$arrForm.csv_sql|h}--></textarea> 
    8989        </div> 
    9090      </td> 
     
    9797  <div class="btn-area"> 
    9898    <ul> 
    99       <li><a class="btn-action" href="javascript:;" name="subm" onclick="mode.value='confirm'; fnTargetSelf(); return false;"><span class="btn-next">この内容で登録する</span></a></li> 
     99      <li><a class="btn-action" href="javascript:;" name="subm" onclick="fnFormModeSubmit('form1', 'confirm', '', '')"><span class="btn-next">この内容で登録する</span></a></li> 
    100100    </ul> 
    101101  </div> 
     
    105105  <div id="contents-csv-sqltbl"> 
    106106    <h3>テーブル一覧</h3> 
    107     <select name="arrTableList[]" size="20" style="width:325px; height:300px;" onChange="mode.value=''; selectTable.value=this.value; submit();" onDblClick="csv_sql.value = csv_sql.value +' , ' + this.value;"> 
    108       <!--{html_options options=$arrTableList selected=$selectTable}--> 
     107    <select name="arrTableList[]" size="20" style="width:325px; height:300px;" onChange="mode.value=''; select_table.value=this.value; submit();" onDblClick="csv_sql.value = csv_sql.value +' , ' + this.value;"> 
     108      <!--{html_options options=$arrTableList selected=$arrForm.select_table}--> 
    109109    </select> 
    110110  </div> 
  • branches/version-2_5-dev/data/Smarty/templates/admin/contents/csv_sql_view.tpl

    r20116 r20318  
    2727  <tr> 
    2828    <th>SQL文</th> 
    29     <td><!--{$sql|h|nl2br}--></td> 
     29    <td>SELECT <!--{$arrForm.csv_sql|h|nl2br}--></td> 
    3030  </tr> 
    3131  <tr> 
    3232    <th>エラー内容</th> 
    3333    <td> 
     34      <!--{if $arrErr}--> 
     35         <!--{foreach key=key item=item from=$arrErr key=key}--> 
     36            <!--{$item}--> 
     37         <!--{/foreach}--> 
     38      <!--{/if}--> 
    3439      <!--{if $sqlerr != ""}--> 
    3540        <!--{$sqlerr|h|nl2br}--> 
    36       <!--{else}--> 
     41      <!--{elseif !$arrErr}--> 
    3742        エラーはありません 
    3843      <!--{/if}--> 
  • branches/version-2_5-dev/data/class/helper/SC_Helper_CSV.php

    r20285 r20318  
    232232        } 
    233233        // 固有処理ここまで 
    234  
     234        return $this->sfDownloadCsvFromSql($sql, $arrVal, $this->arrSubnavi[$csv_id], $arrOutput['disp_name'], $is_download); 
     235    } 
     236 
     237    /** 
     238     * SQL文からクエリ実行し CSVファイルを送信する 
     239     * 
     240     * @param integer $sql SQL文 
     241     * @param array $arrVal プリペアドステートメントの実行時に使用される配列。配列の要素数は、クエリ内のプレースホルダの数と同じでなければなりません。  
     242     * @param string $file_head ファイル名の頭に付ける文字列 
     243     * @param array $arrHeader ヘッダ出力列配列 
     244     * @param boolean $is_download true:ダウンロード用出力までさせる false:CSVの内容を返す(旧方式、メモリを食います。) 
     245     * @return mixed $is_download = true時 成功失敗フラグ(boolean) 、$is_downalod = false時 string 
     246     */ 
     247    function sfDownloadCsvFromSql($sql, $arrVal = array(), $file_head = 'csv', $arrHeader = array(), $is_download = false) { 
     248        $objQuery =& SC_Query::getSingletonInstance(); 
     249 
     250        // 実行時間を制限しない 
     251        @set_time_limit(0); 
    235252        // ヘッダ構築 
    236         $header = $this->sfArrayToCSV($arrOutput['disp_name']); 
    237         $header = mb_convert_encoding($header, 'SJIS-Win'); 
    238         $header .= "\r\n"; 
     253        if(is_array($arrHeader)) { 
     254            $header = $this->sfArrayToCSV($arrHeader); 
     255            $header = mb_convert_encoding($header, 'SJIS-Win'); 
     256            $header .= "\r\n"; 
     257        } 
    239258 
    240259        //テンポラリファイル作成 
    241260        // TODO: パフォーマンス向上には、ストリームを使うようにすると良い 
    242         //  環境要件がバージョン5.1以上になったら使うように変えても良いかと 
     261        //  環境要件がPHPバージョン5.1以上になったら使うように変えても良いかと 
    243262        //  fopen('php://temp/maxmemory:'. (5*1024*1024), 'r+'); 
    244         $tmp_filename = tempnam(CSV_TEMP_REALDIR, $this->arrSubnavi[$csv_id] . '_csv'); 
     263        $tmp_filename = tempnam(CSV_TEMP_REALDIR, $file_head . '_csv'); 
    245264        $this->fpOutput = fopen($tmp_filename, "w+"); 
    246265        fwrite($this->fpOutput, $header); 
     
    251270        if($is_download) { 
    252271            // CSVを送信する。 
    253             $this->lfDownloadCSVFile($tmp_filename,$this->arrSubnavi[$csv_id] . "_"); 
     272            $this->lfDownloadCSVFile($tmp_filename, $file_head . "_"); 
    254273            $res = true; 
    255274        }else{ 
    256275            $res = SC_Utils_Ex::sfReadFile($tmp_filename); 
    257276        } 
    258          
     277 
    259278        //テンポラリファイル削除 
    260279        unlink($tmp_filename); 
    261280        return $res; 
    262281    } 
     282 
    263283 
    264284    // CSV出力データを作成する。(レビュー) 
  • branches/version-2_5-dev/data/class/pages/admin/contents/LC_Page_Admin_Contents_CSV.php

    r20116 r20318  
    4848        $this->tpl_subnavi = 'contents/subnavi.tpl'; 
    4949        $this->tpl_subno = 'csv'; 
    50  
    5150        $this->tpl_mainno = "contents"; 
    5251        $this->tpl_subtitle = 'CSV出力設定'; 
     52 
     53        $objCSV = new SC_Helper_CSV_Ex(); 
     54        $this->arrSubnavi = $objCSV->arrSubnavi; // 別名 
     55        $this->tpl_subno_csv = $objCSV->arrSubnavi[1]; //デフォルト 
     56        $this->arrSubnaviName = $objCSV->arrSubnaviName; // 表示名 
    5357    } 
    5458 
     
    6973     */ 
    7074    function action() { 
    71         $objSess = new SC_Session(); 
    72         $objCSV = new SC_Helper_CSV_Ex(); 
    73  
    74         $this->arrSubnavi = $objCSV->arrSubnavi; 
    75         $this->tpl_subno_csv = $objCSV->arrSubnavi[1]; 
    76         $this->arrSubnaviName = $objCSV->arrSubnaviName; 
    77  
    7875        // 認証可否の判定 
    79         $objSess = new SC_Session(); 
    80         SC_Utils_Ex::sfIsSuccess($objSess); 
    81  
    82         $get_tpl_subno_csv = isset($_GET['tpl_subno_csv']) 
    83                                      ? $_GET['tpl_subno_csv'] : ""; 
    84  
    85         // GETで値が送られている場合にはその値を元に画面表示を切り替える 
    86         if ($get_tpl_subno_csv != ""){ 
    87             // 送られてきた値が配列に登録されていなければTOPを表示 
    88             if (in_array($get_tpl_subno_csv,$this->arrSubnavi)){ 
    89                 $subno_csv = $get_tpl_subno_csv; 
    90             }else{ 
    91                 $subno_csv = $this->arrSubnavi[1]; 
    92             } 
    93         } else { 
    94             // GETで値がなければPOSTの値を使用する 
    95             if (isset($_POST['tpl_subno_csv']) 
    96                 && $_POST['tpl_subno_csv'] != "") { 
    97  
    98                 $subno_csv = $_POST['tpl_subno_csv']; 
    99             }else{ 
    100                 $subno_csv = $this->arrSubnavi[1]; 
    101             } 
    102         } 
    103  
    104         // subnoの番号を取得 
    105         $subno_id = array_keys($this->arrSubnavi,$subno_csv); 
    106         $subno_id = $subno_id[0]; 
    107  
    108         // データの登録 
     76        SC_Utils_Ex::sfIsSuccess(new SC_Session()); 
     77 
     78        // 不正アクセスチェック  
     79        if ($_SERVER["REQUEST_METHOD"] == "POST") { 
     80            if (!SC_Helper_Session_Ex::isValidToken()) { 
     81                SC_Utils_Ex::sfDispError(INVALID_MOVE_ERRORR); 
     82            } 
     83        } 
     84        // トランザクションID 
     85        $this->transactionid = SC_Helper_Session_Ex::getToken(); 
     86 
     87        // パラメータ管理クラス 
     88        $objFormParam = new SC_FormParam(); 
     89        // パラメータ設定 
     90        $this->lfInitParam($objFormParam); 
     91        $objFormParam->setParam($_POST); 
     92        $objFormParam->setParam($_GET); 
     93        $objFormParam->convParam(); 
     94 
     95        // CSV_IDの読み込み 
     96        $this->tpl_subno_csv = $objFormParam->getValue('tpl_subno_csv'); 
     97        $this->tpl_csv_id = $this->lfGetCsvId($this->tpl_subno_csv); 
     98 
    10999        switch ($this->getMode()) { 
    110100        case 'confirm': 
    111             // エラーチェック 
    112             $this->arrErr = $this->lfCheckError($_POST['output_list']); 
    113  
    114             if (count($this->arrErr) <= 0){ 
    115                 // データの更新 
    116                 $this->lfUpdCsvOutput($subno_id, $_POST['output_list']); 
    117  
    118                 // 画面のリロード 
    119                 $this->objDisplay->reload(array("tpl_subno_csv" => $subno_csv)); 
    120             } 
     101            // 入力パラメーターチェック 
     102            $this->arrErr = $objFormParam->checkError(); 
     103            if(SC_Utils_Ex::isBlank($this->arrErr)) { 
     104                // 更新 
     105                $this->tpl_is_update = $this->lfUpdCsvOutput($this->tpl_csv_id, $objFormParam->getValue('output_list')); 
     106            } 
     107            break; 
     108        case 'defaultset': 
     109            //初期値に戻す 
     110            $this->tpl_is_update = $this->lfSetDefaultCsvOutput($this->tpl_csv_id); 
    121111            break; 
    122112        default: 
    123113            break; 
    124114        } 
    125  
    126         // 出力項目の取得 
    127         $arrSelected = SC_Utils_Ex::sfSwapArray($objCSV->sfGetCsvOutput($subno_id, 'status = 1')); 
    128  
    129         if (!isset($arrSelected['no'])) $arrSelected['no'] = array(); 
    130  
    131         $this->arrSelected = $arrSelected['no']; 
    132  
    133         // 全項目の取得 
    134         $arrOptions = SC_Utils_Ex::sfSwapArray($objCSV->sfGetCsvOutput($subno_id)); 
    135  
    136         if (!isset($arrOptions['no'])) $arrOptions['no'] = array(); 
    137         if (!isset($arrOptions['disp_name'])) $arrOptions['disp_name'] = array(); 
    138  
    139         $arrOptions = SC_Utils_Ex::sfarrCombine($arrOptions['no'], $arrOptions['disp_name']); 
    140  
    141         $this->arrOptions = $arrOptions; 
    142  
    143         $this->SubnaviName = $this->arrSubnaviName[$subno_id]; 
    144         $this->tpl_subno_csv = $subno_csv; 
     115        $this->arrSelected = $this->lfGetSelected($this->tpl_csv_id); 
     116        $this->arrOptions = $this->lfGetOptions($this->tpl_csv_id); 
     117        $this->tpl_subtitle .= ' - ' . $this->arrSubnaviName[ $this->tpl_csv_id ]; 
     118    } 
     119 
     120    /** 
     121     * パラメーター情報の初期化 
     122     * 
     123     * @param array $objFormParam フォームパラメータークラス 
     124     * @return void 
     125     */ 
     126    function lfInitParam(&$objFormParam) { 
     127        $objFormParam->addParam('編集種別', 'tpl_subno_csv', STEXT_LEN, 'a', array("ALNUM_CHECK", "MAX_LENGTH_CHECK"), 'product'); 
     128        $objFormParam->addParam('出力設定リスト', 'output_list', INT_LEN, 'n', array("NUM_CHECK", "MAX_LENGTH_CHECK", "EXIST_CHECK")); 
     129        //デフォルト値で上書き 
     130        $objFormParam->setParam(array('tpl_subno_csv' => 'product')); 
     131    } 
     132 
     133    /** 
     134     * CSVカラム設定の読み込み 
     135     * 
     136     * @param integer $csv_id CSV ID 
     137     * @param integer $csv_status_flg 読み込む対象のフラグ CSV_COLUMN_STATUS_FLG_ENABLE or '' 
     138     * @return array SwapArrayしたカラム設定 
     139     */ 
     140    function lfGetCSVColumn($csv_id, $csv_status_flg = '', $order ='rank, no') { 
     141        $objCSV = new SC_Helper_CSV_Ex(); 
     142        if(SC_Utils_Ex::sfIsInt($csv_id)) { 
     143            if($csv_status_flg !="") { 
     144                $arrData = $objCSV->sfGetCsvOutput($csv_id, 'status = ?' , array($csv_status_flg), $order); 
     145            }else{ 
     146                $arrData = $objCSV->sfGetCsvOutput($csv_id, '', array(), $order); 
     147            } 
     148            $arrData = SC_Utils_Ex::sfSwapArray($arrData); 
     149        }else{ 
     150            $arrData = array(); 
     151        } 
     152        return $arrData; 
     153    } 
     154 
     155    /** 
     156     * 選択済みカラム列情報を取得 
     157     * 
     158     * @param integer $csv_id CSV ID 
     159     * @return array 選択済みカラム列情報 
     160     */ 
     161    function lfGetSelected($csv_id) { 
     162        $arrData = $this->lfGetCSVColumn($csv_id, CSV_COLUMN_STATUS_FLG_ENABLE); 
     163        if (!isset($arrData['no'])) { 
     164            $arrData['no'] = array(); 
     165        } 
     166        return $arrData['no']; 
     167    } 
     168 
     169    /** 
     170     * カラム列情報と表示名情報を取得 
     171     * 
     172     * @param integer $csv_id CSV ID 
     173     * @return array 選択済みカラム列情報 
     174     */ 
     175    function lfGetOptions($csv_id) { 
     176        $arrData = $this->lfGetCSVColumn($csv_id); 
     177        if (!isset($arrData['no'])) { 
     178            $arrData['no'] = array(); 
     179            $arrData['disp_name'] = array(); 
     180        } 
     181        $arrData = SC_Utils_Ex::sfArrCombine($arrData['no'], $arrData['disp_name']); 
     182        return $arrData; 
    145183    } 
    146184 
     
    154192    } 
    155193 
     194    /** 
     195     * CSV名からCSV_IDを取得する。 
     196     * 
     197     * @param string $subno_csv CSV名 
     198     * @return integer CSV_ID 
     199     */ 
     200    function lfGetCsvId($subno_csv) { 
     201        $objCSV = new SC_Helper_CSV_Ex(); 
     202        $arrKey = array_keys($objCSV->arrSubnavi,$subno_csv); 
     203        $csv_id = $arrKey[0]; 
     204        if(!SC_Utils_Ex::sfIsInt($csv_id)) { 
     205            //初期値取りだし 
     206            $arrKey = array_keys($objCSV->arrSubnavi); 
     207            $csv_id = $arrKey[0]; 
     208        } 
     209        return $csv_id; 
     210    } 
     211 
     212    /** 
     213     * CSV出力項目設定を初期化する 
     214     * 
     215     * @param integer $csv_id CSV_ID 
     216     * @return boolean 成功:true 
     217     */ 
     218    function lfSetDefaultCsvOutput($csv_id) { 
     219        $arrData = $this->lfGetCSVColumn($csv_id, '', $order = 'no'); 
     220        if (!isset($arrData['no'])) { 
     221            $arrData['no'] = array(); 
     222        } 
     223        return $this->lfUpdCsvOutput($csv_id, $arrData['no']); 
     224    } 
     225 
     226    /** 
     227     * CSV出力項目設定を更新する処理 
     228     * 
     229     * @param integer $csv_id CSV_ID 
     230     * @param array $arrData 有効にするCSV列データ配列 
     231     * @return boolean 成功:true 
     232     */ 
    156233    function lfUpdCsvOutput($csv_id, $arrData = array()){ 
    157         $objQuery = new SC_Query(); 
    158  
     234        $objQuery =& SC_Query::getSingletonInstance(); 
    159235        // ひとまず、全部使用しないで更新する 
    160         $upd_sql = "UPDATE dtb_csv SET status = 2, rank = NULL, update_date = now() WHERE csv_id = ?"; 
    161         $objQuery->query($upd_sql, array($csv_id)); 
    162  
     236        $table = "dtb_csv"; 
     237        $where = "csv_id = ?"; 
     238        $arrWhereVal = array($csv_id); 
     239        $arrUpdVal = array( 'status' => '2', 'rank' => NULL, 'update_date' => 'now()' ); 
     240 
     241        $objQuery->begin(); 
     242        $objQuery->update($table, $arrUpdVal, $where, $arrWhereVal); 
    163243        // 使用するものだけ、再更新する。 
    164244        if (is_array($arrData)) { 
     245            $where .= " AND no = ?"; 
     246            $arrUpdVal = array('status' => '1'); 
    165247            foreach($arrData as $key => $val){ 
    166                 $upd_sql = "UPDATE dtb_csv SET status = 1, rank = ? WHERE csv_id = ? AND no = ? "; 
    167                 $objQuery->query($upd_sql, array($key+1, $csv_id, $val)); 
    168             } 
    169         } 
    170     } 
    171  
    172     Function Lfcheckerror($data){ 
    173         $objErr = new SC_CheckError(); 
    174         $objErr->doFunc( array("出力項目", "output_list"), array("EXIST_CHECK") ); 
    175  
    176         return $objErr->arrErr; 
    177  
     248                $arrWhereVal = array($csv_id, $val); 
     249                $arrUpdVal['rank'] = $key + 1; 
     250                $objQuery->update($table, $arrUpdVal, $where, $arrWhereVal); 
     251            } 
     252        } 
     253        $objQuery->commit(); 
     254        return true; 
    178255    } 
    179256} 
  • branches/version-2_5-dev/data/class/pages/admin/contents/LC_Page_Admin_Contents_CsvSql.php

    r20116 r20318  
    6868     */ 
    6969    function action() { 
    70         $objDbFactory = SC_DB_DBFactory_Ex::getInstance(); 
    71  
    7270        // 認証可否の判定 
    73         $objSess = new SC_Session(); 
    74         SC_Utils_Ex::sfIsSuccess($objSess); 
    75  
    76         if (!isset($_POST['sql_id'])) $_POST['sql_id'] = ""; 
    77         if (!isset($_GET['sql_id'])) $_GET['sql_id'] = ""; 
    78         if (!isset($_POST['selectTable'])) $_POST['selectTable'] = ""; 
    79  
    80         // SQL_IDの取得 
    81         if ($_POST['sql_id'] != "") { 
    82             $sql_id = $_POST['sql_id']; 
    83         }elseif($_GET['sql_id'] != ""){ 
    84             $sql_id = $_GET['sql_id']; 
    85         }else{ 
    86             $sql_id = ""; 
    87         } 
    88  
    89         $mode = $this->getMode(); 
    90  
    91         switch($mode) { 
    92             // データの登録 
     71        SC_Utils_Ex::sfIsSuccess(new SC_Session()); 
     72 
     73        // パラメータ管理クラス 
     74        $objFormParam = new SC_FormParam(); 
     75        // パラメータ設定 
     76        $this->lfInitParam($objFormParam); 
     77        $objFormParam->setParam($_POST); 
     78        $objFormParam->setParam($_GET); 
     79        $objFormParam->convParam(); 
     80        $this->arrForm = $objFormParam->getHashArray(); 
     81 
     82        switch($this->getMode()) { 
     83        // データの登録 
    9384        case "confirm": 
    94             // エラーチェック 
    95             $this->arrErr = $this->lfCheckError($_POST); 
    96  
    97             if (count($this->arrErr) <= 0){ 
     85            $this->arrErr = $this->lfCheckConfirmError($objFormParam); 
     86            if(SC_Utils_Ex::isBlank($this->arrErr)) { 
    9887                // データの更新 
    99                 $sql_id = $this->lfUpdData($sql_id, $_POST); 
     88                $this->arrForm['sql_id'] = $this->lfUpdData($objFormParam->getValue('sql_id'), $objFormParam->getDbArray()); 
    10089                // 完了メッセージ表示 
    10190                $this->tpl_onload = "alert('登録が完了しました。');"; 
    10291            } 
    10392            break; 
    104  
    105             // 確認画面 
     93        // 確認画面 
    10694        case "preview": 
    107             // SQL文表示 
    108             $sql = "SELECT \n" . $_POST['csv_sql']; // FIXME 
    109             $this->sql = $sql; 
    110  
    111             // エラー表示 
    112             $objErrMsg = $this->lfCheckSQL($_POST); 
    113             if ($objErrMsg != "") { 
    114                 $errMsg = $objErrMsg->message . "\n" . $objErrMsg->userinfo; 
    115             } 
    116  
    117             $this->sqlerr = isset($errMsg) ? $errMsg : "" ; 
    118  
    119             // 画面の表示 
     95            $this->arrErr = $this->lfCheckPreviewError($objFormParam); 
     96            if(SC_Utils_Ex::isBlank($this->arrErr)) { 
     97                $this->sqlerr = $this->lfCheckSQL($objFormParam->getValue('csv_sql')); 
     98            } 
    12099            $this->setTemplate('contents/csv_sql_view.tpl'); 
    121100            return; 
    122101            break; 
    123  
    124             // 新規作成 
     102        // 新規作成 
    125103        case "new_page": 
    126             $this->objDisplay->reload(array(), true); 
    127             exit; 
    128             break; 
    129  
    130             // データ削除 
     104            // リロード 
     105            SC_Response_Ex::reload(); 
     106            break; 
     107        // データ削除 
    131108        case "delete": 
    132             $this->lfDelData($sql_id); 
    133             $this->objDisplay->reload(array(), true); 
    134             exit; 
    135             break; 
    136  
     109            $this->arrErr = $this->lfCheckDeleteError($objFormParam); 
     110            if(SC_Utils_Ex::isBlank($this->arrErr)) { 
     111                $this->lfDelData($objFormParam->getValue('sql_id')); 
     112                SC_Response_Ex::reload(); 
     113                exit; 
     114            } 
     115            break; 
     116        // CSV出力 
    137117        case "csv_output": 
    138             // CSV出力データ取得 
    139             $arrCsvData = $this->lfGetSqlList(" WHERE sql_id = ?", array($_POST['csv_output_id'])); 
    140  
    141             $objQuery = new SC_Query(); 
    142  
    143             $arrCsvOutputData = $objQuery->getAll("SELECT " . $arrCsvData[0]['csv_sql']); 
    144  
    145             if (count($arrCsvOutputData) > 0) { 
    146  
    147                 $arrKey = array_keys(SC_Utils_Ex::sfSwapArray($arrCsvOutputData)); 
    148                 $i = 0; 
    149                 $header = ""; 
    150                 foreach($arrKey as $data) { 
    151                     if ($i != 0) $header .= ","; 
    152                     $header .= $data; 
    153                     $i ++; 
    154                 } 
    155                 $header .= "\n"; 
    156  
    157                 $data = SC_Utils_Ex::getCSVData($arrCsvOutputData, $arrKey); 
    158                 // CSV出力 
    159                 SC_Utils_Ex::sfCSVDownload($header.$data); 
     118            $this->arrErr = $this->lfCheckOutputError($objFormParam); 
     119            if(SC_Utils_Ex::isBlank($this->arrErr)) { 
     120                $this->lfDoCsvOutput($objFormParam->getValue('csv_output_id')); 
    160121                exit; 
    161             }else{ 
    162                 $this->tpl_onload = "alert('出力データがありません。');"; 
    163                 $sql_id = ""; 
    164                 $_POST=""; 
    165             } 
    166             break; 
    167         } 
    168  
    169         // mode が confirm 以外のときは完了メッセージは出力しない 
    170         if ($mode != "confirm" and $mode != "csv_output") { 
    171             $this->tpl_onload = ""; 
     122            } 
     123            break; 
     124        default: 
     125            $this->arrErr = $objFormParam->checkError(); 
     126            if(SC_Utils_Ex::isBlank($this->arrErr)) { 
     127                // 設定内容を取得する 
     128                $this->arrForm = $this->lfGetSqlData($objFormParam); 
     129                // カラム一覧を取得する 
     130                $this->arrColList = $this->lfGetColList($objFormParam->getValue('select_table')); 
     131            } 
     132            break; 
    172133        } 
    173134 
    174135        // 登録済みSQL一覧取得 
    175         $arrSqlList = $this->lfGetSqlList(); 
    176  
    177         // 編集用SQLデータの取得 
    178         if ($sql_id != "") { 
    179             $arrSqlData = $this->lfGetSqlList(" WHERE sql_id = ?", array($sql_id)); 
    180         } 
    181  
     136        $this->arrSqlList = $this->lfGetSqlList(); 
    182137        // テーブル一覧を取得する 
    183         $arrTableList = $this->lfGetTableList(); 
    184         $arrTableList = SC_Utils_Ex::sfSwapArray($arrTableList); 
    185  
    186         // 現在選択されているテーブルを取得する 
    187         if ($_POST['selectTable'] == ""){ 
    188             $selectTable = $arrTableList['table_name'][0]; 
    189         }else{ 
    190             $selectTable = $_POST['selectTable']; 
    191         } 
    192  
    193         // カラム一覧を取得する 
    194         $arrColList = $this->lfGetColumnList($selectTable); 
    195         $arrColList =  SC_Utils_Ex::sfSwapArray($arrColList); 
    196  
    197         // 表示させる内容を編集 
    198         foreach ($arrTableList['description'] as $key => $val) { 
    199             $arrTableList['description'][$key] = $arrTableList['table_name'][$key] . ":" . $arrTableList['description'][$key]; 
    200         } 
    201         foreach ($arrColList['description'] as $key => $val) { 
    202             $arrColList['description'][$key] = $arrColList['column_name'][$key] . ":" . $arrColList['description'][$key]; 
    203         } 
    204  
    205  
    206         $arrDiff = array_diff($objDbFactory->sfGetColumnList($selectTable), $arrColList["column_name"]); 
    207         $arrColList["column_name"] = array_merge($arrColList["column_name"], $arrDiff); 
    208         $arrColList["description"] = array_merge($arrColList["description"], $arrDiff); 
    209  
    210         // テンプレートに出力するデータをセット 
    211         $this->arrSqlList = $arrSqlList;    // SQL一覧 
    212         $this->arrTableList = SC_Utils_Ex::sfarrCombine($arrTableList['table_name'], $arrTableList['description']); // テーブル一覧 
    213         $this->arrColList = SC_Utils_Ex::sfarrCombine($arrColList['column_name'],$arrColList['description']);           // カラム一覧 
    214         $this->selectTable = $selectTable;  // 選択されているテーブル 
    215         $this->sql_id = $sql_id;            // 選択されているSQL 
    216  
    217         // POSTされたデータをセットする 
    218         if (isset($_POST['sql_name']) && isset($_POST['csv_sql'])){ 
    219             $arrSqlData[0]['sql_name'] = isset($_POST['sql_name']) ? $_POST['sql_name'] : ""; 
    220             $arrSqlData[0]['csv_sql'] = isset($_POST['csv_sql']) ? $_POST['csv_sql'] : ""; 
    221         } 
    222         $this->arrSqlData = $arrSqlData[0]; // 選択されているSQLデータ 
     138        $this->arrTableList = $this->lfGetTableList(); 
     139    } 
     140 
     141    /** 
     142     * パラメーター情報の初期化 
     143     * 
     144     * @param array $objFormParam フォームパラメータークラス 
     145     * @return void 
     146     */ 
     147    function lfInitParam(&$objFormParam) { 
     148        $objFormParam->addParam('SQL ID', 'sql_id', INT_LEN, 'n', array("NUM_CHECK","MAX_LENGTH_CHECK")); 
     149        $objFormParam->addParam('CSV出力対象SQL ID', 'csv_output_id', INT_LEN, 'n', array("NUM_CHECK","MAX_LENGTH_CHECK"), "", false); 
     150        $objFormParam->addParam('選択テーブル', 'select_table', STEXT_LEN, 'KVa', array("GRAPH_CHECK","MAX_LENGTH_CHECK"), "", false); 
     151        $objFormParam->addParam('名称', 'sql_name', STEXT_LEN, 'KVa', array("MAX_LENGTH_CHECK","SPTAB_CHECK")); 
     152        $objFormParam->addParam('SQL文', 'csv_sql', "30000", 'KVa', array("MAX_LENGTH_CHECK","SPTAB_CHECK")); 
     153    } 
     154     
     155    /** 
     156     * SQL登録エラーチェック 
     157     * 
     158     * @param array $objFormParam フォームパラメータークラス 
     159     * @return array エラー配列 
     160     */ 
     161    function lfCheckConfirmError(&$objFormParam) { 
     162        // パラメーターの基本チェック 
     163        $arrErr = $objFormParam->checkError(); 
     164        // 拡張エラーチェック 
     165        $objErr = new SC_CheckError($objFormParam->getHashArray()); 
     166        $objErr->doFunc( array("名称", "sql_name"), array("EXIST_CHECK") ); 
     167        $objErr->doFunc( array("SQL文", "csv_sql", "30000"), array("EXIST_CHECK", "MAX_LENGTH_CHECK") ); 
     168        $objErr->doFunc( array('SQL文には読み込み関係以外のSQLコマンドおよび";"記号', 'csv_sql', $this->lfGetSqlDenyList()), array("PROHIBITED_STR_CHECK")); 
     169        if(!SC_Utils_Ex::isBlank($objErr->arrErr)) { 
     170            $arrErr = array_merge($arrErr, $objErr->arrErr); 
     171        } 
     172        // SQL文自体の確認、エラーが無い時のみ実行 
     173        if(SC_Utils_Ex::isBlank($arrErr)) { 
     174            $sql_error = $this->lfCheckSQL($objFormParam->getValue('csv_sql')); 
     175            if(!SC_Utils_Ex::isBlank($sql_error)) { 
     176                $arrErr["csv_sql"] = "※ SQL文が不正です。SQL文を見直してください"; 
     177            } 
     178        } 
     179        return $arrErr; 
     180    } 
     181 
     182    /** 
     183     * SQL確認エラーチェック 
     184     * 
     185     * @param array $objFormParam フォームパラメータークラス 
     186     * @return array エラー配列 
     187     */ 
     188    function lfCheckPreviewError(&$objFormParam) { 
     189        // パラメーターの基本チェック 
     190        $arrErr = $objFormParam->checkError(); 
     191        // 拡張エラーチェック 
     192        $objErr = new SC_CheckError($objFormParam->getHashArray()); 
     193        $objErr->doFunc( array("SQL文", "csv_sql", "30000"), array("EXIST_CHECK", "MAX_LENGTH_CHECK") ); 
     194        $objErr->doFunc( array('SQL文には読み込み関係以外のSQLコマンドおよび";"記号', 'csv_sql', $this->lfGetSqlDenyList()), array("PROHIBITED_STR_CHECK")); 
     195        if(!SC_Utils_Ex::isBlank($objErr->arrErr)) { 
     196            $arrErr = array_merge($arrErr, $objErr->arrErr); 
     197        } 
     198        return $arrErr; 
     199    } 
     200 
     201    /** 
     202     * SQL設定 削除エラーチェック 
     203     * 
     204     * @param array $objFormParam フォームパラメータークラス 
     205     * @return array エラー配列 
     206     */ 
     207    function lfCheckDeleteError(&$objFormParam) { 
     208        // パラメーターの基本チェック 
     209        $arrErr = $objFormParam->checkError(); 
     210        // 拡張エラーチェック 
     211        $objErr = new SC_CheckError($objFormParam->getHashArray()); 
     212        $objErr->doFunc( array("SQL ID", "sql_id"), array("EXIST_CHECK") ); 
     213        if(!SC_Utils_Ex::isBlank($objErr->arrErr)) { 
     214            $arrErr = array_merge($arrErr, $objErr->arrErr); 
     215        } 
     216        return $arrErr; 
     217    } 
     218 
     219    /** 
     220     * SQL設定 CSV出力エラーチェック 
     221     * 
     222     * @param array $objFormParam フォームパラメータークラス 
     223     * @return array エラー配列 
     224     */ 
     225    function lfCheckOutputError(&$objFormParam) { 
     226        // パラメーターの基本チェック 
     227        $arrErr = $objFormParam->checkError(); 
     228        // 拡張エラーチェック 
     229        $objErr = new SC_CheckError($objFormParam->getHashArray()); 
     230        $objErr->doFunc( array("CSV出力対象SQL ID", "csv_output_id"), array("EXIST_CHECK") ); 
     231        if(!SC_Utils_Ex::isBlank($objErr->arrErr)) { 
     232            $arrErr = array_merge($arrErr, $objErr->arrErr); 
     233        } 
     234        return $arrErr; 
    223235    } 
    224236 
     
    235247     * テーブル一覧を取得する. 
    236248     * 
    237      * @return void 
     249     * @return array テーブル名一覧 
    238250     */ 
    239251    function lfGetTableList(){ 
    240         $objQuery = new SC_Query(); 
    241         $arrRet = array();      // 結果取得用 
    242  
    243         $sql = ""; 
    244         $sql .= "SELECT table_name, description FROM dtb_table_comment WHERE column_name IS NULL ORDER BY table_name"; 
    245         $arrRet = $objQuery->getAll($sql); 
    246  
     252        $objQuery =& SC_Query::getSingletonInstance(); 
     253        // 実テーブル上のカラム設定を見に行く仕様に変更 ref #476 
     254        $arrTable = $objQuery->listTables(); 
     255        if(SC_Utils_Ex::isBlank($arrTable)) { 
     256            return array(); 
     257        } 
     258        $arrRet = array(); 
     259        foreach($arrTable as $table) { 
     260            if(substr($table, 0, 4) == 'dtb_') { 
     261                $arrRet[ $table ] = 'データテーブル: ' . $table; 
     262            }else if(substr($table, 0, 4) == 'mtb_') { 
     263                $arrRet[ $table ] = 'マスタテーブル: ' . $table; 
     264            }else if(substr($table, 0, 3) == 'vw_') { 
     265                $arrRet[ $table ] = 'ビュー: ' . $table; 
     266            } 
     267        } 
    247268        return $arrRet; 
    248269    } 
     
    254275     * @return array カラム一覧の配列 
    255276     */ 
    256     function lfGetColumnList($selectTable){ 
    257         $objQuery = new SC_Query(); 
    258         $arrRet = array();      // 結果取得用 
    259         $sql = ""; 
    260         $sql .= " SELECT column_name, description FROM dtb_table_comment WHERE table_name = ? AND column_name IS NOT NULL"; 
    261         $arrRet = $objQuery->getAll($sql, array($selectTable)); 
    262  
    263         return $arrRet; 
     277    function lfGetColList($table){ 
     278        if(SC_Utils_Ex::isBlank($table)) { 
     279            return array(); 
     280        } 
     281        $objQuery =& SC_Query::getSingletonInstance(); 
     282        // 実テーブル上のカラム設定を見に行く仕様に変更 ref #476 
     283        $arrColList = $objQuery->listTableFields($table); 
     284        $arrColList= SC_Utils_Ex::sfArrCombine($arrColList, $arrColList); 
     285        return $arrColList; 
    264286    } 
    265287 
     
    268290     * 
    269291     * @param string $where Where句 
    270      * @param array $arrData 絞り込みデータ 
     292     * @param array $arrVal 絞り込みデータ 
    271293     * @return array 取得結果の配列 
    272294     */ 
    273     function lfGetSqlList($where = "" , $arrData = array()){ 
    274         $objQuery = new SC_Query(); 
    275         $arrRet = array();      // 結果取得用 
    276  
    277         $sql = ""; 
    278         $sql .= " SELECT"; 
    279         $sql .= "     sql_id,"; 
    280         $sql .= "     sql_name,"; 
    281         $sql .= "     csv_sql,"; 
    282         $sql .= "     update_date,"; 
    283         $sql .= "     create_date"; 
    284         $sql .= " FROM"; 
    285         $sql .= "     dtb_csv_sql"; 
    286  
    287         // Where句の指定があれば結合する 
    288         if ($where != "") { 
    289             $sql .= " $where "; 
     295    function lfGetSqlList($where = "" , $arrVal = array()){ 
     296        $objQuery =& SC_Query::getSingletonInstance(); 
     297        $table = "dtb_csv_sql"; 
     298        $objQuery->setOrder('sql_id'); 
     299        return $objQuery->select('*', $table, $where, $arrVal); 
     300    } 
     301 
     302    /** 
     303     * 入力されたSQL文が正しく実行出来るかのチェックを行う. 
     304     * 
     305     * @param string SQL文データ(頭にSELECTは入れない) 
     306     * @return string エラー内容 
     307     */ 
     308    function lfCheckSQL($sql){ 
     309        // FIXME: 意図的に new SC_Query しています。 force_runをtrueにする必要があるので.本当はqueryの引数で制御したい。ref SC_Query 
     310        $objQuery = new SC_Query("", true); 
     311        $err = ""; 
     312        $sql = "SELECT " . $sql . " "; 
     313        $objErrMsg = $objQuery->query($sql); 
     314        if (PEAR::isError($objErrMsg)){ 
     315            $err = $objErrMsg->message . "\n" . $objErrMsg->userinfo; 
     316        } 
     317        return $err; 
     318    } 
     319 
     320    /** 
     321     * SQL詳細設定情報呼び出し (編集中データがある場合はそれを保持する) 
     322     * 
     323     * @param array $objFormParam フォームパラメータークラス 
     324     * @return mixed 表示用パラメーター 
     325     */ 
     326    function lfGetSqlData(&$objFormParam) { 
     327        // 編集中データがある場合 
     328        if(!SC_Utils_Ex::isBlank($objFormParam->getValue('sql_name')) 
     329                or !SC_Utils_Ex::isBlank($objFormParam->getValue('csv_sql'))) { 
     330            return $objFormParam->getHashArray(); 
     331        } 
     332        $csv_id = $objFormParam->getValue('csv_id'); 
     333        if(!SC_Utils_Ex::isBlank($csv_id)) { 
     334            $arrData = $this->lfGetSqlList('csv_id = ?', array($csv_id)); 
     335            return $arrData[0]; 
     336        } 
     337        return array(); 
     338    } 
     339 
     340    /** 
     341     * DBにデータを保存する. 
     342     * 
     343     * @param integer $sql_id 出力するデータのSQL_ID 
     344     * @return void 
     345     */ 
     346    function lfDoCsvOutput($sql_id) { 
     347        $arrData = $this->lfGetSqlList('sql_id = ?', array($sql_id)); 
     348        $sql = "SELECT " . $arrData[0]['csv_sql'] . " "; 
     349 
     350        // TODO: ヘッダ取得 SQL内にLIMIT文がある場合はLIMIT句は追加しないので重いかも 
     351        $objQuery =& SC_Query::getSingletonInstance(); 
     352 
     353        $arrHeader = array(); 
     354        if(!preg_match("/ LIMIT /", $sql)) { 
     355            $head_sql = $sql . " LIMIT 0"; 
    290356        }else{ 
    291             $sql .= " ORDER BY sql_id "; 
    292         } 
    293         $sql .= " "; 
    294  
    295         // データを引数で渡されている場合にはセットする 
    296         if (count($arrData) > 0) { 
    297             $arrRet = $objQuery->getAll($sql, $arrData); 
     357            $head_sql = $sql; 
     358        } 
     359        $arrData = $objQuery->getQueryDefsFields($head_sql, array(), true); 
     360        if(!SC_Utils_Ex::isBlank($arrData)) { 
     361            foreach($arrData as $key => $val) { 
     362                $arrHeader[] = $key; 
     363            } 
     364        } 
     365        require_once(CLASS_EX_REALDIR . "helper_extends/SC_Helper_CSV_Ex.php"); 
     366        $objCSV = new SC_Helper_CSV_Ex(); 
     367        $objCSV->sfDownloadCsvFromSql($sql, array(), "contents", $arrHeader, true); 
     368        exit; 
     369    } 
     370 
     371    /** 
     372     * DBにデータを保存する. 
     373     * 
     374     * @param integer $sql_id 更新するデータのSQL_ID 
     375     * @param array $arrSqlVal 更新データの配列 
     376     * @return integer $sql_id SQL_IDを返す 
     377     */ 
     378    function lfUpdData($sql_id, $arrSqlVal){ 
     379        $objQuery =& SC_Query::getSingletonInstance(); 
     380        $table = "dtb_csv_sql"; 
     381        $arrSqlVal['update_date'] = 'now()'; 
     382        if (SC_Utils_Ex::sfIsInt($sql_id)) { 
     383            //データ更新 
     384            $where = "sql_id = ?"; 
     385            $objQuery->update($table, $arrSqlVal, $where, array($sql_id)); 
    298386        }else{ 
    299             $arrRet = $objQuery->getAll($sql); 
    300         } 
    301  
    302         return $arrRet; 
    303     } 
    304  
    305     /** 
    306      * 入力項目のエラーチェックを行う. 
    307      * 
    308      * @param array POSTデータ 
    309      * @return array エラー内容の配列 
    310      */ 
    311     function lfCheckError($data){ 
    312         $objErr = new SC_CheckError(); 
    313         $objErr->doFunc( array("名称", "sql_name"), array("EXIST_CHECK") ); 
    314         $objErr->doFunc( array("SQL文", "csv_sql", "30000"), array("EXIST_CHECK", "MAX_LENGTH_CHECK") ); 
    315  
    316         // SQLの妥当性チェック 
    317         if ($objErr->arrErr['csv_sql'] == "") { 
    318             $objsqlErr = $this->lfCheckSQL($data); 
    319             if ($objsqlErr != "") { 
    320                 $objErr->arrErr["csv_sql"] = "SQL文が不正です。SQL文を見直してください"; 
    321             } 
    322         } 
    323  
    324         return $objErr->arrErr; 
    325     } 
    326  
    327     /** 
    328      * 入力されたSQL文が正しいかチェックを行う. 
    329      * 
    330      * @param array POSTデータ 
    331      * @return array エラー内容 
    332      */ 
    333     function lfCheckSQL($data){ 
    334         $err = ""; 
    335         $objQuery = new SC_Query(); 
    336         $sql = "SELECT " . $data['csv_sql'] . " "; 
    337         $ret = $objQuery->query($sql); 
    338         if (PEAR::isError($ret)){ 
    339             $err = $ret; 
    340         } 
    341  
    342         return $err; 
    343     } 
    344  
    345     /** 
    346      * DBにデータを保存する. 
    347      * 
    348      * @param integer $sql_id 更新するデータのSQL_ID 
    349      * @param array $arrData 更新データの配列 
    350      * @return integer $sql_id SQL_IDを返す 
    351      */ 
    352     function lfUpdData($sql_id = "", $arrData = array()){ 
    353         $objQuery = new SC_Query();     // DB操作オブジェクト 
    354         $sql = "";                      // データ取得SQL生成用 
    355         $arrRet = array();              // データ取得用(更新判定) 
    356         $arrVal = array();              // データ更新 
    357  
    358         // sql_id が指定されている場合にはUPDATE 
    359         if ($sql_id != "") { 
    360             // 存在チェック 
    361             $arrSqlData = $this->lfGetSqlList(" WHERE sql_id = ?", array($sql_id)); 
    362             if (count($arrSqlData) > 0) { 
    363                 // データ更新 
    364                 $sql = "UPDATE dtb_csv_sql SET sql_name = ?, csv_sql = ?, update_date = now() WHERE sql_id = ? "; 
    365                 $arrVal= array($arrData['sql_name'], $arrData['csv_sql'], $sql_id); 
    366             }else{ 
    367                 // データの新規作成 
    368                 $sql_id = ""; 
    369                 $sql = "INSERT INTO dtb_csv_sql (sql_id, sql_name, csv_sql, create_date, update_date) values (?, ?, ?, now(), now()) "; 
    370                 $arrVal= array($objQuery->nextVal('dtb_csv_sql_sql_id'), $arrData['sql_name'], $arrData['csv_sql']); 
    371  
    372             } 
    373         }else{ 
    374             // データの新規作成 
    375             $sql = "INSERT INTO dtb_csv_sql (sql_id, sql_name, csv_sql, create_date, update_date) values (?, ?, ?, now(), now()) "; 
    376             $arrVal= array($objQuery->nextVal('dtb_csv_sql_sql_id'), $arrData['sql_name'], $arrData['csv_sql']); 
    377         } 
    378         // SQL実行 
    379         $arrRet = $objQuery->query($sql,$arrVal); 
    380  
    381         // 新規作成時は$sql_idを取得 
    382         if ($sql_id == "") { 
    383             $arrNewData = $this->lfGetSqlList(" ORDER BY create_date DESC"); 
    384             $sql_id = $arrNewData[0]['sql_id']; 
    385         } 
    386  
     387            //新規作成 
     388            $sql_id = $objQuery->nextVal('dtb_csv_sql_sql_id'); 
     389            $arrSqlVal['sql_id'] = $sql_id; 
     390            $arrSqlVal['create_date'] = 'now()'; 
     391            $objQuery->insert($table, $arrSqlVal); 
     392        } 
    387393        return $sql_id; 
    388394    } 
     
    393399     * 
    394400     * @param integer $sql_id 削除するデータのSQL_ID 
    395      * @return bool 実行結果 TRUE:成功 FALSE:失敗 
    396      */ 
    397     function lfDelData($sql_id = ""){ 
    398         $objQuery = new SC_Query();     // DB操作オブジェクト 
    399         $sql = "";                      // データ取得SQL生成用 
    400         $Ret = false;                   // 実行結果 
    401  
    402         // sql_id が指定されている場合のみ実行 
    403         if ($sql_id != "") { 
    404             // データの削除 
    405             $sql = "DELETE FROM dtb_csv_sql WHERE sql_id = ? "; 
    406             // SQL実行 
    407             $ret = $objQuery->query($sql,array($sql_id)); 
    408         }else{ 
    409             $ret = false; 
    410         } 
    411  
    412         // 結果を返す 
    413         return $ret; 
     401     * @return boolean 実行結果 true:成功 
     402     */ 
     403    function lfDelData($sql_id){ 
     404        $objQuery =& SC_Query::getSingletonInstance(); 
     405        $table = "dtb_csv_sql"; 
     406        $where = "sql_id = ?"; 
     407        if(SC_Utils_Ex::sfIsInt($sql_id)) { 
     408            $objQuery->delete($table, $where, array($sql_id)); 
     409            return true; 
     410        } 
     411        return false; 
     412    } 
     413 
     414    /** 
     415     * SQL文に含めることを許可しないSQLキーワード 
     416     * 基本的にEC-CUBEのデータを取得するために必要なコマンドしか許可しない。複数クエリも不可 
     417     * 
     418     * FIXME: キーワードの精査。危険な部分なのでプログラム埋め込みで実装しました。mtb化の有無判断必要。 
     419     * 
     420     * @return array 不許可ワード配列 
     421     */ 
     422    function lfGetSqlDenyList() { 
     423        $arrList = array(';' 
     424            ,'CREATE\s' 
     425            ,'INSERT\s' 
     426            ,'UPDATE\s' 
     427            ,'DELETE\s' 
     428            ,'ALTER\s' 
     429            ,'ABORT\s' 
     430            ,'ANALYZE\s' 
     431            ,'CLUSTER\s' 
     432            ,'COMMENT\s' 
     433            ,'COPY\s' 
     434            ,'DECLARE\s' 
     435            ,'DISCARD\s' 
     436            ,'DO\s' 
     437            ,'DROP\s' 
     438            ,'EXECUTE\s' 
     439            ,'EXPLAIN\s' 
     440            ,'GRANT\s' 
     441            ,'LISTEN\s' 
     442            ,'LOAD\s' 
     443            ,'LOCK\s' 
     444            ,'NOTIFY\s' 
     445            ,'PREPARE\s' 
     446            ,'REASSIGN\s' 
     447//            ,'REINDEX\s'      // REINDEXは許可で良いかなと 
     448            ,'RELEASE\sSAVEPOINT' 
     449            ,'RENAME\s' 
     450            ,'REST\s' 
     451            ,'REVOKE\s' 
     452            ,'SAVEPOINT\s' 
     453            ,'SET\s' 
     454            ,'SHOW\s' 
     455            ,'START\sTRANSACTION' 
     456            ,'TRUNCATE\s' 
     457            ,'UNLISTEN\s' 
     458            ,'VACCUM\s' 
     459            ,'HANDLER\s' 
     460            ,'LOAD\sDATA\s' 
     461            ,'LOAD\sXML\s' 
     462            ,'REPLACE\s' 
     463            ,'OPTIMIZE\s' 
     464            ,'REPAIR\s' 
     465            ,'INSTALL\sPLUGIN\s' 
     466            ,'UNINSTALL\sPLUGIN\s' 
     467            ,'BINLOG\s' 
     468            ,'KILL\s' 
     469            ,'RESET\s' 
     470            ,'PURGE\s' 
     471            ,'CHANGE\sMASTER' 
     472            ,'START\sSLAVE' 
     473            ,'STOP\sSLAVE' 
     474            ,'MASTER\sPOS\sWAIT' 
     475            ,'SIGNAL\s' 
     476            ,'RESIGNAL\s' 
     477            ,'RETURN\s' 
     478            ,'USE\s' 
     479            ,'HELP\s' 
     480            ); 
     481        return $arrList; 
    414482    } 
    415483} 
Note: See TracChangeset for help on using the changeset viewer.