Changeset 16449


Ignore:
Timestamp:
2007/10/16 16:30:39 (14 years ago)
Author:
nanasess
Message:

クラス化対応

Location:
branches/feature-module-update
Files:
2 added
1 edited

Legend:

Unmodified
Added
Removed
  • branches/feature-module-update/html/admin/contents/csv_sql.php

    r15532 r16449  
    55 * http://www.lockon.co.jp/ 
    66 */ 
     7 
     8// {{{ requires 
    79require_once("../../require.php"); 
    8 require_once(DATA_PATH . "include/csv_output.inc"); 
     10require_once(CLASS_EX_PATH . "page_extends/admin/contents/LC_Page_Admin_Contents_CsvSql_Ex.php"); 
    911 
    10 class LC_Page { 
    11     var $arrForm; 
    12     var $arrHidden; 
     12// }}} 
     13// {{{ generate page 
    1314 
    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(); 
    32 sfIsSuccess($objSess); 
    33  
    34 // SQL_IDの取得 
    35 if ($_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  
    45 switch($_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 以外のときは完了メッセージは出力しない 
    124 if ($mode != "confirm" and $mode != "csv_output") { 
    125     $objPage->tpl_onload = ""; 
    126 } 
    127  
    128 // 登録済みSQL一覧取得 
    129 $arrSqlList = lfGetSqlList(); 
    130  
    131 // 編集用SQLデータの取得 
    132 if ($sql_id != "") { 
    133     $arrSqlData = lfGetSqlList(" WHERE sql_id = ?", array($sql_id)); 
    134 } 
    135  
    136 // テーブル一覧を取得する 
    137 $arrTableList = lfGetTableList(); 
    138 $arrTableList = sfSwapArray($arrTableList); 
    139  
    140 // 現在選択されているテーブルを取得する 
    141 if ($_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 // 表示させる内容を編集 
    152 foreach ($arrTableList['description'] as $key => $val) { 
    153     $arrTableList['description'][$key] = $arrTableList['table_name'][$key] . ":" . $arrTableList['description'][$key]; 
    154 } 
    155 foreach ($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されたデータをセットする 
    172 if (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  **************************************************************************************************************/ 
    189 function 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  **************************************************************************************************************/ 
    208 function 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  **************************************************************************************************************/ 
    226 function 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  **************************************************************************************************************/ 
    265 function 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  **************************************************************************************************************/ 
    288 function 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  
    300 function 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  **************************************************************************************************************/ 
    311 function 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  **************************************************************************************************************/ 
    356 function 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出力用データ取得 
    377 function 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  
     15$objPage = new LC_Page_Admin_Contents_CsvSql_Ex(); 
     16$objPage->init(); 
     17$objPage->process(); 
     18register_shutdown_function(array($objPage, "destroy")); 
     19?> 
Note: See TracChangeset for help on using the changeset viewer.