Ignore:
Timestamp:
2010/07/20 13:25:33 (14 years ago)
Author:
kajiwara
Message:

EC-CUBE Ver2.4.4 分コミット。詳細はこちら( http://www.ec-cube.net/release/detail.php?release_id=223

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/data/class/pages/admin/design/LC_Page_Admin_Design_MainEdit.php

    r17653 r18758  
    33 * This file is part of EC-CUBE 
    44 * 
    5  * Copyright(c) 2000-2007 LOCKON CO.,LTD. All Rights Reserved. 
     5 * Copyright(c) 2000-2010 LOCKON CO.,LTD. All Rights Reserved. 
    66 * 
    77 * http://www.lockon.co.jp/ 
     
    5050        $this->tpl_subno = "main_edit"; 
    5151        $this->tpl_mainno = "design"; 
    52         $this->tpl_subtitle = 'ページ詳細設定'; 
     52        $this->tpl_subtitle = 'ページ詳細編集'; 
    5353    } 
    5454 
     
    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"; 
    326             $filename = basename($arrData['url']); 
     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            } 
     332            $tpl_dir = substr(TPL_DIR, strlen(URL_DIR)); 
     333            $filename = basename($arrData['url']); // 拡張子を付加しない 
    327334        } 
    328335         
    329336        // 更新データ配列の作成 
    330337        $arrUpdData = array( 
    331                             $name                                       // 名称 
    332                             ,$url                                       // URL 
    333                             ,$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']                   // 更新URL 
    339                             ); 
     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        ); 
    340347 
    341348        return $arrUpdData; 
     
    354361 
    355362        // URLチェック 
    356         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) { 
    357373            $objErr->arrErr['url'] = "※ URLを正しく入力してください。<br />"; 
    358374        } 
    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  
     375         
    365376        // 同一の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             } 
     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 />'; 
    373397        } 
    374398 
     
    401425     * @return void 
    402426     */ 
    403     function lfCreatePHPFile($path){ 
    404  
     427    function lfCreatePHPFile($url){ 
     428 
     429        $path = USER_PATH . $url . ".php"; 
     430         
    405431        // php保存先ディレクトリが存在していなければ作成する 
    406432        if (!is_dir(dirname($path))) { 
     
    414440 
    415441        // require.phpの場所を書き換える 
    416         $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); 
    417443 
    418444        // phpファイルの作成 
Note: See TracChangeset for help on using the changeset viewer.