source: branches/feature-module-update/html/admin/contents/csv_sql.php @ 15532

Revision 15532, 12.0 KB checked in by nanasess, 17 years ago (diff)

svn:mime-type 修正

  • Property svn:keywords set to Id
  • Property svn:mime-type set to text/x-httpd-php; charset=UTF-8
Line 
1<?php
2/*
3 * Copyright(c) 2000-2007 LOCKON CO.,LTD. All Rights Reserved.
4 *
5 * http://www.lockon.co.jp/
6 */
7require_once("../../require.php");
8require_once(DATA_PATH . "include/csv_output.inc");
9
10class LC_Page {
11    var $arrForm;
12    var $arrHidden;
13
14    function LC_Page() {
15        $this->tpl_mainpage = 'contents/csv_sql.tpl';
16        $this->tpl_subnavi = 'contents/subnavi.tpl';
17        $this->tpl_subno = 'csv';
18        $this->tpl_subno_csv = 'csv_sql';
19        $this->tpl_mainno = "contents";
20        $this->tpl_subtitle = 'CSV出力設定';
21    }
22}
23
24$objPage = new LC_Page();
25$objView = new SC_AdminView();
26
27$objPage->arrSubnavi = $arrSubnavi;
28$objPage->arrSubnaviName = $arrSubnaviName;
29
30// 認証可否の判定
31$objSess = new SC_Session();
32sfIsSuccess($objSess);
33
34// SQL_IDの取得
35if ($_POST['sql_id'] != "") {
36    $sql_id = $_POST['sql_id'];
37}elseif($_GET['sql_id'] != ""){
38    $sql_id = $_GET['sql_id'];
39}else{
40    $sql_id = "";
41}
42
43$mode = $_POST['mode'];
44
45switch($_POST['mode']) {
46    // データの登録
47    case "confirm":
48        // エラーチェック
49        $objPage->arrErr = lfCheckError($_POST);
50       
51        if (count($objPage->arrErr) <= 0){
52            // データの更新
53            $sql_id = lfUpdData($sql_id, $_POST);
54            // 完了メッセージ表示
55            $objPage->tpl_onload = "alert('登録が完了しました。');";
56        }
57        break;
58   
59    // 確認画面
60    case "preview":
61        // SQL文表示
62        $sql = "SELECT \n" . $_POST['csv_sql'];
63        $objPage->sql = $sql;
64       
65        // エラー表示
66        $objErrMsg = lfCheckSQL($_POST);
67        if ($objErrMsg != "") {
68            $errMsg = $objErrMsg->message . "\n" . $objErrMsg->userinfo;
69        }
70       
71        $objPage->sqlerr = $errMsg;
72
73        $objPage->objView = $objView;
74       
75        // 画面の表示
76        $objView->assignobj($objPage);
77        $objView->display('contents/csv_sql_view.tpl');
78        exit;
79        break;
80
81    // 新規作成
82    case "new_page":
83        header("location: ./csv_sql.php");
84        break;
85       
86    // データ削除
87    case "delete":
88        lfDelData($sql_id);
89        header("location: ./csv_sql.php");
90        break;
91       
92    case "csv_output":
93        // CSV出力データ取得
94        $arrCsvData = lfGetSqlList(" WHERE sql_id = ?", array($_POST['csv_output_id']));
95       
96        $objQuery = new SC_Query();
97       
98        $arrCsvOutputData = $objQuery->getall("SELECT " . $arrCsvData[0]['csv_sql']);
99       
100        if (count($arrCsvOutputData) > 0) {
101           
102            $arrKey = array_keys(sfSwapArray($arrCsvOutputData));
103            foreach($arrKey as $data) {
104                if ($i != 0) $header .= ", ";
105                $header .= $data;
106                $i ++;
107            }
108            $header .= "\n";
109
110            $data = lfGetCSVData($arrCsvOutputData, $arrKey);
111            // CSV出力
112            sfCSVDownload($header.$data);
113            exit;
114        break;
115        }else{
116            $objPage->tpl_onload = "alert('出力データがありません。');";
117            $sql_id = "";
118            $_POST="";
119        }
120        break;
121}
122
123// mode が confirm 以外のときは完了メッセージは出力しない
124if ($mode != "confirm" and $mode != "csv_output") {
125    $objPage->tpl_onload = "";
126}
127
128// 登録済みSQL一覧取得
129$arrSqlList = lfGetSqlList();
130
131// 編集用SQLデータの取得
132if ($sql_id != "") {
133    $arrSqlData = lfGetSqlList(" WHERE sql_id = ?", array($sql_id));
134}
135
136// テーブル一覧を取得する
137$arrTableList = lfGetTableList();
138$arrTableList = sfSwapArray($arrTableList);
139
140// 現在選択されているテーブルを取得する
141if ($_POST['selectTable'] == ""){
142    $selectTable = $arrTableList['table_name'][0];
143}else{
144    $selectTable = $_POST['selectTable'];
145}
146
147// カラム一覧を取得する
148$arrColList = lfGetColumnList($selectTable);
149$arrColList =  sfSwapArray($arrColList);
150
151// 表示させる内容を編集
152foreach ($arrTableList['description'] as $key => $val) {
153    $arrTableList['description'][$key] = $arrTableList['table_name'][$key] . ":" . $arrTableList['description'][$key];
154}
155foreach ($arrColList['description'] as $key => $val) {
156    $arrColList['description'][$key] = $arrColList['column_name'][$key] . ":" . $arrColList['description'][$key];
157}
158
159
160$arrDiff = array_diff(sfGetColumnList($selectTable), $arrColList["column_name"]);
161$arrColList["column_name"] = array_merge($arrColList["column_name"], $arrDiff);
162$arrColList["description"] = array_merge($arrColList["description"], $arrDiff);
163
164// テンプレートに出力するデータをセット
165$objPage->arrSqlList = $arrSqlList;                                                             // SQL一覧
166$objPage->arrTableList = sfarrCombine($arrTableList['table_name'], $arrTableList['description']);   // テーブル一覧
167$objPage->arrColList = sfarrCombine($arrColList['column_name'],$arrColList['description']);         // カラム一覧
168$objPage->selectTable = $selectTable;                                                           // 選択されているテーブル
169$objPage->sql_id = $sql_id;                                                                     // 選択されているSQL
170
171// POSTされたデータをセットする
172if (count($_POST) > 0) {
173    $arrSqlData[0]['sql_name'] = $_POST['sql_name'];
174    $arrSqlData[0]['csv_sql'] = $_POST['csv_sql'];
175}
176$objPage->arrSqlData = $arrSqlData[0];                                                          // 選択されているSQLデータ
177
178// 画面の表示
179$objView->assignobj($objPage);
180$objView->display(MAIN_FRAME);
181
182//---------------------------------------------------------------------------------------------------------------------------------------------------------
183/**************************************************************************************************************
184 * 関数名  :lfGetTableList
185 * 処理内容 :テーブル一覧を取得する
186 * 引数       :なし
187 * 戻り値  :取得結果
188 **************************************************************************************************************/
189function lfGetTableList(){
190    $objQuery = new SC_Query();
191    $arrRet = array();      // 結果取得用
192
193    $sql = "";
194    $sql .= "SELECT table_name, description FROM dtb_table_comment WHERE column_name IS NULL ORDER BY table_name";
195    $arrRet = $objQuery->getAll($sql);
196   
197   
198    return $arrRet;
199}
200
201
202/**************************************************************************************************************
203 * 関数名  :lfGetColunmList
204 * 処理内容 :テーブルのカラム一覧を取得する
205 * 引数       :$selectTable:テーブル名称
206 * 戻り値  :取得結果
207 **************************************************************************************************************/
208function lfGetColumnList($selectTable){
209    $objQuery = new SC_Query();
210    $arrRet = array();      // 結果取得用
211    $sql = "";
212    $sql .= " SELECT column_name, description FROM dtb_table_comment WHERE table_name = ? AND column_name IS NOT NULL";
213    $arrRet = $objQuery->getAll($sql, array($selectTable));
214   
215    return $arrRet;
216   
217}
218
219/**************************************************************************************************************
220 * 関数名  :lfGetSqlList
221 * 処理内容 :登録済みSQL一覧を取得する
222 * 引数1  :$where:Where句
223 * 引数2  :$arrData:絞り込みデータ
224 * 戻り値  :取得結果
225 **************************************************************************************************************/
226function lfGetSqlList($where = "" , $arrData = array()){
227    $objQuery = new SC_Query();
228    $arrRet = array();      // 結果取得用
229   
230    $sql = "";
231    $sql .= " SELECT";
232    $sql .= "     sql_id,";
233    $sql .= "     sql_name,";
234    $sql .= "     csv_sql,";
235    $sql .= "     update_date,";
236    $sql .= "     create_date";
237    $sql .= " FROM";
238    $sql .= "     dtb_csv_sql";
239   
240    // Where句の指定があれば結合する
241    if ($where != "") {
242        $sql .= " $where ";
243    }else{
244        $sql .= " ORDER BY sql_id ";
245    }
246    $sql .= " ";
247
248    // データを引数で渡されている場合にはセットする
249    if (count($arrData) > 0) {
250        $arrRet = $objQuery->getall($sql, $arrData);
251    }else{
252        $arrRet = $objQuery->getall($sql);
253    }
254
255    return $arrRet;
256   
257}
258
259/**************************************************************************************************************
260 * 関数名  :lfUpdCsvOutput
261 * 処理内容 :入力項目のエラーチェックを行う
262 * 引数       :POSTデータ
263 * 戻値       :エラー内容
264 **************************************************************************************************************/
265function lfCheckError($data){
266    $objErr = new SC_CheckError();
267    $objErr->doFunc( array("名称", "sql_name"), array("EXIST_CHECK") );
268    $objErr->doFunc( array("SQL文", "csv_sql", "30000"), array("EXIST_CHECK", "MAX_LENGTH_CHECK") );
269   
270    // SQLの妥当性チェック
271    if ($objErr->arrErr['csv_sql'] == "") {
272        $objsqlErr = lfCheckSQL($data);
273        if ($objsqlErr != "") {
274            $objErr->arrErr["csv_sql"] = "SQL文が不正です。SQL文を見直してください";
275        }
276    }
277   
278    return $objErr->arrErr;
279
280}
281
282/**************************************************************************************************************
283 * 関数名  :lfCheckSQL
284 * 処理内容 :入力されたSQL文が正しいかチェックを行う
285 * 引数       :POSTデータ
286 * 戻値       :エラー内容
287 **************************************************************************************************************/
288function lfCheckSQL($data){
289    $err = "";
290    $objDbConn = new SC_DbConn();
291    $sql = "SELECT " . $data['csv_sql'] . " ";
292    $ret = $objDbConn->conn->query($sql);
293    if ($objDbConn->conn->isError($ret)){
294        $err = $ret;
295    }
296   
297    return $err;
298}
299
300function lfprintr($data){
301    print_r($data);
302}
303
304/**************************************************************************************************************
305 * 関数名  :lfUpdData
306 * 処理内容 :DBにデータを保存する
307 * 引数1  :$sql_id・・・更新するデータのSQL_ID
308 * 引数2  :$arrData・・・更新データ
309 * 戻り値  :$sql_id:SQL_IDを返す
310 **************************************************************************************************************/
311function lfUpdData($sql_id = "", $arrData = array()){
312    $objQuery = new SC_Query();     // DB操作オブジェクト
313    $sql = "";                      // データ取得SQL生成用
314    $arrRet = array();              // データ取得用(更新判定)
315    $arrVal = array();              // データ更新
316
317    // sql_id が指定されている場合にはUPDATE
318    if ($sql_id != "") {
319        // 存在チェック
320        $arrSqlData = lfGetSqlList(" WHERE sql_id = ?", array($sql_id));
321        if (count($arrSqlData) > 0) {
322            // データ更新
323            $sql = "UPDATE dtb_csv_sql SET sql_name = ?, csv_sql = ?, update_date = now() WHERE sql_id = ? ";
324            $arrVal= array($arrData['sql_name'], $arrData['csv_sql'], $sql_id);
325        }else{
326            // データの新規作成
327            $sql_id = "";
328            $sql = "INSERT INTO dtb_csv_sql (sql_name, csv_sql, create_date, update_date) values (?, ?, now(), now()) ";
329            $arrVal= array($arrData['sql_name'], $arrData['csv_sql']);
330           
331        }
332    }else{
333        // データの新規作成
334        $sql = "INSERT INTO dtb_csv_sql (sql_name, csv_sql, create_date, update_date) values (?, ?, now(), now()) ";
335        $arrVal= array($arrData['sql_name'], $arrData['csv_sql']);
336    }
337    // SQL実行   
338    $arrRet = $objQuery->query($sql,$arrVal);
339   
340    // 新規作成時は$sql_idを取得
341    if ($sql_id == "") {
342        $arrNewData = lfGetSqlList(" ORDER BY create_date DESC");
343        $sql_id = $arrNewData[0]['sql_id'];
344    }
345   
346    return $sql_id;
347}
348
349
350/**************************************************************************************************************
351 * 関数名  :lfDelData
352 * 処理内容 :データを削除する
353 * 引数1  :$sql_id・・・削除するデータのSQL_ID
354 * 戻り値  :実行結果 TRUE:成功 FALSE:失敗
355 **************************************************************************************************************/
356function lfDelData($sql_id = ""){
357    $objQuery = new SC_Query();     // DB操作オブジェクト
358    $sql = "";                      // データ取得SQL生成用
359    $Ret = false;                   // 実行結果
360
361    // sql_id が指定されている場合のみ実行
362    if ($sql_id != "") {
363        // データの削除
364        $sql = "DELETE FROM dtb_csv_sql WHERE sql_id = ? ";
365        // SQL実行   
366        $ret = $objQuery->query($sql,array($sql_id));
367    }else{
368        $ret = false;
369    }
370
371    // 結果を返す
372    return $ret;
373}
374
375
376//---- CSV出力用データ取得
377function lfGetCSVData( $array, $arrayIndex){   
378    for ($i=0; $i<count($array); $i++){
379        for ($j=0; $j<count($array[$i]); $j++ ){
380            if ( $j > 0 ) $return .= ",";
381            $return .= "\"";           
382            if ( $arrayIndex ){
383                $return .= mb_ereg_replace("<","<",mb_ereg_replace( "\"","\"\"",$array[$i][$arrayIndex[$j]] )) ."\"";   
384            } else {
385                $return .= mb_ereg_replace("<","<",mb_ereg_replace( "\"","\"\"",$array[$i][$j] )) ."\"";
386            }
387        }
388        $return .= "\n";           
389    }
390   
391    return $return;
392}
393
Note: See TracBrowser for help on using the repository browser.