Changeset 20318
- Timestamp:
- 2011/02/22 10:47:25 (13 years ago)
- 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 44 44 $('.ms2side__div .SelSort').hide(); 45 45 }); 46 47 function lfFormModeDefautSetSubmit(form, mode) { 48 if(!window.confirm('初期設定で登録しても宜しいですか')){ 49 return; 50 } 51 return fnSetFormSubmit(form, 'mode', mode); 52 } 46 53 //--> 47 54 </script> … … 49 56 <form name="form1" id="form1" method="post" action="?"> 50 57 <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}-->" /> 52 60 <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> 53 65 <div class="ms2side__area"> 54 66 <span class="attention"><!--{$arrErr.output_list}--></span> … … 61 73 <ul> 62 74 <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> 63 76 </ul> 64 77 </div> -
branches/version-2_5-dev/data/Smarty/templates/admin/contents/csv_sql.tpl
r20116 r20318 42 42 <form name="form1" id="form1" method="post" action="?"> 43 43 <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}-->" /> 45 45 <input type="hidden" name="csv_output_id" value="" /> 46 <input type="hidden" name="select Table" value="" />46 <input type="hidden" name="select_table" value="" /> 47 47 <div id="admin-contents" class="contents-main"> 48 48 <h2>SQL一覧</h2> … … 51 51 <table id="contents-csv-sqllist" class="list center"> 52 52 <!--{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}-->;"> 54 54 <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> 56 56 </td> 57 57 <td> … … 77 77 <td> 78 78 <span class="attention"><!--{$arrErr.sql_name}--></span> 79 <input type="text" name="sql_name" value="<!--{$arr SqlData.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" /> 80 80 <span class="attention"> (上限<!--{$smarty.const.STEXT_LEN}-->文字)</span> 81 81 </td> 82 82 </tr> 83 83 <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> 85 85 <td align="left"> 86 86 <span class="attention"><!--{$arrErr.csv_sql}--></span> 87 87 <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> 89 89 </div> 90 90 </td> … … 97 97 <div class="btn-area"> 98 98 <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> 100 100 </ul> 101 101 </div> … … 105 105 <div id="contents-csv-sqltbl"> 106 106 <h3>テーブル一覧</h3> 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=$ 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}--> 109 109 </select> 110 110 </div> -
branches/version-2_5-dev/data/Smarty/templates/admin/contents/csv_sql_view.tpl
r20116 r20318 27 27 <tr> 28 28 <th>SQL文</th> 29 <td> <!--{$sql|h|nl2br}--></td>29 <td>SELECT <!--{$arrForm.csv_sql|h|nl2br}--></td> 30 30 </tr> 31 31 <tr> 32 32 <th>エラー内容</th> 33 33 <td> 34 <!--{if $arrErr}--> 35 <!--{foreach key=key item=item from=$arrErr key=key}--> 36 <!--{$item}--> 37 <!--{/foreach}--> 38 <!--{/if}--> 34 39 <!--{if $sqlerr != ""}--> 35 40 <!--{$sqlerr|h|nl2br}--> 36 <!--{else }-->41 <!--{elseif !$arrErr}--> 37 42 エラーはありません 38 43 <!--{/if}--> -
branches/version-2_5-dev/data/class/helper/SC_Helper_CSV.php
r20285 r20318 232 232 } 233 233 // 固有処理ここまで 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); 235 252 // ヘッダ構築 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 } 239 258 240 259 //テンポラリファイル作成 241 260 // TODO: パフォーマンス向上には、ストリームを使うようにすると良い 242 // 環境要件が バージョン5.1以上になったら使うように変えても良いかと261 // 環境要件がPHPバージョン5.1以上になったら使うように変えても良いかと 243 262 // 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'); 245 264 $this->fpOutput = fopen($tmp_filename, "w+"); 246 265 fwrite($this->fpOutput, $header); … … 251 270 if($is_download) { 252 271 // CSVを送信する。 253 $this->lfDownloadCSVFile($tmp_filename, $this->arrSubnavi[$csv_id]. "_");272 $this->lfDownloadCSVFile($tmp_filename, $file_head . "_"); 254 273 $res = true; 255 274 }else{ 256 275 $res = SC_Utils_Ex::sfReadFile($tmp_filename); 257 276 } 258 277 259 278 //テンポラリファイル削除 260 279 unlink($tmp_filename); 261 280 return $res; 262 281 } 282 263 283 264 284 // CSV出力データを作成する。(レビュー) -
branches/version-2_5-dev/data/class/pages/admin/contents/LC_Page_Admin_Contents_CSV.php
r20116 r20318 48 48 $this->tpl_subnavi = 'contents/subnavi.tpl'; 49 49 $this->tpl_subno = 'csv'; 50 51 50 $this->tpl_mainno = "contents"; 52 51 $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; // 表示名 53 57 } 54 58 … … 69 73 */ 70 74 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 78 75 // 認証可否の判定 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 109 99 switch ($this->getMode()) { 110 100 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); 121 111 break; 122 112 default: 123 113 break; 124 114 } 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; 145 183 } 146 184 … … 154 192 } 155 193 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 */ 156 233 function lfUpdCsvOutput($csv_id, $arrData = array()){ 157 $objQuery = new SC_Query(); 158 234 $objQuery =& SC_Query::getSingletonInstance(); 159 235 // ひとまず、全部使用しないで更新する 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); 163 243 // 使用するものだけ、再更新する。 164 244 if (is_array($arrData)) { 245 $where .= " AND no = ?"; 246 $arrUpdVal = array('status' => '1'); 165 247 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; 178 255 } 179 256 } -
branches/version-2_5-dev/data/class/pages/admin/contents/LC_Page_Admin_Contents_CsvSql.php
r20116 r20318 68 68 */ 69 69 function action() { 70 $objDbFactory = SC_DB_DBFactory_Ex::getInstance();71 72 70 // 認証可否の判定 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 // データの登録 93 84 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)) { 98 87 // データの更新 99 $ sql_id = $this->lfUpdData($sql_id, $_POST);88 $this->arrForm['sql_id'] = $this->lfUpdData($objFormParam->getValue('sql_id'), $objFormParam->getDbArray()); 100 89 // 完了メッセージ表示 101 90 $this->tpl_onload = "alert('登録が完了しました。');"; 102 91 } 103 92 break; 104 105 // 確認画面 93 // 確認画面 106 94 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 } 120 99 $this->setTemplate('contents/csv_sql_view.tpl'); 121 100 return; 122 101 break; 123 124 // 新規作成 102 // 新規作成 125 103 case "new_page": 126 $this->objDisplay->reload(array(), true); 127 exit; 128 break; 129 130 // データ削除 104 // リロード 105 SC_Response_Ex::reload(); 106 break; 107 // データ削除 131 108 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出力 137 117 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')); 160 121 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; 172 133 } 173 134 174 135 // 登録済み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(); 182 137 // テーブル一覧を取得する 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; 223 235 } 224 236 … … 235 247 * テーブル一覧を取得する. 236 248 * 237 * @return void249 * @return array テーブル名一覧 238 250 */ 239 251 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 } 247 268 return $arrRet; 248 269 } … … 254 275 * @return array カラム一覧の配列 255 276 */ 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; 264 286 } 265 287 … … 268 290 * 269 291 * @param string $where Where句 270 * @param array $arr Data絞り込みデータ292 * @param array $arrVal 絞り込みデータ 271 293 * @return array 取得結果の配列 272 294 */ 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"; 290 356 }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)); 298 386 }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 } 387 393 return $sql_id; 388 394 } … … 393 399 * 394 400 * @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; 414 482 } 415 483 }
Note: See TracChangeset
for help on using the changeset viewer.