Changeset 17416


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

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

Location:
branches/comu-ver2/data
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • branches/comu-ver2/data/Smarty/templates/default/admin/design/main_edit.tpl

    r17414 r17416  
    7171  <!--{/if}--> 
    7272  URL:<!--{if $arrPageData.edit_flg == 2}--> 
    73       <!--{$smarty.const.SITE_URL}--><!--{$arrPageData.url|escape}--> 
    74       <input type="hidden" name="url" value="<!--{$arrPageData.filename|escape}-->" maxlength="<!--{$smarty.const.STEXT_LEN}-->" /> 
     73      <!--{$smarty.const.SITE_URL|escape}--><!--{$arrPageData.url|escape}--> 
     74      <input type="hidden" name="url" value="<!--{$arrPageData.filename|escape}-->" /> 
    7575    <!--{else}--> 
    76       <!--{$user_URL}--><input type="text" name="url" value="<!--{$arrPageData.directory|escape}--><!--{$arrPageData.filename|escape}-->" maxlength="<!--{$smarty.const.STEXT_LEN}-->" style="<!--{if $arrErr.url != ""}-->background-color: <!--{$smarty.const.ERR_COLOR}-->;<!--{/if}--> ime-mode: disabled;" size="40" class="box40" />.php<span class="attention"> (上限<!--{$smarty.const.STEXT_LEN}-->文字)</span> 
     76      <!--{$user_URL|escape}--><input type="text" name="url" value="<!--{$arrPageData.directory|escape}--><!--{$arrPageData.filename|escape}-->" maxlength="<!--{$smarty.const.STEXT_LEN}-->" style="<!--{if $arrErr.url != ""}-->background-color: <!--{$smarty.const.ERR_COLOR}-->;<!--{/if}--> ime-mode: disabled;" size="40" class="box40" />.php<span class="attention"> (上限<!--{$smarty.const.STEXT_LEN}-->文字)</span> 
    7777    <!--{/if}--><br /> 
    7878 
     
    9696  <table class="list center"> 
    9797    <!--{foreach key=key item=item from=$arrPageList}--> 
    98     <tr style="background-color:<!--{if $item.page_id == $page_id}--><!--{$smarty.const.SELECT_RGB}--><!--{else}-->#ffffff<!--{/if}-->;"> 
     98    <tr style="<!--{if $item.page_id == $page_id}-->background-color: <!--{$smarty.const.SELECT_RGB}-->;<!--{/if}-->"> 
    9999      <td> 
    100100        <a href="<!--{$smarty.server.PHP_SELF|escape}-->?page_id=<!--{$item.page_id}-->" ><!--{$item.page_name}--></a> 
  • branches/comu-ver2/data/class/helper/SC_Helper_PageLayout.php

    r17116 r17416  
    4646    function sfGetPageLayout(&$objPage, $preview = false, $url = ""){ 
    4747        $debug_message = ""; 
    48         $arrPageLayout = array(); 
     48        $arrPageLayout = array(); 
    4949 
    5050        // 現在のURLの取得 
     
    5353                $url = "http://" . $_SERVER['HTTP_HOST'] . $_SERVER['PHP_SELF']; 
    5454            } 
     55            $url2 = preg_replace('|^' . preg_quote(SITE_URL) . '|', '', $url); 
    5556            // URLを元にページデザインを取得 
    56             $arrPageData = $this->lfgetPageData(" url = ? " , array($url)); 
     57            $arrPageData = $this->lfgetPageData(" url IN (?, ?) " , array($url2, $url)); // $url は従来互換 
    5758        }else{ 
    5859            $arrPageData = $this->lfgetPageData(" page_id = ? " , array("0")); 
     
    6061                . TEMPLATE_NAME . "/" . $arrPageData[0]['filename'] . ".tpl"; 
    6162        } 
    62          
     63         
    6364        foreach($arrPageData[0] as $key => $val) { 
    64             $debug_message.= "arrPageData[$key]:" . $val . "\n"; 
     65            $debug_message.= "arrPageData[$key]:" . $val . "\n"; 
    6566        } 
    6667         
     
    9899        $arrNavi = $this->lfGetNaviData($url, $preview); 
    99100 
    100         $arrPageLayout['LeftNavi']  = $this->lfGetNavi($arrNavi,1); // LEFT NAVI 
    101         $arrPageLayout['MainHead']  = $this->lfGetNavi($arrNavi,2); // メイン上部 
    102         $arrPageLayout['RightNavi'] = $this->lfGetNavi($arrNavi,3); // RIGHT NAVI 
    103         $arrPageLayout['MainFoot']  = $this->lfGetNavi($arrNavi,4); // メイン下部 
     101        $arrPageLayout['LeftNavi']  = $this->lfGetNavi($arrNavi,1);    // LEFT NAVI 
     102        $arrPageLayout['MainHead']  = $this->lfGetNavi($arrNavi,2);    // メイン上部 
     103        $arrPageLayout['RightNavi'] = $this->lfGetNavi($arrNavi,3);    // RIGHT NAVI 
     104        $arrPageLayout['MainFoot']  = $this->lfGetNavi($arrNavi,4);    // メイン下部 
    104105 
    105106        GC_Utils::gfDebugLog($arrPageLayout); 
     
    121122     */ 
    122123    function lfgetPageData($where = '', $arrVal = ''){ 
    123         $objDBConn = new SC_DbConn;     // DB操作オブジェクト 
    124         $sql = "";                      // データ取得SQL生成用 
    125         $arrRet = array();              // データ取得用 
     124        $objDBConn = new SC_DbConn;     // DB操作オブジェクト 
     125        $sql = "";                      // データ取得SQL生成用 
     126        $arrRet = array();              // データ取得用 
    126127 
    127128        // SQL生成 
    128129        $sql .= " SELECT"; 
    129         $sql .= " page_id";             // ページID 
    130         $sql .= " ,page_name";          // 名称 
    131         $sql .= " ,url";                // URL 
    132         $sql .= " ,php_dir";            // php保存先ディレクトリ 
    133         $sql .= " ,tpl_dir";            // tpl保存先ディレクトリ 
    134         $sql .= " ,filename";           // ファイル名称 
    135         $sql .= " ,header_chk ";        // ヘッダー使用FLG 
    136         $sql .= " ,footer_chk ";        // フッター使用FLG 
    137         $sql .= " ,edit_flg ";          // 編集可能FLG 
    138         $sql .= " ,author";             // authorタグ 
    139         $sql .= " ,description";        // descriptionタグ 
    140         $sql .= " ,keyword";            // keywordタグ 
    141         $sql .= " ,update_url";         // 更新URL 
    142         $sql .= " ,create_date";        // データ作成日 
    143         $sql .= " ,update_date";        // データ更新日 
     130        $sql .= " page_id";             // ページID 
     131        $sql .= " ,page_name";          // 名称 
     132        $sql .= " ,url";                // URL 
     133        $sql .= " ,php_dir";            // php保存先ディレクトリ 
     134        $sql .= " ,tpl_dir";            // tpl保存先ディレクトリ 
     135        $sql .= " ,filename";           // ファイル名称 
     136        $sql .= " ,header_chk ";        // ヘッダー使用FLG 
     137        $sql .= " ,footer_chk ";        // フッター使用FLG 
     138        $sql .= " ,edit_flg ";          // 編集可能FLG 
     139        $sql .= " ,author";             // authorタグ 
     140        $sql .= " ,description";        // descriptionタグ 
     141        $sql .= " ,keyword";            // keywordタグ 
     142        $sql .= " ,update_url";         // 更新URL 
     143        $sql .= " ,create_date";        // データ作成日 
     144        $sql .= " ,update_date";        // データ更新日 
    144145        $sql .= " FROM "; 
    145146        $sql .= "     dtb_pagelayout"; 
     
    168169     */ 
    169170    function lfGetNaviData($url, $preview=false){ 
    170         $objDBConn = new SC_DbConn;     // DB操作オブジェクト 
    171         $sql = "";                      // データ取得SQL生成用 
    172         $arrRet = array();              // データ取得用 
     171        $objDBConn = new SC_DbConn;     // DB操作オブジェクト 
     172        $sql = "";                      // データ取得SQL生成用 
     173        $arrRet = array();              // データ取得用 
    173174        $arrData = array(); 
    174175 
     
    215216                        $arrNavi[$key]['php_path'] = HTML_PATH . $val['php_path']; 
    216217                    }else{ 
    217                         $user_block_path = USER_TEMPLATE_PATH . TEMPLATE_NAME . "/" . $val['tpl_path']; 
    218                         if(is_file($user_block_path)) { 
    219                            $arrNavi[$key]['tpl_path'] = $user_block_path; 
    220                         } else { 
    221                            $arrNavi[$key]['tpl_path'] = TEMPLATE_DIR . $val['tpl_path']; 
    222                         } 
     218                        $user_block_path = USER_TEMPLATE_PATH . TEMPLATE_NAME . "/" . $val['tpl_path']; 
     219                        if(is_file($user_block_path)) { 
     220                            $arrNavi[$key]['tpl_path'] = $user_block_path; 
     221                        } else { 
     222                            $arrNavi[$key]['tpl_path'] = TEMPLATE_DIR . $val['tpl_path']; 
     223                        } 
    223224                    } 
    224225                     
     
    260261    function lfDelPageData($page_id){ 
    261262        // DBへデータを更新する 
    262         $objDBConn = new SC_DbConn;     // DB操作オブジェクト 
    263         $sql = "";                      // データ更新SQL生成用 
    264         $ret = "";                      // データ更新結果格納用 
    265         $arrDelData = array();          // 更新データ生成用 
     263        $objDBConn = new SC_DbConn; // DB操作オブジェクト 
     264        $sql = "";                  // データ更新SQL生成用 
     265        $ret = "";                  // データ更新結果格納用 
     266        $arrDelData = array();      // 更新データ生成用 
    266267 
    267268        // page_id が空でない場合にはdeleteを実行 
  • 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.