Ignore:
Timestamp:
2010/03/11 10:35:11 (14 years ago)
Author:
kajiwara
Message:

正式版にナイトリービルド版をマージしてみるテスト

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  
    8787        // page_id が指定されている場合にはテンプレートデータの取得 
    8888        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         
    11894        // プレビュー処理 
    119         if (!isset($_POST['mode'])) $_POST['mode'] = ""; 
    120          
    12195        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); 
    17697            exit; 
    17798        } 
     
    179100        // データ登録処理 
    180101        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); 
    222103        } 
    223104 
    224105        // データ削除処理 ベースデータでなければファイルを削除 
    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); 
    228108            exit; 
    229109        } 
     
    241121    function destroy() { 
    242122        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        } 
    243271    } 
    244272 
     
    281309            $sql .= " ) VALUES ( ?,?,?,?,?,?,?,?,now(),now() )"; 
    282310            $sql .= " "; 
    283         }else{ 
     311        } else { 
    284312            // データが存在してる場合にはアップデートを行う 
    285313            // SQL生成 
     
    318346        if ($this->objLayout->lfCheckBaseData($arrData['page_id'])) { 
    319347            $arrPageData = $this->objLayout->lfgetPageData( ' page_id = ? ' , array($arrData['page_id'])); 
     348             
    320349            $name = $arrPageData[0]['page_name'] ; 
    321350            $url = $arrPageData[0]['url']; 
     351            $php_dir = $arrPageData[0]['php_dir']; 
    322352            $filename = $arrPageData[0]['filename']; 
    323         }else{ 
     353        } else { 
    324354            $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']); // 拡張子を付加しない 
    327364        } 
    328365         
    329366        // 更新データ配列の作成 
    330367        $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                             ); 
     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        ); 
    340377 
    341378        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")); 
    342390    } 
    343391 
     
    352400        $objErr->doFunc(array("名称", "page_name", STEXT_LEN), array("EXIST_CHECK", "SPTAB_CHECK", "MAX_LENGTH_CHECK")); 
    353401        $objErr->doFunc(array("URL", "url", STEXT_LEN), array("EXIST_CHECK", "SPTAB_CHECK", "MAX_LENGTH_CHECK")); 
    354  
     402         
    355403        // 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) { 
    357414            $objErr->arrErr['url'] = "※ URLを正しく入力してください。<br />"; 
    358415        } 
    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         
    365417        // 同一の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         
    375440        return $objErr->arrErr; 
    376441    } 
     
    380445     * 
    381446     * @param string $path テンプレートファイルのパス 
    382      * @return void 
    383      */ 
    384     function lfCreateFile($path){ 
     447     * @param string $data テンプレートの内容 
     448     * @return void 
     449     */ 
     450    function lfCreateFile($path, $data){ 
    385451 
    386452        // ディレクトリが存在していなければ作成する 
     
    391457        // ファイル作成 
    392458        $fp = fopen($path,"w"); 
    393         fwrite($fp, $_POST['tpl_data']); // FIXME いきなり POST はちょっと... 
     459        fwrite($fp, $data); // FIXME いきなり POST はちょっと... 
    394460        fclose($fp); 
    395461    } 
     
    401467     * @return void 
    402468     */ 
    403     function lfCreatePHPFile($path){ 
    404  
     469    function lfCreatePHPFile($url){ 
     470 
     471        $path = USER_PATH . $url . ".php"; 
     472         
    405473        // php保存先ディレクトリが存在していなければ作成する 
    406474        if (!is_dir(dirname($path))) { 
     
    414482 
    415483        // 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); 
    417485 
    418486        // phpファイルの作成 
Note: See TracChangeset for help on using the changeset viewer.