Changeset 16449
- Timestamp:
- 2007/10/16 16:30:39 (16 years ago)
- 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 5 5 * http://www.lockon.co.jp/ 6 6 */ 7 8 // {{{ requires 7 9 require_once("../../require.php"); 8 require_once( DATA_PATH . "include/csv_output.inc");10 require_once(CLASS_EX_PATH . "page_extends/admin/contents/LC_Page_Admin_Contents_CsvSql_Ex.php"); 9 11 10 class LC_Page { 11 var $arrForm; 12 var $arrHidden; 12 // }}} 13 // {{{ generate page 13 14 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(); 18 register_shutdown_function(array($objPage, "destroy")); 19 ?>
Note: See TracChangeset
for help on using the changeset viewer.