Ignore:
Timestamp:
2010/03/10 15:26:23 (14 years ago)
Author:
shutta
Message:

#598 対応の続き。
コミュニティ版の r17416, r17487, r17602 を取り込んだ。(少々差異あり)

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/version-2_4-dev/data/class/pages/admin/design/LC_Page_Admin_Design_MainEdit.php

    r18584 r18606  
    111111 
    112112            // ディレクトリを画面表示用に編集 
    113             $arrPageData[0]['directory'] = str_replace( USER_DIR,'', $arrPageData[0]['php_dir']); 
     113            $arrPageData[0]['directory'] = str_replace(USER_DIR, '', $arrPageData[0]['php_dir']); 
    114114 
    115115            $this->arrPageData = $arrPageData[0]; 
     
    133133            $arrPreData = $this->objLayout->lfgetPageData("page_id = ?" , array($page_id)); 
    134134             
    135             // tplファイルの削除 
     135            // tplファイルの削除 (XXX: 処理の意図が不明。存在していると都合が悪いファイル?) 
    136136            $del_tpl = USER_PATH . "templates/" . $arrPreData[0]['filename'] . '.tpl'; 
    137137            if (file_exists($del_tpl)){ 
     
    193193                    $this->objLayout->lfDelFile($arrPageData[0]); 
    194194                    // PHPファイル作成 
    195                     $cre_php = USER_PATH . $_POST['url'] . ".php"; 
    196                     $this->lfCreatePHPFile($cre_php); 
     195                    $this->lfCreatePHPFile($_POST['url']); 
    197196                } 
    198197 
    199198                // TPLファイル作成 
    200199                $cre_tpl = USER_TEMPLATE_PATH . "/" . TEMPLATE_NAME . "/" . basename($_POST['url']) . '.tpl'; 
    201  
    202200                $this->lfCreateFile($cre_tpl); 
    203201 
    204                 // 編集可能ページの場合にのみ処理を行う 
    205                 if ($arrPageData[0]['edit_flg'] != 2) { 
    206                     // 新規作成した場合のために改にページIDを取得する 
    207                     $arrPageData = $this->objLayout->lfgetPageData(" url = ? " , array(USER_URL.$_POST['url'].".php")); 
     202                // 新規作成の場合、 
     203                if ($page_id == '') { 
     204                    // ページIDを取得する 
     205                    $arrPageData = $this->objLayout->lfgetPageData(" url = ? AND page_id <> 0" , array(USER_URL.$_POST['url'] . ".php")); 
    208206                    $page_id = $arrPageData[0]['page_id']; 
    209207                } 
     
    212210                                              "msg"     => "on"))); 
    213211                exit; 
    214             }else{ 
     212            } else { 
    215213                // エラーがあれば入力時のデータを表示する 
    216214                $this->arrPageData = $_POST; 
    217215                $this->arrPageData['header_chk'] = SC_Utils_Ex::sfChangeCheckBox(SC_Utils_Ex::sfChangeCheckBox($_POST['header_chk']), true); 
    218216                $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'] = ""; 
     217                $this->arrPageData['directory'] = ''; 
     218                $this->arrPageData['filename'] = $_POST['url']; 
    221219            } 
    222220        } 
    223221 
    224222        // データ削除処理 ベースデータでなければファイルを削除 
    225         if ($_POST['mode'] == 'delete' and  !$this->objLayout->lfCheckBaseData($page_id)) { 
     223        if ($_POST['mode'] == 'delete' and !$this->objLayout->lfCheckBaseData($page_id)) { 
    226224            $this->objLayout->lfDelPageData($_POST['page_id']); 
    227225            $this->sendRedirect($this->getLocation("./main_edit.php")); 
     
    281279            $sql .= " ) VALUES ( ?,?,?,?,?,?,?,?,now(),now() )"; 
    282280            $sql .= " "; 
    283         }else{ 
     281        } else { 
    284282            // データが存在してる場合にはアップデートを行う 
    285283            // SQL生成 
     
    318316        if ($this->objLayout->lfCheckBaseData($arrData['page_id'])) { 
    319317            $arrPageData = $this->objLayout->lfgetPageData( ' page_id = ? ' , array($arrData['page_id'])); 
     318             
    320319            $name = $arrPageData[0]['page_name'] ; 
    321320            $url = $arrPageData[0]['url']; 
     321            $php_dir = $arrPageData[0]['php_dir']; 
    322322            $filename = $arrPageData[0]['filename']; 
    323         }else{ 
     323        } else { 
    324324            $name = $arrData['page_name'] ; 
    325             $url = USER_URL.$arrData['url'].".php"; 
     325            $url = USER_DIR . $arrData['url'] . '.php'; 
     326            $php_dir = dirname($url); 
     327            if ($php_dir == '.') { 
     328                $php_dir = ''; 
     329            } else { 
     330                $php_dir .= '/'; 
     331            } 
    326332            $tpl_dir = substr(TPL_DIR, strlen(URL_DIR)); 
    327             $filename = basename($arrData['url']); 
     333            $filename = basename($arrData['url']); // 拡張子を付加しない 
    328334        } 
    329335         
    330336        // 更新データ配列の作成 
    331337        $arrUpdData = array( 
    332                             $name                                       // 名称 
    333                             ,$url                                       // URL 
    334                             ,$php_dir                                   // PHPディレクトリ 
    335                             ,$tpl_dir                                   // TPLディレクトリ 
    336                             ,$filename                                  // ファイル名 
    337                             ,SC_Utils_Ex::sfChangeCheckBox($arrData['header_chk'])  // ヘッダー使用 
    338                             ,SC_Utils_Ex::sfChangeCheckBox($arrData['footer_chk'])  // フッター使用 
    339                             ,$_SERVER['HTTP_REFERER']                   // 更新URL 
    340                             ); 
     338            $name                                                   // 名称 
     339            ,$url                                                   // URL 
     340            ,$php_dir                                               // PHPディレクトリ 
     341            ,$tpl_dir                                               // TPLディレクトリ 
     342            ,$filename                                              // ファイル名 
     343            ,SC_Utils_Ex::sfChangeCheckBox($arrData['header_chk'])  // ヘッダー使用 
     344            ,SC_Utils_Ex::sfChangeCheckBox($arrData['footer_chk'])  // フッター使用 
     345            ,$_SERVER['HTTP_REFERER']                               // 更新URL 
     346        ); 
    341347 
    342348        return $arrUpdData; 
     
    355361 
    356362        // URLチェック 
    357         if (substr(strrev(trim($array['url'])),0,1) == "/") { 
     363        $okUrl = true; 
     364        foreach (explode('/', $array['url']) as $url_part) { 
     365            if (!ereg( '^[a-zA-Z0-9:_~\.-]+$', $url_part)) { 
     366                $okUrl = false; 
     367            } 
     368            if ($url_part == '.' || $url_part == '..') { 
     369                $okUrl = false; 
     370            } 
     371        } 
     372        if (!$okUrl) { 
    358373            $objErr->arrErr['url'] = "※ URLを正しく入力してください。<br />"; 
    359374        } 
    360  
    361         $check_url = USER_URL . $array['url'] . ".php"; 
    362         if( strlen($array['url']) > 0 && !ereg( "^https?://+($|[a-zA-Z0-9:_~=&\?\.\/-])+$", $check_url ) ) { 
    363             $objErr->arrErr['url'] = "※ URLを正しく入力してください。<br />"; 
    364         } 
    365  
     375         
    366376        // 同一のURLが存在している場合にはエラー 
    367         if(!isset($objErr->arrErr['url']) and $array['url'] !== ''){ 
    368             // URLのチェック(プレビュー用のレコードは含まない) 
    369             $arrChk = $this->objLayout->lfgetPageData(" url = ? AND page_id <> 0" , array(USER_URL . $array['url'].".php")); 
    370  
    371             if (count($arrChk[0]) >= 1 and $arrChk[0]['page_id'] != $array['page_id']) { 
    372                 $objErr->arrErr['url'] = '※ 同じURLのデータが存在しています。別のURLを付けてください。<br />'; 
    373             } 
     377        $sqlWhere = ''; 
     378        $params = array(); 
     379         
     380        $sqlWhere .= ' (url = ? OR url = ?)'; 
     381        $params[] = USER_DIR . $array['url'] . '.php'; 
     382        $params[] = USER_URL . $array['url'] . '.php'; // 従来形式 
     383 
     384        // プレビュー用のレコードは除外 
     385        $sqlWhere .= ' AND page_id <> 0'; 
     386 
     387        // 変更の場合、自身のレコードは除外 
     388        if (strlen($array['page_id']) != 0) { 
     389            $sqlWhere .= ' AND page_id <> ?'; 
     390            $params[] = $array['page_id']; 
     391        } 
     392 
     393        $arrChk = $this->objLayout->lfgetPageData($sqlWhere , $params); 
     394 
     395        if (count($arrChk) >= 1) { 
     396            $objErr->arrErr['url'] = '※ 同じURLのデータが存在しています。別のURを付けてください。<br />'; 
    374397        } 
    375398 
     
    402425     * @return void 
    403426     */ 
    404     function lfCreatePHPFile($path){ 
    405  
     427    function lfCreatePHPFile($url){ 
     428 
     429        $path = USER_PATH . $url . ".php"; 
     430         
    406431        // php保存先ディレクトリが存在していなければ作成する 
    407432        if (!is_dir(dirname($path))) { 
     
    415440 
    416441        // require.phpの場所を書き換える 
    417         $php_data = str_replace("###require###", HTML_PATH . "require.php", $php_data); 
     442        $php_data = str_replace("###require###", str_repeat('../', substr_count($url, '/')) . '../require.php', $php_data); 
    418443 
    419444        // phpファイルの作成 
Note: See TracChangeset for help on using the changeset viewer.