Ignore:
Timestamp:
2008/03/07 21:00:04 (13 years ago)
Author:
pineray
Message:

管理画面上でpackage内のCSSを編集可能に

File:
1 edited

Legend:

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

    r16741 r17112  
    2424// {{{ requires 
    2525require_once(CLASS_PATH . "pages/LC_Page.php"); 
     26require_once(CLASS_EX_PATH . "helper_extends/SC_Helper_FileManager_Ex.php"); 
    2627 
    2728/** 
     
    6465        SC_Utils_Ex::sfIsSuccess($objSess); 
    6566 
    66         $css_path = USER_PATH . "css/common.css"; 
     67        $objFileManager = new SC_Helper_FileManager_Ex(); 
     68 
     69        // CSSファイル名を取得 
     70        if (isset($_POST['css_name'])) { 
     71            $css_name = $_POST['css_name']; 
     72        }else if (isset($_GET['css_name'])){ 
     73            $css_name = $_GET['css_name']; 
     74        }else{ 
     75            $css_name = ''; 
     76        } 
     77        $this->css_name = $css_name; 
     78 
     79        if (isset($_POST['old_css_name'])) { 
     80            $old_css_name = $_POST['old_css_name']; 
     81        }else if (isset($_GET['css_name'])) { 
     82            $old_css_name = $_GET['css_name']; 
     83        }else{ 
     84            $old_css_name = ''; 
     85        } 
     86        $this->old_css_name = $old_css_name; 
     87 
     88        $css_dir =  USER_TEMPLATE_PATH . TEMPLATE_NAME . "/css/"; 
     89        $css_path = $css_dir . $css_name . '.css'; 
     90 
     91        // CSSファイルの読み込み 
     92        if($css_name != '' && file_exists($css_path)){ 
     93            $css_data = file_get_contents($css_path); 
     94        } 
     95        // テキストエリアに表示 
     96        $this->css_data = $css_data; 
    6797 
    6898        if (!isset($_POST['mode'])) $_POST['mode'] = ""; 
    6999 
    70         // データ更新処理 
    71         if ($_POST['mode'] == 'confirm'){ 
     100        switch($_POST['mode']) { 
     101            // データ更新処理 
     102            case 'confirm': 
     103                $this->lfExecuteConfirm($css_dir, $css_name, $old_css_name, $css_path); 
     104                break; 
     105            case 'delete': 
     106                $this->lfExecuteDelete($css_path); 
     107                break; 
     108            default: 
     109                if(isset($_POST['mode'])) { 
     110                   GC_Utils::gfPrintLog("MODEエラー:".$_POST['mode']); 
     111                } 
     112                break; 
     113        } 
     114 
     115        // ファイルリストを取得 
     116        $this->arrCSSList = $this->lfGetCSSList($css_dir); 
     117 
     118        // 画面の表示 
     119        $objView->assignobj($this); 
     120        $objView->display(MAIN_FRAME); 
     121    } 
     122 
     123    /** 
     124     * デストラクタ. 
     125     * 
     126     * @return void 
     127     */ 
     128    function destroy() { 
     129        parent::destroy(); 
     130    } 
     131 
     132    function lfExecuteConfirm($css_dir, $css_name, $old_css_name, $css_path) { 
     133        // エラーチェック 
     134        $this->arrErr = $this->lfErrorCheck($_POST, $css_dir); 
     135 
     136        // エラーがなければ更新処理を行う 
     137        if (count($this->arrErr) == 0) { 
     138            // 旧ファイルの削除 
     139            if ($old_css_name != '' && $old_css_name != $css_name && file_exists($css_dir . $old_css_name . '.css')) { 
     140                unlink($css_dir . $old_css_name . '.css'); 
     141            } 
    72142            // プレビュー用テンプレートに書き込み 
    73143            $fp = fopen($css_path,"w"); // TODO 
     
    76146 
    77147            $this->tpl_onload="alert('登録が完了しました。');"; 
    78         } 
    79  
    80         // CSSファイルの読み込み 
    81         if(file_exists($css_path)){ 
    82             $css_data = file_get_contents($css_path); 
    83         } 
    84  
    85         // テキストエリアに表示 
    86         $this->css_data = $css_data; 
    87  
    88         // 画面の表示 
    89         $objView->assignobj($this); 
    90         $objView->display(MAIN_FRAME); 
    91     } 
    92  
    93     /** 
    94      * デストラクタ. 
    95      * 
    96      * @return void 
    97      */ 
    98     function destroy() { 
    99         parent::destroy(); 
     148            $this->old_css_name = $css_name; 
     149        } 
     150        $this->css_data = $_POST['css']; 
     151    } 
     152 
     153    function lfExecuteDelete($css_path) { 
     154        // css_name が空でない場合にはdeleteを実行 
     155        if ($_POST['css_name'] !== '' && file_exists($css_path)) { 
     156            unlink($css_path); 
     157        } 
     158        $this->sendRedirect($this->getLocation("./css.php")); 
     159    } 
     160 
     161    /** 
     162     * CSSファイルのリストを取得. 
     163     * 
     164     * @param array $css_dir CSSディレクトリ 
     165     * @return array ファイルリスト 
     166     */ 
     167    function lfGetCSSList($css_dir) { 
     168        $objFileManager = new SC_Helper_FileManager_Ex(); 
     169 
     170        $arrFileList = $objFileManager->sfGetFileList($css_dir); 
     171        foreach ($arrFileList as $key => $val) { 
     172            if (!$val['is_dir']) { 
     173                $arrCSSList[] = array( 
     174                    'file_name' => $val['file_name'], 
     175                    'css_name'  => preg_replace('/(.+)\.(.+?)$/','$1',$val['file_name']), 
     176                ); 
     177            } 
     178        } 
     179        return $arrCSSList; 
     180    } 
     181 
     182    /** 
     183     * 入力項目のエラーチェックを行う. 
     184     * 
     185     * @param array $arrData 入力データ 
     186     * @param array $css_dir CSSディレクトリ 
     187     * @return array エラー情報 
     188     */ 
     189    function lfErrorCheck($array, $css_dir) { 
     190        $objErr = new SC_CheckError($array); 
     191 
     192        $objErr->doFunc(array("CSSファイル名", "css_name", STEXT_LEN), array("EXIST_CHECK", "NO_SPTAB", "MAX_LENGTH_CHECK")); 
     193 
     194        // 入力文字が英数字,"_","-"以外ならエラーを返す 
     195        if(!isset($objErr->arrErr['css_name'])){ 
     196            if(!ereg("^[a-zA-Z0-9_\.-]+$", $array['css_name'])) { 
     197                $objErr->arrErr['css_name'] = '※ CSSファイル名は英数字と"_"および"-"だけを入力してください。<br />'; 
     198            } 
     199        } 
     200 
     201        // 同一のファイル名が存在している場合にはエラー 
     202        if(!isset($objErr->arrErr['css_name'])){ 
     203            $arrCSSList = $this->lfGetCSSList($css_dir); 
     204            foreach ($arrCSSList as $key => $val) { 
     205                if ($val['css_name'] == $array['css_name']) { 
     206                    if ($array['old_css_name'] == '' || $array['old_css_name'] != $array['css_name']) { 
     207                        $errFlg = TRUE; 
     208                    } 
     209                } 
     210            } 
     211            if ($errFlg) $objErr->arrErr['css_name'] = '※ 同じファイル名のデータが存在しています。別の名称を付けてください。<br />'; 
     212        } 
     213 
     214        return $objErr->arrErr; 
    100215    } 
    101216} 
Note: See TracChangeset for help on using the changeset viewer.