[Svn-src-all:1426] [version-2_5-dev 20318] #476 (CSV出力項目設定(高度な設定)で、一部テーブルの項目一覧が表示されない) に伴う改修
AMUAMU
admin @ mail.ec-cube.net
2011年 2月 22日 (火) 10:47:25 JST
Subversion committed to /home/svn/open 20318
http://svn.ec-cube.net/open_trac/changeset/20318
┌────────────────────────────┐
│更新者 : AMUAMU │
│更新日時: 2011-02-22 10:47:25 +0900 (火, 22 2月 2011)│
└────────────────────────────┘
Log:
--------------------------------------------------------
#476 (CSV出力項目設定(高度な設定)で、一部テーブルの項目一覧が表示されない) に伴う改修
#657 (CSVダウンロードの改善) の改修
#938 (CSV出力 高度な設定 SQL登録できない) の不具合修正
#939 (CSV出力 高度な設定 出力操作で「sfGetCSVData()に移行してね。」と表示) の不具合修正
#971 (リファクタリング [管理画面]コンテンツ管理(CSV出力項目設定)) の改修
Changed: [U:修正,A:追加,D:削除]
--------------------------------------------------------
U branches/version-2_5-dev/data/Smarty/templates/admin/contents/csv.tpl
U branches/version-2_5-dev/data/Smarty/templates/admin/contents/csv_sql.tpl
U branches/version-2_5-dev/data/Smarty/templates/admin/contents/csv_sql_view.tpl
U branches/version-2_5-dev/data/class/helper/SC_Helper_CSV.php
U branches/version-2_5-dev/data/class/pages/admin/contents/LC_Page_Admin_Contents_CSV.php
U branches/version-2_5-dev/data/class/pages/admin/contents/LC_Page_Admin_Contents_CsvSql.php
変更: branches/version-2_5-dev/data/Smarty/templates/admin/contents/csv.tpl
===================================================================
--- branches/version-2_5-dev/data/Smarty/templates/admin/contents/csv.tpl 2011-02-22 01:44:08 UTC (rev 20317)
+++ branches/version-2_5-dev/data/Smarty/templates/admin/contents/csv.tpl 2011-02-22 01:47:25 UTC (rev 20318)
@@ -43,13 +43,25 @@
// FIXME 選択・非選択のボタンと比べて、位置ズレしている
$('.ms2side__div .SelSort').hide();
});
+
+function lfFormModeDefautSetSubmit(form, mode) {
+ if(!window.confirm('初期設定で登録しても宜しいですか')){
+ return;
+ }
+ return fnSetFormSubmit(form, 'mode', mode);
+}
//-->
</script>
<form name="form1" id="form1" method="post" action="?">
<input type="hidden" name="mode" value="confirm" />
-<input type="hidden" name="tpl_subno_csv" value="<!--{$tpl_subno_csv}-->" />
+<input type="hidden" name="<!--{$smarty.const.TRANSACTION_ID_NAME}-->" value="<!--{$transactionid}-->" />
+<input type="hidden" name="tpl_subno_csv" value="<!--{$tpl_subno_csv|h}-->" />
<div id="admin-contents" class="contents-main">
+ <!--{if $tpl_is_update}-->
+ <span class="attention">※ 正常に更新されました。</span>
+ <!--{/if}-->
+ <span class="attention"><!--{$arrErr.tpl_subno_csv}--></span>
<div class="ms2side__area">
<span class="attention"><!--{$arrErr.output_list}--></span>
<select multiple name="output_list[]" style="<!--{$arrErr.output_list|sfGetErrorColor}-->;" id="output_list" size="20">
@@ -60,6 +72,7 @@
<div class="btn-area">
<ul>
<li><a class="btn-action" href="javascript:;" onclick="fnFormModeSubmit('form1', 'confirm', '', ''); return false;"><span class="btn-next">この内容で登録する</span></a></li>
+ <li><a class="btn-action" href="javascript:;" onclick="lfFormModeDefautSetSubmit('form1', 'defaultset', '', ''); return false;"><span class="btn-next">初期設定に戻して登録</span></a></li>
</ul>
</div>
変更: branches/version-2_5-dev/data/Smarty/templates/admin/contents/csv_sql.tpl
===================================================================
--- branches/version-2_5-dev/data/Smarty/templates/admin/contents/csv_sql.tpl 2011-02-22 01:44:08 UTC (rev 20317)
+++ branches/version-2_5-dev/data/Smarty/templates/admin/contents/csv_sql.tpl 2011-02-22 01:47:25 UTC (rev 20318)
@@ -41,18 +41,18 @@
<form name="form1" id="form1" method="post" action="?">
<input type="hidden" name="mode" value="confirm" />
-<input type="hidden" name="sql_id" value="<!--{$sql_id}-->" />
+<input type="hidden" name="sql_id" value="<!--{$arrForm.sql_id|h}-->" />
<input type="hidden" name="csv_output_id" value="" />
-<input type="hidden" name="selectTable" value="" />
+<input type="hidden" name="select_table" value="" />
<div id="admin-contents" class="contents-main">
<h2>SQL一覧</h2>
<!--{if $arrSqlList}-->
<table id="contents-csv-sqllist" class="list center">
<!--{foreach key=key item=item from=$arrSqlList}-->
- <tr style="background-color:<!--{if $item.sql_id == $sql_id}--><!--{$smarty.const.SELECT_RGB}--><!--{else}-->#ffffff<!--{/if}-->;">
+ <tr style="background-color:<!--{if $item.sql_id == $arrForm.sql_id}--><!--{$smarty.const.SELECT_RGB}--><!--{else}-->#ffffff<!--{/if}-->;">
<td>
- <a href="?sql_id=<!--{$item.sql_id}-->" ><!--{$item.sql_name}--></a>
+ <a href="?sql_id=<!--{$item.sql_id}-->" ><!--{$item.sql_name|h}--></a>
</td>
<td>
<div class="btn">
@@ -76,16 +76,16 @@
<th>名称<span class="attention"> *</span></th>
<td>
<span class="attention"><!--{$arrErr.sql_name}--></span>
- <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" />
+ <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" />
<span class="attention"> (上限<!--{$smarty.const.STEXT_LEN}-->文字)</span>
</td>
</tr>
<tr>
- <th align="center">SQL文<span class="attention"> *</span><br /> (SELECTは記述しないでください。)</td>
+ <th align="center">SQL文<span class="attention"> *</span><br /> (最初のSELECTは記述しないでください。)</td>
<td align="left">
<span class="attention"><!--{$arrErr.csv_sql}--></span>
<div>
- <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>
+ <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>
</div>
</td>
</tr>
@@ -96,7 +96,7 @@
</div>
<div class="btn-area">
<ul>
- <li><a class="btn-action" href="javascript:;" name="subm" onclick="mode.value='confirm'; fnTargetSelf(); return false;"><span class="btn-next">この内容で登録する</span></a></li>
+ <li><a class="btn-action" href="javascript:;" name="subm" onclick="fnFormModeSubmit('form1', 'confirm', '', '')"><span class="btn-next">この内容で登録する</span></a></li>
</ul>
</div>
@@ -104,8 +104,8 @@
<div id="contents-csv-sqltbl">
<h3>テーブル一覧</h3>
- <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;">
- <!--{html_options options=$arrTableList selected=$selectTable}-->
+ <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;">
+ <!--{html_options options=$arrTableList selected=$arrForm.select_table}-->
</select>
</div>
<div id="contents-csv-sqlcol">
変更: branches/version-2_5-dev/data/Smarty/templates/admin/contents/csv_sql_view.tpl
===================================================================
--- branches/version-2_5-dev/data/Smarty/templates/admin/contents/csv_sql_view.tpl 2011-02-22 01:44:08 UTC (rev 20317)
+++ branches/version-2_5-dev/data/Smarty/templates/admin/contents/csv_sql_view.tpl 2011-02-22 01:47:25 UTC (rev 20318)
@@ -26,14 +26,19 @@
<table class="form">
<tr>
<th>SQL文</th>
- <td><!--{$sql|h|nl2br}--></td>
+ <td>SELECT <!--{$arrForm.csv_sql|h|nl2br}--></td>
</tr>
<tr>
<th>エラー内容</th>
<td>
+ <!--{if $arrErr}-->
+ <!--{foreach key=key item=item from=$arrErr key=key}-->
+ <!--{$item}-->
+ <!--{/foreach}-->
+ <!--{/if}-->
<!--{if $sqlerr != ""}-->
<!--{$sqlerr|h|nl2br}-->
- <!--{else}-->
+ <!--{elseif !$arrErr}-->
エラーはありません
<!--{/if}-->
</td>
変更: branches/version-2_5-dev/data/class/helper/SC_Helper_CSV.php
===================================================================
--- branches/version-2_5-dev/data/class/helper/SC_Helper_CSV.php 2011-02-22 01:44:08 UTC (rev 20317)
+++ branches/version-2_5-dev/data/class/helper/SC_Helper_CSV.php 2011-02-22 01:47:25 UTC (rev 20318)
@@ -231,17 +231,36 @@
}
// 固有処理ここまで
+ return $this->sfDownloadCsvFromSql($sql, $arrVal, $this->arrSubnavi[$csv_id], $arrOutput['disp_name'], $is_download);
+ }
+ /**
+ * SQL文からクエリ実行し CSVファイルを送信する
+ *
+ * @param integer $sql SQL文
+ * @param array $arrVal プリペアドステートメントの実行時に使用される配列。配列の要素数は、クエリ内のプレースホルダの数と同じでなければなりません。
+ * @param string $file_head ファイル名の頭に付ける文字列
+ * @param array $arrHeader ヘッダ出力列配列
+ * @param boolean $is_download true:ダウンロード用出力までさせる false:CSVの内容を返す(旧方式、メモリを食います。)
+ * @return mixed $is_download = true時 成功失敗フラグ(boolean) 、$is_downalod = false時 string
+ */
+ function sfDownloadCsvFromSql($sql, $arrVal = array(), $file_head = 'csv', $arrHeader = array(), $is_download = false) {
+ $objQuery =& SC_Query::getSingletonInstance();
+
+ // 実行時間を制限しない
+ @set_time_limit(0);
// ヘッダ構築
- $header = $this->sfArrayToCSV($arrOutput['disp_name']);
- $header = mb_convert_encoding($header, 'SJIS-Win');
- $header .= "\r\n";
+ if(is_array($arrHeader)) {
+ $header = $this->sfArrayToCSV($arrHeader);
+ $header = mb_convert_encoding($header, 'SJIS-Win');
+ $header .= "\r\n";
+ }
//テンポラリファイル作成
// TODO: パフォーマンス向上には、ストリームを使うようにすると良い
- // 環境要件がバージョン5.1以上になったら使うように変えても良いかと
+ // 環境要件がPHPバージョン5.1以上になったら使うように変えても良いかと
// fopen('php://temp/maxmemory:'. (5*1024*1024), 'r+');
- $tmp_filename = tempnam(CSV_TEMP_REALDIR, $this->arrSubnavi[$csv_id] . '_csv');
+ $tmp_filename = tempnam(CSV_TEMP_REALDIR, $file_head . '_csv');
$this->fpOutput = fopen($tmp_filename, "w+");
fwrite($this->fpOutput, $header);
$objQuery->doCallbackAll(array(&$this, 'cbOutputCSV'), $sql, $arrVal);
@@ -250,17 +269,18 @@
if($is_download) {
// CSVを送信する。
- $this->lfDownloadCSVFile($tmp_filename,$this->arrSubnavi[$csv_id] . "_");
+ $this->lfDownloadCSVFile($tmp_filename, $file_head . "_");
$res = true;
}else{
$res = SC_Utils_Ex::sfReadFile($tmp_filename);
}
-
+
//テンポラリファイル削除
unlink($tmp_filename);
return $res;
}
+
// CSV出力データを作成する。(レビュー)
function lfGetReviewCSV($where, $option, $arrval) {
変更: branches/version-2_5-dev/data/class/pages/admin/contents/LC_Page_Admin_Contents_CSV.php
===================================================================
--- branches/version-2_5-dev/data/class/pages/admin/contents/LC_Page_Admin_Contents_CSV.php 2011-02-22 01:44:08 UTC (rev 20317)
+++ branches/version-2_5-dev/data/class/pages/admin/contents/LC_Page_Admin_Contents_CSV.php 2011-02-22 01:47:25 UTC (rev 20318)
@@ -47,9 +47,13 @@
$this->tpl_mainpage = 'contents/csv.tpl';
$this->tpl_subnavi = 'contents/subnavi.tpl';
$this->tpl_subno = 'csv';
-
$this->tpl_mainno = "contents";
$this->tpl_subtitle = 'CSV出力設定';
+
+ $objCSV = new SC_Helper_CSV_Ex();
+ $this->arrSubnavi = $objCSV->arrSubnavi; // 別名
+ $this->tpl_subno_csv = $objCSV->arrSubnavi[1]; //デフォルト
+ $this->arrSubnaviName = $objCSV->arrSubnaviName; // 表示名
}
/**
@@ -68,80 +72,114 @@
* @return void
*/
function action() {
- $objSess = new SC_Session();
- $objCSV = new SC_Helper_CSV_Ex();
-
- $this->arrSubnavi = $objCSV->arrSubnavi;
- $this->tpl_subno_csv = $objCSV->arrSubnavi[1];
- $this->arrSubnaviName = $objCSV->arrSubnaviName;
-
// 認証可否の判定
- $objSess = new SC_Session();
- SC_Utils_Ex::sfIsSuccess($objSess);
+ SC_Utils_Ex::sfIsSuccess(new SC_Session());
- $get_tpl_subno_csv = isset($_GET['tpl_subno_csv'])
- ? $_GET['tpl_subno_csv'] : "";
-
- // GETで値が送られている場合にはその値を元に画面表示を切り替える
- if ($get_tpl_subno_csv != ""){
- // 送られてきた値が配列に登録されていなければTOPを表示
- if (in_array($get_tpl_subno_csv,$this->arrSubnavi)){
- $subno_csv = $get_tpl_subno_csv;
- }else{
- $subno_csv = $this->arrSubnavi[1];
+ // 不正アクセスチェック
+ if ($_SERVER["REQUEST_METHOD"] == "POST") {
+ if (!SC_Helper_Session_Ex::isValidToken()) {
+ SC_Utils_Ex::sfDispError(INVALID_MOVE_ERRORR);
}
- } else {
- // GETで値がなければPOSTの値を使用する
- if (isset($_POST['tpl_subno_csv'])
- && $_POST['tpl_subno_csv'] != "") {
-
- $subno_csv = $_POST['tpl_subno_csv'];
- }else{
- $subno_csv = $this->arrSubnavi[1];
- }
}
+ // トランザクションID
+ $this->transactionid = SC_Helper_Session_Ex::getToken();
- // subnoの番号を取得
- $subno_id = array_keys($this->arrSubnavi,$subno_csv);
- $subno_id = $subno_id[0];
+ // パラメータ管理クラス
+ $objFormParam = new SC_FormParam();
+ // パラメータ設定
+ $this->lfInitParam($objFormParam);
+ $objFormParam->setParam($_POST);
+ $objFormParam->setParam($_GET);
+ $objFormParam->convParam();
- // データの登録
+ // CSV_IDの読み込み
+ $this->tpl_subno_csv = $objFormParam->getValue('tpl_subno_csv');
+ $this->tpl_csv_id = $this->lfGetCsvId($this->tpl_subno_csv);
+
switch ($this->getMode()) {
case 'confirm':
- // エラーチェック
- $this->arrErr = $this->lfCheckError($_POST['output_list']);
-
- if (count($this->arrErr) <= 0){
- // データの更新
- $this->lfUpdCsvOutput($subno_id, $_POST['output_list']);
-
- // 画面のリロード
- $this->objDisplay->reload(array("tpl_subno_csv" => $subno_csv));
+ // 入力パラメーターチェック
+ $this->arrErr = $objFormParam->checkError();
+ if(SC_Utils_Ex::isBlank($this->arrErr)) {
+ // 更新
+ $this->tpl_is_update = $this->lfUpdCsvOutput($this->tpl_csv_id, $objFormParam->getValue('output_list'));
}
break;
+ case 'defaultset':
+ //初期値に戻す
+ $this->tpl_is_update = $this->lfSetDefaultCsvOutput($this->tpl_csv_id);
+ break;
default:
break;
}
+ $this->arrSelected = $this->lfGetSelected($this->tpl_csv_id);
+ $this->arrOptions = $this->lfGetOptions($this->tpl_csv_id);
+ $this->tpl_subtitle .= ' - ' . $this->arrSubnaviName[ $this->tpl_csv_id ];
+ }
- // 出力項目の取得
- $arrSelected = SC_Utils_Ex::sfSwapArray($objCSV->sfGetCsvOutput($subno_id, 'status = 1'));
+ /**
+ * パラメーター情報の初期化
+ *
+ * @param array $objFormParam フォームパラメータークラス
+ * @return void
+ */
+ function lfInitParam(&$objFormParam) {
+ $objFormParam->addParam('編集種別', 'tpl_subno_csv', STEXT_LEN, 'a', array("ALNUM_CHECK", "MAX_LENGTH_CHECK"), 'product');
+ $objFormParam->addParam('出力設定リスト', 'output_list', INT_LEN, 'n', array("NUM_CHECK", "MAX_LENGTH_CHECK", "EXIST_CHECK"));
+ //デフォルト値で上書き
+ $objFormParam->setParam(array('tpl_subno_csv' => 'product'));
+ }
- if (!isset($arrSelected['no'])) $arrSelected['no'] = array();
+ /**
+ * CSVカラム設定の読み込み
+ *
+ * @param integer $csv_id CSV ID
+ * @param integer $csv_status_flg 読み込む対象のフラグ CSV_COLUMN_STATUS_FLG_ENABLE or ''
+ * @return array SwapArrayしたカラム設定
+ */
+ function lfGetCSVColumn($csv_id, $csv_status_flg = '', $order ='rank, no') {
+ $objCSV = new SC_Helper_CSV_Ex();
+ if(SC_Utils_Ex::sfIsInt($csv_id)) {
+ if($csv_status_flg !="") {
+ $arrData = $objCSV->sfGetCsvOutput($csv_id, 'status = ?' , array($csv_status_flg), $order);
+ }else{
+ $arrData = $objCSV->sfGetCsvOutput($csv_id, '', array(), $order);
+ }
+ $arrData = SC_Utils_Ex::sfSwapArray($arrData);
+ }else{
+ $arrData = array();
+ }
+ return $arrData;
+ }
- $this->arrSelected = $arrSelected['no'];
+ /**
+ * 選択済みカラム列情報を取得
+ *
+ * @param integer $csv_id CSV ID
+ * @return array 選択済みカラム列情報
+ */
+ function lfGetSelected($csv_id) {
+ $arrData = $this->lfGetCSVColumn($csv_id, CSV_COLUMN_STATUS_FLG_ENABLE);
+ if (!isset($arrData['no'])) {
+ $arrData['no'] = array();
+ }
+ return $arrData['no'];
+ }
- // 全項目の取得
- $arrOptions = SC_Utils_Ex::sfSwapArray($objCSV->sfGetCsvOutput($subno_id));
-
- if (!isset($arrOptions['no'])) $arrOptions['no'] = array();
- if (!isset($arrOptions['disp_name'])) $arrOptions['disp_name'] = array();
-
- $arrOptions = SC_Utils_Ex::sfarrCombine($arrOptions['no'], $arrOptions['disp_name']);
-
- $this->arrOptions = $arrOptions;
-
- $this->SubnaviName = $this->arrSubnaviName[$subno_id];
- $this->tpl_subno_csv = $subno_csv;
+ /**
+ * カラム列情報と表示名情報を取得
+ *
+ * @param integer $csv_id CSV ID
+ * @return array 選択済みカラム列情報
+ */
+ function lfGetOptions($csv_id) {
+ $arrData = $this->lfGetCSVColumn($csv_id);
+ if (!isset($arrData['no'])) {
+ $arrData['no'] = array();
+ $arrData['disp_name'] = array();
+ }
+ $arrData = SC_Utils_Ex::sfArrCombine($arrData['no'], $arrData['disp_name']);
+ return $arrData;
}
/**
@@ -153,28 +191,67 @@
parent::destroy();
}
+ /**
+ * CSV名からCSV_IDを取得する。
+ *
+ * @param string $subno_csv CSV名
+ * @return integer CSV_ID
+ */
+ function lfGetCsvId($subno_csv) {
+ $objCSV = new SC_Helper_CSV_Ex();
+ $arrKey = array_keys($objCSV->arrSubnavi,$subno_csv);
+ $csv_id = $arrKey[0];
+ if(!SC_Utils_Ex::sfIsInt($csv_id)) {
+ //初期値取りだし
+ $arrKey = array_keys($objCSV->arrSubnavi);
+ $csv_id = $arrKey[0];
+ }
+ return $csv_id;
+ }
+
+ /**
+ * CSV出力項目設定を初期化する
+ *
+ * @param integer $csv_id CSV_ID
+ * @return boolean 成功:true
+ */
+ function lfSetDefaultCsvOutput($csv_id) {
+ $arrData = $this->lfGetCSVColumn($csv_id, '', $order = 'no');
+ if (!isset($arrData['no'])) {
+ $arrData['no'] = array();
+ }
+ return $this->lfUpdCsvOutput($csv_id, $arrData['no']);
+ }
+
+ /**
+ * CSV出力項目設定を更新する処理
+ *
+ * @param integer $csv_id CSV_ID
+ * @param array $arrData 有効にするCSV列データ配列
+ * @return boolean 成功:true
+ */
function lfUpdCsvOutput($csv_id, $arrData = array()){
- $objQuery = new SC_Query();
-
+ $objQuery =& SC_Query::getSingletonInstance();
// ひとまず、全部使用しないで更新する
- $upd_sql = "UPDATE dtb_csv SET status = 2, rank = NULL, update_date = now() WHERE csv_id = ?";
- $objQuery->query($upd_sql, array($csv_id));
+ $table = "dtb_csv";
+ $where = "csv_id = ?";
+ $arrWhereVal = array($csv_id);
+ $arrUpdVal = array( 'status' => '2', 'rank' => NULL, 'update_date' => 'now()' );
+ $objQuery->begin();
+ $objQuery->update($table, $arrUpdVal, $where, $arrWhereVal);
// 使用するものだけ、再更新する。
if (is_array($arrData)) {
+ $where .= " AND no = ?";
+ $arrUpdVal = array('status' => '1');
foreach($arrData as $key => $val){
- $upd_sql = "UPDATE dtb_csv SET status = 1, rank = ? WHERE csv_id = ? AND no = ? ";
- $objQuery->query($upd_sql, array($key+1, $csv_id, $val));
+ $arrWhereVal = array($csv_id, $val);
+ $arrUpdVal['rank'] = $key + 1;
+ $objQuery->update($table, $arrUpdVal, $where, $arrWhereVal);
}
}
+ $objQuery->commit();
+ return true;
}
-
- Function Lfcheckerror($data){
- $objErr = new SC_CheckError();
- $objErr->doFunc( array("出力項目", "output_list"), array("EXIST_CHECK") );
-
- return $objErr->arrErr;
-
- }
}
?>
変更: branches/version-2_5-dev/data/class/pages/admin/contents/LC_Page_Admin_Contents_CsvSql.php
===================================================================
--- branches/version-2_5-dev/data/class/pages/admin/contents/LC_Page_Admin_Contents_CsvSql.php 2011-02-22 01:44:08 UTC (rev 20317)
+++ branches/version-2_5-dev/data/class/pages/admin/contents/LC_Page_Admin_Contents_CsvSql.php 2011-02-22 01:47:25 UTC (rev 20318)
@@ -67,159 +67,171 @@
* @return void
*/
function action() {
- $objDbFactory = SC_DB_DBFactory_Ex::getInstance();
-
// 認証可否の判定
- $objSess = new SC_Session();
- SC_Utils_Ex::sfIsSuccess($objSess);
+ SC_Utils_Ex::sfIsSuccess(new SC_Session());
- if (!isset($_POST['sql_id'])) $_POST['sql_id'] = "";
- if (!isset($_GET['sql_id'])) $_GET['sql_id'] = "";
- if (!isset($_POST['selectTable'])) $_POST['selectTable'] = "";
+ // パラメータ管理クラス
+ $objFormParam = new SC_FormParam();
+ // パラメータ設定
+ $this->lfInitParam($objFormParam);
+ $objFormParam->setParam($_POST);
+ $objFormParam->setParam($_GET);
+ $objFormParam->convParam();
+ $this->arrForm = $objFormParam->getHashArray();
- // SQL_IDの取得
- if ($_POST['sql_id'] != "") {
- $sql_id = $_POST['sql_id'];
- }elseif($_GET['sql_id'] != ""){
- $sql_id = $_GET['sql_id'];
- }else{
- $sql_id = "";
- }
-
- $mode = $this->getMode();
-
- switch($mode) {
- // データの登録
+ switch($this->getMode()) {
+ // データの登録
case "confirm":
- // エラーチェック
- $this->arrErr = $this->lfCheckError($_POST);
-
- if (count($this->arrErr) <= 0){
+ $this->arrErr = $this->lfCheckConfirmError($objFormParam);
+ if(SC_Utils_Ex::isBlank($this->arrErr)) {
// データの更新
- $sql_id = $this->lfUpdData($sql_id, $_POST);
+ $this->arrForm['sql_id'] = $this->lfUpdData($objFormParam->getValue('sql_id'), $objFormParam->getDbArray());
// 完了メッセージ表示
$this->tpl_onload = "alert('登録が完了しました。');";
}
break;
-
- // 確認画面
+ // 確認画面
case "preview":
- // SQL文表示
- $sql = "SELECT \n" . $_POST['csv_sql']; // FIXME
- $this->sql = $sql;
-
- // エラー表示
- $objErrMsg = $this->lfCheckSQL($_POST);
- if ($objErrMsg != "") {
- $errMsg = $objErrMsg->message . "\n" . $objErrMsg->userinfo;
+ $this->arrErr = $this->lfCheckPreviewError($objFormParam);
+ if(SC_Utils_Ex::isBlank($this->arrErr)) {
+ $this->sqlerr = $this->lfCheckSQL($objFormParam->getValue('csv_sql'));
}
-
- $this->sqlerr = isset($errMsg) ? $errMsg : "" ;
-
- // 画面の表示
$this->setTemplate('contents/csv_sql_view.tpl');
return;
break;
-
- // 新規作成
+ // 新規作成
case "new_page":
- $this->objDisplay->reload(array(), true);
- exit;
+ // リロード
+ SC_Response_Ex::reload();
break;
-
- // データ削除
+ // データ削除
case "delete":
- $this->lfDelData($sql_id);
- $this->objDisplay->reload(array(), true);
- exit;
+ $this->arrErr = $this->lfCheckDeleteError($objFormParam);
+ if(SC_Utils_Ex::isBlank($this->arrErr)) {
+ $this->lfDelData($objFormParam->getValue('sql_id'));
+ SC_Response_Ex::reload();
+ exit;
+ }
break;
-
+ // CSV出力
case "csv_output":
- // CSV出力データ取得
- $arrCsvData = $this->lfGetSqlList(" WHERE sql_id = ?", array($_POST['csv_output_id']));
-
- $objQuery = new SC_Query();
-
- $arrCsvOutputData = $objQuery->getAll("SELECT " . $arrCsvData[0]['csv_sql']);
-
- if (count($arrCsvOutputData) > 0) {
-
- $arrKey = array_keys(SC_Utils_Ex::sfSwapArray($arrCsvOutputData));
- $i = 0;
- $header = "";
- foreach($arrKey as $data) {
- if ($i != 0) $header .= ",";
- $header .= $data;
- $i ++;
- }
- $header .= "\n";
-
- $data = SC_Utils_Ex::getCSVData($arrCsvOutputData, $arrKey);
- // CSV出力
- SC_Utils_Ex::sfCSVDownload($header.$data);
+ $this->arrErr = $this->lfCheckOutputError($objFormParam);
+ if(SC_Utils_Ex::isBlank($this->arrErr)) {
+ $this->lfDoCsvOutput($objFormParam->getValue('csv_output_id'));
exit;
- }else{
- $this->tpl_onload = "alert('出力データがありません。');";
- $sql_id = "";
- $_POST="";
}
break;
+ default:
+ $this->arrErr = $objFormParam->checkError();
+ if(SC_Utils_Ex::isBlank($this->arrErr)) {
+ // 設定内容を取得する
+ $this->arrForm = $this->lfGetSqlData($objFormParam);
+ // カラム一覧を取得する
+ $this->arrColList = $this->lfGetColList($objFormParam->getValue('select_table'));
+ }
+ break;
}
- // mode が confirm 以外のときは完了メッセージは出力しない
- if ($mode != "confirm" and $mode != "csv_output") {
- $this->tpl_onload = "";
- }
-
// 登録済みSQL一覧取得
- $arrSqlList = $this->lfGetSqlList();
+ $this->arrSqlList = $this->lfGetSqlList();
+ // テーブル一覧を取得する
+ $this->arrTableList = $this->lfGetTableList();
+ }
- // 編集用SQLデータの取得
- if ($sql_id != "") {
- $arrSqlData = $this->lfGetSqlList(" WHERE sql_id = ?", array($sql_id));
+ /**
+ * パラメーター情報の初期化
+ *
+ * @param array $objFormParam フォームパラメータークラス
+ * @return void
+ */
+ function lfInitParam(&$objFormParam) {
+ $objFormParam->addParam('SQL ID', 'sql_id', INT_LEN, 'n', array("NUM_CHECK","MAX_LENGTH_CHECK"));
+ $objFormParam->addParam('CSV出力対象SQL ID', 'csv_output_id', INT_LEN, 'n', array("NUM_CHECK","MAX_LENGTH_CHECK"), "", false);
+ $objFormParam->addParam('選択テーブル', 'select_table', STEXT_LEN, 'KVa', array("GRAPH_CHECK","MAX_LENGTH_CHECK"), "", false);
+ $objFormParam->addParam('名称', 'sql_name', STEXT_LEN, 'KVa', array("MAX_LENGTH_CHECK","SPTAB_CHECK"));
+ $objFormParam->addParam('SQL文', 'csv_sql', "30000", 'KVa', array("MAX_LENGTH_CHECK","SPTAB_CHECK"));
+ }
+
+ /**
+ * SQL登録エラーチェック
+ *
+ * @param array $objFormParam フォームパラメータークラス
+ * @return array エラー配列
+ */
+ function lfCheckConfirmError(&$objFormParam) {
+ // パラメーターの基本チェック
+ $arrErr = $objFormParam->checkError();
+ // 拡張エラーチェック
+ $objErr = new SC_CheckError($objFormParam->getHashArray());
+ $objErr->doFunc( array("名称", "sql_name"), array("EXIST_CHECK") );
+ $objErr->doFunc( array("SQL文", "csv_sql", "30000"), array("EXIST_CHECK", "MAX_LENGTH_CHECK") );
+ $objErr->doFunc( array('SQL文には読み込み関係以外のSQLコマンドおよび";"記号', 'csv_sql', $this->lfGetSqlDenyList()), array("PROHIBITED_STR_CHECK"));
+ if(!SC_Utils_Ex::isBlank($objErr->arrErr)) {
+ $arrErr = array_merge($arrErr, $objErr->arrErr);
}
+ // SQL文自体の確認、エラーが無い時のみ実行
+ if(SC_Utils_Ex::isBlank($arrErr)) {
+ $sql_error = $this->lfCheckSQL($objFormParam->getValue('csv_sql'));
+ if(!SC_Utils_Ex::isBlank($sql_error)) {
+ $arrErr["csv_sql"] = "※ SQL文が不正です。SQL文を見直してください";
+ }
+ }
+ return $arrErr;
+ }
- // テーブル一覧を取得する
- $arrTableList = $this->lfGetTableList();
- $arrTableList = SC_Utils_Ex::sfSwapArray($arrTableList);
-
- // 現在選択されているテーブルを取得する
- if ($_POST['selectTable'] == ""){
- $selectTable = $arrTableList['table_name'][0];
- }else{
- $selectTable = $_POST['selectTable'];
+ /**
+ * SQL確認エラーチェック
+ *
+ * @param array $objFormParam フォームパラメータークラス
+ * @return array エラー配列
+ */
+ function lfCheckPreviewError(&$objFormParam) {
+ // パラメーターの基本チェック
+ $arrErr = $objFormParam->checkError();
+ // 拡張エラーチェック
+ $objErr = new SC_CheckError($objFormParam->getHashArray());
+ $objErr->doFunc( array("SQL文", "csv_sql", "30000"), array("EXIST_CHECK", "MAX_LENGTH_CHECK") );
+ $objErr->doFunc( array('SQL文には読み込み関係以外のSQLコマンドおよび";"記号', 'csv_sql', $this->lfGetSqlDenyList()), array("PROHIBITED_STR_CHECK"));
+ if(!SC_Utils_Ex::isBlank($objErr->arrErr)) {
+ $arrErr = array_merge($arrErr, $objErr->arrErr);
}
+ return $arrErr;
+ }
- // カラム一覧を取得する
- $arrColList = $this->lfGetColumnList($selectTable);
- $arrColList = SC_Utils_Ex::sfSwapArray($arrColList);
-
- // 表示させる内容を編集
- foreach ($arrTableList['description'] as $key => $val) {
- $arrTableList['description'][$key] = $arrTableList['table_name'][$key] . ":" . $arrTableList['description'][$key];
+ /**
+ * SQL設定 削除エラーチェック
+ *
+ * @param array $objFormParam フォームパラメータークラス
+ * @return array エラー配列
+ */
+ function lfCheckDeleteError(&$objFormParam) {
+ // パラメーターの基本チェック
+ $arrErr = $objFormParam->checkError();
+ // 拡張エラーチェック
+ $objErr = new SC_CheckError($objFormParam->getHashArray());
+ $objErr->doFunc( array("SQL ID", "sql_id"), array("EXIST_CHECK") );
+ if(!SC_Utils_Ex::isBlank($objErr->arrErr)) {
+ $arrErr = array_merge($arrErr, $objErr->arrErr);
}
- foreach ($arrColList['description'] as $key => $val) {
- $arrColList['description'][$key] = $arrColList['column_name'][$key] . ":" . $arrColList['description'][$key];
- }
+ return $arrErr;
+ }
-
- $arrDiff = array_diff($objDbFactory->sfGetColumnList($selectTable), $arrColList["column_name"]);
- $arrColList["column_name"] = array_merge($arrColList["column_name"], $arrDiff);
- $arrColList["description"] = array_merge($arrColList["description"], $arrDiff);
-
- // テンプレートに出力するデータをセット
- $this->arrSqlList = $arrSqlList; // SQL一覧
- $this->arrTableList = SC_Utils_Ex::sfarrCombine($arrTableList['table_name'], $arrTableList['description']); // テーブル一覧
- $this->arrColList = SC_Utils_Ex::sfarrCombine($arrColList['column_name'],$arrColList['description']); // カラム一覧
- $this->selectTable = $selectTable; // 選択されているテーブル
- $this->sql_id = $sql_id; // 選択されているSQL
-
- // POSTされたデータをセットする
- if (isset($_POST['sql_name']) && isset($_POST['csv_sql'])){
- $arrSqlData[0]['sql_name'] = isset($_POST['sql_name']) ? $_POST['sql_name'] : "";
- $arrSqlData[0]['csv_sql'] = isset($_POST['csv_sql']) ? $_POST['csv_sql'] : "";
+ /**
+ * SQL設定 CSV出力エラーチェック
+ *
+ * @param array $objFormParam フォームパラメータークラス
+ * @return array エラー配列
+ */
+ function lfCheckOutputError(&$objFormParam) {
+ // パラメーターの基本チェック
+ $arrErr = $objFormParam->checkError();
+ // 拡張エラーチェック
+ $objErr = new SC_CheckError($objFormParam->getHashArray());
+ $objErr->doFunc( array("CSV出力対象SQL ID", "csv_output_id"), array("EXIST_CHECK") );
+ if(!SC_Utils_Ex::isBlank($objErr->arrErr)) {
+ $arrErr = array_merge($arrErr, $objErr->arrErr);
}
- $this->arrSqlData = $arrSqlData[0]; // 選択されているSQLデータ
+ return $arrErr;
}
/**
@@ -234,16 +246,25 @@
/**
* テーブル一覧を取得する.
*
- * @return void
+ * @return array テーブル名一覧
*/
function lfGetTableList(){
- $objQuery = new SC_Query();
- $arrRet = array(); // 結果取得用
-
- $sql = "";
- $sql .= "SELECT table_name, description FROM dtb_table_comment WHERE column_name IS NULL ORDER BY table_name";
- $arrRet = $objQuery->getAll($sql);
-
+ $objQuery =& SC_Query::getSingletonInstance();
+ // 実テーブル上のカラム設定を見に行く仕様に変更 ref #476
+ $arrTable = $objQuery->listTables();
+ if(SC_Utils_Ex::isBlank($arrTable)) {
+ return array();
+ }
+ $arrRet = array();
+ foreach($arrTable as $table) {
+ if(substr($table, 0, 4) == 'dtb_') {
+ $arrRet[ $table ] = 'データテーブル: ' . $table;
+ }else if(substr($table, 0, 4) == 'mtb_') {
+ $arrRet[ $table ] = 'マスタテーブル: ' . $table;
+ }else if(substr($table, 0, 3) == 'vw_') {
+ $arrRet[ $table ] = 'ビュー: ' . $table;
+ }
+ }
return $arrRet;
}
@@ -253,137 +274,122 @@
* @param string $selectTable テーブル名
* @return array カラム一覧の配列
*/
- function lfGetColumnList($selectTable){
- $objQuery = new SC_Query();
- $arrRet = array(); // 結果取得用
- $sql = "";
- $sql .= " SELECT column_name, description FROM dtb_table_comment WHERE table_name = ? AND column_name IS NOT NULL";
- $arrRet = $objQuery->getAll($sql, array($selectTable));
-
- return $arrRet;
+ function lfGetColList($table){
+ if(SC_Utils_Ex::isBlank($table)) {
+ return array();
+ }
+ $objQuery =& SC_Query::getSingletonInstance();
+ // 実テーブル上のカラム設定を見に行く仕様に変更 ref #476
+ $arrColList = $objQuery->listTableFields($table);
+ $arrColList= SC_Utils_Ex::sfArrCombine($arrColList, $arrColList);
+ return $arrColList;
}
/**
* 登録済みSQL一覧を取得する.
*
* @param string $where Where句
- * @param array $arrData 絞り込みデータ
+ * @param array $arrVal 絞り込みデータ
* @return array 取得結果の配列
*/
- function lfGetSqlList($where = "" , $arrData = array()){
- $objQuery = new SC_Query();
- $arrRet = array(); // 結果取得用
+ function lfGetSqlList($where = "" , $arrVal = array()){
+ $objQuery =& SC_Query::getSingletonInstance();
+ $table = "dtb_csv_sql";
+ $objQuery->setOrder('sql_id');
+ return $objQuery->select('*', $table, $where, $arrVal);
+ }
- $sql = "";
- $sql .= " SELECT";
- $sql .= " sql_id,";
- $sql .= " sql_name,";
- $sql .= " csv_sql,";
- $sql .= " update_date,";
- $sql .= " create_date";
- $sql .= " FROM";
- $sql .= " dtb_csv_sql";
-
- // Where句の指定があれば結合する
- if ($where != "") {
- $sql .= " $where ";
- }else{
- $sql .= " ORDER BY sql_id ";
+ /**
+ * 入力されたSQL文が正しく実行出来るかのチェックを行う.
+ *
+ * @param string SQL文データ(頭にSELECTは入れない)
+ * @return string エラー内容
+ */
+ function lfCheckSQL($sql){
+ // FIXME: 意図的に new SC_Query しています。 force_runをtrueにする必要があるので.本当はqueryの引数で制御したい。ref SC_Query
+ $objQuery = new SC_Query("", true);
+ $err = "";
+ $sql = "SELECT " . $sql . " ";
+ $objErrMsg = $objQuery->query($sql);
+ if (PEAR::isError($objErrMsg)){
+ $err = $objErrMsg->message . "\n" . $objErrMsg->userinfo;
}
- $sql .= " ";
-
- // データを引数で渡されている場合にはセットする
- if (count($arrData) > 0) {
- $arrRet = $objQuery->getAll($sql, $arrData);
- }else{
- $arrRet = $objQuery->getAll($sql);
- }
-
- return $arrRet;
+ return $err;
}
/**
- * 入力項目のエラーチェックを行う.
+ * SQL詳細設定情報呼び出し (編集中データがある場合はそれを保持する)
*
- * @param array POSTデータ
- * @return array エラー内容の配列
+ * @param array $objFormParam フォームパラメータークラス
+ * @return mixed 表示用パラメーター
*/
- function lfCheckError($data){
- $objErr = new SC_CheckError();
- $objErr->doFunc( array("名称", "sql_name"), array("EXIST_CHECK") );
- $objErr->doFunc( array("SQL文", "csv_sql", "30000"), array("EXIST_CHECK", "MAX_LENGTH_CHECK") );
-
- // SQLの妥当性チェック
- if ($objErr->arrErr['csv_sql'] == "") {
- $objsqlErr = $this->lfCheckSQL($data);
- if ($objsqlErr != "") {
- $objErr->arrErr["csv_sql"] = "SQL文が不正です。SQL文を見直してください";
- }
+ function lfGetSqlData(&$objFormParam) {
+ // 編集中データがある場合
+ if(!SC_Utils_Ex::isBlank($objFormParam->getValue('sql_name'))
+ or !SC_Utils_Ex::isBlank($objFormParam->getValue('csv_sql'))) {
+ return $objFormParam->getHashArray();
}
-
- return $objErr->arrErr;
+ $csv_id = $objFormParam->getValue('csv_id');
+ if(!SC_Utils_Ex::isBlank($csv_id)) {
+ $arrData = $this->lfGetSqlList('csv_id = ?', array($csv_id));
+ return $arrData[0];
+ }
+ return array();
}
/**
- * 入力されたSQL文が正しいかチェックを行う.
+ * DBにデータを保存する.
*
- * @param array POSTデータ
- * @return array エラー内容
+ * @param integer $sql_id 出力するデータのSQL_ID
+ * @return void
*/
- function lfCheckSQL($data){
- $err = "";
- $objQuery = new SC_Query();
- $sql = "SELECT " . $data['csv_sql'] . " ";
- $ret = $objQuery->query($sql);
- if (PEAR::isError($ret)){
- $err = $ret;
+ function lfDoCsvOutput($sql_id) {
+ $arrData = $this->lfGetSqlList('sql_id = ?', array($sql_id));
+ $sql = "SELECT " . $arrData[0]['csv_sql'] . " ";
+
+ // TODO: ヘッダ取得 SQL内にLIMIT文がある場合はLIMIT句は追加しないので重いかも
+ $objQuery =& SC_Query::getSingletonInstance();
+
+ $arrHeader = array();
+ if(!preg_match("/ LIMIT /", $sql)) {
+ $head_sql = $sql . " LIMIT 0";
+ }else{
+ $head_sql = $sql;
}
-
- return $err;
+ $arrData = $objQuery->getQueryDefsFields($head_sql, array(), true);
+ if(!SC_Utils_Ex::isBlank($arrData)) {
+ foreach($arrData as $key => $val) {
+ $arrHeader[] = $key;
+ }
+ }
+ require_once(CLASS_EX_REALDIR . "helper_extends/SC_Helper_CSV_Ex.php");
+ $objCSV = new SC_Helper_CSV_Ex();
+ $objCSV->sfDownloadCsvFromSql($sql, array(), "contents", $arrHeader, true);
+ exit;
}
/**
* DBにデータを保存する.
*
* @param integer $sql_id 更新するデータのSQL_ID
- * @param array $arrData 更新データの配列
+ * @param array $arrSqlVal 更新データの配列
* @return integer $sql_id SQL_IDを返す
*/
- function lfUpdData($sql_id = "", $arrData = array()){
- $objQuery = new SC_Query(); // DB操作オブジェクト
- $sql = ""; // データ取得SQL生成用
- $arrRet = array(); // データ取得用(更新判定)
- $arrVal = array(); // データ更新
-
- // sql_id が指定されている場合にはUPDATE
- if ($sql_id != "") {
- // 存在チェック
- $arrSqlData = $this->lfGetSqlList(" WHERE sql_id = ?", array($sql_id));
- if (count($arrSqlData) > 0) {
- // データ更新
- $sql = "UPDATE dtb_csv_sql SET sql_name = ?, csv_sql = ?, update_date = now() WHERE sql_id = ? ";
- $arrVal= array($arrData['sql_name'], $arrData['csv_sql'], $sql_id);
- }else{
- // データの新規作成
- $sql_id = "";
- $sql = "INSERT INTO dtb_csv_sql (sql_id, sql_name, csv_sql, create_date, update_date) values (?, ?, ?, now(), now()) ";
- $arrVal= array($objQuery->nextVal('dtb_csv_sql_sql_id'), $arrData['sql_name'], $arrData['csv_sql']);
-
- }
+ function lfUpdData($sql_id, $arrSqlVal){
+ $objQuery =& SC_Query::getSingletonInstance();
+ $table = "dtb_csv_sql";
+ $arrSqlVal['update_date'] = 'now()';
+ if (SC_Utils_Ex::sfIsInt($sql_id)) {
+ //データ更新
+ $where = "sql_id = ?";
+ $objQuery->update($table, $arrSqlVal, $where, array($sql_id));
}else{
- // データの新規作成
- $sql = "INSERT INTO dtb_csv_sql (sql_id, sql_name, csv_sql, create_date, update_date) values (?, ?, ?, now(), now()) ";
- $arrVal= array($objQuery->nextVal('dtb_csv_sql_sql_id'), $arrData['sql_name'], $arrData['csv_sql']);
+ //新規作成
+ $sql_id = $objQuery->nextVal('dtb_csv_sql_sql_id');
+ $arrSqlVal['sql_id'] = $sql_id;
+ $arrSqlVal['create_date'] = 'now()';
+ $objQuery->insert($table, $arrSqlVal);
}
- // SQL実行
- $arrRet = $objQuery->query($sql,$arrVal);
-
- // 新規作成時は$sql_idを取得
- if ($sql_id == "") {
- $arrNewData = $this->lfGetSqlList(" ORDER BY create_date DESC");
- $sql_id = $arrNewData[0]['sql_id'];
- }
-
return $sql_id;
}
@@ -392,25 +398,87 @@
* 登録済みデータを削除する.
*
* @param integer $sql_id 削除するデータのSQL_ID
- * @return bool 実行結果 TRUE:成功 FALSE:失敗
+ * @return boolean 実行結果 true:成功
*/
- function lfDelData($sql_id = ""){
- $objQuery = new SC_Query(); // DB操作オブジェクト
- $sql = ""; // データ取得SQL生成用
- $Ret = false; // 実行結果
-
- // sql_id が指定されている場合のみ実行
- if ($sql_id != "") {
- // データの削除
- $sql = "DELETE FROM dtb_csv_sql WHERE sql_id = ? ";
- // SQL実行
- $ret = $objQuery->query($sql,array($sql_id));
- }else{
- $ret = false;
+ function lfDelData($sql_id){
+ $objQuery =& SC_Query::getSingletonInstance();
+ $table = "dtb_csv_sql";
+ $where = "sql_id = ?";
+ if(SC_Utils_Ex::sfIsInt($sql_id)) {
+ $objQuery->delete($table, $where, array($sql_id));
+ return true;
}
+ return false;
+ }
- // 結果を返す
- return $ret;
+ /**
+ * SQL文に含めることを許可しないSQLキーワード
+ * 基本的にEC-CUBEのデータを取得するために必要なコマンドしか許可しない。複数クエリも不可
+ *
+ * FIXME: キーワードの精査。危険な部分なのでプログラム埋め込みで実装しました。mtb化の有無判断必要。
+ *
+ * @return array 不許可ワード配列
+ */
+ function lfGetSqlDenyList() {
+ $arrList = array(';'
+ ,'CREATE\s'
+ ,'INSERT\s'
+ ,'UPDATE\s'
+ ,'DELETE\s'
+ ,'ALTER\s'
+ ,'ABORT\s'
+ ,'ANALYZE\s'
+ ,'CLUSTER\s'
+ ,'COMMENT\s'
+ ,'COPY\s'
+ ,'DECLARE\s'
+ ,'DISCARD\s'
+ ,'DO\s'
+ ,'DROP\s'
+ ,'EXECUTE\s'
+ ,'EXPLAIN\s'
+ ,'GRANT\s'
+ ,'LISTEN\s'
+ ,'LOAD\s'
+ ,'LOCK\s'
+ ,'NOTIFY\s'
+ ,'PREPARE\s'
+ ,'REASSIGN\s'
+// ,'REINDEX\s' // REINDEXは許可で良いかなと
+ ,'RELEASE\sSAVEPOINT'
+ ,'RENAME\s'
+ ,'REST\s'
+ ,'REVOKE\s'
+ ,'SAVEPOINT\s'
+ ,'SET\s'
+ ,'SHOW\s'
+ ,'START\sTRANSACTION'
+ ,'TRUNCATE\s'
+ ,'UNLISTEN\s'
+ ,'VACCUM\s'
+ ,'HANDLER\s'
+ ,'LOAD\sDATA\s'
+ ,'LOAD\sXML\s'
+ ,'REPLACE\s'
+ ,'OPTIMIZE\s'
+ ,'REPAIR\s'
+ ,'INSTALL\sPLUGIN\s'
+ ,'UNINSTALL\sPLUGIN\s'
+ ,'BINLOG\s'
+ ,'KILL\s'
+ ,'RESET\s'
+ ,'PURGE\s'
+ ,'CHANGE\sMASTER'
+ ,'START\sSLAVE'
+ ,'STOP\sSLAVE'
+ ,'MASTER\sPOS\sWAIT'
+ ,'SIGNAL\s'
+ ,'RESIGNAL\s'
+ ,'RETURN\s'
+ ,'USE\s'
+ ,'HELP\s'
+ );
+ return $arrList;
}
}
?>
Svn-src-all メーリングリストの案内