Ignore:
Timestamp:
2008/07/10 14:29:55 (16 years ago)
Author:
Seasoft
Message:

変更(編集)でディレクトリ(USER_URL 配下にサブディレクトリ)を扱えるように改訂。ユーザが定義したレコードについても、URLを(ベースデータと同等に) SITE_URL 相当の部分を削って格納する仕様に変更。フロント機能は従来データと互換性あり。

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/comu-ver2/data/class/pages/admin/design/LC_Page_Admin_Design_MainEdit.php

    r16741 r17416  
    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)){ 
     
    192192                    $this->objLayout->lfDelFile($arrPageData[0]); 
    193193                    // PHPファイル作成 
    194                     $cre_php = USER_PATH . $_POST['url'] . ".php"; 
    195                     $this->lfCreatePHPFile($cre_php); 
     194                    $this->lfCreatePHPFile($_POST['url']); 
    196195                } 
    197196 
    198197                // TPLファイル作成 
    199198                $cre_tpl = USER_TEMPLATE_PATH . "/" . TEMPLATE_NAME . "/" . basename($_POST['url']) . '.tpl'; 
    200  
    201199                $this->lfCreateFile($cre_tpl); 
    202200 
    203                 // 編集可能ページの場合にのみ処理を行う 
    204                 if ($arrPageData[0]['edit_flg'] != 2) { 
    205                     // 新規作成した場合のために改にページIDを取得する 
    206                     $arrPageData = $this->objLayout->lfgetPageData(" url = ? " , array(USER_URL.$_POST['url'].".php")); 
     201                // 新規作成の場合、 
     202                if ($page_id == '') { 
     203                    // ページIDを取得する 
     204                    $arrPageData = $this->objLayout->lfgetPageData(" url = ? AND page_id <> 0" , array(USER_DIR . $_POST['url'] . '.php')); 
    207205                    $page_id = $arrPageData[0]['page_id']; 
    208206                } 
     
    210208                                        array("page_id" => $page_id, 
    211209                                              "msg"     => "on"))); 
    212             }else{ 
     210            } else { 
    213211                // エラーがあれば入力時のデータを表示する 
    214212                $this->arrPageData = $_POST; 
    215213                $this->arrPageData['header_chk'] = SC_Utils_Ex::sfChangeCheckBox(SC_Utils_Ex::sfChangeCheckBox($_POST['header_chk']), true); 
    216214                $this->arrPageData['footer_chk'] = SC_Utils_Ex::sfChangeCheckBox(SC_Utils_Ex::sfChangeCheckBox($_POST['footer_chk']), true); 
    217                 $this->arrPageData['directory'] = $_POST['url']; 
    218                 $this->arrPageData['filename'] = ""; 
     215                $this->arrPageData['directory'] = ''; 
     216                $this->arrPageData['filename'] = $_POST['url']; 
    219217            } 
    220218        } 
    221219 
    222220        // データ削除処理 ベースデータでなければファイルを削除 
    223         if ($_POST['mode'] == 'delete' and  !$this->objLayout->lfCheckBaseData($page_id)) { 
     221        if ($_POST['mode'] == 'delete' and !$this->objLayout->lfCheckBaseData($page_id)) { 
    224222            $this->objLayout->lfDelPageData($_POST['page_id']); 
    225223            $this->sendRedirect($this->getLocation("./main_edit.php")); 
     
    278276            $sql .= " ) VALUES ( ?,?,?,?,?,?,?,?,now(),now() )"; 
    279277            $sql .= " "; 
    280         }else{ 
     278        } else { 
    281279            // データが存在してる場合にはアップデートを行う 
    282280            // SQL生成 
     
    315313        if ($this->objLayout->lfCheckBaseData($arrData['page_id'])) { 
    316314            $arrPageData = $this->objLayout->lfgetPageData( ' page_id = ? ' , array($arrData['page_id'])); 
     315             
    317316            $name = $arrPageData[0]['page_name'] ; 
    318317            $url = $arrPageData[0]['url']; 
     318            $php_dir = $arrPageData[0]['php_dir']; 
    319319            $filename = $arrPageData[0]['filename']; 
    320         }else{ 
     320        } else { 
    321321            $name = $arrData['page_name'] ; 
    322             $url = USER_URL.$arrData['url'].".php"; 
    323             $filename = basename($arrData['url']); 
     322            $url = USER_DIR . $arrData['url'] . '.php'; 
     323            $php_dir = dirname($url); 
     324            if ($php_dir == '.') { 
     325                $php_dir = ''; 
     326            } else { 
     327                $php_dir .= '/'; 
     328            } 
     329            $filename = basename($arrData['url']); // 拡張子を付加しない 
    324330        } 
    325331         
    326332        // 更新データ配列の作成 
    327333        $arrUpdData = array( 
    328                             $name                                       // 名称 
    329                             ,$url                                       // URL 
    330                             ,$php_dir                                   // PHPディレクトリ 
    331                             ,$tpl_dir                                   // TPLディレクトリ 
    332                             ,$filename                                  // ファイル名 
    333                             ,SC_Utils_Ex::sfChangeCheckBox($arrData['header_chk'])  // ヘッダー使用 
    334                             ,SC_Utils_Ex::sfChangeCheckBox($arrData['footer_chk'])  // フッター使用 
    335                             ,$_SERVER['HTTP_REFERER']                   // 更新URL 
    336                             ); 
     334            $name                                                   // 名称 
     335            ,$url                                                   // URL 
     336            ,$php_dir                                               // PHPディレクトリ 
     337            ,$tpl_dir                                               // TPLディレクトリ 
     338            ,$filename                                              // ファイル名 
     339            ,SC_Utils_Ex::sfChangeCheckBox($arrData['header_chk'])  // ヘッダー使用 
     340            ,SC_Utils_Ex::sfChangeCheckBox($arrData['footer_chk'])  // フッター使用 
     341            ,$_SERVER['HTTP_REFERER']                               // 更新URL 
     342        ); 
    337343 
    338344        return $arrUpdData; 
     
    349355        $objErr->doFunc(array("名称", "page_name", STEXT_LEN), array("EXIST_CHECK", "SPTAB_CHECK", "MAX_LENGTH_CHECK")); 
    350356        $objErr->doFunc(array("URL", "url", STEXT_LEN), array("EXIST_CHECK", "SPTAB_CHECK", "MAX_LENGTH_CHECK")); 
    351  
     357         
    352358        // URLチェック 
    353         if (substr(strrev(trim($array['url'])),0,1) == "/") { 
     359        $okUrl = true; 
     360        foreach (explode('/', $array['url']) as $url_part) { 
     361            if (!ereg( '^[a-zA-Z0-9:_~\.-]+$', $url_part)) { 
     362                $okUrl = false; 
     363            } 
     364            if ($url_part == '.' || $url_part == '..') { 
     365                $okUrl = false; 
     366            } 
     367        } 
     368        if (!$okUrl) { 
    354369            $objErr->arrErr['url'] = "※ URLを正しく入力してください。<br />"; 
    355370        } 
    356  
    357         $check_url = USER_URL . $array['url'] . ".php"; 
    358         if( strlen($array['url']) > 0 && !ereg( "^https?://+($|[a-zA-Z0-9:_~=&\?\.\/-])+$", $check_url ) ) { 
    359             $objErr->arrErr['url'] = "※ URLを正しく入力してください。<br />"; 
    360         } 
    361  
     371         
    362372        // 同一のURLが存在している場合にはエラー 
    363         if(!isset($objErr->arrErr['url']) and $array['url'] !== ''){ 
    364             // URLのチェック(プレビュー用のレコードは含まない) 
    365             $arrChk = $this->objLayout->lfgetPageData(" url = ? AND page_id <> 0" , array(USER_URL . $array['url'].".php")); 
    366  
    367             if (count($arrChk[0]) >= 1 and $arrChk[0]['page_id'] != $array['page_id']) { 
    368                 $objErr->arrErr['url'] = '※ 同じURLのデータが存在しています。別のURLを付けてください。<br />'; 
    369             } 
    370         } 
    371  
     373        $sqlWhere = ''; 
     374        $params = array(); 
     375         
     376        $sqlWhere .= ' (url = ? OR url = ?)'; 
     377        $params[] = USER_DIR . $array['url'] . '.php'; 
     378        $params[] = USER_URL . $array['url'] . '.php'; // 従来形式 
     379         
     380        // プレビュー用のレコードは除外 
     381        $sqlWhere .= ' AND page_id <> 0'; 
     382         
     383        // 変更の場合、自身のレコードは除外 
     384        if (strlen($array['page_id']) != 0) { 
     385            $sqlWhere .= ' AND page_id <> ?'; 
     386            $params[] = $array['page_id']; 
     387        } 
     388         
     389        $arrChk = $this->objLayout->lfgetPageData($sqlWhere , $params); 
     390         
     391        if (count($arrChk) >= 1) { 
     392            $objErr->arrErr['url'] = '※ 同じURLのデータが存在しています。別のURLを付けてください。<br />'; 
     393        } 
     394         
    372395        return $objErr->arrErr; 
    373396    } 
     
    398421     * @return void 
    399422     */ 
    400     function lfCreatePHPFile($path){ 
    401  
     423    function lfCreatePHPFile($url){ 
     424 
     425        $path = USER_PATH . $url . ".php"; 
     426         
    402427        // php保存先ディレクトリが存在していなければ作成する 
    403428        if (!is_dir(dirname($path))) { 
     
    411436 
    412437        // require.phpの場所を書き換える 
    413         $php_data = str_replace("###require###", HTML_PATH . "require.php", $php_data); 
     438        $php_data = str_replace("###require###", str_repeat('../', substr_count($url, '/')) . '../require.php', $php_data); 
    414439 
    415440        // phpファイルの作成 
Note: See TracChangeset for help on using the changeset viewer.