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

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

Location:
branches/version-2_4-dev/data/class/pages
Files:
2 edited

Legend:

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

    r18573 r18606  
    105105        print("<urlset xmlns='http://www.sitemaps.org/schemas/sitemap/0.9'>\n"); 
    106106 
    107         // 静的なページを処理 
    108         foreach($this->staticURL as $url) { 
    109             $this->createSitemap($url, '', 'daily', 1.0); 
    110         } 
    111  
    112107        // TOPページを処理 
    113108        $topPage = $this->getTopPage($this->arrPageList); 
     
    116111                             'daily', 1.0); 
    117112 
     113        // 静的なページを処理 
     114        foreach ($this->staticURL as $url) { 
     115            $this->createSitemap($url, '', 'daily', 1.0); 
     116        } 
     117 
    118118        // 編集可能ページを処理 
    119119        $editablePages = $this->getEditablePage($this->arrPageList); 
    120         foreach($editablePages as $editablePage) { 
     120        foreach ($editablePages as $editablePage) { 
    121121            $this->createSitemap($editablePage['url'], 
    122122                                 $this->date2W3CDatetime($editablePage['update_date'])); 
     
    125125        // 商品一覧ページを処理 
    126126        $products = $this->getAllProducts(); 
    127         foreach($products as $product) { 
     127        foreach ($products as $product) { 
    128128            $this->createSitemap($product['url'], '', 'daily'); 
    129129        } 
    130130        $mobileProducts = $this->getAllProducts(true); 
    131         foreach($mobileProducts as $mobileProduct) { 
     131        foreach ($mobileProducts as $mobileProduct) { 
    132132            $this->createSitemap($mobileProduct['url'], '', 'daily'); 
    133133        } 
     
    135135        // 商品詳細ページを処理 
    136136        $details = $this->getAllDetail(); 
    137         foreach($details as $detail) { 
     137        foreach ($details as $detail) { 
    138138            $this->createSitemap($detail['url'], 
    139139                                 $this->date2W3CDatetime($detail['update_date'])); 
    140140        } 
    141141        $mobileDetails = $this->getAllDetail(true); 
    142         foreach($mobileDetails as $mobileDetail) { 
     142        foreach ($mobileDetails as $mobileDetail) { 
    143143            $this->createSitemap($mobileDetail['url'],  
    144144                                 $this->date2W3CDatetime($mobileDetail['update_date'])); 
     
    192192    function getTopPage($pageData) { 
    193193        $arrRet = array(); 
    194         foreach($pageData as $page) { 
     194        foreach ($pageData as $page) { 
    195195            if ($page['page_id'] == "1") { 
    196                 $page['url'] = SITE_URL . $page['url']; 
    197196                $arrRet[0] = $page; 
    198197                return $arrRet; 
     
    209208    function getEditablePage($pageData) { 
    210209        $arrRet = array(); 
    211         $i = 0; 
    212         foreach($pageData as $page) { 
     210        foreach ($pageData as $page) { 
    213211            if ($page['page_id'] > 4) { 
    214                 $arrRet[$i] = $page; 
    215                 $i++; 
     212                $arrRet[] = $page; 
    216213            } 
    217214        } 
     
    310307        $sql .= " ORDER BY  page_id"; 
    311308 
    312         return $objDBConn->getAll($sql, $arrVal); 
     309        $pageData = $objDBConn->getAll($sql, $arrVal); 
     310        // URL にプロトコルの記載が無い場合、SITE_URL を前置する。 
     311        foreach (array_keys($pageData) as $key) { 
     312            $page =& $pageData[$key]; 
     313            if (!preg_match('|^https?://|i', $page['url'])) { 
     314                $page['url'] = SITE_URL . $page['url']; 
     315            } 
     316        } 
     317        unset($page); 
     318 
     319        return $pageData; 
    313320    } 
    314321 
  • 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.