Changeset 18609 for tmp/version-2_5-test/data/class/pages/admin/design/LC_Page_Admin_Design_MainEdit.php
- Timestamp:
- 2010/03/11 10:35:11 (14 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
tmp/version-2_5-test/data/class/pages/admin/design/LC_Page_Admin_Design_MainEdit.php
r17653 r18609 87 87 // page_id が指定されている場合にはテンプレートデータの取得 88 88 if (is_numeric($page_id) and $page_id != '') { 89 $arrPageData = $this->objLayout->lfgetPageData(" page_id = ? " , array($page_id)); 90 91 if ($arrPageData[0]['tpl_dir'] === "") { 92 $this->arrErr['page_id_err'] = "※ 指定されたページは編集できません。"; 93 // 画面の表示 94 $objView->assignobj($this); 95 $objView->display(MAIN_FRAME); 96 exit; 97 } 98 99 // テンプレートファイルが存在していれば読み込む 100 $tpl_file = USER_TEMPLATE_PATH . "/" . TEMPLATE_NAME . "/" . $arrPageData[0]['filename'] . ".tpl"; 101 if (file_exists($tpl_file)){ 102 $arrPageData[0]['tpl_data'] = file_get_contents($tpl_file); 103 // 存在してなければ, 指定されたテンプレートのファイルを読み込む 104 } else { 105 $arrPageData[0]['tpl_data'] = file_get_contents(TEMPLATE_DIR . $arrPageData[0]['filename'] . ".tpl"); 106 } 107 108 // チェックボックスの値変更 109 $arrPageData[0]['header_chk'] = SC_Utils_Ex::sfChangeCheckBox($arrPageData[0]['header_chk'], true); 110 $arrPageData[0]['footer_chk'] = SC_Utils_Ex::sfChangeCheckBox($arrPageData[0]['footer_chk'], true); 111 112 // ディレクトリを画面表示用に編集 113 $arrPageData[0]['directory'] = str_replace( USER_DIR,'', $arrPageData[0]['php_dir']); 114 115 $this->arrPageData = $arrPageData[0]; 116 } 117 89 $this->lfGetPageData($page_id, $objView); 90 } 91 92 if (!isset($_POST['mode'])) $_POST['mode'] = ""; 93 118 94 // プレビュー処理 119 if (!isset($_POST['mode'])) $_POST['mode'] = "";120 121 95 if ($_POST['mode'] == 'preview') { 122 123 $page_id_old = $page_id; 124 // プレビューの場合ページIDを0にセットする。 125 $page_id = "0"; 126 $url = basename($_POST['url']); 127 128 $tmpPost = $_POST; 129 $tmpPost['page_id'] = $page_id; 130 $tmpPost['url'] = $url; 131 $tmpPost['tpl_dir'] = USER_PATH . "templates/preview/"; 132 133 $arrPreData = $this->objLayout->lfgetPageData("page_id = ?" , array($page_id)); 134 135 // tplファイルの削除 136 $del_tpl = USER_PATH . "templates/" . $arrPreData[0]['filename'] . '.tpl'; 137 if (file_exists($del_tpl)){ 138 unlink($del_tpl); 139 } 140 141 // DBへデータを更新する 142 $this->lfEntryPageData($tmpPost); 143 144 // TPLファイル作成 145 $preview_tpl = USER_PATH . "templates/preview/" . TEMPLATE_NAME . "/" . $url . '.tpl'; 146 $this->lfCreateFile($preview_tpl); 147 148 // blocposition を削除 149 $objDBConn = new SC_DbConn; // DB操作オブジェクト 150 $sql = 'delete from dtb_blocposition where page_id = 0'; 151 $ret = $objDBConn->query($sql); 152 153 if ($page_id_old != "") { 154 // 登録データを取得 155 $sql = "SELECT 0, target_id, bloc_id, bloc_row FROM dtb_blocposition WHERE page_id = ?"; 156 $ret = $objDBConn->getAll($sql,array($page_id_old)); 157 158 if (count($ret) > 0) { 159 160 // blocposition を複製 161 $sql = " insert into dtb_blocposition ("; 162 $sql .= " page_id,"; 163 $sql .= " target_id,"; 164 $sql .= " bloc_id,"; 165 $sql .= " bloc_row"; 166 $sql .= " )values(?, ?, ?, ?)"; 167 168 // 取得件数文INSERT実行 169 foreach($ret as $key => $val){ 170 $ret = $objDBConn->query($sql,$val); 171 } 172 } 173 } 174 $_SESSION['preview'] = "ON"; 175 $this->sendRedirect($this->getLocation(URL_DIR . "preview/index.php", array("filename" => $arrPageData[0]["filename"]))); 96 $this->lfPreviewPageData($page_id); 176 97 exit; 177 98 } … … 179 100 // データ登録処理 180 101 if ($_POST['mode'] == 'confirm') { 181 182 // エラーチェック 183 $this->arrErr = $this->lfErrorCheck($_POST); 184 185 // エラーがなければ更新処理を行う 186 if (count($this->arrErr) == 0) { 187 // DBへデータを更新する 188 $this->lfEntryPageData($_POST); 189 190 // ベースデータでなければファイルを削除し、PHPファイルを作成する 191 if (!$this->objLayout->lfCheckBaseData($page_id)) { 192 // ファイル削除 193 $this->objLayout->lfDelFile($arrPageData[0]); 194 // PHPファイル作成 195 $cre_php = USER_PATH . $_POST['url'] . ".php"; 196 $this->lfCreatePHPFile($cre_php); 197 } 198 199 // TPLファイル作成 200 $cre_tpl = USER_TEMPLATE_PATH . "/" . TEMPLATE_NAME . "/" . basename($_POST['url']) . '.tpl'; 201 202 $this->lfCreateFile($cre_tpl); 203 204 // 編集可能ページの場合にのみ処理を行う 205 if ($arrPageData[0]['edit_flg'] != 2) { 206 // 新規作成した場合のために改にページIDを取得する 207 $arrPageData = $this->objLayout->lfgetPageData(" url = ? " , array(USER_URL.$_POST['url'].".php")); 208 $page_id = $arrPageData[0]['page_id']; 209 } 210 $this->sendRedirect($this->getLocation("./main_edit.php", 211 array("page_id" => $page_id, 212 "msg" => "on"))); 213 exit; 214 }else{ 215 // エラーがあれば入力時のデータを表示する 216 $this->arrPageData = $_POST; 217 $this->arrPageData['header_chk'] = SC_Utils_Ex::sfChangeCheckBox(SC_Utils_Ex::sfChangeCheckBox($_POST['header_chk']), true); 218 $this->arrPageData['footer_chk'] = SC_Utils_Ex::sfChangeCheckBox(SC_Utils_Ex::sfChangeCheckBox($_POST['footer_chk']), true); 219 $this->arrPageData['directory'] = $_POST['url']; 220 $this->arrPageData['filename'] = ""; 221 } 102 $this->lfConfirmPageData($page_id); 222 103 } 223 104 224 105 // データ削除処理 ベースデータでなければファイルを削除 225 if ($_POST['mode'] == 'delete' and !$this->objLayout->lfCheckBaseData($page_id)) { 226 $this->objLayout->lfDelPageData($_POST['page_id']); 227 $this->sendRedirect($this->getLocation("./main_edit.php")); 106 if ($_POST['mode'] == 'delete' and !$this->objLayout->lfCheckBaseData($page_id)) { 107 $this->lfDeletePageData($page_id); 228 108 exit; 229 109 } … … 241 121 function destroy() { 242 122 parent::destroy(); 123 } 124 125 /** 126 * ページデータを取得する. 127 * 128 * @param integer $page_id ページID 129 * @param object $objView ビューオブジェクト 130 * @return void 131 */ 132 function lfGetPageData($page_id, $objView){ 133 $arrPageData = $this->objLayout->lfgetPageData(" page_id = ? " , array($page_id)); 134 135 if (strlen($arrPageData[0]['filename']) == 0) { 136 $this->arrErr['page_id_err'] = "※ 指定されたページは編集できません。"; 137 // 画面の表示 138 $objView->assignobj($this); 139 $objView->display(MAIN_FRAME); 140 exit; 141 } 142 143 // テンプレートファイルが存在していれば読み込む 144 $tpl_file = USER_TEMPLATE_PATH . "/" . TEMPLATE_NAME . "/" . $arrPageData[0]['filename'] . ".tpl"; 145 if (file_exists($tpl_file)){ 146 $arrPageData[0]['tpl_data'] = file_get_contents($tpl_file); 147 // 存在してなければ, 指定されたテンプレートのファイルを読み込む 148 } else { 149 $arrPageData[0]['tpl_data'] = file_get_contents(TEMPLATE_DIR . $arrPageData[0]['filename'] . ".tpl"); 150 } 151 152 // チェックボックスの値変更 153 $arrPageData[0]['header_chk'] = SC_Utils_Ex::sfChangeCheckBox($arrPageData[0]['header_chk'], true); 154 $arrPageData[0]['footer_chk'] = SC_Utils_Ex::sfChangeCheckBox($arrPageData[0]['footer_chk'], true); 155 156 // ディレクトリを画面表示用に編集 157 $arrPageData[0]['directory'] = str_replace(USER_DIR, '', $arrPageData[0]['php_dir']); 158 159 $this->arrPageData = $arrPageData[0]; 160 } 161 162 /** 163 * プレビュー画面を表示する. 164 * 165 * @param integer $page_id ページID 166 * @return void 167 */ 168 function lfPreviewPageData($page_id){ 169 170 $page_id_old = $page_id; 171 // プレビューの場合ページIDを0にセットする。 172 $page_id = "0"; 173 $url = basename($_POST['url']); 174 175 $tmpPost = $_POST; 176 $tmpPost['page_id'] = $page_id; 177 $tmpPost['url'] = $url; 178 $tmpPost['tpl_dir'] = USER_PATH . "templates/preview/"; 179 180 $arrPreData = $this->objLayout->lfgetPageData("page_id = ?" , array($page_id)); 181 182 // tplファイルの削除 (XXX: 処理の意図が不明。存在していると都合が悪いファイル?) 183 $del_tpl = USER_PATH . "templates/" . $arrPreData[0]['filename'] . '.tpl'; 184 if (file_exists($del_tpl)){ 185 unlink($del_tpl); 186 } 187 188 // DBへデータを更新する 189 $this->lfEntryPageData($tmpPost); 190 191 // TPLファイル作成 192 $preview_tpl = USER_PATH . "templates/preview/" . TEMPLATE_NAME . "/" . $url . '.tpl'; 193 $this->lfCreateFile($preview_tpl, $_POST['tpl_data']); 194 195 // blocposition を削除 196 $objDBConn = new SC_DbConn; // DB操作オブジェクト 197 $sql = 'delete from dtb_blocposition where page_id = 0'; 198 $ret = $objDBConn->query($sql); 199 200 if ($page_id_old != "") { 201 // 登録データを取得 202 $sql = "SELECT 0, target_id, bloc_id, bloc_row FROM dtb_blocposition WHERE page_id = ?"; 203 $ret = $objDBConn->getAll($sql,array($page_id_old)); 204 205 if (count($ret) > 0) { 206 207 // blocposition を複製 208 $sql = " insert into dtb_blocposition ("; 209 $sql .= " page_id,"; 210 $sql .= " target_id,"; 211 $sql .= " bloc_id,"; 212 $sql .= " bloc_row"; 213 $sql .= " )values(?, ?, ?, ?)"; 214 215 // 取得件数文INSERT実行 216 foreach($ret as $key => $val){ 217 $ret = $objDBConn->query($sql,$val); 218 } 219 } 220 } 221 $_SESSION['preview'] = "ON"; 222 $this->sendRedirect($this->getLocation(URL_DIR . "preview/" . DIR_INDEX_URL, array("filename" => $arrPageData[0]["filename"]))); 223 224 } 225 226 /** 227 * データ登録処理. 228 * 229 * @param integer $page_id ページID 230 * @return void 231 */ 232 function lfConfirmPageData($page_id){ 233 // エラーチェック 234 $this->arrErr = $this->lfErrorCheck($_POST); 235 236 // エラーがなければ更新処理を行う 237 if (count($this->arrErr) == 0) { 238 // DBへデータを更新する 239 $this->lfEntryPageData($_POST); 240 241 // ベースデータでなければファイルを削除し、PHPファイルを作成する 242 if (!$this->objLayout->lfCheckBaseData($page_id)) { 243 // ファイル削除 244 $this->objLayout->lfDelFile($this->arrPageData); 245 // PHPファイル作成 246 $this->lfCreatePHPFile($_POST['url']); 247 } 248 249 // TPLファイル作成 250 $cre_tpl = USER_TEMPLATE_PATH . "/" . TEMPLATE_NAME . "/" . basename($_POST['url']) . '.tpl'; 251 $this->lfCreateFile($cre_tpl, $_POST['tpl_data']); 252 253 // 新規作成の場合、 254 if ($page_id == '') { 255 // ページIDを取得する 256 $arrPageData = $this->objLayout->lfgetPageData(" url = ? AND page_id <> 0" , array(USER_DIR . $_POST['url'] . '.php')); 257 $page_id = $arrPageData[0]['page_id']; 258 } 259 $this->sendRedirect($this->getLocation("./main_edit.php", 260 array("page_id" => $page_id, 261 "msg" => "on"))); 262 exit; 263 } else { 264 // エラーがあれば入力時のデータを表示する 265 $this->arrPageData = $_POST; 266 $this->arrPageData['header_chk'] = SC_Utils_Ex::sfChangeCheckBox(SC_Utils_Ex::sfChangeCheckBox($_POST['header_chk']), true); 267 $this->arrPageData['footer_chk'] = SC_Utils_Ex::sfChangeCheckBox(SC_Utils_Ex::sfChangeCheckBox($_POST['footer_chk']), true); 268 $this->arrPageData['directory'] = ''; 269 $this->arrPageData['filename'] = $_POST['url']; 270 } 243 271 } 244 272 … … 281 309 $sql .= " ) VALUES ( ?,?,?,?,?,?,?,?,now(),now() )"; 282 310 $sql .= " "; 283 } else{311 } else { 284 312 // データが存在してる場合にはアップデートを行う 285 313 // SQL生成 … … 318 346 if ($this->objLayout->lfCheckBaseData($arrData['page_id'])) { 319 347 $arrPageData = $this->objLayout->lfgetPageData( ' page_id = ? ' , array($arrData['page_id'])); 348 320 349 $name = $arrPageData[0]['page_name'] ; 321 350 $url = $arrPageData[0]['url']; 351 $php_dir = $arrPageData[0]['php_dir']; 322 352 $filename = $arrPageData[0]['filename']; 323 } else{353 } else { 324 354 $name = $arrData['page_name'] ; 325 $url = USER_URL.$arrData['url'].".php"; 326 $filename = basename($arrData['url']); 355 $url = USER_DIR . $arrData['url'] . '.php'; 356 $php_dir = dirname($url); 357 if ($php_dir == '.') { 358 $php_dir = ''; 359 } else { 360 $php_dir .= '/'; 361 } 362 $tpl_dir = substr(TPL_DIR, strlen(URL_DIR)); 363 $filename = basename($arrData['url']); // 拡張子を付加しない 327 364 } 328 365 329 366 // 更新データ配列の作成 330 367 $arrUpdData = array( 331 $name// 名称332 ,$url// URL333 ,$php_dir// PHPディレクトリ334 ,$tpl_dir// TPLディレクトリ335 ,$filename// ファイル名336 ,SC_Utils_Ex::sfChangeCheckBox($arrData['header_chk'])// ヘッダー使用337 ,SC_Utils_Ex::sfChangeCheckBox($arrData['footer_chk'])// フッター使用338 ,$_SERVER['HTTP_REFERER']// 更新URL339 368 $name // 名称 369 ,$url // URL 370 ,$php_dir // PHPディレクトリ 371 ,$tpl_dir // TPLディレクトリ 372 ,$filename // ファイル名 373 ,SC_Utils_Ex::sfChangeCheckBox($arrData['header_chk']) // ヘッダー使用 374 ,SC_Utils_Ex::sfChangeCheckBox($arrData['footer_chk']) // フッター使用 375 ,$_SERVER['HTTP_REFERER'] // 更新URL 376 ); 340 377 341 378 return $arrUpdData; 379 } 380 381 /** 382 * ページデータを削除する. 383 * 384 * @param integer $page_id ページID 385 * @return void 386 */ 387 function lfDeletePageData($page_id){ 388 $this->objLayout->lfDelPageData($_POST['page_id']); 389 $this->sendRedirect($this->getLocation("./main_edit.php")); 342 390 } 343 391 … … 352 400 $objErr->doFunc(array("名称", "page_name", STEXT_LEN), array("EXIST_CHECK", "SPTAB_CHECK", "MAX_LENGTH_CHECK")); 353 401 $objErr->doFunc(array("URL", "url", STEXT_LEN), array("EXIST_CHECK", "SPTAB_CHECK", "MAX_LENGTH_CHECK")); 354 402 355 403 // URLチェック 356 if (substr(strrev(trim($array['url'])),0,1) == "/") { 404 $okUrl = true; 405 foreach (explode('/', $array['url']) as $url_part) { 406 if (!ereg( '^[a-zA-Z0-9:_~\.-]+$', $url_part)) { 407 $okUrl = false; 408 } 409 if ($url_part == '.' || $url_part == '..') { 410 $okUrl = false; 411 } 412 } 413 if (!$okUrl) { 357 414 $objErr->arrErr['url'] = "※ URLを正しく入力してください。<br />"; 358 415 } 359 360 $check_url = USER_URL . $array['url'] . ".php"; 361 if( strlen($array['url']) > 0 && !ereg( "^https?://+($|[a-zA-Z0-9:_~=&\?\.\/-])+$", $check_url ) ) { 362 $objErr->arrErr['url'] = "※ URLを正しく入力してください。<br />"; 363 } 364 416 365 417 // 同一のURLが存在している場合にはエラー 366 if(!isset($objErr->arrErr['url']) and $array['url'] !== ''){ 367 // URLのチェック(プレビュー用のレコードは含まない) 368 $arrChk = $this->objLayout->lfgetPageData(" url = ? AND page_id <> 0" , array(USER_URL . $array['url'].".php")); 369 370 if (count($arrChk[0]) >= 1 and $arrChk[0]['page_id'] != $array['page_id']) { 371 $objErr->arrErr['url'] = '※ 同じURLのデータが存在しています。別のURLを付けてください。<br />'; 372 } 373 } 374 418 $sqlWhere = ''; 419 $params = array(); 420 421 $sqlWhere .= ' (url = ? OR url = ?)'; 422 $params[] = USER_DIR . $array['url'] . '.php'; 423 $params[] = USER_URL . $array['url'] . '.php'; // 従来形式 424 425 // プレビュー用のレコードは除外 426 $sqlWhere .= ' AND page_id <> 0'; 427 428 // 変更の場合、自身のレコードは除外 429 if (strlen($array['page_id']) != 0) { 430 $sqlWhere .= ' AND page_id <> ?'; 431 $params[] = $array['page_id']; 432 } 433 434 $arrChk = $this->objLayout->lfgetPageData($sqlWhere , $params); 435 436 if (count($arrChk) >= 1) { 437 $objErr->arrErr['url'] = '※ 同じURLのデータが存在しています。別のURLを付けてください。<br />'; 438 } 439 375 440 return $objErr->arrErr; 376 441 } … … 380 445 * 381 446 * @param string $path テンプレートファイルのパス 382 * @return void 383 */ 384 function lfCreateFile($path){ 447 * @param string $data テンプレートの内容 448 * @return void 449 */ 450 function lfCreateFile($path, $data){ 385 451 386 452 // ディレクトリが存在していなければ作成する … … 391 457 // ファイル作成 392 458 $fp = fopen($path,"w"); 393 fwrite($fp, $ _POST['tpl_data']); // FIXME いきなり POST はちょっと...459 fwrite($fp, $data); // FIXME いきなり POST はちょっと... 394 460 fclose($fp); 395 461 } … … 401 467 * @return void 402 468 */ 403 function lfCreatePHPFile($path){ 404 469 function lfCreatePHPFile($url){ 470 471 $path = USER_PATH . $url . ".php"; 472 405 473 // php保存先ディレクトリが存在していなければ作成する 406 474 if (!is_dir(dirname($path))) { … … 414 482 415 483 // require.phpの場所を書き換える 416 $php_data = str_replace("###require###", HTML_PATH . "require.php", $php_data);484 $php_data = str_replace("###require###", str_repeat('../', substr_count($url, '/')) . '../require.php', $php_data); 417 485 418 486 // phpファイルの作成
Note: See TracChangeset
for help on using the changeset viewer.