Ignore:
Timestamp:
2009/10/21 11:37:53 (15 years ago)
Author:
pineray
Message:

リファクタリング

File:
1 edited

Legend:

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

    r18234 r18344  
    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 (strlen($arrPageData[0]['filename']) == 0) { 
    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ファイルの削除 (XXX: 処理の意図が不明。存在していると都合が悪いファイル?) 
    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/" . DIR_INDEX_URL, 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                     $this->lfCreatePHPFile($_POST['url']); 
    196                 } 
    197  
    198                 // TPLファイル作成 
    199                 $cre_tpl = USER_TEMPLATE_PATH . "/" . TEMPLATE_NAME . "/" . basename($_POST['url']) . '.tpl'; 
    200                 $this->lfCreateFile($cre_tpl); 
    201  
    202                 // 新規作成の場合、 
    203                 if ($page_id == '') { 
    204                     // ページIDを取得する 
    205                     $arrPageData = $this->objLayout->lfgetPageData(" url = ? AND page_id <> 0" , array(USER_DIR . $_POST['url'] . '.php')); 
    206                     $page_id = $arrPageData[0]['page_id']; 
    207                 } 
    208                 $this->sendRedirect($this->getLocation("./main_edit.php", 
    209                                         array("page_id" => $page_id, 
    210                                               "msg"     => "on"))); 
    211                 exit; 
    212             } else { 
    213                 // エラーがあれば入力時のデータを表示する 
    214                 $this->arrPageData = $_POST; 
    215                 $this->arrPageData['header_chk'] = SC_Utils_Ex::sfChangeCheckBox(SC_Utils_Ex::sfChangeCheckBox($_POST['header_chk']), true); 
    216                 $this->arrPageData['footer_chk'] = SC_Utils_Ex::sfChangeCheckBox(SC_Utils_Ex::sfChangeCheckBox($_POST['footer_chk']), true); 
    217                 $this->arrPageData['directory'] = ''; 
    218                 $this->arrPageData['filename'] = $_POST['url']; 
    219             } 
     102            $this->lfConfirmPageData($page_id); 
    220103        } 
    221104 
    222105        // データ削除処理 ベースデータでなければファイルを削除 
    223106        if ($_POST['mode'] == 'delete' and !$this->objLayout->lfCheckBaseData($page_id)) { 
    224             $this->objLayout->lfDelPageData($_POST['page_id']); 
    225             $this->sendRedirect($this->getLocation("./main_edit.php")); 
     107            $this->lfDeletePageData($page_id); 
    226108            exit; 
    227109        } 
     
    239121    function destroy() { 
    240122        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        } 
    241271    } 
    242272 
     
    349379 
    350380    /** 
     381     * ページデータを削除する. 
     382     * 
     383     * @param integer $page_id ページID 
     384     * @return void 
     385     */ 
     386    function lfDeletePageData($page_id){ 
     387        $this->objLayout->lfDelPageData($_POST['page_id']); 
     388        $this->sendRedirect($this->getLocation("./main_edit.php")); 
     389    } 
     390 
     391    /** 
    351392     * 入力項目のエラーチェックを行う. 
    352393     * 
     
    403444     * 
    404445     * @param string $path テンプレートファイルのパス 
    405      * @return void 
    406      */ 
    407     function lfCreateFile($path){ 
     446     * @param string $data テンプレートの内容 
     447     * @return void 
     448     */ 
     449    function lfCreateFile($path, $data){ 
    408450 
    409451        // ディレクトリが存在していなければ作成する 
     
    414456        // ファイル作成 
    415457        $fp = fopen($path,"w"); 
    416         fwrite($fp, $_POST['tpl_data']); // FIXME いきなり POST はちょっと... 
     458        fwrite($fp, $data); // FIXME いきなり POST はちょっと... 
    417459        fclose($fp); 
    418460    } 
Note: See TracChangeset for help on using the changeset viewer.